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

異構數據遷移必讀:DTS 數據轉換與傳輸的關鍵注意事項

     編輯:Oracle 資料庫基礎

核心提示

使用數據轉換服務(DTS)在異構數據源與目標服務器之間轉換數據前,必須了解不同提供程序、驅動程序對數據類型和 SQL 語法的支持差異。本文彙總 SQL Server 2000 環境下常見的陷阱與最佳實踐。

一、SQL Server 作為數據源

  • real → int 精度損失: SQL Server 2000 的 real 僅支持 6 位精度,如 2147480000 可能轉為 2147480065。
  • 文本轉日期/時間: OLE DB 僅接受 yyyy-mm-dd hh:mm:ss.fffffffff 格式,建議用 CDate 或 ActiveX 腳本轉換。
  • 不支持 DBTYPE_DATE/DBTYPE_TIME: 僅支持 DBTYPE_DATETIME;多步驟訪問請用全局臨時表(##tmp)或 tempdb 永久表,避免局部臨時表(#tmp)導致存儲過程不可作為轉換源。

二、DTS 導入/導出向導與設計器

  • 同一連接不能同時作為轉換的源與目標。
  • 對 Access、ODBC DSN 等唯讀源,可在「高級連接屬性」將模式屬性設為 1。
  • 創建目標表時,所有者為當前用戶(通常是 dbo),若同名表已存在會導致失敗。
  • 數據驅動查詢要求目標支持 OLE DB ICommand 接口,純文本文件不支持。
  • 大字段截斷隱患: text/ntext/image 超過 8,388,602 字節會被靜默截斷,僅在日志(..log)記錄,不報錯。

三、其他常見數據源/目標要點

Microsoft SNA Server

  • AS/400、VSAM 的 OLE DB 提供程序不支持向導用於創建/截斷表的 SQL。

Microsoft Access

  • 導出大量數據到 Access 97 時,提供程序在內存緩衝所有插入,易導致內存不足;解決方案:構造分批次的 SELECT 語句。

Visual FoxPro

  • 僅支持 numeric(15,9) 精度,超出會截斷四捨五入;不支持 SELECT INTO,僅支持 INSERT VALUE。
  • ODBC 驅動無法寫入 BLOB,因 FoxPro 不支持動態游標。

ODBC 通用

  • 導出含 BLOB 列的表需唯一鍵。
  • SQL Server ODBC 驅動要求 BLOB 列置於源行集末尾(向導自動處理)。
  • 連接忙錯誤:將 MaxConcurrentSteps 設 1、增加 ODBC 連接、或改用 SQLOLEDB 提供程序(連 SQL 6.5 需跑 Instcatl.sql)。

Oracle

  • Microsoft 驅動支持 Oracle 7.3 BLOB,不支持 8.0 的 BLOB/CLOB/NCLOB/BFILE。
  • 不支持發送 Unicode 字符串(需 N 前綴);number 負縮放不支持;無精度 number 長度報 20 位,超 20 位需手動調精度。
  • 單表僅支持一個 LONG 列;區分大小寫列名需精確引用;分布式事務需 Oracle 8.0.4.1+。
  • OLE DB 提供程序不支持 ICommandWithParameters,不能作數據驅動查詢目標。

IBM DB2 (AS/400)

  • 不支持 Unicode/BLOB;CREATE TABLE 不支持 NULL 語法(可手動編輯去除引用);假定 NOT NULL 為預設。

Sybase

  • numeric(3,0) 默認映射 smallmoney,numeric(18/19,x) 映射 money,易丟失精度,需手動調整列映射。
  • 向導無法刪除重建表;SQLAnywhere 每次僅能移一張表,用設計器可突破但需將 Step 的 ExecuteInMainThread 設 True。
  • 含 BLOB/Image 表不可複製到 Sybase;編程複製 Image 表勿改默認 BLOB 設置。

dBase / Paradox

  • 表名限 8 字符,列名限 10 字符(dBase)。

四、文件導入/導出與代碼頁/排序規則

  • char/varchar 跨代碼頁會丟擴展字符;nchar/nvarchar 安全。
  • BLOB 導出固定長度文本默認 2GB,易爆盤,建議用分隔格式或限制長度。
  • OLE DB 文本提供程序不處理超 2MB 的 BLOB 列。
  • 最佳實踐: 國際化數據請以 Unicode 存儲,避免代碼頁/排序規則不匹配導致數據損壞。

五、複製 SQL Server 對象任務與列轉換的代碼頁行為

列轉換:源 Unicode → 目標非 Unicode(最佳匹配);源非 Unicode → 目標 Unicode(視為 1252);雙方皆非 Unicode(直接複製二進制,必損)。

結語

異構遷移細節決定成敗,建議遷移前完整測試數據類型映射、代碼頁轉換、大字段處理、約束與索引重建,並保留詳細日志以便事後審計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景行為
SQL 2000 → SQL 2000啟用 UseCollation 屬性則無損
SQL 2000 → SQL 7.0匹配默認排序規則代碼頁的列用最佳匹配,否則按默認代碼頁解碼,有損
SQL 7.0 → SQL 2000UseCollation 不可用,目標列獲默認排序規則,代碼頁不匹配則最佳匹配
SQL 7.0 → SQL 7.0不同默認代碼頁時最佳匹配