![](/img/trans.png)
[英]C# SQL Server backup of a remote database to the remote default backup location without direct access to the remote location?
[英]MS SQL Server backup to remote PC using C#
当前,我正在数据库服务器文件系统上创建数据库备份。 以下是我使用SMO名称空间实现此目的的代码:
backup.Devices.AddDevice(filePath, SMO.DeviceType.File);
backup.BackupSetName = fileName;
backup.BackupSetDescription = fileDescription;
backup.Initialize = false;
backup.SqlBackup(server);
backup.Wait();
我希望能够在Active Directory(域)下的远程PC上创建备份。
假设我有PC “ A”作为IIS服务器,而PC “ B”作为数据库服务器。 活动目录文件夹地址为“ ww007.somename.net \\ folder” 。 是否可以将备份文件作为文件流从PC B返回到PC A ? 这样我就可以使用C#将文件保存到活动目录中。 或者是否可以在上述代码中包含ww007.somename.net \\ folder并通过数据库服务器获得相同的结果。
该脚本将服务器上的所有数据库备份到远程服务器。 您可以对其进行修改,以仅备份您认为合适的某些数据库。
因此,只要您拥有目标文件夹的权限,就可以将其备份到其他服务器。
确保SQL服务器上的登录用户具有目标文件夹的权限。
在目标服务器上安装或连接到共享。
修改下面的代码以适合您的服务器和条件,然后在控制台中或使用osql命令运行它。
DECLARE @name VARCHAR(50)-数据库名称
DECLARE @path VARCHAR(256)-备份文件的路径
DECLARE @fileName VARCHAR(256)-备份文件名
DECLARE @fileDate VARCHAR(20)-用于文件名SET @path ='\\\\ 10.your.server.ip \\ share \\ whatever_extra_folder \\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)声明db_cursor CURSOR FOR
从master.dbo.sys数据库中选择名称,不在其中的名称(“ master”,“ model”,“ msdb”,“ tempdb”)
打开db_cursor
从db_cursor INTO @name获取下一个
@@ FETCH_STATUS = 0时
开始
SET @fileName = @path + @name +'_'+ @fileDate +'.BAK'
备份数据库@name TO DISK = @fileName
从db_cursor INTO @name获取下一个
结束
关闭db_cursor
取消分配db_cursor
如果从Microsoft Task Scheduler(仅在用户登录时运行)运行包含以下行的cmd文件,则可以运行:
osql -E -Syour_sql_server_name -n -iF:\folder\sql_file_with_abvove_code.sql -oF:\folder\a_log_file.txt
对我来说,将备份备份到远程服务器就像是一种魅力。 我没有编写上面的代码,只是对其进行了修改,并不为此而功劳。 希望对你有效。
我添加了一个我想保留在stackoverflow中的相关代码。 由于备份通常存储在SQL Server上,因此该代码用于读取备份文件。 这是通过SQL 1433端口将备份转移到远程客户端的简单方法。 希望它能帮助别人。
static void Main(string[] args)
{
SqlConnection con = new SqlConnection(@"Server=.\YourServer;Database=ValidDatabase;User Id=User;Password = Password;");
SqlCommand command = con.CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.CommandText = @"SELECT * FROM OPENROWSET(BULK N'C:\MSSQL\Backup\DbBackup.bak', SINGLE_BLOB) AS Contents";
con.Open();
command.BeginExecuteReader(callback, command,
CommandBehavior.CloseConnection);
Console.ReadLine();
}
private static void callback(IAsyncResult ar)
{
SqlCommand cmd = (SqlCommand)ar.AsyncState;
SqlDataReader reader = cmd.EndExecuteReader(ar);
bool res = reader.Read();
using (BinaryReader br = new BinaryReader(reader.GetStream(0)))
{
FileStream fs = File.Create(@"c:\temp\RemoteDbBackupbak.bak");
using (BinaryWriter bw = new BinaryWriter(fs))
{
int index = 0;
byte[] buffer = new byte[8192];
while ((index = br.Read(buffer, 0, 8192)) > 0)
{
fs.Write(buffer, 0, index);
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.