IBM Db2 订阅者

适用于:SQL Server

SQL Server 支持通过 Microsoft Host Integration Server 附带的 OLE DB 提供程序实现对 IBM Db2/AS 400、DB2/MVS 和 DB2/Universal Database 的推送订阅。

配置 IBM Db2 订阅服务器

若要配置 IBM Db2 订阅服务器,请按下列步骤进行操作:

  1. 在分发服务器上安装最新版本的 DB2 的 Microsoft OLE DB 提供程序:

    • 如果你正在使用SQL Server Enterprise Edition,在SQL Server下载网页的相关下载部分,选择Microsoft SQL Server功能包最新版本的链接。 在 Microsoft SQL Server 功能包网页上,搜索 OLE DB Provider for DB2。

    • 如果您使用的是 SQL Server 标准版,请安装包含提供商的最新版本 Microsoft 主机集成服务(HIS)服务器。

    除了安装提供程序外,还要安装数据访问工具,该工具将在下一步中使用。 下载 SQL Server 企业版时,该工具会默认安装。 有关安装和使用数据访问工具的详细信息,请参阅访问接口文档或 HIS 文档。

  2. 为订阅者创建连接字符串。 你可以在任何文本编辑器中创建 连接字符串,但请使用数据访问工具。 在数据访问工具中创建字符串:

    1. 选择 启动、 程序、DB2的OLE DB提供商,然后选择 数据访问工具。

    2. 在 “数据访问工具”中,按照步骤提供 DB2 服务器的相关信息。 完成操作后,系统会创建一个通用数据链接(UDL)以及关联的连接字符串。 复制不使用 UDL,但会使用连接字符串。

    3. 访问连接字符串:右键单击数据访问工具中的 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 服务器,但你应始终将 Derive Parameters 和 False 选项设置为 Process Binary as Character。 你需要为识别订阅数据库的选项提供一个数值 Initial Catalog 。 创建订阅时,请在“新建订阅向导”中输入连接字符串。

  3. 创建快照发布或事务发布,将其启用于非 SQL Server 订阅服务器,然后为订阅服务器创建推送订阅。 有关详细信息,请参阅 为非 SQL Server 订阅者创建订阅。

  4. (可选)为一个或多个项目指定自定义创建脚本。 在发布表时,会为该表创建一个 CREATE TABLE 脚本。 对于非SQL Server订阅者,你用 Transact-SQL 方言创建脚本,分发代理将其翻译成更通用的SQL方言,然后再应用到订阅用户。 要指定自定义创建脚本,要么修改现有的 Transact-SQL 脚本,要么创建一个完整的脚本,使用DB2 SQL方言。 如果你创建 DB2 脚本,使用bypass_translation指令,这样分发代理会在订阅者处应用脚本而不进行翻译。

    你可以修改脚本,原因有很多,但最常见的是修改数据类型映射。 更多信息请参见本文中的“数据类型映射考虑”部分。 如果你修改 Transact-SQL 脚本,限制更改仅限于数据类型映射,且不要包含任何注释。 如果你需要更实质性的改动,可以创建一个 DB2 脚本。

    修改文章脚本并将其用作自定义创建脚本

    1. 生成该出版物快照后,进入该出版物的快照文件夹。

    2. 找到与项目同名的 .sch 文件,例如 MyArticle.sch。

    3. 使用记事本或其他文本编辑器打开此文件。

    4. 修改此文件并将其保存到其他目录。

    5. 执行 sp_changearticle,为 creation_script 属性指定文件路径和文件名。 有关详细信息,请参阅 sp_changearticle (Transact-SQL)。

    创建文章脚本并将其用作自定义创建脚本

    1. 使用Db2 SQL方言创建文章脚本。 请确保文件的第一行为 bypass_translation,且该行不得包含任何其他内容。

    2. 执行 sp_changearticle,为 creation_script 属性指定文件路径和文件名。

IBM Db2 订阅者注意事项

除了文章《非 SQL Server 订阅者》中提到的考虑外,复制到 Db2 订阅者时还要考虑以下问题:

  • 每个复制表的数据和索引被分配到一个 Db2 表空间。 Db2 表空间的页面大小控制表空间中表的最大列数和最大行大小。 应根据复制列的数量和表的最大行大小,确保与复制表关联的表空间是合适的。

  • 如果表中的一个或多个主键列的数据类型为 DECIMAL(32-38, 0-38) 或 NUMERIC(32-38, 0-38),则不要使用事务复制将表发布到 Db2 订阅服务器。 事务复制通过使用主键来识别行。 由于这些数据类型映射到用户的 VARCHAR(41),这种方法可能导致失败。 你可以通过快照复制发布使用这些数据类型的主键的表。

  • 如果要在订阅服务器上创建表,而不是由复制来创建表,请使用“仅复制支持”选项。 有关详细信息,请参阅 初始化事务订阅(不使用快照)。

  • SQL Server 允许比 Db2 更长的表名和列名:

    • 如果发布数据库包含某些表,且这些表的名称长度超过订阅服务器上的 Db2 版本所支持的长度,请为 destination_table 项目属性指定一个替代名称。 有关创建发布时设置属性的详细信息,请参阅创建发布和定义项目。

    • 你不能指定替代列名。 确保已发布的表不包含长度超过订阅者端 Db2 版本所支持范围的列名。

将数据类型从SQL Server映射到IBM Db2

下表显示了将数据复制到运行 IBM Db2 的订阅服务器上时使用的数据类型映射。

SQL Server 数据类型 IBM Db2 数据类型
bigint DECIMAL(19,0)
binary(1-254) CHAR(1-254) 用于 BIT 数据
binary(255-8000) VARCHAR(255-8000) FOR BIT DATA
bit SMALLINT
char(1-254) CHAR(1-254)
char(255-8000) VARCHAR(255-8000)
date 日期
datetime TIMESTAMP
datetime2(0-7) VARCHAR(27)
datetimeoffset(0-7) VARCHAR(34)
十进制(1-31,0-31) 十进制数(1-31, 0-31)
decimal(32-38、0-38) VARCHAR(41)
float(53) DOUBLE
float FLOAT
地理 图像
geometry 图像
hierarchyid 图像
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
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 字符、varchar、binary 和 varbinary 分别映射到 Db2 字符、VARCHAR、CHAR 用于位数据和 VARCHAR 用于位数据时,复制设置 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) 列在生成的 CREATE 脚本中被映射为 VARCHAR(0)。 在将脚本应用到订阅者之前,您必须将长度值 0 更改为合适的值。 如果你不更改数据类型长度,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或VARCHAR项的长度必须考虑这一条件。 如果需要,你还必须考虑shift in和shift out字符。 如果你复制的是带有 nchar 和 nvarchar 列的表,可能需要在自定义创建脚本中为数据类型指定更大的最大长度。 有关指定自定义创建脚本的信息,请参见本文“配置IBM Db2订阅者”部分的第5步。