file mdf tidak dapat ditimpa ketika memulihkan database di SQL Server

21

Saya mendapat databse A. Ada beberapa data di dalamnya. Saya membuat cadangan untuk file A sebagai A.bak . Lalu saya membuat database kosong baru B. Dan kemudian saya mencoba mengembalikan B dari A.bak . Tapi SQL Serve memberi tahu saya kesalahan berikut:

File 'C: \ SQL Directory \ DATA \ A.mdf' tidak dapat ditimpa. Itu sedang digunakan oleh database 'A'.

Tetapi jika saya menghapus A dari SQL Server, retore ok.

Saya tidak mengerti mengapa SQL perlu menulis ke file database asli sambil memulihkan dari file cadangan terpisah ?

Terima kasih ~

smwikipedia
sumber

Jawaban:

19

Jika Anda mengembalikan database, SQL Server akan, secara default, berusaha mengembalikan semua data dan mencatat file ke lokasi aslinya. Karena lokasi asli tersebut masih digunakan oleh database asli ("A"), pemulihan gagal. Anda perlu menggunakan klausa WITH MOVE untuk menentukan lokasi baru untuk semua file dalam database.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Sesuatu seperti itu. Gunakan KEMBALIKAN FILELISTONLY FROM DISK ... untuk melihat nama file logis di cadangan jika perlu.

db2
sumber
11

WITH MOVESaya MOVEadalah solusi tepat di T-SQL.

Omong-omong, jika Anda ingin menggunakan GUI, Anda dapat membuka Files dan mengganti nama:

  • a.MDF
  • a.NDF
  • a.LDF

untuk

  • b.MDF
  • b.NDF
  • b.LDF

masukkan deskripsi gambar di sini

Francesco Mantovani
sumber
1
Juga, ketika mengubah nama Database Tujuan di tab Umum, GUI akan secara otomatis memperbarui nama Kembalikan Sebagai.
Wouter
0

Ketika Anda mengembalikan cadangan, Anda dapat menentukan file data untuk dipulihkan.

Lihat di sini dan di sini . Anda dapat menggunakan opsi "Pulihkan file database sebagai" dan "Ganti database yang ada".

demo
sumber
0

Apakah Anda menggunakan opsi REPLACE, baik dalam perintah TSQL, atau sebagai kotak centang yang dipilih? Atau, Anda dapat mengganti nama file, dan memanggil basis data sesuatu yang lain.

Anda juga akan mengalami sedikit kesulitan untuk memulihkan database yang sedang digunakan ..... Anda harus mematikan proses menggunakan database; ATAU jatuhkan / hapus basis data terlebih dahulu, tutup koneksi (ini mungkin yang paling mudah); ATAU atur database yang ingin Anda timpa menjadi sesuatu seperti mode pengguna terbatas dengan rollback segera jadi semoga hanya DBA yang dapat digunakan; ATAU bahkan menghentikan SQL Server, dan restart - semoga mendapatkan pemulihan bergulir sebelum siapa pun / apa pun menggunakan database itu.

PS mengambil cadangan dari database Anda akan menimpa, untuk berjaga-jaga.

Peter Schofield
sumber
0

Jika seseorang mencari solusi di GUI Management Studio setelah menggunakan Optionshalaman dan mengaktifkan Overwrite the existing database (WITH REPLACE)opsi:

Cukup klik di Restore Askolom dan ubah nama *.mdffile file dan *.ldffile tersebut.

jan
sumber