使用Smo.备份到备份SQL Server数据库为字符串

本文关键字:备份 数据库 Server 字符串 SQL Smo 使用 | 更新日期: 2023-09-27 18:15:24

我想做一个小应用程序,这将有助于我使我的服务器备份。该应用程序将在我的家用电脑上运行,因此主要目标是能够连接到外部服务器,备份选定的数据库,将备份内容转储到字符串或其他东西,以便我可以将其写入我的PC磁盘,而不是服务器的磁盘。

我只在服务器的磁盘上写入,但我希望能够在我的PC的磁盘上写入备份的结果。

private bool BackupDatabase()
{
    try
    {
        // Filename
        string sFileName = string.Format("{0}''{1}.bak", _sWhereToBackup, DatabaseName);
        // Connection
        string sConnectionString = String.Format(
            "Data Source=tcp:{0};Initial Catalog={1};User ID={2};Pwd={3};",
            DatabaseHost, DatabaseName, DatabaseUsername, DatabasePassword);
        SqlConnection oSqlConnection = new SqlConnection(sConnectionString);
        Server oServer = new Server(new ServerConnection(oSqlConnection));
        // Backup
        Backup backup = new Backup();
        backup.Action = BackupActionType.Database;
        backup.Database = DatabaseName;
        backup.Incremental = false;
        backup.Initialize = true;
        backup.LogTruncation = BackupTruncateLogType.Truncate;
        // Backup Device
        BackupDeviceItem backupItemDevice = new BackupDeviceItem(sFileName, DeviceType.File);
        backup.Devices.Add(backupItemDevice);
        // Start Backup
        backup.SqlBackup(oServer);
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return false;
}

非常感谢!

使用Smo.备份到备份SQL Server数据库为字符串

这将变得有点粗糙,因为您需要

  1. 调用sql函数读取服务器上的文件,并以二进制数组的形式返回给您,然后再转换回文件。这将需要适当的权限作为您正在运行的帐户访问服务器驱动器上的文件。

可以使用t-sql或更"高级"的。net代码在这本很棒的SQL注入指南中可以看到T-sqlhttp://www.blackhat.com/presentations/bh-europe-09/Guimaraes/Blackhat-europe-09-Damele-SQLInjection-slides.pdf

或。net:http://www.mssqltips.com/sqlservertip/2349/read-and-write-binary-files-with-the-sql-server-clr/

  1. 通过网络映射文件位置(即访问共享/驱动器/ipc连接)

  2. 让服务器ftp文件到一个位置

哪个听起来像你的场景?

我认为你没有联网到服务器?理想情况下,您可以使用网络地址直接将其备份到您的机器上,但我猜您已经想到了这一点。

按照你想的方法去做需要你有权限,而这些权限通常是你不希望在互联网上向别人开放的,而且比起简单地设置第二个进程来将文件移动到你可以访问的地方,编程要麻烦得多。

Adams建议让服务器ftp传输文件是一个很好的建议。或者,你可能会发现使用DropBox (www.dropbox.com)可能是阻力最小的途径。然后你可以把数据库备份到一个文件夹设置与dropbox,它会自动复制到任何文件夹你设置在你的机器上与它同步。

你应该看看DAC,它主要是为Azure中的SQL Server制作的,但也可以与SQL Server 2008 R2一起工作。

http://sqldacexamples.codeplex.com/