我正致力于在SQL2008SQLExpress上自动备份Server数据库。这些备份每天由Windows任务计划程序发起,它执行批处理文件,然后执行SQL脚本。我不能使用SQL代理,因为这是快速版本。
目前,我正在编写一个脚本,逐个备份每个数据库。但是,这是相当高的维护--每次添加、删除或重命名数据库时,我都必须修改这个脚本以反映这些更改。相反,我想编写一个单独的SQL脚本,它可以一次备份所有数据库,而不需要逐个显式地备份每个数据库。
这是当前用于备份单个数据库的脚本:
Print 'Backing up MyDatabase...'
BACKUP DATABASE MyDatabase
TO DISK = 'F:\Backups\SQL Databases\MyDatabase.bak'
WITH FORMAT,
NAME = 'Full Backup of MyDatabase';
GO如何枚举所有数据库的列表并执行循环对所有数据库执行此备份?
只是备份过程的一些附加说明:
发布于 2015-10-19 16:34:33
我相信您可以参考ola.hallengren。 SQL server备份脚本。
正如关于如何使用的说明:
没有Server代理。因此,必须使用cmd文件和Windows计划的任务来安排存储过程的执行。遵循以下步骤。
现在,您可以根据需要轻松地修改它。
注意:在MaintenanceSolution中,您只能单独下载SQL server备份脚本。
发布于 2017-01-07 13:21:10
您可以像这样使用SELECT语句或游标:
DECLARE @PathForBackUp VARCHAR(255)
SET @PathForBackUp = 'F:\Backup\User DB\'
SELECT 'BACKUP DATABASE [' + name + '] TO DISK = N''' + @PathForBackUp + '' + name + '.bak''
WITH NOFORMAT, NOINIT, NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 5'
FROM sys.databases
WHERE database_id > 4或
DECLARE @DBName VARCHAR(255)
DECLARE @PathForBackUp VARCHAR(255)
DECLARE @FileName VARCHAR(255)
DECLARE @DateFile VARCHAR(255)
DECLARE @SQL NVARCHAR(2048)
SET @PathForBackUp = 'F:\Backup\User DB\'
SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,' ','T'), ':','')
DECLARE BACKUPING CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases WHERE dbid > 4
OPEN BACKUPING
FETCH NEXT FROM BACKUPING INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'
SET @SQL = 'BACKUP DATABASE '+@DBName+ ' TO DISK = '''+@FileName+''' WITH COMPRESSION '
PRINT @SQL
EXECUTE sp_executesql @sql
FETCH NEXT FROM BACKUPING INTO @DBName
END
CLOSE BACKUPING
DEALLOCATE BACKUPING 发布于 2015-10-19 23:09:06
虽然Microsoft不久将不再推荐sp_msforeachdb,但这对您来说应该是可行的。将其打包到存储过程/作业中,确保帐户有写入驱动器的权限。
sp_msforeachdb @command1='
DECLARE @string NVARCHAR(500)
SET @string = CONVERT(NVARCHAR(20),GETDATE(),120)
SET @string = REPLACE(REPLACE(REPLACE(@string,''
'',''''),'':'',''''),''-'','''')
SET @string = REPLACE(@string, '' '', '''')
SET @string = ''
BACKUP DATABASE # TO DISK = N''''F:\BACKUPS\SQL DATABASES\#_FULL_''+@string+''.bak''
SET @string = @string + ''''''
WITH FORMAT, NAME = N''''Full Backup of #''''''
IF ''#''not in(''master'', ''tempdb'',''msdb'',''model'')
begin PRINT @string execute sp_executesql @string end'
,@replacechar='#'示例执行输出:
BACKUP DATABASE DatabaseDuo TO DISK = N'F:\BACKUPS\SQL DATABASES\DatabaseDuo_FULL_20151019190410.bak'
WITH FORMAT, NAME = N'Full Backup of DatabaseDuo'
BACKUP DATABASE Databaaase TO DISK = N'F:\BACKUPS\SQL DATABASES\Databaaase_FULL_20151019190410.bak'
WITH FORMAT, NAME = N'Full Backup of Databaaase'
BACKUP DATABASE GarbageBase TO DISK = N'F:\BACKUPS\SQL DATABASES\GarbageBase_FULL_20151019190410.bak'
WITH FORMAT, NAME = N'Full Backup of GarbageBase'请注意,这将忽略主数据库、msdb和模型数据库。但会为你备份其他一切。
https://dba.stackexchange.com/questions/118482
复制相似问题