IBM DB2 订阅服务器

Microsoft SQL Server 2005 支持通过 Microsoft Host Integration Server 中附带的 OLE DB 访问接口对 IBM DB2/AS 400、DB2/MVS 和 DB2/Universal Database 的推送订阅。

ms152492.note(zh-cn,SQL.90).gif注意:
基于 Itanium(以前的 IA-64)的体系结构当前不支持 Microsoft OLE DB Provider for DB2。因此,SQL Server 复制不支持将数据复制到此平台上的 DB2 订阅服务器。

配置 IBM DB2 订阅服务器

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

  1. 在分发服务器上安装最新版本的 Microsoft OLE DB Provider for DB2:

    • 如果使用的是 SQL Server 2005 Enterprise Edition,则可以从此 Microsoft 网站搜索“Microsoft OLE DB Provider for DB2”,下载该访问接口。
    • 如果使用的是 SQL Server 2005 Standard Edition,则安装最新版本的 Microsoft Host Integration Services (HIS) 服务器,其中包含了该访问接口。

    除了安装访问接口外,我们还建议您安装数据访问工具(默认情况下,它是下载 Enterprise Edition 时安装的),下一步将使用该工具。有关安装和使用数据访问工具的详细信息,请参阅访问接口文档或 HIS 文档。

  2. 为订阅服务器创建连接字符串。可以在任何文本编辑器中创建连接字符串,但是建议您使用数据访问工具来创建。在数据访问工具中创建字符串:

    1. 依次单击**“开始”“程序”“Microsoft OLE DB Provider for DB2”“数据访问工具”**。
    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;Units of Work=RUW;DBMS Platform=DB2/NT;
    Persist Security Info=False;Connection Pooling=True;
    

    字符串中的大多数选项都特定于正在配置的 DB2 服务器,但应始终将“将二进制作为字符处理”选项设置为 False。需要为“初始目录”选项指定一个值以标识订阅数据库。创建订阅时将在新建订阅向导中输入该连接字符串。

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

  4. (可选)为一个或多个项目指定自定义创建脚本。在发布表时,为该表创建 CREATE TABLE 脚本。对于非 SQL Server 订阅服务器,该脚本采用 Transact-SQL 方言创建,然后由分发代理翻译成较通用的 SQL 方言后应用于订阅服务器。若要指定自定义创建脚本,请修改现有的 Transact-SQL 脚本或创建使用 DB2 SQL 方言的完整脚本;如果创建 DB2 脚本,请使用 bypass_translation 指令,这样分发代理无需转换脚本即可将其应用于订阅服务器。
    修改脚本的原因很多,但最常见的原因是要更改数据类型映射。有关详细信息,请参阅本主题的“数据类型映射注意事项”部分。如果修改 Transact-SQL 脚本,应只限于对数据类型映射进行更改(而且脚本不应包含注释)。如果需要进行重大更改,请创建 DB2 脚本。
    修改项目脚本并将其作为自定义创建脚本提供

    1. 为发布生成快照后,定位到该发布的快照文件夹。
    2. 找到名称与项目名称(如 MyArticle.sch)相同的 .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)。可以使用快照复制发布包含使用这些数据类型的主键的表。
  • 如果要在订阅服务器上预创建表,而不是让复制创建这些表,请使用“仅支持复制”选项。有关详细信息,请参阅初始化事务订阅(不使用快照)
  • 与 DB2 相比,SQL Server 允许使用更长的表名称和列名称:

将 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)

DATETIME

TIMESTAMP

DECIMAL(1-31, 0-31)

DECIMAL(1-31, 0-31)

DECIMAL(32-38, 0-38)

VARCHAR(41)

DOUBLE PRECISION

DOUBLE

FLOAT

FLOAT

IMAGE

VARCHAR(0) FOR BIT DATA1

INT

INT

MONEY

DECIMAL(19.4)

NCHAR(1-4000)

VARCHAR(1-4000)

NTEXT

VARCHAR(0)1

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)1

REAL

REAL

SMALLDATETIME

TIMESTAMP

SMALLINT

SMALLINT

SMALLMONEY

DECIMAL(10,4)

SQL_VARIANT

SYSNAME

VARCHAR(128)

TEXT

VARCHAR(0)1

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 DATA1

VARCHAR(MAX)

VARCHAR(0)1

XML

VARCHAR(0)1

1 有关映射到 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。
    ms152492.note(zh-cn,SQL.90).gif注意:
    DB2 类型的指定长度(与其他列长度组合时)不能超过由为表数据分配的 DB2 表空间限定的最大行大小。
    如果对于某个大型对象列没有适当的映射,请考虑对项目使用列筛选,以避免复制该列。有关详细信息,请参阅[筛选已发布数据](ms151775\(v=sql.90\).md)。
  • 在将 SQL Server 的 NCHAR 和 NVARCHAR 复制到 DB2 的 CHAR 和 VARCHAR 时,复制为 DB2 类型使用的长度说明符与为 SQL Server 类型使用的长度说明符相同。但是,数据类型长度对于生成的 DB2 表而言可能太小。
    在某些 DB2 环境中,SQL Server 的 CHAR 数据项并不限于单字节字符,CHAR 或 VARCHAR 项的长度必须考虑到这一点。如果需要,还必须考虑到“移入”**字符和“移出”**字符。如果要复制包含 NCHAR 列和 NVARCHAR 列的表,您可能需要在自定义创建脚本中为数据类型指定更大的最大长度。有关指定自定义创建脚本的信息,请参阅本主题中“配置 IBM DB2 订阅服务器”部分的步骤 5。

请参阅

概念

非 SQL Server 订阅服务器
订阅发布

帮助和信息

获取 SQL Server 2005 帮助