Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用smo以编程方式备份和恢复Azure数据库_C#_Asp.net_Database_Azure_Smo - Fatal编程技术网

C# 使用smo以编程方式备份和恢复Azure数据库

C# 使用smo以编程方式备份和恢复Azure数据库,c#,asp.net,database,azure,smo,C#,Asp.net,Database,Azure,Smo,我们有一个正在运行的web应用程序。一切都托管在azure上。 我们有一个sql server和两个数据库:生产数据库和测试数据库。 客户端请求备份生产数据库并将其还原为测试数据库的功能。我正在使用以下代码: public static void BackupDatabase(string databaseName, string userName, string password, string serverName, string destinationPath) {

我们有一个正在运行的web应用程序。一切都托管在azure上。 我们有一个sql server和两个数据库:生产数据库和测试数据库。 客户端请求备份生产数据库并将其还原为测试数据库的功能。我正在使用以下代码:

    public static void BackupDatabase(string databaseName, string userName, string password, string serverName, string destinationPath)
    {
        try
        {
            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);
        }
        catch (FailedOperationException ex)
        {
            throw;
        }
        catch(ConnectionFailureException ex)
        {
            throw;
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    public static void RestoreDatabase(string databaseName, string filePath, string serverName, string userName, string password, string dataFilePath, string logFilePath)
    {
        try
        {
            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];

            db.Drop();

            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();
        }
        catch(ExecutionFailureException ex)
        {
            throw;
        }
    }
一切都在本地和所有虚拟机上工作。但是现在我们在Azure上拥有了一切,我不知道应该设置什么备份目录。它必须是SQLSClient(可能是azure sql client)有权访问的服务器上的目录。在将数据库恢复到测试数据库的过程中提供位置也是一样的

如何访问可以存储备份以及可以保存mdf和日志文件的目录


亲切问候

感谢您的快速回复,但这些解决方案并不是我真正需要的。这些是从sql management studio或azure portal备份数据库的方法。我需要一个用c#编写的服务来备份数据库的解决方案。嗨@damianchmielewski你找到解决方案了吗?事实上我找到了。我创建备份并将其保存在Azure blob存储中。我将很快在这里提供代码。@Daminanchmielewski您是如何解决这个问题的,如果您发布您的解决方案,将会有所帮助