SQL Server'da bir veritabanı geri yüklenirken mdf dosyasının üzerine yazılamaz


21

Bir veri tabanım var. İçinde bazı veriler var. A için A.bak dosyası olarak bir yedek oluşturdum . Sonra yeni bir boş veritabanı B oluşturuyorum. Ve sonra B'yi A.bak'tan geri yüklemeye çalışıyorum . Ancak SQL Serve bana şu hatayı söylüyor:

'C: \ SQL Directory \ DATA \ A.mdf' dosyasının üzerine yazılamaz. 'A' veritabanı tarafından kullanılıyor.

Ancak SQL Server'dan A'yı silersem yeniden kaydetme tamam demektir.

Ayrı bir yedekleme dosyasından geri yüklerken neden SQL orijinal veritabanı dosyasına yazmak gerektiğini anlamıyorum ?

Teşekkür ~

Yanıtlar:


19

Bir veritabanını geri yüklerseniz, SQL Server varsayılan olarak tüm verileri ve günlük dosyalarını özgün konumlarına geri yüklemeye çalışır. Bu orijinal konumlar orijinal veritabanı ("A") tarafından hala kullanımda olduğundan geri yükleme başarısız olur. Veritabanındaki tüm dosyalar için yeni konumlar belirtmek için WITH MOVE yan tümcesini kullanmanız gerekir.

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

Zaten böyle bir şey. Gerekirse yedeklemedeki mantıksal dosya adlarını görmek için Diskten FILELISTONLY RESTORE kullanın.


11

WITH MOVE/ MOVE, içinde doğru çözümdür T-SQL.

Bu arada, GUI'yi kullanmak istiyorsanız Dosyalar'a gidip yeniden adlandırabilirsiniz:

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

için

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

resim açıklamasını buraya girin


1
Ayrıca, Genel sekmesinde Hedef Veritabanı adını değiştirirken, GUI otomatik olarak Farklı Geri Yükle adlarını buna göre güncelleyecektir.
Wouter

0

Yedeklemeyi geri yüklediğinizde geri yüklenecek veri dosyalarını belirleyebilirsiniz.

Buraya ve buraya bak . "Veritabanı dosyalarını farklı geri yükle" seçeneğini ve "Mevcut veritabanının üzerine yaz" bayrağını kullanabilirsiniz.


0

REPLACE seçeneğini TSQL komutunda mı yoksa seçili bir onay kutusu olarak mı kullanıyorsunuz? Alternatif olarak, dosyaları yeniden adlandırabilir ve veritabanını başka bir şey olarak çağırabilirsiniz.

Ayrıca kullanılan bir veritabanı üzerinden geri yüklemek için biraz zor bulacaksınız ..... veritabanını kullanarak işlemleri öldürmek gerekir; VEYA bağlantıları kapatıp önce veritabanını bırakın / silin (bu muhtemelen en kolayıdır); VEYA üzerine yazmak istediğiniz veritabanını geri alma ile kısıtlı kullanıcı modu gibi bir şeye ayarlayın, böylece umarım sadece DBA'lar kullanabilir; VEYA SQL Server'ı durdurun ve yeniden başlatın - umarım kimse / herhangi bir şey bu veritabanını kullanmadan önce geri yükleme işlemini alır.

PS, her ihtimale karşı üzerine yazmak üzere olduğunuz veritabanının bir yedeğini alır.


0

Birisi, Optionssayfayı zaten kullandıktan ve Overwrite the existing database (WITH REPLACE)seçeneği etkinleştirdikten sonra Management Studio'nun GUI'sinde bir çözüm ararsa :

Sadece Restore Assütuna tıklayın ve *.mdfdosyanın ve *.ldfdosyanın dosya adlarını değiştirin .

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.