Saya ingin mengganti nama database, tetapi tetap mendapatkan kesalahan yang 'tidak bisa mendapatkan kunci eksklusif' pada database, yang menyiratkan ada beberapa koneksi yang masih aktif.
Bagaimana saya bisa mematikan semua koneksi ke database sehingga saya bisa mengganti nama?
Skrip untuk menyelesaikan ini, ganti 'DB_NAME' dengan database untuk mematikan semua koneksi ke:
sumber
and spid <> @@SPID
untukSELECT @sKillConnection
pernyataan sehingga tidak akan mencoba untuk membunuh koneksi saya saat ini, yang akan menghasilkan pesan kesalahan.Bunuh, dan bunuh dengan api:
sumber
Menggunakan SQL Management Studio Express:
Di pohon Object Explorer telusuri bawah Manajemen untuk "Monitor Aktivitas" (jika Anda tidak dapat menemukannya di sana kemudian klik kanan pada server database dan pilih "Monitor Aktivitas"). Membuka Monitor Aktivitas, Anda dapat melihat semua info proses. Anda harus dapat menemukan kunci untuk basis data yang Anda minati dan mematikan kunci itu, yang juga akan mematikan koneksi.
Anda harus dapat mengganti nama setelah itu.
sumber
Saya selalu menggunakan:
sumber
sumber
Mengambil offline membutuhkan waktu dan kadang-kadang saya mengalami beberapa masalah dengan itu ..
Cara paling solid menurut saya:
Melepaskan Klik kanan DB -> Tugas -> Lepaskan ... centang "Drop Connections" Ok
Pasang kembali Klik kanan Database -> Lampirkan .. Tambah ... -> pilih basis data Anda, dan ubah kolom Lampirkan Sebagai ke nama basis data yang Anda inginkan. Baik
sumber
gunakan database 'master' dan jalankan query ini, itu akan mematikan semua koneksi aktif dari database Anda.
sumber
Saya biasanya mengalami kesalahan itu ketika saya mencoba mengembalikan database saya biasanya hanya pergi ke atas pohon di Management Studio dan klik kanan dan restart server database (karena itu pada mesin pengembangan, ini mungkin tidak ideal dalam produksi ). Ini menutup semua koneksi basis data.
sumber
ALTER DATABASE ... SET SINGLE_USER
perintah dalam jawaban lain mengembalikan kesalahan yang sama 'tidak bisa mendapatkan kunci eksklusif').Di MS SQL Server Management Studio pada objek explorer, klik kanan pada database. Di menu konteks yang mengikuti, pilih 'Tugas -> Ambil Offline'
sumber
Pendekatan "bunuh dengan api" yang lain adalah dengan memulai kembali layanan MSSQLSERVER. Saya suka melakukan hal-hal dari commandline. Menempelkan ini ke CMD akan melakukannya: NET STOP MSSQLSERVER & NET START MSSQLSERVER
Atau buka "services.msc" dan cari "SQL Server (MSSQLSERVER)" dan klik kanan, pilih "restart".
Ini akan "pasti, pasti" membunuh SEMUA koneksi ke SEMUA database yang berjalan pada contoh itu.
(Saya suka ini lebih baik daripada banyak pendekatan yang mengubah dan mengubah kembali konfigurasi pada server / database)
sumber
Inilah cara andal hal semacam ini di MS SQL Server Management Studio 2008 (dapat juga digunakan untuk versi lain):
sumber
Opsi yang berfungsi untuk saya dalam skenario ini adalah sebagai berikut:
sumber
Coba ini:
sumber
Klik kanan pada nama database, klik Properti untuk mendapatkan jendela properti, Buka tab Opsi dan ubah properti "Batasi Akses" dari Multi Pengguna ke Pengguna Tunggal. Ketika Anda menekan tombol OK, itu akan meminta Anda untuk menutup semua koneksi yang terbuka, pilih "Ya" dan Anda ditetapkan untuk mengubah nama basis data ....
sumber
Ini tidak bekerja untuk saya (SQL2008 Enterprise), saya juga tidak bisa melihat proses yang berjalan atau pengguna yang terhubung ke DB. Restart server (Klik kanan pada Sql Server di Management Studio dan pilih Restart) memungkinkan saya untuk mengembalikan DB.
sumber
Saya menggunakan SQL Server 2008 R2, DB saya sudah ditetapkan untuk pengguna tunggal dan ada koneksi yang membatasi tindakan apa pun pada database. Dengan demikian solusi SQLMenace yang disarankan merespons dengan kesalahan. Ini salah satu yang berhasil dalam kasus saya .
sumber
Saya menggunakan sp_who untuk mendapatkan daftar semua proses dalam database. Ini lebih baik karena Anda mungkin ingin meninjau proses untuk membunuh yang mana.
Hasil
Anda dapat menggunakan perintah di kolom KillCommand untuk mematikan proses yang Anda inginkan.
sumber
Anda dapat menggunakan perintah SP_Who dan membunuh semua proses yang menggunakan database Anda dan kemudian mengubah nama database Anda.
sumber