[英]Backup and Restore SQL Database
我需要將SQL 2005數據庫備份(使用C#)到* .bak文件。 從該文件,我試圖在同一個服務器上恢復到一個新的數據庫。
備份工作正常,然后我的C#代碼調用還原方法,它似乎工作,直到它最終“超時”。 我檢查了“innerExceptions”,他們發現RESTORE使其達到90%,然后返回異常。
下面是我用於備份和恢復的代碼。
有人可以讓我知道我哪里出錯嗎? 它必須是我可以設置的某個超時參數,但我不知道它是什么或如何做。
public class JRBackupRestoreDB
{
public static void BackupDatabase(String databaseName, String userName, String password, String serverName, String destinationPath)
{
Backup sqlBackup = new Backup();
sqlBackup.Action = BackupActionType.Database;
sqlBackup.BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString();
sqlBackup.BackupSetName = "Archive";
sqlBackup.Database = databaseName;
BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
sqlBackup.Initialize = true;
sqlBackup.Checksum = true;
sqlBackup.ContinueAfterError = true;
sqlBackup.Devices.Add(deviceItem);
sqlBackup.Incremental = false;
sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;
sqlBackup.FormatMedia = false;
sqlBackup.SqlBackup(sqlServer);
}
public static void RestoreDatabase(String databaseName, String filePath,
String serverName, String userName, String password,
String dataFilePath, String logFilePath)
{
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
sqlRestore.Action = RestoreActionType.Database;
String dataFileLocation = dataFilePath + databaseName + ".mdf";
String logFileLocation = logFilePath + databaseName + "_Log.ldf";
db = sqlServer.Databases[databaseName];
RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);
System.Data.DataTable logicalRestoreFiles = sqlRestore.ReadFileList(sqlServer);
sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), dataFileLocation));
sqlRestore.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFileLocation));
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
}
}
您是否嘗試使用ServerConnection.StatementTimeout
設置值以查看會發生什么?
MSDN 在這里參考。
這在普通的sql中很容易做到...
你考慮過那樣試試嗎? 您只需要編寫sql腳本或過程來執行它然后運行它。 這就是我們所做的(針對不同的情況,但類似):
backup database {{DATABASE NAME HERE}}
to disk = N'{{FILE_NAME_HERE}}'
with
name = N'{{BACKUP_DATABASE_NAME_HERE}}'
GO
restore database {{NEW_DATABASE_NAME}}
from disk = N'{{FILE_NAME_HERE}}'
with
file = 1
go
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.