首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 6.5 升級至 SQL Server 2000 完整遷移指南:前置條件、步驟與字元集轉換實戰

     編輯:關於SqlServer

遷移架構概覽

SQL Server 6.5 無法直接升級至 2000,必須經過中繼版本 SQL Server 7.0:

SQL Server 6.5 (NT 4.0) 
    → 升級至 SQL Server 7.0 (同機器/同網域) 
    → 備份/還原至 SQL Server 2000 (可異機) 
    → 字元集轉換 (1252 → 936) 
    → 應用驗證

前置條件檢查清單

項目要求驗證方式
作業系統Windows NT 4.0 SP4+winver
SQL Server 6.5 版本SP4 必裝,SP5 建議SELECT @@VERSION
TempDB 資料檔大小≥ 10MB,大資料庫建議 ×10%企業管理器 / sp_helpfile
完整備份所有使用者資料庫 + master/msdb備份紀錄 / 還原演練
sa 密碼非空白,記錄備份登入測試
SQL Server 7.0 標準版安裝媒體準備光碟/ISO (現已難取得,需從 MSDN/Volume Licensing 獲取)媒體完整性校驗
磁碟空間系統盤 ≥ 2× 最大資料庫大小 (升級過程暫存)磁碟管理
網域環境 (異機安裝 7.0 時)同一 NT 網域,具備 Domain Admin 權限網域控制站驗證

階段一:升級至 SQL Server 7.0

  1. 安裝 SQL Server 7.0 標準版:
    • 建議同一台機器安裝,避免跨機器權限/網域複雜度
    • 字元集選擇:ISO 1252 (Latin1_General_CI_AS),不可選其他
    • 服務啟動帳號:Domain Admin 或 LocalSystem (需網域權限時用 Domain Admin)
    • sa 密碼:設定非空白密碼
  2. 執行升級精靈:
    • 工具:SQL Server 7.0 安裝目錄 Upgrade\Upgrade.exe
    • 字元集轉換提示:保持 1252 不變,勿勾選轉換
    • 系統盤空間檢查:升級過程需額外空間建立新系統表、重建索引
  3. 驗證 7.0 升級結果:
    • 檢查錯誤日誌:C:\MSSQL7\LOG\ERRORLOG
    • 執行 DBCC CHECKDB 所有資料庫
    • 應用程式連線測試 (ODBC DSN 指向新實例)
  4. 完整備份 7.0 資料庫:備份檔將用於還原至 2000

階段二:還原至 SQL Server 2000

  1. 安裝 SQL Server 2000 (可在不同機器,建議同網域)
  2. 還原 7.0 備份檔至 2000 實例:
    RESTORE DATABASE MyDB FROM DISK = 'D:\Backup\MyDB_70.bak'
    WITH MOVE 'MyDB_Data' TO 'D:\MSSQL2000\Data\MyDB.mdf',
         MOVE 'MyDB_Log' TO 'D:\MSSQL2000\Log\MyDB.ldf',
         REPLACE, STATS = 10;
  3. 執行 sp_dbcmptlevel 'MyDB', 80 設定相容性等級 80 (SQL 2000)
  4. 更新統計資訊:EXEC sp_updatestats

階段三:字元集轉換 (關鍵步驟,1252 → 936)

SQL Server 7.0 強制使用 1252 (西歐語系),中文環境需轉為 936 (GBK/CP936) 才能正確儲存/顯示中文。

方法 A:生成腳本重建 (推薦,最乾淨)

  1. 企業管理器 → 右鍵資料庫 → 所有工作 → 產生 SQL 腳本
  2. 勾選:所有物件 (表、視圖、SP、觸發器、索引、約束、預設值、規則、完整)
  3. 格式化選項:取消勾選「產生 COLLATE 子句」 (或事後移除)
  4. 儲存腳本檔 (如 Rebuild_DB.sql)

移除腳本中的 COLLATE 子句

-- 使用文字編輯器/腳本批次取代
-- 移除所有類似模式:
COLLATE SQL_Latin1_General_CP1_CI_AS
-- 例如:
CREATE TABLE dbo.Test (Col1 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL)
-- 改為:
CREATE TABLE dbo.Test (Col1 VARCHAR(50) NULL)

建立新資料庫 (預設字元集 936)

-- 確認伺服器預設排序規則為 Chinese_PRC_CI_AS (936)
SELECT SERVERPROPERTY('Collation');  -- 應回傳 Chinese_PRC_CI_AS

CREATE DATABASE MyDB_936
ON PRIMARY (NAME = 'MyDB_Data', FILENAME = 'D:\MSSQL2000\Data\MyDB.mdf', SIZE = 500MB, FILEGROWTH = 100MB)
LOG ON (NAME = 'MyDB_Log', FILENAME = 'D:\MSSQL2000\Log\MyDB.ldf', SIZE = 100MB, FILEGROWTH = 50MB)
COLLATE Chinese_PRC_CI_AS;  -- 明確指定 936 排序規則

執行重建腳本

-- 使用 osql / sqlcmd
osql -S . -E -i Rebuild_DB.sql -o Rebuild_LOG.txt

-- 或 SSMS 開啟腳本執行 (大腳本建議分批)
-- 執行後檢查 LOG 確無錯誤

資料遷移:1252 → 936 轉碼

此為最關鍵步驟,需將 7.0/2000 (1252) 資料正確轉為 936。官方無直接工具,常見做法:

  1. BCP 匯出/匯入 (指定代碼頁):
    -- 匯出 (1252 環境)
    bcp MyDB.dbo.Table out Table.dat -S Server7 -U sa -P pwd -c -C 1252
    
    -- 匯入 (936 環境)
    bcp MyDB_936.dbo.Table in Table.dat -S Server2000 -U sa -P pwd -c -C 936
  2. DTS 封裝 (轉換任務指定代碼頁):來源 1252、目的 936,欄位對應轉換
  3. 自製轉換程式 (C#/VB/VBScript):逐表讀取、Encoding.Convert(Encoding.GetEncoding(1252), Encoding.GetEncoding(936), bytes)、批次寫入
  4. 第三方工具:如文中提及 SQL6ToSQL2000.EXE (需自行取得/開發)

階段四:應用程式遷移與驗證

  1. 連接字串更新:ODBC DSN / OLE DB Provider / JDBC URL 指向 SQL 2000 實例
  2. 驅動程式更新:MDAC 2.8+、SQL Server 2000 ODBC Driver
  3. 排序規則敏感代碼檢查:WHERE col = '值'、ORDER BY、DISTINCT、GROUP BY 在 936 下行為可能不同
  4. 完整迴歸測試:功能、效能、中文顯示/輸入、報表、批次作業
  5. 上線切換:DNS 切換、連接字串部署、監控啟動

常見風險與緩解策略

風險影響緩解
字元集轉換資料損壞中文變亂碼、截斷、遺失測試環境全量驗證、抽樣人工核對、保留 1252 環境回滾
排序規則差異導致邏輯錯誤比較/排序/分組結果變化審查所有字串比較代碼、測試邊界字元 (全形/半形、大小寫)
舊版驅動不支援 2000 新功能應用連線失敗、功能受限統一升級 MDAC 2.8+、ODBC 3.7+、OLE DB 2.6+
升級精靈失敗/卡住無法完成 6.5→7.0檢查錯誤日誌、確保 TempDB 空間、關閉防毒/備份軟體、單用戶模式執行
6.5 特有語法/功能在 2000 失效預存程序/觸發器編譯錯誤參考《SQL Server 6.5 to 2000 升級白皮書》語法對照表、逐一改寫

專案管理建議

  1. 建立專案小組:DBA、開發代表、測試、專案經理
  2. 建立三環境:開發 (Dev)、測試 (UAT/Stage)、生產 (Prod) 完整複刻
  3. 演練至少 3 次:全流程計時、資料驗證腳本自動化、回滾演練
  4. 凍結代碼:升級窗口前 2 週停止 Schema 變更
  5. 上線清單:逐項核對、簽署確認、緊急聯繫人

現代視角:為何不再建議此路徑

  • SQL Server 6.5/7.0/2000 均已結束延伸支援 (2000 於 2013/4/9 結束),無安全性更新
  • 現代硬體/OS 不相容 (無驅動、無安裝媒體)
  • 直接遷移至 SQL Server 2019/2022 + 相容性等級 80 更可行:
    BCP 匯出 6.5 資料 → 載入 2019 (指定代碼頁) → 設定 sp_dbcmptlevel 80 → 應用最小改動
  • 雲端選項:Azure SQL Managed Instance 支援相容性等級 80,免管理 OS/安裝
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved