读书人

T-SQL备份数据库报错解决办法

发布时间: 2012-08-15 16:57:17 作者: rapoo

T-SQL备份数据库报错

SQL code
USE testDECLARE  @DBName      VARCHAR(100) , @DBName2     VARCHAR(100)DECLARE  @ym          VARCHAR(6) ,   @ym2         VARCHAR(6)DECLARE  @msg         VARCHAR(100) , @msg2        VARCHAR(100)DECLARE  @BackupFile  VARCHAR(100) , @BackupFile2 VARCHAR(100)DECLARE  @BackName    VARCHAR(100) , @BackName2   VARCHAR(100)DECLARE  @Stats       VARCHAR(2)SET      @DBName2     = N'AdventureWorks'SET      @ym2         = Convert(char(6),getdate() ,112)SET      @ymd2        = Convert(char(8),getdate() ,112)SET      @msg2        = N'''验证失败。找不到数据库' + @DBName2 + '的备份信息。'''SET      @BackupFile2 = N'''E:\FULL\' + @DBName2 + '_' + 'full' + '_' + @ym2 + '.bak'''SET      @BackName2   = N'''' + @DBName2 + '_' + 'full' + '_' + ''''SET @DBName      = @DBName2 SET @ym          = @ym2 SET @ymd         = @ymd2 SET @msg         = @msg2 SET @BackupFile  = @BackupFile2 SET @BackName    = @BackName2 SET @Stats       = 10EXECUTE ('BACKUP DATABASE' + ' ' +         '['               +    @DBName           +         ']' + ' '         +    'TO DISK ='       +    @BackupFile       + ' ' +    'WITH'            + ' ' +    'NOFORMAT'        +    ',NOINIT'         +    ',NAME ='         +    @BackName         +    ',SKIP'           +    ',NOREWIND'       +    ',NOUNLOAD'       +    ',STATS ='        + ' ' +    @Stats            +    ',CHECKSUM')DECLARE @backupSetId AS INTSELECT    @backupSetId    = position    FROM  msdb..backupset    WHERE database_name   = @DBName    AND   backup_set_id   = (SELECT MAX(backup_set_id)                             FROM msdb..backupset                             WHERE database_name = @DBName )IF @backupSetId IS NULLBEGIN    raiserror(@msg, 16, 1)ENDRESTORE VERIFYONLY                  --------------这行开始报错FROM    DISK = @BackupFileWITH    CHECKSUM ,    STOP_ON_ERROR ,    FILE = @backupSetId,     NOUNLOAD ,    NOREWIND


RESTORE VERIFYONLY这里开始报错:
无法打开备份设备 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\'E:\FULL\Beijixiong_Data_full_201205.bak''。出现操作系统错误 123(文件名、目录名或卷标语法不正确。)。
备份过程没有建立备份设备,而是直接指定备份为一个磁盘上的BAK文件,此文件定义在@BackupFile2中,然后传递给@BackupFile。一路监视下来,无论@BackupFile还是@BackupFile2,始终是'E:\FULL\Beijixiong_Data_full_201205.bak',没有任何变化,那这是正确的啊,成功备份也印证了这个字串没有错误。我以为是两个变量传递过程中出错了,试过只用一个变量@BackupFile,结果也还是报错,求解释,求指点!谢谢!

[解决办法]
查看变量@BackupFile的值是怎么来的,逐个排查.

读书人网 >SQL Server

热点推荐