Saat ini, basis data saya dalam mode Pengguna Tunggal. Ketika saya mencoba memperluas basis data saya, saya mendapatkan kesalahan:
Basis data 'my_db' tidak dapat diakses. (ObjectExplorer)
Juga, ketika saya mencoba untuk menghapus database, saya mendapatkan kesalahan:
Perubahan ke keadaan atau opsi database 'my_db' tidak dapat dilakukan saat ini. Basis data dalam mode satu pengguna, dan pengguna saat ini terhubung dengannya.
Bagaimana cara keluar dari mode pengguna tunggal? Saya tidak memiliki pengguna yang menggunakan database ini.
Ketika saya mencoba menelusuri situs saya dengan IIS, kesalahan yang saya dapatkan adalah:
Pengecualian yang tidak tertangani dihasilkan selama eksekusi permintaan web saat ini. Informasi mengenai asal dan lokasi pengecualian dapat diidentifikasi menggunakan jejak tumpukan pengecualian di bawah ini.
Saya merasa seolah-olah mode single-user yang menyebabkan ini.
sumber
Pertama, temukan dan
KILL
semua proses yang telah berjalan saat ini.Kemudian, jalankan berikut ini
T-SQL
untuk mengatur database dalamMULTI_USER
mode.sumber
Untuk beralih dari mode Pengguna Tunggal, coba:
ALTER DATABASE [my_db] SET MULTI_USER
Untuk beralih kembali ke mode Pengguna Tunggal, Anda dapat menggunakan:
ALTER DATABASE [my_db] SET SINGLE_USER
sumber
sumber
Saya mencoba ini berfungsi
sumber
Saya memiliki masalah yang sama, dan session_id untuk membunuh ditemukan menggunakan kueri ini:
sumber
Tekan CTRL + 1
temukan proses yang mengunci basis data Anda. Lihat di dbname kolom untuk db Anda dan perhatikan spid. Sekarang Anda harus menjalankan pernyataan itu:
sumber
Berikut ini bekerja untuk saya:
sumber
Pilihan lain adalah:
ALTER DATABASE [Your_Db] SET MULTI_USER
sumber
Untuk berjaga-jaga jika seseorang tersandung ke utas ini maka berikut ini adalah solusi anti peluru untuk SQL Server yang terjebak dalam MODE PENGGUNA TUNGGAL
- Dapatkan ID proses (spid) dari koneksi yang harus Anda bunuh
- Ganti 'DBName' dengan nama DB yang sebenarnya
Sebagai alternatif, Anda juga dapat menggunakan perintah "sp_who" untuk mendapatkan "spid" dari koneksi terbuka:
- Atau gunakan SP ini sebagai gantinya
- Kemudian Jalankan yang berikut dan ganti [spid] dan [DBName] dengan nilai yang benar
sumber
Tidak yakin apakah ini membantu siapa pun, tetapi saya memiliki masalah yang sama dan tidak dapat menemukan proses yang menghambat saya. Saya menutup SSMS dan menghentikan semua layanan yang mengenai instance lokal. Kemudian begitu saya kembali dan menjalankan exec sp_who2, itu menunjukkan saya pelakunya. Saya mematikan proses dan bisa membuat Multi_User berfungsi, lalu restart layanan. Kami memiliki IIS memukulnya setiap beberapa menit / detik mencari paket tertentu.
sumber
Saya mengalami masalah yang sama pagi ini. Ternyata menjadi masalah sederhana. Saya memiliki jendela permintaan terbuka yang diatur ke database pengguna tunggal di objek explorer. Prosedur tersimpan sp_who2 tidak menunjukkan koneksi. Setelah saya menutupnya, saya dapat mengaturnya
sumber
Menambah jawaban Jespers , agar lebih efektif:
SET DEADLOCK_PRIORITY HIGH
penggunaanDEADLOCK_PRIORITY
5.Apa yang terjadi adalah bahwa proses lain mendapatkan celah di database dan, jika proses Anda memiliki yang lebih rendah
DEADLOCK_PRIORITY
, maka itu kehilangan balapan.Ini menghindarkan menemukan dan membunuh spid lain (yang mungkin perlu dilakukan beberapa kali).
Mungkin saja Anda perlu berlari
ALTER DATABASE
lebih dari sekali, (tetapi Jesper melakukan itu). Kode yang dimodifikasi:sumber
Gunakan Skrip ini
Temukan dbname dan kolom spid
sekarang jalankan
sumber
Hari ini saya menghadapi masalah yang sama di mana basis data saya diubah dari mode Multi User ke Single User dan ini akhirnya menghentikan saya untuk menerbitkan database.
Untuk memperbaiki masalah ini, saya harus menutup semua instance Visual Studio dan menjalankan perintah di bawah ini di jendela kueri Sql Server -
Perintah ini telah mengubah DB dari Satu pengguna ke Multi Pengguna dan setelah itu, saya berhasil menerbitkan.
sumber
Bahkan saya menemukan masalah yang sama, tidak dapat menemukan koneksi aktif ke my_db untuk membunuhnya tetapi masih menunjukkan kesalahan yang sama. Saya akhirnya memutuskan semua koneksi SSMS yang mungkin untuk setiap database di Server, membuat koneksi baru dari SSMS dan mengubahnya ke Multi user.
Catatan: Tampaknya ini adalah bug yang mungkin di SQL Server 2005!
sumber
Kami baru saja mengalami ini di SQL 2012. Proses replikasi melompat ketika kami membunuh sesi asli yang mengaturnya untuk satu pengguna. Tetapi sp_who2 tidak menunjukkan bahwa proses baru dilampirkan ke DB. Menutup SSMS dan membuka kembali kemudian memungkinkan kami untuk melihat proses ini pada database dan kemudian kami dapat membunuhnya dan segera beralih ke mode multi_user dan itu berhasil.
Saya tidak dapat menemukan logika di balik ini, tetapi tampaknya ada bug di SSMS dan masih memanifestasikan dirinya dalam SQL 2012.
sumber
gunakan master
PERGILAH
pilih d.name, d.dbid, spid, login_time, nt_domain, nt_username, loginame dari sysprocesses p inner join sysdatabases d pada p.dbid = d.dbid mana d.name = 'nama basis data'
bunuh 568 - bunuh spid
ALTER DATABASE nama database '
SET MULTI_USER pergi
sumber