Yönetim stüdyosunda görev sıkıştı, bunları nasıl ele alıyorsunuz?


13

Yönetim stüdyosunda "Veritabanını çevrimdışına al" ı tıkladıktan sonra bu mesaj asılı kalır ve kapat'ı tıklarsanız kapanmaz.

https://i.imgur.com/KD6AROv.png

Yönetim stüdyosunda bunun gibi sıkışmış işlerle başa çıkmanın iyi bir yolu nedir? Etkinlik izleyicisi aracılığıyla onları öldürebilir misin? Bu işin hangi sürecin yapılmasını durduracağını ve sona erdireceğini araştırmalı mıyım?


4
İlk olarak neyi engellediğini öğrenin. Bu bilgileri sys.dm_exec_requests adresinden alabilirsiniz. Ayrıca işiniz bunu engellenmeyecek şekilde yapabilir, örneğin önce yayınlayarak ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;... aksi halde sadece oturur ve bekler ve yoğun bir veritabanı için bu sonsuza kadar olabilir.
Aaron Bertrand

Veritabanını single_user içinde ayarlamak sorunu çözdü, tahmin etmeliydim ... SQLserver her zaman bu tür şeyler için single_user gerektirir.
A_V

Yanıtlar:


13

Ben veritabanı kullanımda olmadığını bir gerçek bilmiyorsanız hiç GUI "Çevrimdışı Al" şey kullanmayın söyleyebilirim. Bir şey tarafından. Biraz ayak işi yapmadan bunu bilmek zordur, öyleyse neden bu komut dosyasını bir yere kaydetmiyorsunuz ve her zaman kullanıyorsunuz?

USE [master];
GO
ALTER DATABASE $dbname$ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE $dbname$ SET OFFLINE;

Ve sonra karşılıklı olarak elbette:

ALTER DATABASE $dbname$ SET ONLINE;
GO
ALTER DATABASE $dbname$ SET MULTI_USER;

İlk olarak ayarlamanızın nedeni SINGLE_USER, var olan kullanıcıları dışarı atmaktır (ayırma iletişim kutusunda bunu yapma seçeneği vardır, ancak çevrimdışı alma iletişim kutusunda değil), çünkü SQL Server'ın almak için veritabanına özel erişime ihtiyacı vardır çevrimdışı. Şimdi, büyük bir yedekleme işleminin veya ETL işinin ortasında ya da neyiniz varmış gibi, şu anda veritabanını kimin kullandığını görmek için yine de ekstra ayak işi yapmak isteyebilirsiniz, bu sorunlu olabilir.

DÜZENLEME : Bu konuda Bağlan bir öneri bulundular (bkz 2687832 Bağlan # ) ve ayrıca bunu gönderdiniz Trello ( "Object Explorer" altında yayımlandı).


Ve tek bir kullanıcı ayarı da başarısız olursa veritabanında kilit alamazsa ne olur?
StackOverthrow

@ user560822 Veritabanında bir kilit bulana kadar beklemeniz gerekecek. Eğer bu oturumları öldürmeye başlamanız gerektiği anlamına gelirse ...
Aaron Bertrand

9

Zaten asılı durumdayken, sunucudaki açık bağlantıları arayabileceğinizi unutmayın.

sp_who2  

master gibi başka bir veritabanında.
Veritabanını çevrimdışı duruma getirmeye çalıştığınız alanların sonuçlarını tarayın.
Bu satırların spid (işlem kimliği) sütun değerini not alın.

Her seferinde bir tane, koş

kill  ##

burada "##" sivridir.

Kesinlikle bu süreçlerin çalışmaya devam etmesinin önemli olmadığından emin olun ... en son komutu bitirmeden ve uyarı vermeden sonlandırılacaklar.


1
Kabul edilen cevap benim için hile yapmadı. İlk komutta başarısız oldu. Bu cevap mükemmel çalışıyor. Teşekkür ederim
Cheburek

bu iyi :) Evet, kabul edilen cevap gerçekten sorundan kaçınmak için ... eğer zaten asılmışsanız, öldürmek için böyle bir şeye ihtiyacınız var
Mike M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.