目前,我正在数据库服务器文件系统上创建数据库的备份。 以下是我使用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 ,并通过数据库服务器获得相同的结果。
答案 0 :(得分:0)
此脚本将服务器上的所有数据库备份到远程服务器。您可以将其修改为仅根据需要备份某些数据库。
因此,只要您拥有目标文件夹的权限,就可以备份到其他服务器。
确保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)
DECLARE db_cursor CURSOR for
SELECT名称
来自master.dbo.sysdatabases
名称为NOT IN('master','model','msdb','tempdb')
打开db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@ FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name +'_'+ @fileDate +'。BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
关闭db_cursor
DEALLOCATE db_cursor
我从Microsoft任务计划程序运行(仅在用户登录时运行),其中包含此行的cmd文件:
osql -E -Syour_sql_server_name -n -iF:\folder\sql_file_with_abvove_code.sql -oF:\folder\a_log_file.txt
对于我将备份带到远程服务器来说,它就像一个魅力。我没有制作上面的代码,只是对其进行了修改,并且不予以认可。希望它适合你。
答案 1 :(得分:0)
我正在添加一个我希望保留在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);
}
}
}
}