在 SQL Server 中为关键数据库还原数据库的最佳方法

Posted

技术标签:

【中文标题】在 SQL Server 中为关键数据库还原数据库的最佳方法【英文标题】:The best way to restore a database in SQL Server for critical databases 【发布时间】:2019-02-02 19:16:25 【问题描述】:

我正在尝试将数据库从生产环境移动到新的生产环境。

future 环境有当前 prod 环境的旧版本,我现在正在迁移旧版本。

是否更好,更可靠如果:

删除数据库然后恢复 或者我应该只恢复顶部?

我知道两者都是选项,但我需要知道哪一个能提供最好的结果:最好的定义是考虑到这是一个关键数据库和任务关键系统,因此没有出错的余地。

我对差异数据库不感兴趣,我只想让当前数据库完整地移动——干净而轻松。

更多信息:

这是一个 25GB 的数据库 我有一个 2 小时的窗口,我可以在其中备份当前系统并将其放在未来的系统上。 我在上面定义了“最佳”:最简单/最简单的方法,同时确保最少的数据损坏/丢失。 我不需要历史/登录新位置,即:我不需要能够去更旧的时间。

【问题讨论】:

欢迎来到 ***!你试过什么了?您的问题太宽泛了:在每种情况下都没有 BEST 这样的东西。你的数据库的大小是多少?允许的离线时间?您的网络速度(或您计划通过什么方式传输数据库)? @AlexYu 谢谢。我添加了信息 【参考方案1】:

我建议走sp_detachdb - 复制 - sp_attachdb 路线。

注意:

**@keepfulltextindexfile** 参数将在 SQL Server 的未来版本中删除。

并且此过程与 Azure 不兼容。

你写道:

我有一个 2 小时的窗口

所以它会更好,而不是 sp_detachdb 只是停止 SQLServer 服务 - 在新服务器上复制数据库文件,而不是使用 sp_attach_db/CREATE DATABASE .. FOR ATTACH

阅读有关此主题的 Microsoft 文档 - Move a Database Using Detach and Attach (Transact-SQL)

【讨论】:

【参考方案2】:

我最近问了一个类似的问题。我不同意另一个答案:分离和附加数据库不是一个好主意。首先,您必须使其脱机 - 其次,您需要停止服务,正如另一篇文章指出的那样。 备份和恢复是最安全的方法。

使用 sp_detach_db 分离数据库然后使用 CREATE DATABASE ... FOR ATTACH 附加它的选项;或者使用 GUI 分离和附加实际上会将数据库与源服务器分离。

这里很多事情都可能出错,这就是为什么我们更喜欢备份和 恢复。备份过程在线,因为源数据库 从一开始就没有变得不可用,你不会冒险 在出现错误、数据损坏或其他任何情况下销毁任何东西 其他可能发生的事情。

看看这个question,它可以为您提供所需的一切。

在 SQL Server 上,备份/恢复过程简单明了。如果您有一个选择还原的现有数据库,它将替换它。如果它不存在,它会添加它。

【讨论】:

请注意,OP 写道:“我有 2 小时的窗口”。当然,我同意“在 SQL Server 上,备份/恢复过程简单明了”。但是:a)停止服务比 BACKUP 更容易和更快,b)数据损坏的风险为零,c)ALTER DATABASE .. FOR ATTACH - 再次比 RESTORE 更快。所以:拥有 2 小时离线窗口的奢侈窗口 - 使用所谓的 cold backups(数据库文件)会更快、更直接且整体风险更低

以上是关于在 SQL Server 中为关键数据库还原数据库的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

有关SQL SERVER的问题

sql server2008备份出来的数据库如何在在sql server 2005或2000中还原

sql server 2008 怎么还原数据库

sql server 2008怎么还原备份数据库

如何在SQL Server 2008 R2中还原数据库

如何设置将SQL SERVER2012数据库备份还原到SQL SERVER2008上