为什么我的光标停在备份循环的中间?

时间:2014-08-13 21:06:38

标签: sql sql-server

为什么我的光标停在备份循环中间?它会说它已完成整个过程而没有错误,即使并非所有数据库都已备份到我在脚本中指定的位置。每次执行脚本时,备份文件的数量都会有所不同。

我正在尝试将数据库备份到某个位置而不用“_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

2 个答案:

答案 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子句中指定的所有数据库?