Kumpulan cadangan menyimpan cadangan dari basis data selain yang ada

485

Saya mencoba mengembalikan file cadangan SQL Server untuk database saya, tetapi ada kesalahan:

Kumpulan cadangan menyimpan cadangan dari basis data selain yang ada

Database saya di SQL Server 2008 dan file cadangan pada 2005.

Apa yang bisa menjadi masalah?

RD
sumber
95
Jawaban yang paling banyak dipilih di bawah ini adalah palu godam. Masalahnya kemungkinan besar Anda belum memilih opsi " Timpa basis data yang ada (WITH REPLACE) " di jendela Pulihkan> Opsi . Saya punya masalah ini dari menggunakan perintah WITH MOVE, dan diperbaiki dengan menggunakan WITH REPLACE, MOVE.
James McCormack
Saya memiliki kesalahan yang sama dengan salah satu database saya, tetapi hanya ketika SQL Server Agent dimatikan. Jika saya menyalakannya, tidak ada kesalahan dan saya dapat memulihkan tanpa masalah. File BAK saya hanya berisi satu database, dan nama database (dan nama file logis) unik di server saya.
Pengembang Web

Jawaban:

807

Saya juga menemukan masalah ini.

Solusi:

  • Jangan buat database kosong dan kembalikan .bakfile ke dalamnya.
  • Gunakan opsi 'Pulihkan Basis Data' yang dapat diakses dengan mengklik kanan cabang "Databases" dari SQL Server Management Studio dan berikan nama basis data sambil menyediakan sumber untuk dipulihkan.
  • Juga ganti nama file di "File" jika database lain masih ada. Kalau tidak, Anda mendapatkan "File '...' tidak dapat ditimpa. Ini sedang digunakan oleh database 'yourFirstDb'".
sunil_philip
sumber
102
Akan sangat mudah bagi SSMS untuk memberi tahu saya ini ketika kesalahan terjadi
cja
16
+1 untuk " Jangan membuat database kosong dan mengembalikan file .bak ke sana " ... ya, itu menyelesaikannya. (Tapi mengapa saya tidak mendapatkan masalah ini di lain waktu ketika saya melakukan hal yang sama? Dan bukankah kita hanya mulai melakukan pra-buat itu di tempat pertama sebagai solusi untuk beberapa pesan kesalahan yang tidak dapat dijelaskan lainnya ?:])
Reg Edit
Seseorang harus menandai ini sebagai jawaban karena itu adalah saran yang saya butuhkan untuk berhasil mengembalikan cadangan.
Doreen
2
Di Pulihkan Database, saya pergi ke File, Pulihkan Sebagai, dan memasukkan nama file yang unik, karena masih memiliki nama asli untuk data dan file log.
Dave Mateer
2
Juga ganti nama file di "File" jika database lain masih ada. Kalau tidak, Anda mendapatkan "File '...' tidak dapat ditimpa. Ini sedang digunakan oleh database 'yourFirstDb'".
Verena Haunschmid
175

Antara:

1) Gunakan WITH REPLACEsaat menggunakan RESTOREperintah (jika menggunakan GUI, itu ditemukan di bawah Pilihan -> Timpa database yang ada ( WITH REPLACE)).

2) Deletedatabase lama yang bertentangan dan mengembalikan lagi menggunakan RESTOREperintah.

Periksa tautan untuk detail lebih lanjut.

Amarnath
sumber
1
disalin dari tautan & memberikan tautan juga .. * sigh * (smart)
Abhijeetchindhe
4
@Abhijeetchindhe haha ​​.. Kegunaan ulang dan kesopanan .. :)
Amarnath
:) Perangkat Lunak yang Jujur Ya Anda! Lagi pula, itulah jawaban terbaik untuk pertanyaan ini. Dan beri suara untuk waktu yang Anda ambil untuk menemukannya :)
Abhijeetchindhe
1
Punya masalah yang sama dengan op dan jawaban ini berfungsi dengan baik. +1
Esteban
1
Opsi DENGAN PENGGANTIAN ini juga solusi yang saya butuhkan. Terima kasih!
Adam
90

Pertama buat database kosong dengan nama yang sama. Lalu pergi untuk opsi mengembalikan

Di bawah Opsi di panel kiri jangan lupa untuk memilih

  • Timpa basis data yang ada
  • Pertahankan pengaturan replikasi

masukkan deskripsi gambar di sini

Itu dia

HimalayanCoder
sumber
51

Telah menghadapi masalah yang sama dan menemukan solusinya dengan melakukan ini, menggunakan SSMS 2014

- Cukup pilih Opsi Timpa basis data yang ada (DENGAN PENGGANTIAN) 

Database yang ada> Tugas> Kembalikan> Database

Smit Patel
sumber
34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

BACKUP DATABASE db TO DISK = 'c:\temp\db.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';
Elsoni
sumber
33

3 langkah sederhana:

1- Klik kanan pada database → Tugas → restore → Database

2- Periksa Devicesebagai sumber dan cari file .bak (atau zip .bak)

3 - Di panel kiri klik optionsdan:

  • centang Timpa basis data yang ada.
  • hapus centang. Ambil cadangan tail-log sebelum mengembalikan
  • centang Tutup koneksi yang ada ke database tujuan.

Pilihan lain benar-benar opsional (dan tentu saja penting)!

Ali Sheikhpour
sumber
23

Itu karena .mdfdan .ldfFile dari aslinya Dbberada di mungkin c:\programFile\....dan info ini disimpan di Cadangan!

Jika Anda membuat DB yang sama pada SQL Server yang berbeda tempat instalasi aktif, c:\program Files (x86)\ ....Anda tidak dapat memulihkan seperti biasa. Anda perlu memindahkan path untuk .mdfdan .ldfFile.

Karena itu:

  • Buat DB kosong di Server baru

  • Klik kanan pada Db kosong> Tugas> Kembalikan> Database> klik Perangkat pilih .bakFile Anda > Pilih Db untuk mengembalikan ke

  • klik File di sisi kiri> Pilih "Pindahkan semua File ke Folder"
  • klik Opsi di situs kiri> klik Timpa

Selesai!
Semoga ini bisa membantu!

PEMBANTU
sumber
16

Saya telah mengalami masalah yang sama hari ini. Mencoba semua solusi di atas tetapi tidak berhasil. Jadi posting solusi saya di sini.

Jangan lupa untuk menghapus centang pada Tail-long Backup sebelum mengembalikan

Jangan lupa untuk menghapus centang pada Tail-long Backup sebelum mengembalikan

Semoga ini bisa membantu orang lain juga!

immayankmodi
sumber
Inilah yang bekerja untuk saya. Terima kasih!
Bill Norman
16

Jika Anda menggunakan pendekatan skrip dan memiliki kesalahan terkait file LDF dan MDF, Anda dapat terlebih dahulu meminta file cadangan untuk nama logis (dan detail lainnya) dari file dalam set cadangan, menggunakan yang berikut ini:

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

Anda akan mendapatkan hasil yang serupa dengan yang berikut:

masukkan deskripsi gambar di sini

Dan kemudian Anda bisa menggunakan nama-nama logis itu di kueri:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

Info lebih lanjut tentang RESTORE FILELISTONLY dapat ditemukan dari dokumen SQL Server .

pengguna919426
sumber
Saya memiliki masalah yang sama dalam pertanyaan, dan dalam kasus saya cadangan Db berasal dari server jauh dan saya harus membuat struktur folder yang sama di drive D saya yang menyerupai output dari permintaan pertama. Kemudian permintaan kedua bekerja dengan benar dan basis data dipulihkan.
rinilnath
11

Yang juga penting adalah memastikan bahwa, nama basis data Anda cocok dengan nama basis data di cadangan yang Anda coba pulihkan. Jika tidak cocok, Anda akan mendapatkan kesalahan yang sama.

Andrew Marais
sumber
Ini tampaknya benar terutama jika Anda memiliki beberapa file / grup file dan tabel yang dipartisi
AlexC
9

Sebelum melakukan hal lain, konfirmasikan apakah cadangan Anda Penuh atau Diferensial. Jika Anda mencoba membuat database baru dari cadangan diferensial, apa pun yang Anda lakukan, Anda akan menemui kesalahan.

Tots Benedicto
sumber
1
Ini adalah masalah yang saya alami, jadi terima kasih untuk ini !!! (Saya tidak tahu bahwa file cadangan sebenarnya adalah cadangan diferensial.). Inilah cara untuk memeriksa: "KEMBALIKAN HEADERONLY DARI DISK = 'C: \ myfile.bak'" Dalam hasilnya, BackupType of 1 = Full backup. BackupType of 5 = Cadangan diferensial.
Wimpie Ratte
9

system.data.sqlclient.sqlerror: Kumpulan cadangan menyimpan cadangan database selain dari database 'Dbname' yang ada

Saya telah menemukan untuk menemukan soultion

  1. Jangan Buat database dengan nama yang sama atau nama database yang berbeda! Penting.

  2. klik kanan database | Tugas> Kembalikan> Database

  3. Di bawah "Sumber untuk memulihkan" pilih "Dari Perangkat"

  4. Pilih file .bak

  5. Pilih kotak centang untuk database dalam tampilan grid di bawah ini

  6. Untuk DataBase: "Di sini Anda dapat mengetik Nama Basis Data Baru" (Mis: DemoDB)

  7. Jangan pilih Database Yang Ada Dari DropDownlist

  8. Sekarang Klik pada Tombol Ok, itu akan membuat Databse baru dan mengembalikan semua data dari file .bak Anda.

Anda bahkan bisa mendapatkan bantuan dari tautan ini

Semoga ini akan membantu untuk menyelesaikan masalah Anda ...

akshay5662
sumber
1
"Jangan Buat database dengan nama yang sama atau nama database yang berbeda! Penting." Apa maksudmu?
sajid
6

Ini menyebabkan selalu karena ketidakcocokan versi. ikuti langkah-langkah ini untuk menyelesaikan:

Langkah 1: Buat database dengan nama pilihan Anda. (Dalam kasus kami AdventureWorks)

Langkah 2: Tulis klik pada database dan klik Tugas >> Kembalikan >> Database ...

masukkan deskripsi gambar di sini

Langkah 3: Di layar pemulihan, pilih Pilihan ketiga. Sekarang pilih kotak centang "Timpa basis data yang ada (DENGAN PENGGANTIAN)"

masukkan deskripsi gambar di sini

Langkah 4: Klik OK. Seharusnya berhasil mengembalikan database.

Catatan: Ketika Anda mengembalikan database DENGAN PENGGANTIAN itu akan menimpa database lama.

Alireza Abdollahnejad
sumber
Terima kasih Alireza untuk usaha Anda .. Tapi kami menggunakan kueri alih-alih GUI.
Pugal
5

Masalah yang sama dengan saya. Solusi bagi saya adalah:

  1. Klik kanan pada database.
  2. Pilih tugas, pilih pulihkan database.
  3. Klik opsi di sisi kiri.
  4. Periksa opsi pertama Timpa database yang ada (DENGAN REPLACE).
  5. Pergi ke Umum, pilih sumber dan basis data tujuan.
  6. Klik OK, itu dia
Aayush Verma
sumber
3

Saya hanya mencoba menyelesaikan masalah ini.

Saya sudah mencoba semuanya mulai dari menjalankan sebagai admin hingga saran yang ditemukan di sini dan di tempat lain; apa yang dipecahkan bagi saya pada akhirnya adalah untuk memeriksa opsi "relokasi file" di tab properti Files.

Semoga ini bisa membantu orang lain.

Clint
sumber
3

Saya harus membuat db baru di lokal saya untuk pengujian & saya mendapat cadangan dari prod saya. Saya membuat db terlebih dahulu dan mencoba menjalankan BAK di atas db baru yang menghasilkan kesalahan ini untuk saya. Saya menghapus db dan mengembalikannya sambil mencari nama db baru di layar restore itu sendiri. Db secara otomatis dibuat pada restore.

Angelina Ilieva
sumber
3

Beberapa dari Anda sangat rumit ini. Saya menemukan ini sangat sederhana.

1) Buat database dengan nama yang sama dengan nama database file .bak Anda! Penting

2) klik kanan database | Tugas> Kembalikan> Database

3) Di bawah "Sumber untuk mengembalikan" pilih "Dari Perangkat"

4) Pilih file .bak

5) Pilih kotak centang untuk database dalam tampilan grid di bawah ini

6) Di bawah "Pilih Halaman" di sebelah kanan Pilih "Opsi"

7) Pilih kotak centang berlabel "Pertahankan pengaturan replikasi (DENGAN KEEP_REPLICATION)

Sekarang Kembali ke halaman Umum dan klik OK untuk mengembalikan database ... Itu dia.

Rolon
sumber
di mana "pilih halaman" itu?
KansaiRobot
2

Saya mendapatkan pekerjaan yang dilakukan melalui cara alternatif, menggunakan Menghasilkan skrip. Itu berhasil bagi saya karena Backup-Restore tidak membantu menyelesaikan masalah karena kesalahan yang sama.

Altaf Patel
sumber
2

Dalam Opsi, ubah nama file "Kembalikan Sebagai" ke database baru mdf dan ldf. Ini merujuk ke sumber database .mdf dan .ldf file.

Priyanka Rawat
sumber
1

Anda dapat mengembalikan ke DB baru, memverifikasi sintaks nama file, itu akan berada di file log, untuk versi SQL baru akan menjadi akhiran "_log"

iklan periksa timpa bendera basis data yang ada di tab opsi

Fabio

Fabio
sumber
0

Saya yakin masalah ini terkait dengan izin file dan folder.

Popas
sumber
0

Saya mencoba mengembalikan database produksi ke database pementasan di server yang sama.

Satu-satunya hal yang berhasil dalam kasus saya adalah mengembalikan ke database kosong baru. Ini bekerja dengan baik, tidak mencoba untuk menimpa file produksi (yang akan terjadi jika Anda hanya mengembalikan file cadangan produksi ke basis data pementasan yang ada). Kemudian hapus database lama dan ganti nama - file akan menyimpan nama temp baru tetapi dalam kasus saya itu baik-baik saja.

(Atau hapus database pementasan terlebih dahulu dan kemudian Anda dapat mengembalikan ke database baru dengan nama yang sama dengan basis data pementasan)

mike nelson
sumber
0

alih-alih klik Restore Database klik Restore File and Filegroups ..

thats bekerja di server sql saya

Ali Sadri
sumber
0

Ini membantu saya untuk mengimpor file cadangan dari drive sistem

  1. Buat database dengan nama yang sama (lebih disukai) sebagai nama database file .bak Anda
  2. Klik kanan database> Tugas> Kembalikan> Database
  3. Di bawah "Sumber untuk memulihkan" pilih "Dari Perangkat"
  4. Pilih file .bak memilih jalur dari sistem
  5. Pilih kotak centang untuk database di kotak daftar di bawah ini
  6. Di bawah "Pilih Halaman" di sebelah kanan Pilih "Opsi"
  7. Pilih kotak centang berlabel "Pertahankan pengaturan replikasi (DENGAN KEEP_REPLICATION)
  8. Pilih kotak centang untuk Menimpa basis data yang ada (DENGAN PENGGANTIAN) Sekarang Kembali ke halaman Umum dan klik OK untuk memulihkan basis data ...
Prajwal Bhat
sumber