本文旨在分享從 SQL Server 6.5 升級至 SQL Server 2000 的實戰經驗,為正在經歷或即將面臨類似升級任務的資料庫管理員提供參考。升級過程中遇到的各種問題及最終解決方案,希望能幫助大家避開坑洞,順利完成遷移。
某電子廠運行多套應用系統,其中物資管理系統最為關鍵。系統架構為:Windows NT 4.0 Server 簡體中文版 + SQL Server 6.5 英文版(存放物資系統數據),應用層採用 PowerBuilder 6.0 開發,已穩定運行五年,數據量約 300MB。隨著業務增長,系統急需升級至 SQL Server 2000。乍看之下只是版本號的變更,實際操作卻暗藏玄機,作者初期嚴重低估了難度。
嘗試在 SQL Server 6.5 上使用 bcp ... out 導出單表測試,導入 SQL Server 2000 時遭遇三大故障:
bcp ... in 提示「字符串數據,右截位」更改 90 多個新表名後開始複製,雖然複製成功,但漢字仍顯示亂碼。隨後在 SQL Server 2000 上重新建立 Latin1_General_BIN 排序規則的資料庫再次導入,故障依舊。
經歷一周反覆測試與失敗,最終決定採用方案一(BCP 方案)為主,因其靈活性最高。以下整理具體可行步驟:
在 NT Server 4.0 機器上打開 SQL Server Enterprise Manager,選中待升級資料庫,依次生成:
打開 ISQL/w 工具,選中待升級資料庫,執行以下語句自動生成 BCP 命令(避免手工編輯):
select 'bcp mydatabase.dbo.' + name + ' out ' +
'/DATA/' + name + '.TXT' +
' -Usa -P*** -Sservername -c -C1252'
from mydatabase..sysobjects
where type = 'U'
參數說明:
mydatabase:資料庫名稱/DATA/:BCP 工作目錄下的 data 子目錄,需預先建立***:資料庫密碼servername:伺服器名稱1252:SQL Server 6.5 預設代碼頁,**必須指定**,否則輸出漢字會亂碼執行後將結果保存為 bcpout.bat,再將 out 替換為 in 生成 bcpin.bat,供 SQL Server 2000 機器使用。
經測試,SQL Server 6.5 自帶的 BCP 導出含日期字段的數據時,會產生如 2003 十二月 23 15:09AM 這樣的格式,導致 SQL Server 2000 導入時無法識別日期格式而報錯。解決方法:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn 複製 bcp.exe 和 resources 目錄C:\MSSQL\Binn)bcp.exe 重命名為 bcp65.exe 備份upgradedb 目錄bcpin.bat、bcpout.bat、剛生成的各類建立腳本複製進入upgradedb 下建立 data 目錄bcpout.bat,等待導出完成將整個 upgradedb 目錄複製或共享到 SQL Server 2000 伺服器上。
Chinese_PRC_BIN**打開命令提示符,切換到 upgradedb 目錄,執行 bcpin.bat 完成數據導入。
-C1252 參數,否則中文必亂碼Chinese_PRC_BIN 二進制排序,可避免全半角、大小寫等比較問題這套方案雖然步驟較多,但每一步都可控、可驗證,最終成功完成了 300MB 數據的零損失遷移。希望能為面臨類似任務的同行提供實用參考。