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