Proses “TASK MANAGER” mengambil alih basis data mode satu pengguna. Apa itu?

13

Ini adalah duplikat dari pertanyaan yang saya ajukan di stackoverflow , tetapi saya disarankan, bahwa seseorang di sini dapat memiliki ide yang lebih baik tentang apa yang terjadi.

Saya memiliki masalah sporadis, ketika memutakhirkan SQL Server dalam mode pengguna tunggal, menggunakan .NET SqlConnection, beberapa aplikasi lain entah bagaimana masuk ke dalam database, sementara kode SQL sedang dieksekusi, dan memulai proses saya. SqlConnection tidak ditutup atau dibuang dengan cara apa pun. Tetapi beberapa aplikasi lain entah bagaimana akhirnya terhubung ke database dan itu membuat koneksi saya keluar.

Ketika saya menjalankan sp_who, saya bisa melihat bahwa proses yang mengendalikan database adalah Command = "TASK MANAGER".

Adakah yang bisa memberi tahu saya apa proses ini, apa tujuannya, dan bagaimana di dunia ini bisa masuk ke dalam database, yang dalam mode single-user, dan ada koneksi aktif?

galet
sumber
Apakah Anda mematikan SQL Agent selama proses ini? Tugas yang bernama "TASK MANAGER" (dengan angka spid rendah) adalah proses internal.
Jon Seigel
@ JonSeigel tidak, saya tidak. Apakah Anda mengatakan SQL Agent adalah proses aktual yang menjalankan TUGAS MANAGER?
Galet
Saya tidak 100% yakin. Apa yang saya tahu adalah bahwa SQL Agent terhubung ke instance ketika sedang berjalan, dan ini dapat mencegah Anda dari login saat server berada dalam mode single-user. Saya punya masalah itu kemarin, dan menghentikan SQL Agent memperbaikinya.
Jon Seigel
2
Untuk lebih jelasnya, ini bukan Task Manager yang sama yang Anda gunakan di Windows untuk melihat proses dan kinerja sistem.
Aaron Bertrand

Jawaban:

10

Mengalami masalah yang sama hari ini, Jika Anda belum menempatkan AUTO_UPDATE_STATISTICS ASYNC OFF, Anda tidak akan dapat memasukkan basis data, Anda dapat menyelesaikannya dengan meletakkan basis data offline. Penting untuk diketahui adalah bahwa Anda perlu mengatur prioritas deadlock Anda ke tinggi, jika tidak, Anda akan menemui jalan buntu dari perintah. Gunakan perintah berikut untuk keluar dari mode pengguna TUNGGAL

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Diikuti oleh

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Diikuti oleh

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE
Stijn Wynants
sumber
3
Terima kasih banyak untuk ini. Namun saya menemukan bahwa langkah OFFLINE / ONLINE tidak diperlukan; yang SET MULTIUSER WITH ROLLBACK IMMEDIATEbekerja dengan sendirinya ketika SET DEADLOCK_PRIORITY HIGHdilakukan pertama kali
Ross Presser
6

Saya pikir akhirnya misteri terselesaikan :

Sebelum Anda mengatur basis data ke SINGLE_USER, verifikasi opsi AUTO_UPDATE_STATISTICS_ASYNC disetel ke OFF. Ketika diatur ke ON, utas latar belakang yang digunakan untuk memperbarui statistik membutuhkan koneksi terhadap basis data, dan Anda tidak akan dapat mengakses basis data dalam mode pengguna tunggal.

galet
sumber
6

Hentikan jejak acara yang diperpanjang "system_health". Itu akan terdaftar di bawah

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

Setelah pemblokir diperbaiki, mulai ulang sesi.

Raghu Nair
sumber
Meskipun jawaban yang lain menjelaskan mengapa ini terjadi, jawaban ini menjelaskan bagaimana cara mengatasinya.
Boris Callens
Resolusi sempurna untuk saya. Itu bekerja seperti yang diharapkan
Im88
0

Anda harus menonaktifkan SQL Agent 'sebelum' memulai mode penggunaan tunggal. Sebagai agen accout akan mengambil akses pengguna tunggal. Ingat pengguna tunggal bukan Anda pengguna pertama / proses untuk terhubung.

Nick Winstanley
sumber