Oracle 数据类型与 Microsoft SQL Server 数据类型不总是完全匹配。如果可能,在发布 Oracle 表时会自动选择匹配的数据类型。在单一数据类型映射不清晰的情况下,提供备用的数据类型映射。有关选择备用映射的信息,请参阅下面部分“指定备用数据类型映射”。
下表显示了将数据从 Oracle 发布服务器移动到 SQL Server 分发服务器时,在 Oracle 和 SQL Server 之间数据类型的默认映射情况。“备用”列指示是否提供备用映射。
Oracle 数据类型 | SQL Server 数据类型 | 备用 |
---|---|---|
BFILE | VARBINARY(MAX) | 是 |
BLOB | VARBINARY(MAX) | 是 |
CHAR([1-2000]) | CHAR([1-2000]) | 是 |
CLOB | VARCHAR(MAX) | 是 |
DATE | DATETIME | 是 |
FLOAT | FLOAT | 否 |
FLOAT([1-53]) | FLOAT([1-53]) | 否 |
FLOAT([54-126]) | FLOAT | 否 |
INT | NUMERIC(38) | 是 |
INTERVAL | DATETIME | 是 |
LONG | VARCHAR(MAX) | 是 |
LONG RAW | IMAGE | 是 |
NCHAR([1-1000]) | NCHAR([1-1000]) | 否 |
NCLOB | NVARCHAR(MAX) | 是 |
NUMBER | FLOAT | 是 |
NUMBER([1-38]) | NUMERIC([1-38]) | 否 |
NUMBER([0-38],[1-38]) | NUMERIC([0-38],[1-38]) | 是 |
NVARCHAR2([1-2000]) | NVARCHAR([1-2000]) | 否 |
RAW([1-2000]) | VARBINARY([1-2000]) | 否 |
REAL | FLOAT | 否 |
ROWID | CHAR(18) | 否 |
TIMESTAMP | DATETIME | 是 |
UROWID | CHAR(18) | 否 |
VARCHAR2([1-4000]) | VARCHAR([1-4000]) | 是 |

在从 Oracle 数据库复制数据时需注意下列数据类型问题。
不支持的数据类型
不支持下列数据类型;无法复制具有这些类型的列:
- 对象类型
- XML 类型
- Varray
- 嵌套表
- 使用 REF 的列
DATE 数据类型
SQL Server 中的日期范围从公元 1753 年到公元 9999 年,而 Oracle 中的日期范围从公元前 4712 年到公元 4712 年。如果 DATE 类型的列包含的值超出了 SQL Server 的日期范围,则应为该列选择备用的数据类型,即 VARCHAR(19)。
FLOAT 和 NUMBER 类型
在 FLOAT 和 NUMBER 数据类型映射期间指定的小数位数和精度取决于为 Oracle 数据库中使用该数据类型的列指定的小数位数和精度。精度指数字的位数。小数位数指小数点后的数字位数。例如,数 123.45 的精度是 5,小数位数是 2。
Oracle 允许定义小数位数大于精度的数,如 NUMBER(4,5),但 SQL Server 要求精度等于或大于小数位数。为了确保不发生数据截断,如果在 Oracle 发布服务器上出现小数位数大于精度的情况,则会在映射数据类型时将精度设置为等于小数位数:NUMBER(4,5) 将映射为 NUMERIC(5,5)。
![]() |
---|
如果未指定 NUMBER 的小数位数和精度,SQL Server 将默认使用最大的小数位数 (8) 和精度 (38)。建议复制数据时在 Oracle 中设置特定的小数位数和精度来达到更好的存储效果和性能。
|
大型对象类型
Oracle 最多支持 4 GB,而 SQL Server 最多支持 2 GB。大于 2 GB 的复制数据会被截断。
如果 Oracle 表中包括一个 BFILE 列,则该列的数据将存储在文件系统中。必须使用以下语法授予复制管理用户帐户访问存储数据的目录的权限:
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
有关大型对象类型的详细信息,请参阅 Oracle 发布服务器的设计注意事项和限制中的“大型对象注意事项”部分。