http://kawaikunee.blogspot.ru/2010/07/backup-mssql.html
http://support.microsoft.com/kb/2019698/ru
Вкратце: sql server management studio - по базе правой кнопкой - задачи - создать резервную копию
настраиваем, сценарий - сохранить в файл.
Дальше используем sqlcmd через планировщик, типа
sqlcmd -S .\SQLEXPRESS -i "d:\mssql_backup.sql"
2) Как сделать, чтобы файл резервной копии не перезаписывался каждый раз? Хотелось бы, чтобы имя файла говорило мне, от какого числа эта копия.
Что ж, невозможного нет: правим сохраненный ранее сценарий:
DECLARE @filedate VARCHAR(20)
SET @filedate=REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),20),':','.'),' ','_')
DECLARE @file_path VARCHAR(256)
SET @file_path='D:\MSSQL_DataBases\main_'+@filedate+'.bak'
BACKUP DATABASE [main] TO DISK = @file_path WITH NOFORMAT, INIT, NAME = N'main-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Теперь файлы будут выглядеть как main_2010-07-30_09.14.19.bak, что нам и требовалось
Также на сайте мс есть хранимка, подключаем и через нее:
Шаг 1: в главной базе данных с помощью SQL Server Management Studio express или Sqlcmd создать следующую хранимую процедуру:
/ / © Корпорация Майкрософт. Все права защищены.
/ / Этот код в производство условия
- Использование [Основной]
- GO
- / ****** Объект: хранимая процедура [dbo].[sp_BackupDatabases] ****** /
- SET ansi_nulls ON
- Перейти
- QUOTED_IDENTIFIER в значение ON
- Перейти
- --=============================================
- --Автор: Microsoft
- --Дата создания: 2010-02-06
- --Описание: резервного копирования баз данных для SQLExpress
- --параметр1: имя базы данных
- --параметр2: Тип_архива F = Полный, D = разностная резервная копия, L = журнал
- --параметр3: расположение файла резервной копии
- --=============================================
- Создать ПРОЦЕДУРУ [dbo]. [sp_BackupDatabases]
- @ имя базы данных sysname = null,
- @ Тип_архива CHAR(1), nvarchar(200)
- @ расположение
- AS
- SET NOCOUNT ON;
- DECLARE @DBs TABLE
- (
- ID int IDENTITY PRIMARY KEY,
- DBNAME nvarchar(500)
- )
- -- Pick out only databases which are online in case ALL databases are chosen to be backed up
- -- If specific database is chosen to be backed up only pick that out from @DBs
- INSERT INTO @DBs (DBNAME)
- SELECT Name FROM master.sys.databases
- where state=0
- AND name=@DatabaseName
- OR @DatabaseName IS NULL
- ORDER BY Name
- -- Filter out databases which do not need to backed up
- IF @backupType='F'
- BEGIN
- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
- END
- ELSE IF @backupType='D'
- BEGIN
- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
- END
- ELSE IF @backupType='L'
- BEGIN
- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
- END
- ELSE
- BEGIN
- RETURN
- END
- -- Declare variables
- DECLARE @BackupName varchar(100)
- DECLARE @BackupFile varchar(100)
- DECLARE @DBNAME varchar(300)
- DECLARE @sqlCommand NVARCHAR(1000)
- DECLARE @dateTime NVARCHAR(20)
- DECLARE @Loop int
- -- Loop through the databases one by one
- SELECT @Loop = min(ID) FROM @DBs
- WHILE @Loop IS NOT NULL
- BEGIN
- -- Database Names have to be in [dbname] formate since some have - or _ in their name
- SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'
- -- Set the current date and time n yyyyhhmmss format
- SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')
- -- Create backup filename in path\filename.extension format for full,diff and log backups
- IF @backupType = 'F'
- SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK "
- ELSE Если @ Тип_архива = было"
- SET @ BackupFile = @ расположение + REPLACE (заменить (@ DBNAME, "[",''), "]",'') "_DIFF_" + @ dateTime + ".BAK "
- ELSE Если @ Тип_архива = 'L'
- SET @ BackupFile = @ расположение + REPLACE (заменить (@ DBNAME," [",''),"] ",'')"_LOG_"+ @ dateTime +".TRN "
- --имя резервной копии для хранения в СМИ
- @ Тип_архива = 'F'
- значение @ Имя_резервной_копии = REPLACE(REPLACE(@DBNAME,'[',''),']','') +" полной резервной копии для "+ @ dateTime
- @ Тип_архива = было"
- SET @ Имя_резервной_копии = REPLACE(REPLACE(@DBNAME,'[',''),']','') + "разностная резервная копия для" + @ dateTime
- @ Тип_архива = 'L'
- SET @ Имя_резервной_копии = REPLACE(REPLACE(@DBNAME,'[',''),']','') + "резервная копия журнала для" + @ dateTime
- --создавать динамические команды SQL для выполнения
- @ Тип_архива = 'F'
- BEGIN
- SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
- END
- IF @backupType = 'D'
- BEGIN
- SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
- END
- IF @backupType = 'L'
- BEGIN
- SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
- END
- -- Execute the generated SQL command
- EXEC(@sqlCommand)
- -- Goto the next database
- SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
- END