Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用NOINIT备份到URL失败,因为文件已存在_Sql Server_T Sql_Sql Server 2019 - Fatal编程技术网

Sql server 使用NOINIT备份到URL失败,因为文件已存在

Sql server 使用NOINIT备份到URL失败,因为文件已存在,sql-server,t-sql,sql-server-2019,Sql Server,T Sql,Sql Server 2019,有一个问题,但我无法解决,因为情况略有不同,所以请容忍我;我整天都在和官方文件较劲 我的目标是每天每个数据库有一个备份文件,并有15分钟的恢复目标。我正在安排代理作业,如下所示: 每天在00:00为指定的每个数据库创建一次完整备份 每15分钟,为指定的每个数据库创建一个事务日志备份 忽略遍历所需数据库的所有代码,这是上面第1部分的核心逻辑: DECLARE @dbName nvarchar(50) = (SELECT DatabaseName FROM #DbsToBackup WHER

有一个问题,但我无法解决,因为情况略有不同,所以请容忍我;我整天都在和官方文件较劲

我的目标是每天每个数据库有一个备份文件,并有15分钟的恢复目标。我正在安排代理作业,如下所示:

  • 每天在00:00为指定的每个数据库创建一次完整备份
  • 每15分钟,为指定的每个数据库创建一个事务日志备份
  • 忽略遍历所需数据库的所有代码,这是上面第1部分的核心逻辑:

        DECLARE @dbName nvarchar(50) = (SELECT DatabaseName FROM #DbsToBackup WHERE (Id = @current));
        DECLARE @dbNameAndDate nvarchar(200) = @dateString + '_' + @dbName;
        DECLARE @dbSpecificContainerUrl  nvarchar(MAX) = @containerUrl + @dbNameAndDate + '.bak';
        DECLARE @verifyError nvarchar(200) = N'Verify failed. Backup information for database ' + @dbName + ' not found.';
    
        BACKUP DATABASE @dbName 
             TO URL = @dbSpecificContainerUrl 
             WITH CREDENTIAL = @containerCredential
            ,NOINIT
            ,NAME = @dbNameAndDate
            ,COMPRESSION
            ,CHECKSUM
            ;
    
    然后,事务日志备份逻辑如下(抓取数据库名称、日期字符串等的步骤相同):

        BACKUP LOG @dbName 
             TO URL = @dbSpecificContainerUrl 
             WITH CREDENTIAL = @containerCredential
            ,NOINIT
            ,NAME = @dbNameAndDate
            ,SKIP
            ,COMPRESSION
            ,CHECKSUM
        ;
    
    第1部分适用于第一次尝试,但第2部分(以及第1部分的任何后续重新运行)立即失败:

    文件“”上发生不可恢复的I/O错误https://.....Test.bak:" 档案https://....Test.bak 存在于远程终结点上,并且具有 未指定格式。备份无法继续..[SQLSTATE 42000] (错误3271)备份日志异常终止。该步骤失败

    我知道.bak文件已经存在,但我认为
    NOINIT
    强制了一个附加,它将事务日志数据添加到现有的.bak文件中

    我可能遗漏了一些简单的东西,但有人能提供建议吗?

    基于,似乎不支持

    不支持附加到现有备份Blob。备份到 只能使用WITH FORMAT选项覆盖现有blob。 但是,在使用文件快照备份时(使用 文件(快照参数),不允许使用WITH FORMAT参数 避免留下使用创建的孤立文件快照 原始文件快照备份


    确保
    @dbSpecificContainerUrl
    包含
    @dateString
    (最好是ISO 8610格式),以便每个日志备份都有自己的文件

    乙二醇


    根据问题,我们的目标是每天每个数据库有一个备份文件。我正试图减少有这么多文件。备份到Azure Blob存储是不可能的,因为您不能将新备份附加到单个文件。您可以将日志备份放在“子文件夹”中通过“/”分隔日期和时间。例如
    /backups/mydb/20210514/tlog/tlog-02:15:00.bak
    set @dateString = FORMAT(GetUtcDate(),'yyyy-MM-ddTHH:mm:ssZ')