首頁
編程語言
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 升級至 SQL Server 2000 的實戰經驗,為正在經歷或即將面臨類似升級任務的資料庫管理員提供參考。升級過程中遇到的各種問題及最終解決方案,希望能幫助大家避開坑洞,順利完成遷移。

案例背景

某電子廠運行多套應用系統,其中物資管理系統最為關鍵。系統架構為:Windows NT 4.0 Server 簡體中文版 + SQL Server 6.5 英文版(存放物資系統數據),應用層採用 PowerBuilder 6.0 開發,已穩定運行五年,數據量約 300MB。隨著業務增長,系統急需升級至 SQL Server 2000。乍看之下只是版本號的變更,實際操作卻暗藏玄機,作者初期嚴重低估了難度。

三套方案的嘗試與失敗分析

方案一:使用 BCP 工具導出/導入

嘗試在 SQL Server 6.5 上使用 bcp ... out 導出單表測試,導入 SQL Server 2000 時遭遇三大故障:

  • 故障 1: bcp ... in 提示「字符串數據,右截位」
  • 故障 2: 漢字字段顯示亂碼
  • 故障 3: 含漢字的時間字段格式導入失敗

方案二:使用 SQL Server 2000 升級向導

  • 故障 1: 克服重重困難(打補丁、重置登入方式等)完成升級後,報告不可查看的錯誤,打開資料庫卻發現一無所有
  • 故障 2: 升級向導無法啟動,透明度高,無法進行錯誤追蹤

方案三:ODBC 配置訪問 SQL 6.5 數據源,再用 SQL Server 2000 導入向導

更改 90 多個新表名後開始複製,雖然複製成功,但漢字仍顯示亂碼。隨後在 SQL Server 2000 上重新建立 Latin1_General_BIN 排序規則的資料庫再次導入,故障依舊。

經歷一周反覆測試與失敗,最終決定採用方案一(BCP 方案)為主,因其靈活性最高。以下整理具體可行步驟:

最終可行的升級步驟

1. 生成資料庫物件建立腳本

在 NT Server 4.0 機器上打開 SQL Server Enterprise Manager,選中待升級資料庫,依次生成:

  • 所有表的建立腳本
  • 所有預存程序的建立腳本
  • 視圖腳本(另存為文本備用)

2. 生成 BCP 導出/導入批次命令

打開 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 機器使用。

3. 關鍵點:必須使用 SQL Server 2000 版本的 BCP 工具

經測試,SQL Server 6.5 自帶的 BCP 導出含日期字段的數據時,會產生如 2003 十二月 23 15:09AM 這樣的格式,導致 SQL Server 2000 導入時無法識別日期格式而報錯。解決方法:

  1. 從 SQL Server 2000 安裝目錄 C:\Program Files\Microsoft SQL Server\80\Tools\Binn 複製 bcp.exe 和 resources 目錄
  2. 貼到 NT Server 4.0 機器的 SQL Server 6.5 BCP 工作路徑下(如 C:\MSSQL\Binn)
  3. 將原有 bcp.exe 重命名為 bcp65.exe 備份

4. 建立工作目錄並執行導出

  1. 在 NT 機器上建立 upgradedb 目錄
  2. 將 bcpin.bat、bcpout.bat、剛生成的各類建立腳本複製進入
  3. 在 upgradedb 下建立 data 目錄
  4. 確保 SQL Server 服務已啟動,雙擊執行 bcpout.bat,等待導出完成

5. 遷移數據文件至目標伺服器

將整個 upgradedb 目錄複製或共享到 SQL Server 2000 伺服器上。

6. 在 SQL Server 2000 上建立目標資料庫與物件

  1. 打開 SQL Server 2000 Enterprise Manager,新建同名資料庫,**排序規則設為 Chinese_PRC_BIN**
  2. 打開 Query Analyzer,選中該資料庫,依次執行:建表腳本、建立預存程序腳本、新建視圖

7. 執行數據導入

打開命令提示符,切換到 upgradedb 目錄,執行 bcpin.bat 完成數據導入。

關鍵經驗總結

  • 代碼頁指定至關重要: 導出時必須加 -C1252 參數,否則中文必亂碼
  • BCP 版本必須匹配目標版本: 用 SQL Server 2000 的 BCP 導出,才能兼容 2000 的日期格式識別
  • 排序規則選擇: 目標資料庫使用 Chinese_PRC_BIN 二進制排序,可避免全半角、大小寫等比較問題
  • 分步驟驗證: 先跑單表測試,確認無誤後再批量處理

這套方案雖然步驟較多,但每一步都可控、可驗證,最終成功完成了 300MB 數據的零損失遷移。希望能為面臨類似任務的同行提供實用參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved