QUẢN LÝ TASK QUÁN Quá trình đang chiếm một cơ sở dữ liệu chế độ một người dùng. Nó là gì?


13

Đây là một bản sao của câu hỏi tôi đã hỏi trên stackoverflow , nhưng tôi được thông báo rằng ai đó ở đây có thể có ý tưởng tốt hơn về những gì đang xảy ra.

Tôi gặp một vấn đề lẻ tẻ, khi nâng cấp SQL Server ở chế độ một người dùng, sử dụng .NET SqlConnection, một số ứng dụng khác bằng cách nào đó đăng nhập vào cơ sở dữ liệu, trong khi mã SQL đang được thực thi và loại bỏ quy trình của tôi. SqlConnection không bị đóng hoặc xử lý theo bất kỳ cách nào. Nhưng một số ứng dụng khác bằng cách nào đó kết thúc với cơ sở dữ liệu và điều đó loại bỏ kết nối của tôi.

Khi tôi chạy sp_who, tôi có thể thấy rằng một quy trình chiếm quyền kiểm soát cơ sở dữ liệu là Command = "TASK QUẢN LÝ".

Bất cứ ai cũng có thể cho tôi biết quá trình này là gì, mục đích của nó là gì và làm thế nào nó có thể vào cơ sở dữ liệu ở chế độ một người dùng và có kết nối hoạt động?


Bạn có tắt SQL Agent trong quá trình này không? Các tác vụ có tên "TASK QUẢN LÝ" (với số lượng spid thấp) là các quy trình nội bộ.
Jon Seigel

@JonSeigel không, tôi thì không. Bạn đang nói Đại lý SQL là một quy trình thực tế chạy TASK QUẢN LÝ?
galets

Tôi không chắc chắn 100%. Những gì tôi biết là SQL Agent kết nối với cá thể khi nó chạy và điều này có thể ngăn bạn đăng nhập trong khi máy chủ ở chế độ một người dùng. Tôi đã có vấn đề đó ngày hôm qua và dừng SQL Agent đã khắc phục nó.
Jon Seigel

2
Nói rõ hơn, đây không phải là Trình quản lý tác vụ giống như bạn sử dụng trong Windows để xem các quy trình và hiệu năng hệ thống.
Aaron Bertrand

Câu trả lời:


9

Có cùng một vấn đề ngày hôm nay, Nếu bạn chưa đặt AUTO_UPDATE_STATISTICS ASYNC, bạn sẽ không thể nhập cơ sở dữ liệu của mình, bạn có thể giải quyết vấn đề này bằng cách đặt cơ sở dữ liệu của mình ngoại tuyến. Điều quan trọng cần biết là bạn cần đặt mức ưu tiên bế tắc của mình lên cao, nếu không bạn sẽ bị bế tắc ra khỏi lệnh. Sử dụng các lệnh sau để thoát khỏi chế độ người dùng SINGLE

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Theo dõi bởi

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Theo dõi bởi

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
Cảm ơn bạn rất nhiều cho việc này. Tuy nhiên tôi thấy rằng bước OFFLINE / ONLINE là không bắt buộc; công SET MULTIUSER WITH ROLLBACK IMMEDIATEviệc chỉ tự nó SET DEADLOCK_PRIORITY HIGHđược thực hiện khi lần đầu tiên được thực hiện
Ross Presser

6

Tôi nghĩ rằng bí ẩn cuối cùng đã được giải quyết :

Trước khi bạn đặt cơ sở dữ liệu thành SINGLE_USER, hãy xác minh tùy chọn AUTO_UPDATE_STATISTICS_ASYNC được đặt thành TẮT. Khi được đặt thành BẬT, luồng nền được sử dụng để cập nhật thống kê sẽ có kết nối với cơ sở dữ liệu và bạn sẽ không thể truy cập cơ sở dữ liệu ở chế độ người dùng đơn.


6

Dừng theo dõi sự kiện mở rộng "system_health". Nó sẽ được liệt kê dưới đây

SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session

Khi trình chặn đã được sửa, hãy khởi động lại phiên.


Mặc dù câu trả lời khác giải thích tại sao điều này xảy ra, nhưng điều này giải thích cách giải quyết nó.
Boris Callens

Giải quyết hoàn hảo cho tôi. Nó hoạt động như mong đợi
Im88

0

Bạn phải tắt Tác nhân SQL 'trước khi' bắt đầu chế độ sử dụng một lần. Khi accout tác nhân sẽ lấy quyền truy cập của người dùng. Hãy nhớ người dùng duy nhất không phải là người dùng / quá trình đầu tiên để kết nối.

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.