【问题标题】:Backup a database on a HDD with a different sector size在具有不同扇区大小的 HDD 上备份数据库
【发布时间】:2014-04-22 07:56:20
【问题描述】:

在我们的开发环境中,我们长期以来一直通过各种 SQL Server 版本和不同的环境配置为我们的每个产品使用特定的备份和恢复脚本,没有任何问题。

最近我们升级到 SQL Server 2012 作为我们的标准开发服务器,具有 SQL 兼容级别 2005 (90),以保持对旧系统的支持。现在我们发现在一台特定开发人员的机器上尝试备份数据库时出现以下错误:

无法使用备份文件“D:\MyDB.bak”,因为它是 最初格式化为扇区大小 512,现在在一个设备上 扇区大小 4096。BACKUP DATABASE 异常终止。

命令是:

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT

奇怪的是,开发者机器上的硬件和分区都没有改变,尽管它们的扇区大小不同,这在以前不是问题。

根据我的研究(即谷歌搜索),除了使用 WITH BLOCKSIZE 选项的建议之外,关于此问题的信息不多,但这给了我相同的错误消息。

我的查询是:

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT, BLOCKSIZE = 4096

谁能解释我如何将数据库备份和恢复到具有不同扇区大小的 HDD 上?

【问题讨论】:

  • 备份正在尝试通过WITH INIT 覆盖旧备份文件。您是否尝试过简单地备份到不同的文件名? BACKUP DATABASE MyDB TO DISK = N'D:\MyDB2.bak'...
  • @DMason 我担心同样的错误。
  • 嗯。您提到了 SQL 2012 升级,这似乎不是问题。硬件呢?你提到硬件和分区没有改变。所以,它仍然是同一个磁盘系统,对吧?
  • 我发现这篇文章提到使用跟踪标志进行调查:social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • @DMason 硬件实际上是一样的,唯一的增加是新版本的 SQL 服务器。奇怪的是,尽管我注意到我们的其他产品在同一个盒子上不会发生这种情况,即使数据库应该是类似的格式。谢谢你的链接,我试试看。

标签: sql sql-server tsql sql-server-2012 backup


【解决方案1】:

从 2005 年到 2008 年,我们遇到了同样的问题。问题是我们在 2008 年尝试使用与 2005 年相同的备份文件(将备份一起附加到 1 个文件中)。

我们将脚本更改为备份到不同的文件,问题已解决。我想移动/删除旧文件会产生同样的影响

【讨论】:

    【解决方案2】:

    此问题是由不同驱动器使用的不同扇区大小引起的。

    您可以通过将原始备份命令更改为:

    BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  STATS = 10,  FORMAT
    

    请注意,我已将 NOFORMAT 更改为 FORMAT 并删除了 NOSKIP。

    在 MSDN 上以下博客文章的评论部分找到了解决此问题的提示: SQL Server–Storage Spaces/VHDx and 4K Sector Size

    有关 4k 扇区驱动器的更多信息: http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size.aspx

    【讨论】:

    • 我刚刚备份到同一位置的不同文件名。不知道为什么它曾经是一个问题。在某些情况下,这可能是一个虚假错误?
    【解决方案3】:

    您所要做的就是用不同的名称备份它。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,但只是使用 restore。我在 Management Studio 中收到此错误:“指定的转换无效。(SqlManagerUI)” ...查询中出现此错误:“SQL Server 无法处理此媒体系列。” em>

      然后我做了一件简单的事情:我将备份集处理到默认备份文件夹中。例如:C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\Backup\bckup.bak 有效。我从这个地方恢复了它。 :-S 看起来 SQL 对扇区大小敏感。

      【讨论】:

        【解决方案5】:

        只需删除现有的 .bak 文件并重新运行。

        【讨论】:

        • 这是因为 NOFORMAT 将强制保留现有的媒体标头,这在这种情况下是不同的。只需删除该文件,它就会写入一个具有正确媒体头的新文件。
        【解决方案6】:

        我遇到了与 OP 相同的问题。在开发机器上,我们有一个 PowerShell 脚本,它从远程数据库服务器备份数据库并将备份文件存储在本地。该脚本一遍又一遍地覆盖相同的备份文件,并且该脚本已经运行了几年。然后我将旋转媒体驱动器克隆到开发机器中的 SSD。突然,我们遇到了与 OP 相同的错误:

        Backup-SqlDatabase : System.Data.SqlClient.SqlError: 不能使用备份文件 '\DevMachine\Back-Up\Demo.bak' 因为它是 最初格式化为扇区大小 4096,现在在一个设备上 扇区大小 512。

        当然,我可以删除所有现有的.bak 文件来解决问题。但是,如果它再次发生怎么办?我想要一个始终有效的命令行解决方案。

        这是我们的原始代码:

        Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -ErrorAction Stop
        

        经过一番摆弄,我将其更改为以下内容以解决问题:

        Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -FormatMedia -SkipTapeHeader -ErrorAction Stop
        

        基本上,添加了以下选项来解决此问题:

        -FormatMedia -SkipTapeHeader
        

        请注意,如果您阅读了Backup-SqlDatabase cmdlet 的文档,-FormatMedia 被列为仅适用于磁带而不适用于磁盘备份。但是,它似乎可以在备份到磁盘时清除现有备份文件。
        - https://docs.microsoft.com/en-us/powershell/module/sqlps/backup-sqldatabase

        我发现如果我单独使用-FormatMedia选项,它会产生以下错误:

        Backup-SqlDatabase:FormatMedia 和 SkipTapeHeader 属性 有冲突的设置。

        我通过添加一个附加选项修复了第二个错误:-SkipTapeHeader。显然,这也适用于磁带备份,但它确实有效。

        【讨论】:

          【解决方案7】:

          很可能Michaelanswer 是您所需要的解决方案。 您只有另一个具有相同名称和路径的备份文件。

          https://stackoverflow.com/a/32662406/7841170

          您所要做的就是用不同的名称备份它。

          【讨论】:

            猜你喜欢
            • 2019-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-07
            • 2012-11-10
            • 1970-01-01
            • 2022-11-28
            • 1970-01-01
            相关资源
            最近更新 更多