排序規則定義了字元的位元模式、排序次序與比較規則(區分大小寫、重音、假名等)。SQL Server 7.0 僅支援單一伺服器級排序規則;SQL Server 2000 起支援資料庫、資料行層級的多重排序規則。本文系統整理不變更排序規則的遷移方法、跨版本轉換步驟、master 資料庫重建細節,助您安全完成排序規則遷移。
一、不變更排序規則的遷移方法
以下作業保留原資料庫排序規則,不發生轉換:
- 備份/還原:還原至不同排序規則的伺服器,資料庫排序規則維持原狀。
- 分離/附加:附加至不同排序規則的伺服器,資料庫排序規則不變。
- 複製資料庫精靈:本質為自動化分離/附加,排序規則同樣保留。(僅 SQL 2000 支援)
二、SQL Server 7.0 之間轉換排序規則
必須在目標伺服器重建物件,再以 DTS/bcp 遷移資料:
- 備份來源資料庫。
- 用企業管理員為所有物件產生腳本。
- 用 DTS/bcp 導出所有資料表資料。
- 在目標伺服器建立新資料庫(將使用目標伺服器預設排序規則)。
- 在查詢分析器執行腳本重建物件(資料表/資料行繼承資料庫排序規則)。
- 用 DTS/bcp 導入資料至目標資料表。
三、SQL Server 7.0 → 2000 轉換排序規則
關鍵差異:目標資料庫/資料行須預先建立正確排序規則,DTS 必須啟用「使用排序規則」選項進行碼頁轉換。
- 備份來源資料庫。
- 產生所有物件腳本;若資料行需特定排序規則,手動修改腳本中的 COLLATE 子句。
- 在目標伺服器以適當排序規則建立新資料庫。
- 執行腳本重建物件(新資料表/資料行採用資料庫排序規則,除非腳本指定)。
- 用 DTS/bcp 遷移資料。DTS 設定:啟用「使用排序規則」;停用「先建立目標物件」(物件已存在)。
注意:請勿用 SQL 7.0 版 DTS 與 SQL 2000 互傳物件,必須使用 SQL 2000 版 DTS。
四、SQL Server 2000 內部轉換排序規則
- 備份來源資料庫。
- 檢查是否有資料行使用 COLLATE 子句(
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLLATION_NAME IS NOT NULL)。
- 在目標伺服器以目標排序規則建立新資料庫。
- 無 COLLATE 子句:用 DTS 啟用「使用排序規則」直接遷移資料(碼頁轉換)。
- 有 COLLATE 子句:需分階段處理:
- 產生腳本(排除索引、觸發器、PK、FK、預設、檢查條件),勾選「僅為 7.0 相容功能產生腳本」以移除 COLLATE 子句。
- 在目標資料庫執行腳本建立物件(繼承資料庫排序規則)。
- 用 DTS 僅遷移資料(不建立物件)。
- 資料遷移成功後,產生所有約束/索引腳本並在目標執行。
五、變更 master 資料庫排序規則(重建 master)
重建 master 等同建立新 master,msdb、model 同步重建。執行前必備:
- master、msdb、model 完整備份。
- 匯出所有登入資訊(
sp_help_revlogin 腳本)。
- 為所有 SQL Agent 作業、警示、操作員產生腳本;遷移所有 DTS 套件。
- 記錄 model 資料庫的所有自訂變更。
SQL Server 2000 重建 master 步驟
- 重建完成後,所有使用者資料庫需從備份還原或用
sp_attach_db 重新附加。
- 重建僅改變 master/model/msdb 排序規則,不改變使用者資料庫排序規則。若需變更,需用
ALTER DATABASE ... COLLATE 建立新資料庫,再以 DTS/bcp 遷移資料。
ALTER DATABASE 不會自動變更資料行排序規則,資料行需用 ALTER TABLE ... ALTER COLUMN ... COLLATE,或利用 DTS 在建立資料表時指定排序規則(停用「先刪除現有物件」)。
SQL Server 7.0 重建 master 步驟
- SQL 7.0 不支援多重排序規則,重建前必須導出所有使用者資料庫資料與物件腳本。
- 以新排序規則重建 master(新資料庫自動繼承新預設排序規則)。
- 建立新資料庫、執行腳本重建物件、導入資料。
關鍵提醒
- DTS「使用排序規則」控制碼頁轉換,不影響資料行層級的 COLLATE 定義。
- 跨版本遷移務必使用較新版本的 DTS(SQL 2000 DTS 可連 SQL 7.0,反向不可)。
- master 重建屬高風險作業,非維護窗口嚴禁操作,並備妥完整回滾計畫。
- 排序規則變更會影響索引順序、比較語意、應用程式排序結果,遷移後必須完整回歸測試。
掌握排序規則遷移細節,能讓跨版本、跨伺服器、跨語系的資料庫遷移更受控、更安全。