您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页SQL Server 数据库故障修复顶级技巧

SQL Server 数据库故障修复顶级技巧

来源:意榕旅游网
SQL Server 数据库故障修复顶级技巧

SQL Server 2005 和 2008 有几个关于高可用性的选项,如日志传输、副本和数据库镜像。所有这些技术都能够作为维护一个备用服务器的手段,同时这个数据库可以在你原先的主数据库出问题时上线并作为新的主服务器。然而,你必须记住的是将备用服务器替换上线只是完成了一半的故障修复工作。

要保证你的应用正常工作,在数据库外部还有许多注意事项。这其中包括登录信息、数据库用户、调度任务、DTS 和 SSIS 包、可执行文件、系统数据库中的对象、同名数据库、链接服务器等等。

有时这些细小的依赖只有在你进行一个数据库故障恢复时才会发现,这样你又不得不花费大量时间进行调试和评估导致这个问题的根源。此外,你还必须让第二台服务器和应用尽可能快地上线以减少停机时间。因此,提前做设置是非常重要的。

当涉及到高可用性和SQL Server 的灾难恢复规划时,你应该谨记我本人所喜欢的一个拉丁谚语 ——Si vis pacem, para bellum,它的意思翻译过来就是“如果你想要得到和平,那就得先作好战争准备。”记住这一点后,让我们来看看一些可能会遇到的问题。我也将建议几个预先可以完成的任务,以确保数据库故障恢复过程快速有效地完成。 SQL Server 登录信息与数据库用户

你的故障恢复服务器应该备份所有的登录信息和数据库用户,包括密码。登录信息可以在任何时候创建,但是如果你使用日志传输或数据库镜像,你的数据库将处理恢复状态,这样你只有在它们重新上线后才能完成恢复过程。

使用 Windows 认证,可以很容易地将登录信息映射到数据库用户。然而,如果你使用的是 SQL 认证,那么你需要手动地在你从另一个服务器获得的数据库上重新建立登录信息与数据库用户的连接。因此,你在迁移数据库时会丢失登录信息和数据库用户之间的连接。 当你在第二台服务器上恢复数据库后,运行这些代码: USE YourDatabaseName

EXEC sp_change_Users_Login 'UPDATE_ONE', YourDBUserName, YourLogin

保持登录信息同步的另一个方法是遵循 Microsoft Knowledge Base 上关于 在 SQL Server 实例之间传输登录信息和密码 的文章的步骤。这篇文章阐述了如何使用原始

的 SID 脚本化登录信息。当在故障恢复数据库服务器上创建这些登录信息时,登录信息与数据库用户之间的连接会被保存,这样你就不必运行上面的脚本修复孤立的用户。 msdb 数据库对象

这个数据库根据版本、维护计划和调度任务装载了诸如 Data Transformation Services (DTS) 或 SQL Server Integration Services (SSIS) 包的项目。对于维护 SQL Server 的一个故障恢复服务器,你有两种选择:

 在你每次添加或修改这些对象时,进行一个平行部署,同时在主服务器和副服

务器上部署任务和包。

 周期性地或在主服务器出错时从主服务器恢复 msdb 数据库。

如果你使用平行部署,你应该先在第二台服务器上禁用这些任务,然后在恢复后启动它们。同时,如果你使用数据库镜像或日志传输,你将只能在数据库重新上线后才能够创建维护计划。此外,你应该记录这些任务以及它们的设置和调度,这样你就能够快速地重新创建这些信息。

如果你从主服务器上恢复了 msdb,那么所有的任务、包和维护计划都应该恢复。你应该继续密切关注于这些任务,当它们现在在一台不同的服务器上运行时,由于运行条件不一样,它们也很可能会出错。你也应该打开所有的维护计划并保证连接到备份和其它计划的数据库连接没有指向旧的服务器。如果出现了此类问题,要将连接修改到新服务器。你可以通过单击计划工具栏的 Manage Connections 按钮修改连接维护计划。然后会有一个类似下图的对话框出现:

如果你从旧服务器上恢复 msdb 数据库,检查和修改你的维护计划是很重要的。例如,上面的计划是使用服务器名而不是本地连接引用所创建的。 定制主数据库中的对象

一些 DBA 会保持主数据库(或通用数据库)的代码或帮助表,然后它们可以从用户数据库或应用中访问。如果你没有在副服务器上部署这些对象,你可能会接收到错误消息。为了避免这个问题,可以使用平行部署或维护,这样你就可以快速地在副服务器上执行一组能创建这些相关联对象的脚本 可执行文件和 COM 组件

类似地,如果你的数据库或调度任务依赖于可执行文件或 COM 组件 中实现的功能,记住要保证副服务器与主服务器完全一样,并且在主服务器上保持平行部署和修改。 SQL CLR 对象

当恢复一个数据库时,通常我会在另一台服务器包含 SQL CLR 对象 时遇到问题。我现在使用删除和重建 CLR 对象的脚本会容易得多。下面是所使用的一系列脚本:

 删除依赖于 CLR 的过程和函数。  删除 CLR 集。

 从 DLL 重新创建 CLR 集(SQL Server Management Studio 不能够很

地将一个大的二进制 DLL 脚本)。

 创建 CLR 过程和函数。

链接服务器

如果你的应用执行了跨服务器调用,记住在恢复服务器上也维护相同的链接服务器。否则,错误会在你恢复后再次发生。类似地,其它 SQL Server 也可能使用链接服务器访问你的主服务器,因此记住要修改这些链接服务器。以此类推,相同的问题也会出现在同义词服务器上。因为一个恢复可以将一个或多个数据库移动到另一台服务器,引用旧地址的同义词引用也会停止工作,也需要修改。修改使用链接服务器访问的数据库也需要修改代码。许多这类问题都可以通过正确使用 SQL Server 别名和同义词减少和简化。 将应用重新指向新的数据库服务器

当你的数据库运行在另一台服务器上,你需要修改你的应用指向新的位置。如果你的 Web 服务器有许多连接配置需要修改,你应该使用上面所提到的别名。例如,如果从 Server1 恢复到 Server2,你可以创建一个 SQL Server 别名并将 Server1 指向 Server2,如下所示:

如果你只是将这个别名删除而不修改连接配置,你就不需要使用这个方法修改任意的连接配置,而且你可能会在将来重新恢复回主服务器和进行故障恢复时省下很多工作

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务