通过C#代码备份SQL Server数据库有多容易?
我看到很多相关的问题,但没有真正的答案。
答案 0 :(得分:4)
或者:在Management Studio中生成备份脚本,将其放入存储过程,从C#代码运行过程。
CREATE PROCEDURE sp_backup
AS
BEGIN
BACKUP DATABASE [YourDatabase] TO DISK = N'C:\YourPathAndFile.bak'
WITH NOFORMAT, NOINIT,
NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
END
GO
答案 1 :(得分:3)
SQL管理对象 - Microsoft.SqlServer.Management.Smo
它具有完成该操作所需的方法。
答案 2 :(得分:3)
如何使用c#中的SMO库来执行管理员任务,例如备份和恢复。
答案 3 :(得分:3)
这是一个将数据库备份内容放入流中的脚本(作为“选择”结果),这对于创建备份programmaticaly WITHOUT 任何共享文件夹非常有用。您唯一需要的是与服务器的连接。针对MSSQL 2008 R2进行了测试。
-- переменные
DECLARE @dbName nvarchar(MAX);
SET @dbName = N'AdventureWorks';
DECLARE @backupFileName nvarchar(MAX);
SET @backupFileName = N'C:\Temp\' + @dbName + N'.bak';
--EXECUTE (N'PRINT N''Создание бэкапа '+ @backupFileName + '''')
-- создание временной папки
EXEC xp_cmdshell N'mkdir C:\Temp', no_output;
-- бэкап с перетиранием имеющегося файла
DECLARE @sqlScript nvarchar(MAX);
SET @sqlScript = N'BACKUP DATABASE ['
+ @dbName
+ '] TO DISK = N'''
+ @backupFileName
+ ''' WITH NOFORMAT, INIT, NAME = N'''
+ @dbName
+ '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10';
--SELECT @sqlScript AS backupScript
EXECUTE (@sqlScript);
-- похоже, файл в 3ГБ можно вычитать... но памяти на это уходит ОЧЕНЬ МНОГО
-- вычитывание файла
SET @sqlScript = N'
SELECT N''' + @backupFileName + ''' AS [backupFileName], BulkColumn AS [backupContent]
FROM OPENROWSET (BULK ''' + @backupFileName + ''', SINGLE_BLOB) MyFile';
--SELECT @sqlScript AS openRowsetScript
EXECUTE (@sqlScript);
-- удаление файла
SET @sqlScript = N'EXEC xp_cmdshell ''del "' + @backupFileName + '"'', no_output';
EXECUTE (@sqlScript);
结果如下:
backupFileName backupContent
C:\Temp\AdventureWorks.bak 0x54415045000003008C000E01000000000000000000000000000...
答案 4 :(得分:2)
如果你拥有正确的权限,应该很容易。
有两种想法,已经提到的SQL管理对象,我发现了一个很好的项目,它使用了这些here
您也可以通过ADO.Net对象在服务器上抛出T-SQL备份命令。 Msdn引用您需要的主命令here
答案 5 :(得分:2)
如果您想使用C#中的字节流,例如在写入磁盘之前压缩流,欢迎您查看我的项目SQL Server Compressed Backup中的代码。它有一个用C ++编写的小型VDI(SQL Server虚拟设备API)DLL包装器,忠实地将每个VDI选项暴露给.Net,其余(大量)代码用C#编写。