繁体   English   中英

通过 C# 备份 SQL 服务器

[英]Backup SQL Server via C#

通过 C# 代码备份 SQL 服务器数据库有多容易?

我看到很多相关的问题,但没有真正的答案。

或者:在 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

SQL 管理对象 - Microsoft.SqlServer.Management.Smo

它具有完成该操作所需的方法。

请参阅使用 c# 中的 SMO 库

关于如何使用 c# 中的 SMO 库执行备份和恢复等管理员任务。

这是一个将数据库备份内容放入ZF7B44CFFAFD5C52223D5498196C8A2E7BZ的脚本(作为“选择”结果),这对于在没有任何共享文件夹的情况下以编程方式创建备份很有用。 您唯一需要的是与服务器的连接。 针对 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...

If you want to work with the stream of bytes in C#, for instance compressing the stream before writing to disk, you're welcome to look at the code from my project, SQL Server Compressed Backup . It has a small VDI (the SQL Server virtual device API) DLL wrapper written in C++ faithfully exposing each VDI option to.Net, and the rest (the bulk) of the code is written in C#.

如果您拥有正确的权限,应该很容易。

想到了 2 种方式,已经提到的 SQL 管理对象,我在这里找到了一个很好的项目使用这些

您也可以随时通过 ADO.Net 对象向服务器发送 T-SQL 备份命令。 Msdn 参考您在此处需要的主要命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM