为什么我的光标停在备份循环中间?它会说它已完成整个过程而没有错误,即使并非所有数据库都已备份到我在脚本中指定的位置。每次执行脚本时,备份文件的数量都会有所不同。
我正在尝试将数据库备份到某个位置而不用“_backup_date_& _time_stamp”附加备份文件的名称,唯一的方法就是将其编写出来。 SQL Server的“维护计划”工具不支持该功能。
以下是我的备份数百个SQL Server数据库的查询。
--Run this on the source SQL Server's master database---
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
--Specify database backup directory. Backup directly to the destination server directory
SET @path = '\\<Server>\<FolderPath>\'
DECLARE db_cursor CURSOR FOR
SELECT NAME
FROM master.dbo.sysdatabases
WHERE NAME like 'DB%'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName WITH INIT
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
答案 0 :(得分:1)
祝贺,这是使用游标的正当理由之一!!我建议您创建备份语句而不是运行它们,并确切地看到光标告诉它备份的内容。
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
--Specify database backup directory. Backup directly to the destination server directory
SET @path = '\\<Server>\<FolderPath>\'
DECLARE db_cursor CURSOR FOR
SELECT NAME FROM master.dbo.sysdatabases WHERE NAME like 'DB%'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
PRINT 'BACKUP DATABASE ' +@name+ ' TO DISK = ' + @fileName + ' WITH INIT'
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
现在,您可以分析创建的内容,甚至尝试运行语句,看看会发生什么。我没有看到任何尝试catch块,所以也许你得到一些没有冒泡的错误。
答案 1 :(得分:0)
输出与我尝试备份的数据库数量相同,这意味着它正在完成备份。我认为这背后存在资源问题。
您或某人是否可以修改脚本以强制备份where子句中指定的所有数据库?