Üretim web sitem için SQL Server 2008 R2 Standard (sürüm 10.50.1600.1) kullanıyorum ve Veritabanı olarak localhost'um için Gelişmiş Hizmetler (v10.50.1600.1) ile SQL Server Express sürümü.
Birkaç gün önce SQL Server'ım çöktü ve localhost'uma yeni bir 2008 R2 Express sürümü yüklemek zorunda kaldım. Express sürümünden alınan bazı eski sürümleri geri yüklediğimde sorunsuz çalıştı, ancak üretim sunucusundan alınan .bak
dosyasından veritabanını geri yüklemeye çalıştığımda aşağıdaki hataya neden oluyor:
Hata: Belirtilen döküm geçerli değil. (SqlManagerUI)
komutunu kullanarak veritabanını geri yüklemeye çalıştığımda
Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
Farklı bir hata üretir
Msg 3154, Seviye 16, Durum 4, Satır 1 Yedekleme seti, mevcut 'Publications' veritabanından başka bir veritabanının yedeğini tutar.
Msg 3013, Seviye 16, Durum 1, Satır 1 RESTORE DATABASE anormal şekilde sonlandırılıyor.
Sürümleri çapraz kontrol ettim. Aşağıdaki resimde gösterildiği gibi hepsi bana eşleşiyor gibi görünüyor
Daha önce bir veritabanını standart sürümden express sürüme geri yükleyebiliyordum ancak şimdi başarısız oluyor. Veritabanını sildim ve yeniden oluşturmayı denedim. Bu da başarısız oldu.
Neyi yanlış yaptığımdan emin değilim. Bu konuda yardımcı olursanız sevinirim
.bak dosyası bozuk göründüğü için Sorun çözüldü. Farklı bir dosya ile denediğimde çalıştı.
GUI zaman zaman kararsız olabiliyor. T-SQL kullanırken aldığınız hatanın nedeni, mevcut bir veritabanının üzerine yazmaya çalışmanız, ancak mevcut veritabanının üzerine yazmayı/değiştirmeyi belirtmemenizdir. Aşağıdakiler işe yarayabilir:
Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
WITH
MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.
Sonunda geri yükleme sırasında bu hatanın ortadan kalkmasını sağladım. Hayal kırıklığı nedeniyle SQL2012'ye geçtim, ancak sanırım bu muhtemelen 2008R2'de de işe yarayacaktır. Mantıksal adları kullanmak zorunda kaldım:
RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file’
Ve oradan mantıksal isimler kullanarak MOVE
ile bir geri yükleme ifadesi çalıştırdım.
RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'
Restorasyon bittiğinde neredeyse sevinçten ağlayacaktım.
İyi şanslar!