Резервное копирование SQL Server через C # - PullRequest
5 голосов
/ 20 марта 2009

Насколько просто сделать резервную копию базы данных SQL Server с помощью кода C #?

Я вижу много связанных вопросов, но реальных ответов нет.

Ответы [ 6 ]

4 голосов
/ 20 марта 2009

Или: сгенерируйте скрипт резервного копирования в 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
3 голосов
/ 07 февраля 2012

Вот скрипт для помещения содержимого резервной копии базы данных в поток (как результат «выбора»), который может быть полезен для программного создания резервной копии БЕЗ любой общей папки. Единственное, что вам нужно, это подключение к серверу. Протестировано на 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...
3 голосов
/ 20 марта 2009

См с использованием библиотеки SMO ​​из c #

о том, как использовать библиотеку SMO из c # для выполнения задач администратора, таких как резервное копирование и восстановление.

3 голосов
/ 20 марта 2009

Объекты управления SQL - Microsoft.SqlServer.Management.Smo

В нем есть методы, необходимые для выполнения этого действия.

2 голосов
/ 24 ноября 2009

Если вы хотите работать с потоком байтов в C #, например, сжимать поток перед записью на диск, вы можете посмотреть код из моего проекта SQL Server Compressed Backup . Он имеет небольшую оболочку DLL VDI (API виртуального устройства SQL Server), написанную на C ++, с добросовестным представлением каждой опции VDI .Net, а остальная часть (основная часть) кода написана на C #.

2 голосов
/ 20 марта 2009

Должно быть довольно легко, если у вас есть необходимые разрешения.

2 способа, которые приходят на ум, есть уже упомянутые объекты управления SQL, я нашел хороший проект, который использует эти здесь

Вы всегда можете просто запустить команду резервного копирования T-SQL на сервере через объекты ADO.Net. Msdn ссылка на основную команду, которая вам понадобится здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...