Yedekleme kümesi, var olandan farklı bir veritabanının yedeğini tutar


485

Veritabanım için bir SQL Server yedek dosyasını geri yüklemeye çalışıyorum, ancak aşağıdaki gibi bir hata atıyor:

Yedekleme kümesi, var olandan farklı bir veritabanının yedeğini tutar

SQL Server 2008 ve yedekleme dosyasındaki veritabanım 2005'te.

Sorun ne olabilir?


95
Aşağıdaki en çok oy alan cevap, bir ceviz kırmak için bir balyozdur. Sorun büyük olasılıkla Geri Yükle> Seçenekler penceresinde " Varolan veritabanının üzerine yaz (REPLACE İLE) " seçeneğini belirlememiş olabilirsiniz . Komut satırı kullanarak bu sorunu vardı ve kullanarak düzeltildi . WITH MOVEWITH REPLACE, MOVE
James McCormack

Veritabanlarımdan birinde aynı hatayla karşılaşıyorum, ancak SQL Server Agent kapalı olduğunda. Açarsam, hata yok ve sorunsuz geri yükleyebilirim. BAK dosyam yalnızca tek bir veritabanı içeriyor ve bu veritabanı adı (ve mantıksal dosya adları) sunucumda benzersiz.
Geliştirici Web'leri

Yanıtlar:


807

Ben de bu sorunla karşılaştım.

Çözüm :

  • Boş bir veritabanı oluşturmayın ve .bakdosyayı bu veritabanına geri yüklemeyin .
  • SQL Server Management Studio'nun "Veritabanları" dalını sağ tıklatarak erişilebilen 'Veritabanını Geri Yükle' seçeneğini kullanın ve geri yüklenecek kaynağı sağlarken veritabanı adını girin.
  • Diğer veritabanı hala varsa "Dosyalar" daki dosya adlarını da değiştirin. Aksi takdirde "..." dosyasının üzerine yazılamaz. 'YourFirstDb' veritabanı tarafından kullanılıyor. "

102
Hata oluştuğunda SSMS'nin bunu söylemesi çok kolay olurdu
cja

16
+1 için " boş bir veritabanı oluşturma ve .bak dosyasını ona geri yükleme " ... evet, bu çözer. (Ama neden aynı sorunu yaptığım diğer tüm zamanlarda bu sorunu alamadım? Ve biz sadece bu ön-oluşturmayı başka bir açıklanamayan hata mesajı için bir geçici çözüm olarak yapmaya başlamadık ?:])
Reg Edit

Birisi bunu bir cevap olarak işaretlemelidir, çünkü bir yedeği başarıyla geri yüklemek için gerekli tavsiyemdi.
Doreen

2
Veritabanını Geri Yükle'de Dosyalara, Farklı Geri Yükle'ye gittim ve veri ve günlük dosyaları için orijinal adlara sahip olduğu için benzersiz dosya adları koydum.
Dave Mateer

2
Diğer veritabanı hala varsa "Dosyalar" daki dosya adlarını da değiştirin. Aksi takdirde "..." dosyasının üzerine yazılamaz. 'YourFirstDb' veritabanı tarafından kullanılıyor. "
Verena Haunschmid

175

Ya:

1) Komutu WITH REPLACEkullanırken RESTOREkullanın (GUI kullanılıyorsa, Seçenekler -> Mevcut veritabanının üzerine yaz ( WITH REPLACE) altında bulunur).

2) Komutu Deletekullanarak çakışan ve geri yüklenen eski veritabanı RESTORE.

Daha fazla ayrıntı için bağlantıyı kontrol edin .


1
bağlantıdan kopyalandı ve bağlantıyı da sağladı .. * iç çekme * (akıllı)
Abhijeetchindhe

4
@Abhijeetchindhe haha ​​.. Yeniden kullanılabilirlik ve nezaket .. :)
Amarnath

:) Dürüst Bir Yazılım Er! Her neyse, bu soru için en iyi cevap bu. Ve bulmak için çıkardığınız zamana kadar oy verin :)
Abhijeetchindhe

1
Op ile aynı sorunu vardı ve bu cevap gayet iyi çalışıyor. +1
Esteban

1
Bu DEĞİŞTİRME seçeneği de ihtiyacım olan çözümdü. Teşekkürler!
Adam

90

Önce aynı adda boş bir veritabanı oluşturun. Ardından geri yükleme seçeneğine gidin

Sol bölmedeki Seçenekler'in altında seçmeyi unutmayın

  • Mevcut veritabanının üzerine yaz
  • Çoğaltma ayarlarını koru

resim açıklamasını buraya girin

Bu kadar


51

SSMS 2014 kullanarak aynı sorunla karşılaşmış ve çözümü bularak bulmuşsunuzdur.

- Sadece mevcut veritabanının üzerine yaz seçeneğini seçin (DEĞİŞTİR) 

Mevcut Veritabanı> Görev> Geri Yükle> Veritabanı


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';

33

Basit 3 adım:

1- Veritabanına sağ tıklayın → Görevler → geri yükle → Veritabanı

2- DeviceKaynak olarak kontrol edin ve .bak (veya sıkıştırılmış .bak) dosyasını bulun

3- Sol bölmede üzerine tıklayın optionsve:

  • kontrol varolan veritabanını üzerine yaz.
  • Geri yüklemeden önce kuyruk günlüğü yedeklemesi al seçeneğinin işaretini kaldırın
  • kontrol hedef veritabanına yakın mevcut bağlantı.

Diğer seçenekler gerçekten isteğe bağlıdır (ve elbette önemlidir)!


23

Onun çünkü .mdfve .ldfOrijinal dosyaları Dbbelki bulun c:\programFile\....ve bu bilgi Yedekleme kaydedilir!

Yüklemenin bulunduğu farklı bir SQL Server'da aynı DB'yi oluşturursanız, c:\program Files (x86)\ ....genellikle geri yükleyemezsiniz. .mdfVe .ldfFiles yolunu yeniden konumlandırmanız gerekir .

Bu nedenle:

  • Yeni Sunucu'da boş bir DB oluşturma

  • Boş Db> Görevler> Geri Yükle> Veritabanı'na sağ tıklayın> Cihaz'ı tıklayın .bakDosyalarınızı seçin> Geri yüklemek için Db'yi seçin

  • sol taraftaki Dosyalar'ı tıklayın> "Tüm Dosyaları Klasöre Yeniden Konumlandır" ı seçin
  • sol sitede Seçenekler'i tıklayın> Üzerine yaz'ı tıklayın

Bitti!
Umarım yardımcı olur!


16

Bugün benzer bir sorunla karşılaşmıştım. Yukarıdaki tüm çözümleri denedim ama işe yaramadı. Çözümümü buraya gönderiyorum.

Geri yüklemeden önce Kuyrukta Yedekleme'nin işaretini kaldırmayı unutmayın

Geri yüklemeden önce Kuyrukta Yedekleme'nin işaretini kaldırmayı unutmayın

Umarım başkalarına da yardım eder!


Bu benim için işe yaradı. Teşekkürler!
Bill Norman

16

Komut dosyası yaklaşımını kullanıyorsanız ve LDF ve MDF dosyalarıyla ilgili bir hatayla karşılaşıyorsanız , önce yedekleme dosyasını aşağıdakileri kullanarak yedekleme kümesindeki dosyaların mantıksal adları (ve diğer ayrıntılar) için sorgulayabilirsiniz :

-- 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

Aşağıdakine benzer sonuçlar alırsınız:

resim açıklamasını buraya girin

Ve sonra bu mantıksal adları sorgularda kullanabilirsiniz:

    -- 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

RESTORE FILELISTONLY SQL Server belgelerinden daha fazla bilgi edinebilirsiniz .


Soruda aynı sorunu vardı ve benim durumumda Db yedekleme uzak sunucudan oldu ve ben ilk sorgu çıkış benzer D sürücüsünde aynı klasör yapısı oluşturmak zorunda kaldı. Sonra ikinci sorgu düzgün çalıştı ve veritabanı geri yüklendi.
rinilnath

11

Ayrıca önemli olan, veritabanı adınızın geri yüklemeye çalıştığınız yedeklemedeki veri tabanı adıyla eşleştiğinden emin olmaktır . Eşleşmezse, aynı hatayı alırsınız.


Birden çok dosya / dosya grubunuz ve bölümlenmiş tablolarınız varsa bu özellikle doğru görünüyor
AlexC

9

Başka bir şey yapmadan önce, yedeklemenizin Tam mı yoksa Diferansiyel mi olduğunu doğrulayın. Farklı bir yedeklemeden yeni bir veritabanı oluşturmaya çalışıyorsanız, ne yaparsanız yapın hatayla karşılaşırsınız.


1
Bu yaşadığım sorun, bu yüzden teşekkürler !!! (Yedekleme dosyasının aslında diferansiyel bir yedekleme olduğunu bilmiyordum.). Kontrol etmek için: "HEADERONLY FROM DISK = 'C: \ myfile.bak'" Sonuçlarında, BackupType of 1 = Full backup. BackupType of 5 = Diferansiyel yedekleme.
Wimpie Ratte

9

system.data.sqlclient.sqlerror: Yedek kümesi, varolan 'Dbname' veritabanından farklı bir veritabanının yedeğini tutar

Ruh bulmak için karşılaştım

  1. Aynı ada veya farklı veritabanı adına sahip bir veritabanı oluşturmayın!

  2. veritabanına sağ tıklayın | Görevler> Geri Yükle> Veritabanı

  3. "Geri yükleme kaynağı" altında "Cihazdan" ı seçin

  4. .Bak dosyasını seçin

  5. Aşağıdaki tablo görünümünde veritabanı için onay kutusunu seçin

  6. DataBase: "Burada yeni veritabanı adı yazabilirsiniz" (Örn: DemoDB)

  7. Mevcut Veritabanını DropDownlist'ten seçmeyin

  8. Şimdi Tamam Düğmesine tıklayın, yeni bir Veri Tabanı oluşturur ve .bak dosyanızdaki tüm verileri geri yükler.

bu bağlantıdan bile yardım alabilirsiniz

Sorununuzu çözmenize yardımcı olacağını umuyoruz ...


1
"Aynı ada veya farklı veritabanı adına sahip bir veritabanı oluşturmayın! Önemli." Ne demek istiyorsun?
Sajid

6

Bu her zaman sürüm uyumsuzluğundan kaynaklanır. çözmek için şu adımları izleyin:

Adım 1: Tercih ettiğiniz adla bir veritabanı oluşturun. (Bizim durumumuzda AdventureWorks)

Adım 2: Veritabanına tıklayın ve Görevler >> Geri Yükle >> Veritabanı… seçeneğine tıklayın.

resim açıklamasını buraya girin

Adım 3: Geri yükleme ekranında, üçüncü Seçenekler seçeneğine gidin. Şimdi "Mevcut veritabanının üzerine yaz (DEĞİŞTİR)" onay kutusunu seçin

resim açıklamasını buraya girin

4. Adım: Tamam'ı tıklayın. Veritabanını başarıyla geri yüklemelidir.

Not: REPLACE İLE bir veritabanını geri yüklediğinizde, eski veritabanının üzerine yazılır.


Çabalarınız için teşekkürler Alireza .. Ama GUI yerine sorgu kullanıyoruz.
Pugal

5

Benim için de aynı sorun benim için çözüm:

  1. Veritabanına sağ tıklayın.
  2. Görevleri seçin, veritabanını geri yükle'yi seçin.
  3. Sol taraftaki seçenekleri tıklayın.
  4. İlk seçeneği işaretleyin Mevcut veritabanının üzerine yaz (DEĞİŞTİR).
  5. Genel'e gidin, kaynak ve hedef veritabanını seçin.
  6. Tamam'ı tıklayın, hepsi bu

3

Sadece bu sorunu çözmeye çalışıyordum.

Yönetici olarak çalışmaktan burada ve başka yerlerde bulunan önerilere kadar her şeyi denedim; en sonunda benim için çözen, Dosyalar özellik sekmesindeki "dosyaları yeniden konumlandır" seçeneğini işaretlemektir.

Umarım bu başka birine yardımcı olur.


3

Test için yerel üzerinde yeni db oluşturmak zorunda kaldı ve benim eşya bir yedek vardı. Ben ilk önce db yarattı ve benim için bu hatayı üreten yeni db üstünde BAK çalıştırmak için çalıştı. Ben db sildi ve geri yükleme ekranında yeni db adını kaynak yaparken geri yükledi. Db geri yükleme sırasında otomatik olarak oluşturuldu.


3

Bazılarınız bunu fazlasıyla karmaşık hale getirdi. Bunu son derece basit buldum.

1) .bak dosya veritabanı adınızla aynı ada sahip bir veritabanı oluşturun!

2) veritabanına sağ tıklayın | Görevler> Geri Yükle> Veritabanı

3) "Geri yükleme kaynağı" altında "Cihazdan" ı seçin

4) .bak dosyasını seçin

5) Aşağıdaki tablo görünümünde veritabanı onay kutusunu seçin

6) Sağdaki "Sayfa Seç" altında "Seçenekler" i seçin

7) "Çoğaltma ayarlarını koru (KEEP_REPLICATION İLE) etiketli onay kutusunu seçin

Şimdi Genel sayfasına dönün ve veritabanını geri yüklemek için Tamam'ı tıklayın ... İşte bu kadar.


nerede "bir sayfa seç"?
KansaiRobot

2

Komut dosyası oluştur'u kullanarak alternatif bir yolla iş yaptım. Backup-Restore, aynı hata nedeniyle sorunun çözülmesine yardımcı olmadığından bu benim için işe yaradı.


2

Seçeneklerde, "Farklı Geri Yükle" dosya adını yeni veritabanı mdf ve ldf olarak değiştirin. Kaynak veritabanı .mdf ve .ldf dosyalarına başvuruyor.


1

Yeni bir DB'ye geri yükleyebilir, dosya adı sözdizimini doğrulayabilirsiniz, günlük dosyasında olacak, yeni SQL sürümü için bir "_log" soneki olacak

reklam seçenek sekmesindeki mevcut veritabanı bayrağının üzerine yaz

Fabio


0

Bu sorunun dosya ve klasör izinleriyle ilgili olduğundan eminim.


0

Bir üretim veritabanını aynı sunucudaki bir hazırlama veritabanına geri yüklemeye çalışıyordum.

Benim durumumda çalışan tek şey, yeni bir boş veritabanına geri yükleme oldu. Bu harika çalıştı, üretim dosyalarının üzerine yazmayı denemedi (sadece üretim yedekleme dosyasını mevcut hazırlama veritabanına geri yüklerseniz). Ardından eski veritabanını silin ve yeniden adlandırın - dosyalar yeni geçici adı koruyacak, ancak benim durumumda bu iyi.

(Veya önce hazırlama veritabanını silin ve ardından hazırlama veritabanıyla aynı ada sahip yeni veritabanına geri yükleyebilirsiniz)


0

Veritabanını Geri Yükle'ye tıklayın yerine Dosya ve Dosya Gruplarını Geri Yükle'ye tıklayın .

bu benim sql sunucumda çalışıyor


0

Bu, yedekleme dosyasını sistem sürücüsünden içe aktarmama yardımcı oldu

  1. .Bak dosya veritabanı adınızla aynı ada (tercihen) sahip bir veritabanı oluşturun
  2. Veritabanını sağ tıklayın> Görevler> Geri Yükle> Veritabanı
  3. "Geri yükleme kaynağı" altında "Cihazdan" ı seçin
  4. Sistemden yolu seçerek .bak dosyasını seçin
  5. Aşağıdaki liste kutusundan veritabanı onay kutusunu seçin
  6. Sağ taraftaki "Sayfa Seç" altında "Seçenekler" i seçin
  7. "Çoğaltma ayarlarını koru (KEEP_REPLICATION İLE) etiketli onay kutusunu seçin
  8. Mevcut veritabanının üzerine yaz onay kutusunu seçin (DEĞİŞTİR) Şimdi Genel sayfasına geri dönün ve veritabanını geri yüklemek için Tamam'ı tıklatın ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.