Nhiệm vụ bị mắc kẹt trong studio quản lý, làm thế nào để bạn xử lý chúng?


12

Sau khi nhấp vào "Lấy cơ sở dữ liệu ngoại tuyến" trong studio quản lý, thông báo này sẽ bị treo và sẽ không đóng nếu bạn nhấp vào đóng.

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

Cách tốt để đối phó với các công việc bị mắc kẹt như thế này trong studio quản lý là gì? Bạn có thể giết chúng thông qua màn hình hoạt động? Tôi có nên tìm kiếm quá trình ngăn chặn công việc này đi qua và chấm dứt nó?


4
Tìm hiểu những gì chặn nó, đầu tiên. Bạn có thể lấy thông tin này từ sys.dm_exec numquests. Ngoài ra, công việc của bạn có thể làm điều này theo cách mà nó không bị chặn, ví dụ như bằng cách ban hành ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;trước ... nếu không, nó chỉ ngồi và chờ, và đối với một cơ sở dữ liệu bận rộn, điều đó có thể là mãi mãi.
Aaron Bertrand

Việc thiết lập cơ sở dữ liệu trong single_user đã giải quyết được vấn đề, đáng lẽ tôi phải đoán ... SQLserver luôn yêu cầu single_user cho loại công cụ này.
A_V

Câu trả lời:


12

Tôi sẽ nói đừng bao giờ sử dụng điều "Hãy ngoại tuyến" trong GUI trừ khi bạn biết rằng cơ sở dữ liệu không được sử dụng. Bởi bất cứ điều gì. Điều đó thật khó để biết mà không thực hiện một số công việc, vậy tại sao không lưu tập lệnh này ở đâu đó và luôn sử dụng tập lệnh này?

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

Và sau đó là đối ứng tất nhiên:

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

Lý do bạn cần đặt nó thành SINGLE_USER trước tiên là để loại bỏ bất kỳ người dùng hiện có nào (có một tùy chọn để làm như vậy trên hộp thoại tách ra, nhưng không phải là hộp thoại ngoại tuyến), vì SQL Server cần quyền truy cập độc quyền vào cơ sở dữ liệu để thực hiện nó nhé. Bây giờ, dù sao bạn cũng có thể muốn thực hiện một số công việc bổ sung để xem ai hiện đang sử dụng cơ sở dữ liệu, như thể bạn làm điều này ở giữa một hoạt động sao lưu lớn hoặc công việc ETL hoặc những gì có bạn, điều đó có thể có vấn đề.

EDIT : Tôi đã gửi đề xuất về Connect về điều này (xem Connect # 2687832 ) và cũng đã đăng nó lên Trello (nộp trong "Object Explorer").


7

Khi bạn đang ở trong tình trạng treo, đừng quên bạn có thể tìm kiếm các kết nối mở trên máy chủ với

sp_who2  

trong một cơ sở dữ liệu khác, chẳng hạn như chủ.
Quét kết quả cho bất kỳ nơi nào cơ sở dữ liệu là cơ sở dữ liệu bạn đang cố gắng ngoại tuyến.
Lưu ý giá trị cột spid (process id) của các hàng đó.

Một lần, chạy

kill  ##

trong đó "##" là spid.

Chắc chắn hãy cẩn thận để đảm bảo rằng các quy trình đó không quan trọng để tiếp tục chạy ... chúng sẽ bị chấm dứt mà thậm chí không hoàn thành lệnh mới nhất và không có cảnh báo.


1
Câu trả lời được chấp nhận đã không làm điều đó cho tôi. Thất bại trong lệnh đầu tiên. Câu trả lời này hoạt động hoàn hảo. Cảm ơn bạn
Cheburek

thật tốt :) Vâng, câu trả lời được chấp nhận thực sự là để tránh vấn đề ... nếu bạn đã bị treo, bạn cần một cái gì đó như thế này để giết nó
Mike M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.