Sql-Server-2008-R2

將 SQL Server 2000 數據庫升級到 2008 R2 並啟用新功能

  • February 21, 2020

我最近將 SQL Server 2000 數據庫升級到 2008 R2。


我所做的是:

  1. 關閉舊機器上的 SQL Server 2000 (express) 服務,
  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 數據庫,對一切都做對了,並對所有新功能感到滿意。


我在問這個問題,因為我在網際網路上發現了很多網站,它們說了很多不同的東西,讓我感到困惑:有人說需要重建索引,有人說要做其他事情……和現在我什麼都不知道,所以我想听聽有經驗的人的意見和清晰的分步說明。我在非常小的公司工作,我一個人做事,我不想把事情搞砸。


先生,您的回答給我留下了深刻的印象,我沒想到這麼多。


所以一些評論:

  1. 該數據庫現已投入生產。正如我所說,它是使用 deattach-attach 方法升級的,正如我在第一篇文章中描述的那樣,正如 MSDN 中所述:http: //msdn.microsoft.com/en-us/library/ms189625.aspx 它必須快速完成,所以我被迫這樣做。讓我們忘記它有多麼不合適,並專注於目前情況。
  2. 使用者/權限在這裡不是問題 - 只有很少,權限很簡單。
  3. 使用數據庫的應用程序與 SQL 2000 到 2012 兼容,所以這也不是問題。
  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 文件嗎?我該如何正確備份它?

我知道我的問題可能聽起來很傻,我不是專業的數據庫管理員,但我是這裡唯一可以完成升級數據庫引擎等“硬核”任務的人。我也相信你的知識會對像我這樣的其他人有很大幫助。

非常感謝您的時間和知識,我真的很感激。

重要的一步是在 SQL Server 2000 數據庫上執行升級顧問並解決它報告的所有問題。

作為最佳實踐,在您的 SQL Server 2000 舊數據庫上使用升級顧問工具並將跟踪文件導入升級顧問工具進行分析。跟踪文件允許升級顧問檢測在簡單的數據庫掃描中可能不會出現的問題,例如嵌入在應用程序中的 TSQL。您可以在典型時間使用 SQL Server 2000 伺服器上的 SQL Profiler 擷取 TSQL 跟踪,並使用升級顧問分析這些跟踪。

所以剩下的步驟是:

遷移當天:

  1. 使用sp_help_revlogin在 2000 伺服器上編寫我們的登錄腳本。
  2. 從 sql 2000 伺服器編寫作業和連結伺服器。
  3. 停止連接到 2000 伺服器的網路伺服器。確保沒有應用程序連接到 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 UPDATEUSAGEDBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. 使用全掃描更新所有表的統計資訊:Update Statistics table_name with FULLSCAN
  11. 可選:檢查碎片級別並根據碎片級別執行所有索引的重組/重建。您可以使用Ola 的腳本
  12. 使用重新編譯所有 SPsp_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 年貶值),那麼您也必須重新設置它。

舊的 DTS 包需要使用C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(命令行)或使用包遷移嚮導遷移到 SSIS 。

此外,您可以使用我在https://dba.stackexchange.com/a/36701/8783找到的腳本。雖然它使用分離/附加方法,但我強烈建議您使用 BACKUP/RESTORE方法。相應地更改腳本。


作為旁注:

  • 在新伺服器上打開即時文件初始化。
  • 有多個大小相等的tempdb 數據文件。
  • 啟用跟踪標誌 1118
  • 正確配置最大和最小記憶體。尤其是 Max memory 遠離預設值。
  • 適當調整 MAXDOP 設置。有關詳細資訊,請參閱https://dba.stackexchange.com/a/36578/8783
  • 最好是從 Brent Ozar 安裝 sp_Blitz 執行它並解決它報告的關鍵和高優先級問題。
  • 您甚至可以使用來自 kendalvandyke 的 SQL Power Doc - SQL Power Doc 適用於從**SQL** Server 2000到 2012 的所有 SQL Server 版本,以及從 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 數據庫引擎。

完全不明白這個!但上述遷移步驟將對您有所幫助。您只需要恢復數據庫並100按照上述步驟更改兼容級別 10。

我只是想知道如何正確和完全地將舊的 SQL Server 2000 數據庫轉換為新的 2008 R2 數據庫,對一切都正確完成並且對所有新功能感到滿意。

您必須小心這一點,因為這也需要更改您的應用程式碼。如果您的應用程式碼更改為使用 SQL Server 2008 R2 中的新功能,那麼您不會遇到任何問題 - 前提是您已在 UAT 或 DEV 環境中對您的應用程序進行了完整的回歸測試。當您在 PROD 中進行實際遷移時,這將為您提供最大的信心。


**注意:**以上是我記得的步驟,我很確定沒有遺漏任何內容。如果我發現我遺漏了一些東西,那麼我會在這個網站上添加它或其他專家 - 隨時添加!

上面列出的所有內容都需要首先在非生產環境中重放,以避免在實際遷移過程中出現任何意外。



還有幾個問題:

你推薦使用備份/恢復方法,但我按照上面寫的做了,所以我現在會遇到什麼問題嗎?一切正常,沒有任何問題。

如果一切正常並且您能夠附加數據庫,那麼不會有任何問題。分離/附加與備份/恢復只是將數據庫移動到不同位置的一種方法。僅供參考 ..備份/恢復更安全可靠,就好像出現任何問題(在最壞的情況下)一樣,至少您有備份來恢復和恢復您的數據庫。

關於校驗和和完整恢復模型:它在 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 到 2008 R2,現在從 2008 R2 到 2012(由於缺乏對 SQL 中 2000 個數據庫的支持,因此無法直接執行此操作伺服器 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 有一篇 KB 文章,其中包含執行自動備份的腳本 -如何在 SQL Server Express 中計劃和自動備份 SQL Server 數據庫

具有頻繁事務日誌備份的完整恢復模式- 事務日誌儲存在哪裡 - 是 LDF 文件嗎?我該如何正確備份它?

每個 SQL Server 數據庫都有一個日誌,記錄每個事務所做的所有事務和數據庫修改。事務日誌是任何數據庫的關鍵組件。

事務日誌的通常命名約定副檔名是“.LDF”,但它可以是任何名稱。

我不會在這方面寫更多,因為這會使答案變得很枯燥。請參閱 事務日誌管理,我在這裡的回答也有很好的連結。


編輯:2016 年 8 月 24 日 .. 這將有助於未來的讀者:

如果您要將整個實例從一個版本遷移到另一個版本,我強烈建議您使用基於 PowerShell 的解決方案Start-SqlMigration

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/50311