C#SMO备份远程数据库到本地机器

时间:2010-02-17 16:02:42

标签: c# sql smo

我有一个执行SQL数据库备份和恢复的应用程序,这在本地计算机上工作正常,但是如果我针对另一台计算机上托管的SQL服务器运行此操作,则会出现以下错误

  

Microsoft.SqlServer.Management.Smo.FailedOperationException:服务器'25 .98.30.79'的备份失败。 ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常。 ---> System.Data.SqlClient.SqlException:无法打开备份设备'C:\ Program Files \ State Manager \ Archive \ Capture \ 20100217152147 * product * \ databases * database ** database * .bak'。操作系统错误3(系统找不到指定的路径。)。

这似乎是由SQL服务器尝试将此文件写入其本地驱动器引起的。由于安全限制,我无法设置可以放置备份的共享区域。

有谁知道如何将这些数据移回到正在调用代码的机器上?

我的代码如下。

    private string Name;
    private string Server;
    private string dbName;
    private string user;
    private string password;

    public Boolean performCapture(String archiveDir)
    {
        String destination = archiveDir + "\\" + Name;
        if (!System.IO.Directory.Exists(destination))
        {
            System.IO.Directory.CreateDirectory(destination);
        }

        Server sqlServer = connect();
        if (sqlServer != null)
        {
            DatabaseCollection dbc = sqlServer.Databases;
            if (dbc.Contains(dbName))
            {
                Backup bkpDatabase = new Backup();
                bkpDatabase.Action = BackupActionType.Database;
                bkpDatabase.Database = dbName;
                BackupDeviceItem bkpDevice = new BackupDeviceItem(destination + "\\" + dbName + ".bak", DeviceType.File);

                bkpDatabase.Devices.Add(bkpDevice);
                bkpDatabase.Incremental = false;
                bkpDatabase.Initialize = true;
                // Perform the backup
                bkpDatabase.SqlBackup(sqlServer);

                if (System.IO.File.Exists(destination + "\\" + dbName + ".bak"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

4 个答案:

答案 0 :(得分:17)

不,这不会起作用 - SQL Server只能备份到物理连接到实际SQL Server计算机的驱动器。在任何情况下都不能将远程SQL Server备份到本地硬盘 - 这是不可能的(在SMO或SQL Server Management Studio中都不可能)。

答案 1 :(得分:1)

正如Marc_s所说,它无法制造。作为一个工作场所,您可以使数据库调用主机中的命令行程序,通过ftp发送文件,将其复制到某个共享文件夹或其他内容。

祝你好运

答案 2 :(得分:1)

您可以将远程数据库复制到本地。复制使用此:右键单击SSMS中的远程数据库:任务 - >导出数据。在打开的窗口中选择源和目标数据库,它将所有数据从源(远程)复制到本地数据库。

答案 3 :(得分:0)

我知道这是一个老帖子 但是,您可以备份远程sqlserver的数据库

您只需在远程和本地计算机中创建相同的文件夹名称和驱动器

示例:

本地计算机上的

d:\ sql_backup 远程计算机上的 d:\ sql_backup

它会这样做......当然备份文件将在远程计算机上

如果您想获取备份文件,只需共享远程计算机的文件夹

saludos rubenc

相关问题