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 權限 | 網域控制站驗證 |
Upgrade\Upgrade.exeC:\MSSQL7\LOG\ERRORLOGDBCC CHECKDB 所有資料庫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;
sp_dbcmptlevel 'MyDB', 80 設定相容性等級 80 (SQL 2000)EXEC sp_updatestatsSQL Server 7.0 強制使用 1252 (西歐語系),中文環境需轉為 936 (GBK/CP936) 才能正確儲存/顯示中文。
Rebuild_DB.sql)-- 使用文字編輯器/腳本批次取代
-- 移除所有類似模式:
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)
-- 確認伺服器預設排序規則為 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 確無錯誤
此為最關鍵步驟,需將 7.0/2000 (1252) 資料正確轉為 936。官方無直接工具,常見做法:
-- 匯出 (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
Encoding.Convert(Encoding.GetEncoding(1252), Encoding.GetEncoding(936), bytes)、批次寫入SQL6ToSQL2000.EXE (需自行取得/開發)WHERE col = '值'、ORDER BY、DISTINCT、GROUP BY 在 936 下行為可能不同| 風險 | 影響 | 緩解 |
|---|---|---|
| 字元集轉換資料損壞 | 中文變亂碼、截斷、遺失 | 測試環境全量驗證、抽樣人工核對、保留 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 升級白皮書》語法對照表、逐一改寫 |
sp_dbcmptlevel 80 → 應用最小改動