【发布时间】:2018-07-18 17:44:13
【问题描述】:
我们有一个 azure 存储容器,我们每天都在其中保存数据库备份文件。现在我们正在使用 SMO (C#) 开发一个应用程序来从 Azure 存储容器中恢复数据库。从本地设备恢复工作正常,但我没有得到任何关于使用 c# 从 azure 容器恢复的帮助。
当我使用 azure blob 恢复备份时,出现以下错误
无法打开备份设备 'https://myaccount.blob.core.windows.net/backupcontainer/Database_e95aec6ab14a43a3a14a62f82b2c7208_20180718022621-04.bak'。 操作系统错误3(系统找不到指定的路径。)。 RESTORE FILELIST 异常终止
我的代码是
Restore restoreDB = new Restore();
restoreDB.Action = RestoreActionType.Database;
restoreDB.Database = databaseName;
BackupDeviceItem deviceItem = new BackupDeviceItem(backUpFile, DeviceType.Url, CredentialName);
restoreDB.Devices.Add(deviceItem);
restoreDB.ReplaceDatabase = true;
RelocateFile DataFile = new RelocateFile();
string MDF = restoreDB.ReadFileList(smoServer).Rows[0][1].ToString();
DataFile.LogicalFileName = restoreDB.ReadFileList(smoServer).Rows[0][0].ToString();
DataFile.PhysicalFileName = smoServer.Databases[databaseName].FileGroups[0].Files[0].FileName;
RelocateFile LogFile = new RelocateFile();
string LDF = restoreDB.ReadFileList(smoServer).Rows[1][1].ToString();
LogFile.LogicalFileName = restoreDB.ReadFileList(smoServer).Rows[1][0].ToString();
LogFile.PhysicalFileName = smoServer.Databases[databaseName].LogFiles[0].FileName;
restoreDB.RelocateFiles.Add(DataFile);
restoreDB.RelocateFiles.Add(LogFile);
restoreDB.NoRecovery = false;
restoreDB.PercentComplete += new PercentCompleteEventHandler(rstDatabase_PercentComplete);
restoreDB.Complete += new ServerMessageEventHandler(rstDatabase_Complete);
restoreDB.SqlRestore(smoServer);
谁能帮助我如何使用 c# 从 azure 存储容器中恢复备份文件,或者我的代码有什么问题?
【问题讨论】:
-
服务器是否有权限访问该文件?
-
是的服务器有权限。我正在提供 CredentialName(存储容器和共享访问签名)
-
Azure 存储中的 blob 与本地磁盘上的文件不同;也就是说,它不能通过标准文件 I/O 访问。它有自己的 SDK(或 REST API)。您需要先将 blob 内容复制到本地某处(例如 VM 磁盘)。
-
但是如果 blob 类型是 page blob 那么肯定可以直接从 azure 存储恢复
标签: c# azure database-restore