Saya sebenarnya mencoba membuat skrip (di Sql Server 2008) untuk memulihkan satu database dari satu file cadangan. Saya membuat kode berikut dan saya mendapatkan kesalahan -
Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.
Bagaimana cara memperbaiki masalah ini?
IF DB_ID('AdventureWorksDW') IS NOT NULL
BEGIN
RESTORE DATABASE [AdventureWorksDW]
FILE = N'AdventureWorksDW_Data'
FROM
DISK = N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\Backup\AdventureWorksDW.bak'
WITH FILE = 1,
MOVE N'AdventureWorksDW_Data'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW.mdf',
MOVE N'AdventureWorksDW_Log'
TO N'C:\Program Files\Microsoft SQL Server\
MSSQL10_50.SS2008\MSSQL\DATA\AdventureWorksDW_0.LDF',
NOUNLOAD, STATS = 10
END
Jawaban:
Saya akan berasumsi bahwa jika Anda memulihkan db, Anda tidak peduli dengan transaksi yang ada di db itu. Baik? Jika demikian, ini seharusnya berhasil untuk Anda:
Sekarang, satu hal tambahan yang harus diperhatikan. Setelah Anda menyetel db ke mode pengguna tunggal, orang lain dapat mencoba menyambung ke db. Jika berhasil, Anda tidak dapat melanjutkan pemulihan. Ini balapan! Saran saya adalah menjalankan ketiga pernyataan sekaligus.
sumber
USE master
, tidakUSER master
.ALTER DATABASE [AdventureWorksDW] SET MULTI_USER
di bagian akhir untuk memastikan database kembali ke mode multi-pengguna normal.SINGLE_USER
mode pada waktu pencadangan, itu akan berada dalamSINGLE_USER
mode ketika cadangan dipulihkan. Jika berada dalamMULTI_USER
mode pada waktu pencadangan, itu akan berada dalamMULTI_USER
mode saat dipulihkan. Anda membuat poin yang bagus: itu pasti layak untuk diperiksa setelah pemulihan selesai. Anda juga dapat menjalankan RESTORE HEADERONLY di media cadangan dan memeriksaIsSingleUser
atau melakukan matematika bijak diFlags
kolom tersebut.sumber
jalankan kueri ini sebelum memulihkan database:
dan yang ini setelah memulihkan:
sumber
Bagi saya, solusinya adalah:
Centang Timpa database yang sudah ada (WITH REPLACE) di tab optoins di sisi kiri.
Hapus centang semua opsi lain.
Pilih database sumber dan tujuan.
Klik ok.
Itu dia.
sumber
Gunakan skrip berikut untuk menemukan dan mematikan semua koneksi yang dibuka ke database sebelum memulihkan database.
Semoga ini bisa membantu ...
sumber
Saya pikir Anda hanya perlu mengatur db ke mode pengguna tunggal sebelum mencoba memulihkan, seperti di bawah ini, pastikan Anda menggunakan
master
sumber
Saya baru saja memulai kembali layanan sqlexpress dan kemudian pemulihan selesai dengan baik
sumber
sumber
Solusi 1: Mulai ulang layanan SQL dan coba pulihkan DB Solusi 2: Mulai ulang sistem / server dan coba pulihkan DB Solusi 3: Ambil kembali DB saat ini, Hapus DB saat ini / tujuan dan coba pulihkan DB.
sumber
Mengatur DB ke mode pengguna tunggal tidak berhasil untuk saya, tetapi menjadikannya offline, dan kemudian membawanya kembali online berhasil. Ini ada di menu klik kanan DB, di bawah Tasks.
Pastikan untuk mencentang opsi 'Jatuhkan Semua Koneksi Aktif' di dialog.
sumber
Inilah cara saya melakukan pemulihan database dari produksi ke pengembangan:
CATATAN: Saya melakukannya melalui tugas SSAS untuk mendorong database produksi ke pengembangan setiap hari:
Langkah 1: Hapus cadangan hari sebelumnya dalam pengembangan:
Langkah2: Salin database produksi ke pengembangan:
Langkah3: Pulihkan dengan menjalankan skrip .sql
Kode yang ada di dalam file AE11_Restore.sql:
sumber
Saya mendapat kesalahan ini ketika tidak ada cukup ruang disk untuk memulihkan Db. Membersihkan beberapa ruang memecahkannya.
sumber
mengubah db asli ke offline berhasil untuk saya
sumber