动态备份数据库

来源:互联网 发布:开店在淘宝还是在天猫 编辑:程序博客网 时间:2024/05/16 04:47

1. 动态创建目录

DECLARE @PATH NVARCHAR(MAX)
DECLARE @Bcp NVARCHAR(100)
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
SET @PATH = 'E:/SQLSERVER/' + CONVERT(NVARCHAR(10), GETDATE(), 120)
SET @Bcp = 'MD ' + @PATH
EXEC MASTER..XP_CMDSHELL @Bcp                      

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE

EXEC sp_configure 'show advanced options', 0
RECONFIGURE

 

2. 动态备份数据库

DECLARE @Backup_dir NVARCHAR(MAX)
DECLARE @Database_Name NVARCHAR(100)
DECLARE database_cursor CURSOR FOR SELECT name from MASTER.SYS.DATABASES WHERE database_id >= 5 
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @Database_Name
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Backup_dir = 'E:/SQLSERVER/' + CONVERT(NVARCHAR(10),GETDATE(),120) + '/' + @Database_Name  + '.BAK'
 
 declare @sql nvarchar(1000)
 set @sql = 'BACKUP DATABASE ' + '[' + @Database_Name + ']' + ' TO DISK = ' +  '''' + @Backup_dir + ''''
 
    exec (@sql)
    FETCH NEXT FROM database_cursor INTO @Database_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor --Release

 

这里有几点需要说明一下

1. DECLARE database_cursor CURSOR FOR SELECT name from MASTER.SYS.DATABASES WHERE database_id >= 5 , 在sql server里面, 前四个都是系统数据库, 一般都用不着备份的。

2. set @sql = 'BACKUP DATABASE ' + '[' + @Database_Name + ']' + ' TO DISK = ' +  '''' + @Backup_dir + ''''
exec (@sql)

 

那'[' ... ']' 是必须的,因为数据库名是允许使用 '-'的, 仔细想想吧 backup database A-B....

最后的那 '''' 一对四个单引号也是必须的, 主要是为了将目录用单引号包起来,不然就是to disk = e:/sqlserver......... 而需要的是 to disk = 'E:/sqlserver....'

exec (sql)  是执行动态sql的,因为数据库名是在变化的

原创粉丝点击