从 SQL Server 2005 开始,SQL Server 支持通过 Oracle 提供的 Oracle OLE DB 提供程序将订阅推送到 Oracle。
配置 Oracle 订阅服务器
若要配置 Oracle 订阅服务器,请执行以下步骤:
在 SQL Server 分发服务器上安装和配置 Oracle 客户端网络软件和 Oracle OLE DB 提供程序,以便分发服务器能够连接到 Oracle 订阅服务器。 Oracle 客户端网络软件应该是可用的最新版本。 Oracle 建议用户安装最新版本的客户端软件。 因此,客户端软件通常比数据库软件更新。 安装软件的最直接方法是在 Oracle 客户端磁盘上使用 Oracle 通用安装程序。 在 Oracle 通用安装程序中,你将提供以下信息:
信息 DESCRIPTION Oracle 主页 这是 Oracle 软件的安装目录的路径。 接受默认值(C:\oracle\ora90 或类似)或输入其他路径。 有关 Oracle 主页的详细信息,请参阅本主题后面的“Oracle 主页注意事项”部分。 Oracle 主页名称 Oracle 主路径的别名。 安装类型 在 Oracle 10g 中,选择 运行时 或 管理员 安装选项。 为订阅服务器创建 TNS 名称。 TNS(透明网络基底)是 Oracle 数据库使用的通信层。 TNS 服务名称是 Oracle 数据库实例在网络上已知的名称。 配置与 Oracle 数据库的连接时,分配 TNS 服务名称。 复制使用 TNS 服务名称来标识订阅服务器和建立连接。
Oracle 通用安装程序完成后,使用 Net 配置助手配置网络连接。 必须提供四条信息来配置网络连接。 Oracle 数据库管理员在设置数据库和侦听器时配置网络配置,如果你没有该配置,则应能够提供此信息。 您必须执行以下操作:
行动 DESCRIPTION 标识数据库 有两种方法用于标识数据库。 第一种方法使用 Oracle 系统标识符(SID),可在每个 Oracle 版本中使用。 第二种方法使用从 Oracle 版本 8.0 开始可用的服务名称。 这两种方法都使用在创建数据库时配置的值,并且重要的是,客户端网络配置应使用管理员在为数据库配置侦听器时使用的相同命名方法。 标识数据库的网络别名 必须指定用于访问 Oracle 数据库的网络别名。 网络别名实质上是指向在创建数据库时配置的远程 SID 或服务名称的指针。它在不同的 Oracle 版本和产品中被称为多个名称,包括 Net Service Name 和 TNS 别名。 登录时,SQL*Plus 会提示输入此别名作为“主机字符串”参数。 选择网络协议 选择要支持的相应协议。 大多数应用程序都使用 TCP。 指定主机信息以标识数据库侦听器 主机是运行 Oracle 侦听器的计算机的名称或 DNS 别名,该计算机通常是数据库所在的同一台计算机。 对于某些协议,必须提供其他信息。 例如,如果选择 TCP,则必须提供侦听器侦听目标数据库的连接请求的端口。 默认 TCP 配置使用端口 1521。 创建快照或事务发布,为非 SQL Server 订阅服务器启用它,然后为订阅服务器创建推送订阅。 有关详细信息,请参阅 为非 SQL Server 订阅服务器创建订阅。
设置目录权限
在分发服务器上运行 SQL Server 服务的帐户必须被授予对安装 Oracle 客户端网络软件的目录及其所有子目录的读取和执行权限。
测试 SQL Server 分发服务器与 Oracle 发布服务器之间的连接
在 Net 配置助手的末尾附近,可能会有一个选项来测试与 Oracle 订阅服务器的连接。 在测试连接之前,请确保 Oracle 数据库实例处于联机状态,并且 Oracle 侦听器正在运行。 如果测试失败,请联系负责要连接到的数据库的 Oracle DBA。
成功连接到 Oracle 订阅服务器后,尝试使用为订阅的分发代理配置的帐户和密码登录到数据库:
单击 开始,然后单击 运行。
键入
cmd
并单击“ 确定”。在命令提示符下,键入:
sqlplus <UserSchemaLogin>/<UserSchemaPassword>@<NetServiceName>
例如:
sqlplus replication/$tr0ngPasswerd@Oracle90Server
如果网络配置成功,登录将成功,你将看到提示
SQL
。
Oracle 主页注意事项
Oracle 支持应用程序二进制文件的并排安装,但在任意时间复制只能使用一个二进制文件集。 每个二进制文件集都与 Oracle Home 相关联;二进制文件位于目录 %ORACLE_HOME%\bin 中。 在复制与 Oracle 订阅服务器建立连接时,必须确保使用正确的二进制文件集(特别是最新版本的客户端网络软件)。
使用 SQL Server 服务和 SQL Server 代理服务使用的帐户登录到分发服务器,并设置相应的环境变量。 应将 %ORACLE_HOME% 变量设置为引用安装客户端网络软件时指定的安装点。 %PATH% 必须包含 %ORACLE_HOME% \bin 目录作为遇到的第一个 Oracle 条目。 有关设置环境变量的信息,请参阅 Windows 文档。
注释
如果在 SQL Server 分发服务器上有多个 Oracle 主页,请确保分发代理正在使用最新的 Oracle OLE DB 提供程序。 在某些情况下,在 SQL Server 分发服务器上更新客户端组件时,Oracle 不会默认更新 OLE DB 提供程序。 卸载旧的 OLE DB 提供程序并安装最新的 OLE DB 提供程序。 有关安装和卸载提供程序的详细信息,请参阅 Oracle 文档。
Oracle 订阅者的注意事项
除了主题 非 SQL Server 订阅服务器中涵盖的注意事项之外,在复制到 Oracle 订阅服务器时请考虑以下问题:
Oracle 将空字符串和 NULL 值视为 NULL。 如果将 SQL Server 列定义为 NOT NULL,并将该列复制到 Oracle 订阅服务器,则这一点非常重要。 为避免在对 Oracle 订阅者应用更改时出现失败,您必须执行以下操作之一:
确保未将空字符串作为列值插入已发布表中。
如果可以接受分发代理历史记录日志中的故障通知并继续处理,请使用分发代理的 -SkipErrors 参数。 指定 Oracle 错误代码 1400(-SkipErrors1400)。
修改生成的创建表脚本,从可能具有关联空字符串的任何字符列中删除 NOT NULL 属性,并使用 sp_addarticle 参数为项目@creation_script提供修改后的脚本作为自定义创建脚本。
Oracle 订阅服务器支持0x4071的架构选项。 有关架构选项的详细信息,请参阅sp_addarticle(Transact-SQL)。
将数据类型从 SQL Server 映射到 Oracle
下表显示了将数据复制到运行 Oracle 的订阅服务器时使用的数据类型映射。
SQL Server 数据类型 | Oracle 数据类型 |
---|---|
bigint |
NUMBER(19,0) |
binary(1-2000) |
RAW(1-2000) |
binary(2001-8000) |
BLOB |
bit |
数字(1) |
char(1-2000) |
CHAR(1-2000) |
char(2001-4000) |
VARCHAR2(2001-4000) |
char(4001-8000) |
CLOB |
date |
日期 |
datetime |
日期 |
datetime2(0-7) |
Oracle 9 和 Oracle 10 的 TIMESTAMP(7);Oracle 8 的 VARCHAR(27) |
datetimeoffset(0-7) |
适用于 Oracle 9 和 Oracle 10 的 TIMESTAMP(7)WITH TIME ZONE;适用于 Oracle 8 的 VARCHAR(34) |
decimal(1-38, 0-38) |
数字(1-38, 0-38) |
float(53) |
漂浮 |
float |
漂浮 |
geography |
BLOB(大对象存储) |
geometry |
BLOB |
hierarchyid |
BLOB |
image |
BLOB |
int |
NUMBER(10,0) |
money |
NUMBER(19,4) |
nchar(1-1000) |
CHAR(1-1000) |
nchar(1001-4000) |
NCLOB |
ntext |
NCLOB |
numeric(1-38, 0-38) |
NUMBER(1-38, 0-38) |
nvarchar(1-1000) |
VARCHAR2(1-2000) |
nvarchar(1001-4000) |
NCLOB |
nvarchar(max) |
NCLOB |
real |
真正 |
smalldatetime |
日期 |
smallint |
NUMBER(5,0) |
smallmoney |
NUMBER(10,4) |
sql_variant |
无 |
sysname |
VARCHAR2(128) |
text |
CLOB |
time(0-7) |
VARCHAR(16) |
timestamp |
RAW(8) |
tinyint |
NUMBER(3,0) |
uniqueidentifier |
CHAR(38) |
varbinary(1-2000) |
RAW(1-2000) |
varbinary(2001-8000) |
BLOB |
varchar(1-4000) |
VARCHAR2(1-4000) |
varchar(4001-8000) |
CLOB |
varbinary(max) |
BLOB |
varchar(max) |
CLOB |
xml |
NCLOB |