将SQL Server 2000数据库升级到2008 R2并启用新功能


23

我最近将SQL Server 2000数据库升级到2008 R2。


我所做的是:

  1. 在旧计算机上关闭SQL Server 2000(快速)服务,
  2. 将数据文件(mydatabase.mdfmydatabase.ldf)移至新计算机,
  3. 运行SQL Server Management Studio 2008,
  4. 连接到本地数据库引擎,
  5. 将数据文件附加到数据库。
  6. 将数据库的兼容性级别更改为SQL 2008(100)。

问题:我还应该怎么做才能完成迁移?

我想要:

  1. 使用诸如校验和和完整恢复模型之类的新功能,
  2. 使该数据库与在SQL 2008 R2中创建的数据库完全相同,
  3. 使该数据库具有完全的兼容性,正确性,并且非常适合新的SQL 2008 R2数据库引擎。

换句话说:我只想知道如何正确地将旧的SQL 2000数据库正确地完全转换为新的2008 R2数据库,请对所有事情都做对了保持冷静,并对所有新功能感到满意。


我问这个问题,是因为我在Internet上发现了很多网站,这些网站说了很多不同的内容,这让我感到困惑:有些人说需要重建索引,而另一些人说要做其他事情……现在我一无所知,所以我想听听经验丰富的人的意见和清晰的分步说明。我在一家非常小的公司工作,我一个人工作,我不想搞砸。


主席先生,您的回答给我留下了深刻的印象,没想到那么多。


所以一些评论:

  1. 该数据库现已投入生产。就像我说的那样,如我在第一篇文章中所描述的那样,它使用deattach-attach方法进行了升级,并且在MSDN 上进行了描述:http : //msdn.microsoft.com/zh-cn/library/ms189625.aspx必须快速完成,所以我被迫那样做。让我们忘记这有多么不恰当,而将注意力集中在当前情况上。

  2. 用户/权限在这里不是问题-人数很少,权限很简单。

  3. 直到2012年,使用数据库的应用程序都与SQL 2000兼容,因此这也不是问题。

  4. 数据库文件(MDF)并不大-只有大约1GB。


几个问题:

  1. 您建议使用备份/还原方法,但是我如上所述,所以现在可以遇到任何问题吗?一切正常,没有任何问题。

  2. 关于校验和和完整恢复模型:在SQL 2000上不可用/未启用,因此我现在想使用它们。您说过,我唯一需要做的就是在数据库属性中启用这些选项?我读过某个地方,那还不够,还应该重建索引或其他内容。我真的不知道,我只是问。

  3. 我正在准备将该数据库迁移到SQL 2012-首先是从SQL 2000到2008 R2,现在是从2008 R2到2012(由于缺少对SQL 2000数据库的支持而无法直接执行此操作) SQL 2012)。因此,我了解我应该遵循您的指南:将其备份到2008 R2中并在2012年还原,然后执行其余的提示,对吗?

  4. 请向我解释一下备份/还原方法:这就像是将数据库转储到SQL查询中,然后通过执行一堆查询来还原它?请问这种方法会“整理”我的数据库吗?如果没有,如何手动对其进行碎片整理/优化?

  5. 当我们使用SQL 2000 Express多年(无管理界面)时,我们只是通过停止引擎和RAR DATA目录来进行备份。就目前而言,就像我们在SQL 2008上一样,这还不比在Management Studio中使用备份功能更好吗?

  6. 具有频繁事务日志备份的完全恢复模式 -事务日志存储在哪里-LDF文件吗?我如何正确备份它?


我知道我的问题听起来很傻,我不是专业的数据库管理员,但是我是唯一可以执行诸如升级数据库引擎之类的“硬核”任务的人。我也相信,您的知识导带将对像我这样的其他人有很大帮助。

非常感谢您的时间和知识,非常感谢。


2
下次我强烈建议您进行备份/还原,而不是关闭SQL Server,移动文件并附加它们。就是这样,很多事情可能出错。从好的方面来说,恭喜您最终放弃了使用14年的旧数据库软件!
亚伦·伯特兰

Answers:


37

最重要的一步要做的是运行升级顾问对SQL Server 2000数据库和地址的所有的问题,报道它。

最佳做法是,在SQL Server 2000旧版数据库上使用Upgrade Advisor工具,并将跟踪文件导入Upgrade Advisor工具进行分析。跟踪文件使升级顾问可以检测在简单的数据库扫描中可能未显示的问题,例如应用程序中嵌入的TSQL。您可以在典型时间使用SQL Server 2000服务器上的SQL Profiler捕获TSQL的跟踪,并使用升级顾问分析这些跟踪。

因此,其余步骤将是:

迁移当天:

  1. 使用sp_help_revlogin在2000服务器上编写登录脚本。
  2. 从sql 2000服务器中脚本出作业和链接的服务器。
  3. 停止连接到2000服务器的Web服务器。确保没有应用程序连接到2000服务器。
  4. 备份数据库并在目标sql 2008 R2服务器上还原
  5. 在2008 R2服务器上还原备份后,请在2008 R2服务器上运行sp_help_revlogin的输出以重新创建登录名。
  6. 同步孤立用户(如果有),并在新服务器上重新创建sql代理作业和链接的服务器。
  7. 将已还原数据库的兼容性级别更改为100。
  8. 启用了all_errormsgs和data_purity选项的dbcc checkdb: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. 在还原的数据库上运行DBCC UPDATEUSAGE DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. 使用完全扫描更新所有表的统计信息: Update Statistics table_name with FULLSCAN
  11. 可选:检查碎片级别,并根据碎片级别运行所有索引的重组/重建。您可以使用Ola的脚本
  12. 使用以下命令重新编译所有SP sp_recompile 'procedureName'
  13. 刷新您的意见 SP_REFRESHVIEW view_name
  14. 确保更改数据库选项:页面验证为CHECKSUM。
  15. 将恢复模型(如果与sql 2000不同)更改为FULL。如果更改为完全恢复模式,请确保您经常进行事务日志备份。这将帮助您恢复时间点,并且不会使T-Log膨胀。
  16. 在SQL Server 2005及更高版本中,引入了数据库邮件。因此,您必须从SQLMail迁移到数据库邮件。

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO

另外,如果您有任何复制,则必须将其重置。如果有任何DR(例如logshipping或Mirroring)(在2005年及以后推出,但在2012年折旧),则还必须将其重置。

需要使用C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(命令行)或使用Package Migration Wizard将旧的DTS软件包迁移到SSIS 。

另外,您可以使用位于/dba//a/36701/8783的脚本。虽然,它使用分离/附加方法,但我强烈建议您使用BACKUP / RESTORE方法。相应地更改脚本。


附带说明:

  • 打开 新服务器上的即时文件初始化
  • 具有多个大小相等的tempdb数据文件
  • 启用跟踪标志1118
  • 正确配置最大和最小内存。特别是Max内存远离默认设置。
  • 正确调整MAXDOP设置。有关更多详细信息,请参见/dba//a/36578/8783
  • 最好是安装sp_Blitz从布伦特奥扎尔。 运行它并解决它报告的关键和高优先级问题。
  • 你甚至可以使用SQL电源文件从kendalvandyke - SQL电源督工作与SQL Server的所有版本的SQL Server 2000至2012年从Windows 2000和Windows XP通过Windows Server 2012的和Windows和Windows Server和消费者的Windows操作系统的所有版本8.对于计划升级也很有用-查看实例上正在使用哪些隐藏功能。
  • 启用针对临时工作负载的优化和默认备份压缩选项。

让我们解决您的问题...

我应该怎么做才能完成迁移?

请参阅我的答案。这将帮助您正确地制定迁移计划。始终在UAT(非生产环境)中测试您的迁移计划,并由业务用户进行适当的应用程序测试。

使用校验和和完整恢复模型等新功能。

CHECKSUM是SQL Server 2005及更高版本中的新增功能。我已经将其作为上述迁移步骤的一部分进行了介绍。

full recovery model不新鲜。这取决于您的业务类型,并决定在发生灾难时可能丢失多少数据。

具有频繁事务日志备份的完全恢复模式将允许您通过减少数据丢失量来还原时间点和时间点。

使该数据库与在SQL Server 2008 R2中创建的数据库完全相同。

使该数据库完全兼容,正确并非常适合于新的SQL 2008 R2数据库引擎。

对此不完全理解!但是,上述迁移步骤将为您提供帮助。您只需还原数据库并更改兼容性级别10 100以及上述步骤即可。

我只是想知道如何正确地将旧的SQL Server 2000数据库正确地完全转换为新的2008 R2数据库,请对所有事情都做对了保持冷静,并对所有新功能感到满意。

您必须对此小心,因为这也需要更改您的应用程序代码。如果将您的应用程序代码更改为使用SQL Server 2008 R2中的新功能,那么您将不会遇到任何问题-只要您已在UAT或DEV环境中对应用程序进行了完整的完整回归测试。在PROD中进行实际迁移时,这将给您最大的信心。


注意:以上是我记得的步骤,我很确定没有任何遗漏。如果我发现我错过了一些东西,那么我将在网站上添加它或其他专家-随时添加!

上面概述的所有内容都必须首先在NON PRODUCTION环境中重播,以避免在实际迁移过程中出现任何意外情况。

----------

几个问题:

您建议使用备份/还原方法,但是我如上所述,所以现在可以遇到任何问题吗?一切正常,没有任何问题。

如果一切正常,你能够附加数据库,然后NO你不会有任何问题。分离/附加与备份/还原只是将数据库移动到其他位置的一种方法。仅供参考.. 备份/还原更安全可靠,好像出了什么问题(在最坏的情况下),那么至少您有一个备份可以还原和恢复数据库。

关于校验和和完整恢复模型:在SQL Server 2000上不可用/未启用它,因此我现在想使用它们。您说过,我唯一需要做的就是在数据库属性中启用这些选项?我在某个地方读到了那还不够,还应该重建索引或其他内容。我真的不知道,我只是问。

如我所说,校验和是2005年及更高版本中的新增功能。它是一种机制,SQL Server可以通过该机制来检测页面损坏(尤其是由于I / O)。有关更多详细信息,请参阅此处

要启用CHECKSUM并将恢复模型更改为FULL,可以使用以下T-SQL代码进行操作:

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

注意:设置数据库选项后,将其从2008R2迁移到2012时将保留下来。

我正在准备将此数据库迁移到SQL Server 2012-首先是从2000 R2到2008 R2,现在是2008 R2到2012(由于缺乏对SQL 2000数据库的支持,因此无法直接执行此操作) Server 2012)。因此,我了解我应该遵循您的指南:将其备份到2008 R2中并在2012年还原,然后执行其余的提示,对吗?

是的,请。如我所说,备份还原是首选方法,除非您有充分的理由不这样做。

请向我解释一下备份/还原方法:这就像是将数据库转储到SQL查询中,然后通过执行一堆查询来还原它?请问这种方法会“整理”我的数据库吗?如果没有,如何手动对其进行碎片整理/优化?

备份/还原与Sybase,Oracle或可能的MySQL中使用的转储和加载类似。它只是SQL Server称它为..备份/还原。

必须阅读:Paul Randall的《了解SQL Server备份》

简单语法(有关完整语法,请参见BOL):

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

然后可以在目标服务器上通过以下方式进行还原:

-假设目标磁盘的布局与源服务器的磁盘布局不匹配

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

-假设目标磁盘的布局与源服务器的磁盘布局匹配

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

请问这种方法会“整理”我的数据库吗?如果没有,如何手动对其进行碎片整理/优化?

备份/还原不会对数据库进行碎片整理。您必须根据碎片级别使用Alter Index Reorganize或Rebuild。

由于您是SQL Server的新手,因此我强烈建议您使用Ola Hallengren的:

由于我们使用SQL Server 2000 Express多年(无管理界面),因此仅通过停止引擎和RAR DATA目录即可进行备份。就目前而言,就像我们在SQL Server 2008上一样,这还不比在Management Studio中使用备份功能更好吗?

停止引擎是您可以做备份的最糟糕的事情!

阅读Paul关于我提到的备份的链接以及使用Ola的脚本。Microsoft有一篇带脚本的知识库文章,以进行自动备份- 如何在SQL Server Express中计划和自动备份SQL Server数据库

具有频繁事务日志备份的完全恢复模式 -事务日志存储在哪里-LDF文件吗?我如何正确备份它?

每个SQL Server数据库都有一个日志,该日志记录所有事务以及每个事务进行的数据库修改。事务日志是任何数据库的重要组成部分。

事务日志的常规命名约定扩展名是“ .LDF”,但可以是任何名称。

我将不写更多,因为这将使答案非常苗条。请参阅 事务日志管理这里的答案也有出色的链接。


编辑:8/24/2016 ..这将帮助未来的读者:

如果要将整个实例从一个版本迁移到另一个版本,强烈建议使用基于PowerShell的解决方案Start-SqlMigration

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.