IBM Db2 订阅服务器
适用于:SQL Server
SQL Server 支持通过 Microsoft Host Integration Server 包含的 OLE DB 提供程序对 IBM Db2/AS 400、DB2/MVS 和 DB2/通用数据库进行的推送订阅。
配置 IBM Db2 订阅服务器
若要配置 IBM Db2 订阅服务器,请按下列步骤进行操作:
在分发服务器上安装最新版本的 DB2 的 Microsoft OLE DB 提供程序:
如果使用的是 SQL Server Enterprise 版本,请在 SQL Server 下载网页的“相关下载”部分中,单击指向最新版本的 Microsoft SQL Server 功能包的链接。 在 Microsoft SQL Server Feature Pack(Microsoft SQL Server 功能包)网页中,搜索 Microsoft OLE DB Provider for DB2。
如果使用的是 SQL Server Standard 版本,则安装最新版本的 Microsoft Host Integration Services (HIS) 服务器,其中包含了提供程序。
除安装提供程序外,我们还建议安装数据访问工具(默认情况下随 SQL Server Enterprise 版本的下载包一起安装),下一步骤将使用该工具。 有关安装和使用数据访问工具的详细信息,请参阅访问接口文档或 HIS 文档。
为订阅服务器创建连接字符串。 可以在任何文本编辑器中创建连接字符串,但是建议您使用数据访问工具来创建。 在数据访问工具中创建字符串:
依次单击 “开始”、 “程序”、 “Microsoft OLE DB Provider for DB2”、 “数据访问工具”。
在 “数据访问工具”中,按照步骤提供 DB2 服务器的相关信息。 当使用此工具完成操作后,就创建了一个包含相关连接字符串的通用数据链接 (UDL)(复制实际使用的不是 UDL,而是连接字符串)。
访问连接字符串:右键单击数据访问工具中的 UDL 并选择 “显示连接字符串”。
连接字符串类似于(使用换行符是为了方便阅读):
Provider=DB2OLEDB;Initial Catalog=MY_SUBSCRIBER_DB;Network Transport Library=TCP;Host CCSID=1252; PC Code Page=1252;Network Address=MY_SUBSCRIBER;Network Port=50000;Package Collection=MY_PKGCOL; Default Schema=MY_SCHEMA;Process Binary as Character=False;Derive Parameters=False;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;
字符串中的大多数选项都特定于正在配置的 DB2 服务器,但
Process Binary as Character
和Derive Parameters
选项应始终设置为False
。 需要为Initial Catalog
选项指定值以标识订阅数据库。 创建订阅时将在新建订阅向导中输入该连接字符串。创建快照或事务发布,为非 SQL Server 订阅服务器启用该发布,然后为订阅服务器创建推送订阅。 有关详细信息,请参阅 为非 SQL Server 订阅服务器创建订阅。
(可选)为一个或多个项目指定自定义创建脚本。 在发布表时,会为该表创建一个
CREATE TABLE
脚本。 对于非 SQL Server 订阅服务器,该脚本采用 Transact-SQL 方言创建,然后由分发代理转换为更通用的 SQL 方言后应用于订阅服务器。 要指定自定义创建脚本,请修改现有的 Transact-SQL 脚本或创建使用 DB2 SQL 方言的完整脚本;如果创建了 DB2 脚本,请使用 bypass_translation 指令,这样分发代理无需转换脚本即可将其应用于订阅服务器。修改脚本的原因很多,但最常见的原因是要更改数据类型映射。 有关详细信息,请参阅本主题的“数据类型映射注意事项”部分。 如果修改 Transact-SQL 脚本,应只限于对数据类型映射进行更改(而且脚本不应包含任何注释)。 如果需要进行重大更改,请创建 DB2 脚本。
修改项目脚本并将其作为自定义创建脚本提供
为发布生成快照后,定位到该发布的快照文件夹。
找到与项目同名的
.sch
文件,例如MyArticle.sch
。使用记事本或其他文本编辑器打开此文件。
修改此文件并将其保存到其他目录。
执行
sp_changearticle
,为 creation_script 属性指定文件路径和文件名。 有关详细信息,请参阅 sp_changearticle (Transact-SQL)。
创建项目脚本并将其作为自定义创建脚本提供
使用 DB2 SQL 方言创建项目脚本。 请确保该文件的第一行为 bypass_translation,并且该行不包含任何其他内容。
执行 sp_changearticle,为 creation_script 属性指定文件路径和文件名。
IBM Db2 订阅服务器的注意事项
除了 Non-SQL Server Subscribers主题中所述注意事项外,在向 DB2 订阅服务器复制时,请考虑以下问题:
每个复制的表的数据和索引都分配到一个 DB2 表空间。 DB2 表空间的页大小决定表空间中表的最大列数和最大行大小。 应确保与复制的表关联的表空间与表的复制列数和最大行大小适当。
如果表中有一个或多个主键列的数据类型为 DECIMAL(32-38, 0-38) 或 NUMERIC(32-38, 0-38),请勿使用事务复制向 DB2 订阅服务器发布表。 事务复制使用主键标识行,这可能会导致失败,因为这些数据类型在订阅服务器上均映射为 VARCHAR(41)。 可以使用快照复制发布包含使用这些数据类型的主键的表。
如果要在订阅服务器上预创建表,而不是让复制创建这些表,请使用“仅支持复制”选项。 有关详细信息,请参阅 初始化事务订阅(不使用快照)中手动初始化订阅。
SQL Server 允许使用比 DB2 更长的表名称和列名称:
将数据类型从 SQL Server 映射到 IBM Db2
下表显示了将数据复制到运行 IBM Db2 的订阅服务器上时使用的数据类型映射。
SQL Server 数据类型 | IBM Db2 数据类型 |
---|---|
bigint | DECIMAL(19,0) |
binary(1-254) | CHAR(1-254) FOR BIT DATA |
binary(255-8000) | VARCHAR(255-8000) FOR BIT DATA |
bit | SMALLINT |
char(1-254) | CHAR(1-254) |
char(255-8000) | VARCHAR(255-8000) |
date | DATE |
datetime | TIMESTAMP |
datetime2(0-7) | VARCHAR(27) |
datetimeoffset(0-7) | VARCHAR(34) |
decimal(1-31, 0-31) | DECIMAL(1-31, 0-31) |
decimal(32-38, 0-38) | VARCHAR(41) |
float(53) | DOUBLE |
float | FLOAT |
地理 | IMAGE |
geometry | IMAGE |
hierarchyid | IMAGE |
image | VARCHAR(0) FOR BIT DATA* |
into | INT |
money | DECIMAL(19,4) |
nchar(1-4000) | VARCHAR(1-4000) |
ntext | VARCHAR(0)* |
numeric(1-31, 0-31) | DECIMAL(1-31,0-31) |
numeric(32-38, 0-38) | VARCHAR(41) |
nvarchar(1-4000) | VARCHAR(1-4000) |
nvarchar(max) | VARCHAR(0)* |
real | REAL |
smalldatetime | TIMESTAMP |
smallint | SMALLINT |
smallmoney | DECIMAL(10,4) |
sql_variant | 空值 |
sysname | VARCHAR(128) |
text | VARCHAR(0)* |
time(0-7) | VARCHAR(16) |
timestamp | CHAR(8) FOR BIT DATA |
tinyint | SMALLINT |
uniqueidentifier | CHAR(38) |
varbinary(1-8000) | VARCHAR(1-8000) FOR BIT DATA |
varchar(1-8000) | VARCHAR(1-8000) |
varbinary(max) | VARCHAR(0) FOR BIT DATA* |
varchar(max) | VARCHAR(0)* |
xml | VARCHAR(0)* |
- 有关映射到 VARCHAR(0) 的详细信息,请参阅下一部分。
数据类型映射注意事项
复制到 DB2 订阅服务器时,请考虑下列数据类型映射问题:
在将 SQL Server char、varchar、binary 和 varbinary 分别映射到 DB2 CHAR、VARCHAR、CHAR FOR BIT DATA 和 VARCHAR FOR BIT DATA 时,复制会将 DB2 数据类型的长度设置为与 SQL Server 类型的长度相同。
这样,只要 DB2 页大小约束足够大,能容纳最大行大小,就可以在订阅服务器上成功创建已生成的表。 请确保用于访问 DB2 数据库的登录帐户具有访问表空间的权限,这些表空间具有足够大小可以存放向 DB2 复制的表。
DB2 可以支持最大 32 KB 的 VARCHAR 列,因此可以将某些 SQL Server 大型对象列适当映射到 DB2 VARCHAR 列。 但是,复制用于 DB2 的 OLE DB 提供程序不支持将 SQL Server 大型对象映射到 DB2 大型对象。 因此,在生成的创建脚本中,将 SQL Server text、varchar(max)、ntext 和 nvarchar(max) 列映射到 VARCHAR(0)。 在将脚本应用于订阅服务器之前,必须将长度值 0 更改为一个适当的值。 如果不更改数据类型长度,则当试图在 DB2 订阅服务器上创建表时,DB2 会产生错误 604(错误 604 表示数据类型的精度或长度属性无效)。
请根据对要复制的源表的了解来确定是否适合将 SQL Server 大型对象映射到可变长度的 DB2 项,并在自定义创建脚本中指定适当的最大长度。 有关指定自定义创建脚本的信息,请参阅本主题中“配置 IBM Db2 订阅服务器”部分的步骤 5。
注意
DB2 类型的指定长度(与其他列长度组合时)不能超过由为表数据分配的 DB2 表空间限定的最大行大小。
如果对于某个大型对象列没有适当的映射,请考虑对项目使用列筛选,以避免复制该列。 有关详细信息,请参阅筛选已发布数据。
在将 SQL Server nchar 和 nvarchar 复制到 DB2 CHAR 和 VARCHAR 时,复制对 DB2 类型使用的说明符长度与对 SQL Server 类型相同。 但是,数据类型长度对于生成的 DB2 表而言可能太小。
在某些 DB2 环境中,SQL Server char 数据项并不限于单字节字符,CHAR 或 VARCHAR 项的长度必须考虑到这一点。 如果需要,还必须考虑到“移入” 字符和“移出” 字符。 如果要复制包含 nchar 和 nvarchar 列的表,您可能需要在自定义创建脚本中为数据类型指定更大的最大长度。 有关指定自定义创建脚本的信息,请参阅本主题中“配置 IBM Db2 订阅服务器”部分的步骤 5。