自 SQL Server 6.5 以来,我一直在使用 SQL Server 和关闭,仍然在我脑海中响起的旧建议是永远不要进行就地升级。
我目前正在将我的 2008 R2 DEV 和 TEST 系统升级到 SQL Server 2012,并且需要使用相同的硬件。不必恢复我的 Reporting Services 配置的想法非常有吸引力,而且我真的很难在时间上明智。不涉及任何分析服务或任何异常或非标准 - 仅安装数据库引擎和报告服务。
有没有人遇到过就地升级的严重问题?还是我应该重新评估我对就地升级的立场?
非常简短的回答- 就地是可以的。之后您可以查看您的配置并实施 SQL Server 2012 的最佳实践。
SQL Server 升级/迁移的更长答案
所以这是一个意见问题,不一定有错误或正确的答案,但出于很多原因,我更喜欢迁移风格升级而不是就地升级。话虽如此 - 我的一些客户由于各种原因别无选择,只能进行就地升级,实际上自 SQL Server 2005 以来,就地升级并没有以前那么糟糕。
为什么我更喜欢迁移而不是就地升级
请注意,我并不是说您必须将其作为迁移来执行。如果您不打算在预算范围内购买新硬件并且无法为此次升级购买新硬件,则 In-Place 可以正常工作。升级过程中的支持比 6.5 天要好得多,因此您不会让自己处于不利地位。
如果您确实计划就地进行开发/测试,但想要进行生产迁移,您可以考虑在生产之前至少进行一次迁移。通过这种方式,您可以提前制定清单并处理您没有想到的任何潜在问题。
附加/分离与备份/恢复迁移
如果您决定采用迁移方法,还有一个决定您可能仍有争议,那就是您如何将数据库迁移到新环境。您可以将数据库与旧服务器分离并将其附加到新服务器,也可以将其备份并在那里恢复。
我更喜欢备份/恢复。我听说分离/附加的最大优势是它节省了一些时间。对我来说,备份/恢复胜出有几个原因:
如果您决定进行备份/恢复 - 这意味着您的旧源数据库仍将在线。我喜欢在备份后使该数据库脱机。在编写安全、作业、链接服务器、证书、数据库邮件设置和其他实例范围的信息后,有时我会更进一步,使整个 SQL 实例脱机。这避免了在测试期间有人说“一切看起来都很棒!”的问题。一两天后才意识到他们一直在与旧服务器上的旧数据库通信。使这些数据库脱机或整个实例脱机可以防止这些误报和它们造成的混乱。
如何使迁移方法更快
对于繁忙的生产环境,您可以通过使用完全恢复模型最大限度地减少从旧环境切换到新环境所需的停机时间,而停机时间很少。基本上 - 通过恢复最新的完整备份、任何差异备份和任何已采取的日志备份指定您要迁移到的环境
NORECOVERY
- 然后您为最终切换要做的就是恢复尚未恢复的日志备份和您希望恢复的最终日志备份,指定WITH RECOVERY
. 通过这种方式,对于大型数据库,通过在停机时间窗口之前支付完整、差异和大多数日志恢复的成本,可以大大减少实际的切换停机时间窗口。感谢陶在评论中指出这一点!如何使就地升级更安全
在选择就地方法时,您可以做一些事情来改善您的体验和结果。
升级或迁移清单的重要性
如果您决定进行升级(无论是就地升级还是迁移),您应该认真考虑创建一个清单并在每个环境中使用此清单。您应该在此清单中包含很多内容,其中最重要的是:
然后让将进行生产升级的人在生产以外的某些环境中遵循清单 - 特别是如果可能的话,关闭类似于生产的环境(“产品以南”,正如我所说......)并注意任何问题或要点由于缺少清单,他们不得不从清单中转移或即兴创作。然后将更改合并,并享受您的生产更改的乐趣。
我不能过分强调在迁移或升级后和迁移之前进行彻底测试的重要性。在升级过程中做出回滚决定应该很容易——尤其是在迁移期间。如果有什么不舒服的地方,请回滚并找出是否在迁移过程中无法有效且可靠地排除故障。一旦您生活在这个新环境中并且用户连接 - 回滚就成为一项艰巨的任务。您无法将 SQL Server 数据库还原到早期版本。这意味着手动工作和数据迁移。我总是等待几个星期来杀死旧环境,但你应该尽你所能避免需要旧环境,方法是在你的实时用户接触新环境之前找到所有问题。最好在您开始升级/迁移之前。
关于 SQL Server Reporting Services 迁移/升级 的快速说明 迁移 SSRS 安装并不是许多人认为的艰巨任务。这篇technet/books 在线文章实际上非常方便。该文章中最重要的警告之一是“备份加密密钥”,特别是如果您保存了大量敏感信息,例如预定报告电子邮件收件人电子邮件地址、大量连接的连接信息等。您不久前可以问我的一位客户这有多重要。他们知道,因为我搞砸了这一步,并花了很多时间修改报告计划和连接字符串权限。
根据我的经验,应该像以前一样做出相同的决策过程。AFAIK 没有任何“世界改变者”与 SQL Server 安装、MS SQL Server 产品本身以及在推出具有数百万行代码的软件时遇到的潜在问题。可能会发生一些不好的事情,现在您无法选择“回滚”选项。
但是,您确实有其他选择。您可以考虑制作系统快照,在其他地方恢复,执行升级,看看会发生什么。这个测试应该给你很大的安慰,但它并不能绝对保证 prod box 上不会出现任何问题。但是,这是一个在 SQL 6.5 天以前不可用的选项。
我只是假设最坏的情况。您进行了就地升级,但失败得很惨。然后,您必须在您的 RTO 和 RCO 中从中恢复。企业是否了解风险,您是否制定了减轻风险的计划?
如果业务对此不满意,那么我的建议是不要这样做。
如果您的服务器在虚拟环境中运行,您可以对克隆执行快照,然后应用就地升级并测试实例以验证升级是否成功。如果可行,您可以应用快照并使克隆成为生产服务器。如果效果不佳,您可以删除快照并返回升级前的映像重试,或者删除克隆并进行完整迁移。
由于大量的硬件投资,我们只需要升级操作系统,同时保持当前的 SQL Server 版本(2012 年,3 台服务器,22 个实例,约 300 个数据库)。没有像镜像等复杂的设置。
此示例与问题不完全匹配,因为 SQL Server 未升级。我认为这仍然是一个很好的答案,因为显示的步骤实际上比真正的就地迁移更简单。
概述:连接了外部驱动器以进行完整备份,主要是作为预防措施。只有模型和 msdb 将从外部驱动器实际恢复。ldf/mdf 留在原处以进行分离/附加。数据库中引用了一些本地帐户。在操作系统中重新创建它们之后,数据库中的引用被重新创建(因为 SID 可能会更改)。
然后是对我们有用的步骤:
1) 记下将在步骤 12(服务器角色)和 18 到 23 中恢复的服务器级别设置。
2) 将 SQL Server 2012 修补到 SP3(如果我们要恢复任何系统数据库,则需要一致性)。
3) 验证每个实例上的版本匹配。“选择@@版本”
4) 通过运行此脚本生成这 6 个脚本。如果有很多实例,Redgate SQL Multiscript 可以节省大量时间(将工具 -> 选项 => 行长调整为最大值(8192),然后使用文本输出)。
将用户重新链接到登录
5) 运行脚本将包括系统(master、msdb、model)在内的所有数据库备份到外部驱动器。
6)运行脚本以分离所有数据库
7) C 盘将被重新格式化。如果 LDF/MDF 不在 C 上,请保留它们。
8) Windows Server 2012 安装在 C 上
9) 如果原始系统文件不在 C 盘上,请将 LDF/MDF 移开。
10) 将重新安装 SQL Server 2012 并修补到 SP3 a。重新创建系统用户/组帐户
11) 将系统数据库备份到新位置或文件名(注意不要覆盖原件!)。
12) Run recreate roles snippet. Something like:
13) Run recreate login script (doesn't do anything if logins were restored)
14) Stop SQL AGENT.
(Could restore Master here, we chickened out).
15) Attach mdf/ldf using script from above. a. If fail manually restore from bak using script from above.
16) Attempt Restore of Model
17) Ensure SQL Agent is stopped. Restore MSDB (link) a. If fails, need to re-create jobs + maintenance plan + mail configuration + operators
18) Open User To Login script...
19) Enable service broker to match original value SELECT name, is_broker_enabled FROM sys.databases;
20) Start SQL Agent
21) Set Parallelism threshold to original value
22) Adjust any database settings to their original values:
23) Check job ownership:
If the SQL Server Version had also been upgraded I don't believe the model and msdb databases could have been restored so jobs would have been lost due to https://support.microsoft.com/en-us/kb/264474
What's missing:
这两种方法本身都没有问题——我都做过,而且结果通常都很好。
如果迁移方法有问题,那不是技术问题:是懒惰。我经常发现一家公司还没有完全迁移到 xxxx 版本的原因是因为他们选择了一次摇摆迁移,而从未有时间做艰苦的工作来完全迁移。现在他们有两套或更多套服务器而不是一套。