WITH REPLACE kullanarak yedeklemeyi geri yüklerken 3154 hatası


16

Bilgisayarımda SQL 2012 SP1 yüklü. Bir veritabanının yedeğini aldım test.bak.

test2Aynı veritabanı adı olan bir veritabanı var, ama veri değişti.

Veritabanı test.baküzerinden geri yüklemek istiyorum test2.

Her zaman hata alıyorum:

Hata 3154: Yedek kümesi, varolan veritabanından başka bir veritabanının yedeğini tutar.

Denedim:

  1. Sağ sevdim test2 -> Restore database -> From device

    Ben seçtim test.bakve kontrol ettim With Replaceama hatayı alıyorum.

  2. Sonra sağ tıklamaya çalıştım test2 -> Restore file and filegroups

    Ben seçtim test.bakve kontrol ettim With Replaceama hatayı alıyorum.

Eski veritabanımı silebilir ve yedeklememi doğru adla geri yükleyebilirim, ancak SQL 2008'i kullanırken, varolan bir veritabanını geri yüklerken sorun yaşamadım.

SQL2012 kullandığımdan beri bu hatayı çok alıyorum!

Yanıtlar:


12

WITH REPLACEManagement Studio'daki işaret ve tıklama öğelerini kullanmalı ve genel olarak kullanmaktan kaçınmalısınız - bunlar esnek değildir ve genellikle hatalar içerir.

Bu benim için çalıştı:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

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

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Ayrıca, kullandığınız veritabanlarını yedeklediğinizde WITH INITve / veya cihazı zaten yedek içeren bir dosyaya yönlendirmediğinizden emin olmalısınız (çünkü şu anda yedeklediğiniz veritabanı aynı olmayabilir - özellikle aşağıdaki gibi adları yeniden kullanırsanız) test...).


@AaronBertrand fyi, bu özellik mevcut. Genellikle yaptığım şey, kullanıcı arayüzünü kullanmak ve her şeyin yolunda olduğundan emin olmak için komut dosyasını yazmaktır. Orada olan böcek çok evet.
usr

2

1) Komutu WITH REPLACEkullanırken RESTOREkullanın.

2) DROPÇakışan ve RESTOREkomutu kullanarak geri yüklenen eski veritabanı .

SQL Server sürümü ile ilgili bir sorun yok. Aaron'un belirttiği gibi, veritabanını 2008'den 2012'ye ve aynı sürümlerde de geri yükleyebiliyorum.


2

Yanlış veritabanını geri yüklüyorsunuz. " test2Yedekleme ile geri yükleme test" olarak düşünmeyin, "yedeklememi geri yükle, testancak yeniden adlandır " diye düşünün test2. Geri yükleme görevini seçip "Veritabanına:" alanına testkoyabilirsiniz test2.

Aaron'un bahsettiği gibi, sihirbazı kullanmak yerine senaryoyu öğrenin - nereye gittiğine dair daha net.


2

Bunu yine de yapabilirsiniz, ancak ek bir adım gerektirir.

Geri yükleme iletişim kutusunu açın, 2008 alışkanlıklarına göre olağan seçimlerinizi yapın. Özgün veritabanı DB ise, Kaynak için DB.bak aygıtını seçin ve Hedef adını DBTest olarak değiştirin. Daha sonra Genel / Dosyalar / Seçenekler'i gördüğünüz Sayfa Seç (sol üst köşe) altında Dosyalar'ı seçin. Şebekeye bak. Orijinal Dosya Adı ve Dosya Adı Olarak Geri Yükle sütunlarını göreceksiniz. İkincisini manuel olarak genişletin ve yeni adı yazın (veritabanının orijinal adı DB ise ve DBTest oluşturmak istiyorsanız .... \ DB.mdf değerini ... \ DBTest.mdf vb. Olarak değiştirin)

Bu, DB için .bak dosyanızı kaynak ve DBTest'i hedef olarak kabul eder. Ayrıca Seçenekler sayfasına gidip Değiştir ile seçeneğini de seçmeniz gerekebilir. Başka nedenlerle ihtiyacım var, bu yüzden bu seçenek olmadan test edemiyorum.


2

Belirtildiği gibi, doğru cevap WITH REPLACEseçeneği kullanmaktır .

Sadece WITH REPLACEbir diferansiyel yedeklemeden (tam olmayan) geri yüklemeye çalışırsanız, kullanırken bile sorudaki hatayı alabileceğinizi belirtmek istiyorum .


Muhtemelen bu cevap sırasında yorum yapmak için yeterli puan yoktu, ben sadece (tam bir olmadan) bir diferansiyel yedekleme geri yüklemek için çalıştığınızda "DEĞİŞTİR" kullanırken bile hata alabilirsiniz işaret etmek istedim
Brimstedt

0

Umarım bu işe yarar.

  1. Dosyayı geri yükleme yolunu ayarladıktan sonra.
  2. Sol taraftaki "Seçenekler" i tıklayın.
  3. Onay kutusunu işaretleyin - "Hedef veritabanına var olan bağlantıları kapat".
  4. Tamam'ı tıklayın. resim açıklamasını buraya girin

-4

Lütfen çalışan sunucunuzu durdurun ve db'yi geri yükleyin, size yardımcı olacaktır. :)

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.