Saya perlu me-restart database karena beberapa proses tidak berfungsi. Rencana saya adalah untuk membuatnya offline dan kembali online lagi.
Saya mencoba melakukan ini di Sql Server Management Studio 2008:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Saya mendapatkan kesalahan ini:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.
Apa yang saya lakukan salah?
sql
sql-server-2008
ssms
JOE SKEET
sumber
sumber
Jawaban:
Setelah Anda mendapatkan kesalahan, jalankan
Cari basis data dalam daftar. Mungkin saja koneksi tidak terputus. Jika Anda menemukan koneksi ke database, jalankan
di mana
<SPID>
SPID untuk sesi yang terhubung ke database.Coba skrip Anda setelah semua koneksi ke database dihapus.
Sayangnya, saya tidak memiliki alasan mengapa Anda melihat masalah, tetapi di sini ada tautan yang menunjukkan bahwa masalah tersebut telah terjadi di tempat lain.
http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/
sumber
set single_user
upaya yang masih tertunda.KILL
tidak akan menyelesaikannya juga.KILL (87)
menghasilkanMsg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.
erm ....Saya berhasil mereproduksi kesalahan ini dengan melakukan hal berikut.
Koneksi 1 (biarkan berjalan selama beberapa menit)
Koneksi 2 dan 3
sumber
Coba ini jika "dalam masa transisi" ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
sumber
SET OFFLINE
pernyataan yang disebutkan oleh OP (mungkin ada skenario di mana ia bekerja, tetapi tidak untuk saya)Saya akan menambahkan ini di sini jika seseorang akan seberuntung saya.
Saat meninjau daftar proses sp_who2 perhatikan proses yang berjalan tidak hanya untuk database yang terpengaruh tetapi juga untuk master . Dalam kasus saya, masalah yang memblokir basis data terkait dengan prosedur tersimpan yang memulai xp_cmdshell.
Periksa apakah Anda memiliki proses dalam status KILL / RollBack untuk database master
Jika Anda memiliki masalah yang sama, hanya perintah KILL mungkin tidak akan membantu. Anda dapat me-restart SQL server, atau cara yang lebih baik adalah dengan menemukan cmd.exe di bawah proses windows pada SQL server OS dan membunuhnya.
sumber
Di SQL Management Studio, buka Keamanan -> Login dan klik dua kali Login Anda. Pilih Peran Server dari kolom kiri, dan verifikasi bahwa sysadmin dicentang.
Dalam kasus saya, saya login di akun tanpa hak istimewa itu.
HTH!
sumber
Membunuh ID proses bekerja dengan baik untuk saya. Saat menjalankan "EXEC sp_who2" Perintah di jendela permintaan baru ... dan saring hasil untuk database "sibuk", Membunuh proses dengan perintah "KILL" berhasil melakukan trik. Setelah itu semua bekerja kembali.
sumber
Hanya untuk menambahkan dua sen saya. Saya telah menempatkan diri saya dalam situasi yang sama, sambil mencari hak minimum yang diperlukan untuk login db agar berhasil menjalankan pernyataan:
Tampaknya pernyataan ALTER berhasil diselesaikan , ketika dieksekusi dengan login sysadmin , tetapi membutuhkan bagian pembersihan koneksi, ketika dieksekusi di bawah login yang memiliki "hanya" izin terbatas seperti:
PS Saya menghabiskan waktu berjam-jam untuk mencari tahu mengapa "ALTER DATABASE .." tidak berfungsi ketika dijalankan di bawah login yang memiliki peran dbcreator + ALTER SETIAP hak istimewa DATABASE . Inilah utas MSDN saya !
sumber
Saya tahu ini adalah posting lama tapi baru-baru ini saya mengalami masalah yang sangat mirip. Sayangnya saya tidak dapat menggunakan perintah alter database apa pun karena kunci eksklusif tidak dapat ditempatkan. Tetapi saya tidak pernah dapat menemukan koneksi terbuka ke db. Saya akhirnya harus secara paksa menghapus status kesehatan dari database untuk memaksanya ke kondisi pemulihan alih-alih dalam pemulihan.
sumber
Dalam kasus yang jarang terjadi (mis., Setelah transaksi besar dilakukan) proses sistem CHECKPOINT yang berjalan menahan kunci FILE pada file database mencegah transisi ke mode MULTI_USER.
sumber
Dalam skenario saya, tidak ada proses memblokir database di bawah sp_who2. Namun, kami menemukan karena basis data jauh lebih besar daripada basis data kami yang lain bahwa proses yang tertunda masih berjalan itulah sebabnya basis data di bawah grup ketersediaan masih ditampilkan sebagai merah / luring setelah kami mencoba untuk 'melanjutkan data' dengan mengklik kanan pada database yang dijeda.
Untuk memeriksa apakah Anda masih memiliki proses yang berjalan, jalankan saja perintah ini: pilih persen selesai dari sys.dm_exec_requests di mana persen_lengkapi> 0
sumber