Eri*_*gen 3 sql-server restore sql-server-2019
我正在尝试将工作中 SQL Server 实例上的小型数据库的结构和内容复制到我家用计算机上的实例。看起来这应该是一个简单的、两分钟的操作,但是当我按照手册所说的去做时,九个表中只有四个实际上在我的家用计算机上恢复了。至于为什么其他五个表被排除在外,没有明显的规律或理由。这是一个入门数据库项目,暂时没有什么花哨的东西——只有九个简单的表,甚至还没有应用任何约束或触发器。
我不是一个经验丰富的 DBA。我想我以前做过这件事,没有发生任何事故,但我不太记得了。这种事情不是我的正常工作。我是否可能会犯任何新手错误——我需要重写任何无意义的默认 SSMS 设置才能使所有 DBA 任务中最基本的任务真正发挥作用?
可能发生的情况如下(这是很常见的情况,所以不要灰心):
TO DISK = '\\somelocation\file.bak')'\\somelocation\file.bak')您可以通过运行以下命令进行验证:
RESTORE HEADERONLY FROM DISK = N'<location>\<filename>.bak';
Run Code Online (Sandbox Code Playgroud)
如果我的猜测是正确的,这将返回多行。最高的备份Position(通常)是最新的备份。默认情况下恢复的备份(如果您未指定所需的备份)是Position = 1最旧的备份。没有什么会警告你你没有服用最新的。
如果要继续尝试从此备份恢复,则需要添加WITH FILE = <highest position in the above output>恢复命令。检查输出的所有行并验证BackupStartDate以确保您选择的是最新的备份。
(我有点希望这个论点是Position = 并且有一个神奇的关键字“拿最新的,傻瓜。”)
但我建议只对新的文件名进行新的备份,并可能丢弃现有的文件(如果您只对最新的备份感兴趣,那么它可能比需要的大得多)。
如果您想随着时间的推移保留备份的多个副本,请在文件名中包含时间戳进行备份。然后您就拥有了单独的文件,并且可以立即准确地关联每个文件的拍摄时间。
如果您想完全覆盖旧备份,请WITH INIT作为备份语句的一部分使用。我建议您使用新文件名进行新备份,使用WITH INIT,然后尝试恢复该备份。