如何为非 SQL Server 订阅服务器创建订阅 (SQL Server Management Studio)

事务复制和快照复制支持将数据发布到非 MicrosoftSQL Server 订阅服务器。 若要为非 SQL Server 订阅服务器创建订阅,请执行以下步骤:

  1. 在 SQL Server 分发服务器上安装并配置适当的客户端软件和 OLE DB 访问接口。 有关详细信息,请参阅 Oracle 订阅服务器IBM DB2 订阅服务器

  2. 使用新建发布向导创建发布。 有关创建发布的详细信息,请参阅如何创建发布和定义项目 (SQL Server Management Studio)如何从 Oracle 数据库创建发布 (SQL Server Management Studio)。 在新建发布向导中指定下列选项:

    • 在**“发布类型”页上,选择“快照发布”“事务发布”**。

    • 在**“快照代理”页上,清除“立即创建快照”**。

      在为非 SQL Server 订阅服务器启用发布之后,再创建快照,这样可以确保快照代理生成适合非 SQL Server 订阅服务器的快照和初始化脚本。

  3. 通过**“发布属性 - <发布>”**对话框为非 SQL Server 订阅服务器启用发布。 本主题提供了有关此步骤的详细信息。 有关“发布属性”对话框的详细信息,请参阅发布属性 - <发布>

  4. 使用新建订阅向导创建订阅。 本主题提供了有关此步骤的详细信息。

  5. (可选)将 pre_creation_cmd 项目属性更改为在订阅服务器上保留表。 本主题提供了有关此步骤的详细信息。

  6. 为发布生成快照。 本主题提供了有关此步骤的详细信息。

  7. 同步订阅。 有关详细信息,请参阅如何同步推送订阅 (SQL Server Management Studio)

注意注意

此过程适用于运行 MicrosoftSQL Server 2005 和更高版本的发布服务器。

为非 SQL Server 订阅服务器启用发布

  1. 在 SQL Server Management Studio 中连接到发布服务器,然后展开服务器节点。

  2. 展开**“复制”文件夹,再展开“本地发布”**文件夹。

  3. 右键单击发布,再单击**“属性”**。

  4. 在**“订阅选项”页上,为选项“允许非 SQL Server 订阅服务器”**选择 True 值。 选择此选项可更改多个属性,从而可以使发布与非 SQL Server 订阅服务器兼容。

    注意注意

    选择 True 会将 pre_creation_cmd 项目属性的值设置为“drop”。 此设置指定,如果复制与项目中某个表的名称相匹配,则复制应删除订阅服务器上对应的表。 如果要保留订阅服务器上的现有表,则可以对每个项目使用 sp_changearticle 存储过程,并为 pre_creation_cmd 指定值“none”:sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'。

  5. 单击“确定”。系统将会提示为发布创建新快照。 如果不想在此时创建快照,可以在以后使用下一个“如何”过程中介绍的步骤创建快照。

为非 SQL Server 订阅服务器创建订阅

  1. 展开**“复制”文件夹,再展开“本地发布”**文件夹。

  2. 右键单击相应的发布,再单击**“新建订阅”**。

  3. 在**“分发代理位置”页上,确保已选中“在分发服务器上运行所有代理”**。 非 SQL Server 订阅服务器不支持在订阅服务器上运行代理。

  4. 在**“订阅服务器”页上,单击“添加订阅服务器”,再单击“添加非 SQL Server 订阅服务器”**。

  5. 在**“添加非 SQL Server 订阅服务器”**对话框中,选择订阅服务器的类型。

  6. 在**“数据源名称”**中输入值:

    • 对于 Oracle,该值是您配置的透明网络底层 (TNS) 的名称。

    • 对于 IBM,该值可以是任意名称。 通常指定订阅服务器的网络地址。

    此向导并不验证此步骤中输入的数据源名称和步骤 9 中指定的凭据。 直到为订阅运行分发代理后复制才会使用它们。 请确保所有的值已通过使用客户端工具(如 Oracle 的 sqlplus)连接到订阅服务器进行了测试。 有关详细信息,请参阅 Oracle 订阅服务器IBM DB2 订阅服务器

  7. 单击“确定”。在该向导的**“订阅服务器”页上,订阅服务器现在显示在“订阅服务器”列中,并在“订阅数据库”列中显示只读“(默认目标)”**:

    • 对于 Oracle,一台服务器最多只有一个数据库,因此不必指定数据库。

    • 对于 IBM DB2,该数据库是在 DB2 连接字符串的“初始目录”属性中指定的,DB2 连接字符串可以在此过程后面介绍的**“其他连接选项”**字段中输入。

  8. 在**“分发代理安全性”页上,单击订阅服务器旁边的属性按钮 (...) 来打开“分发代理安全性”**对话框。

  9. 在**“分发代理安全性”**对话框中:

    • 在**“进程帐户”“密码”“确认密码”**字段中输入运行分发代理的 Microsoft Windows 帐户和密码,与分发服务器建立本地连接。

      该帐户需要下列最低权限:分发数据库中 db_owner 固定数据库角色的成员、发布访问列表 (PAL) 的成员、快照共享上的读取权限、OLE DB 访问接口的安装目录上的读取权限。 有关 PAL 的详细信息,请参阅保护发布服务器的安全

    • 在**“连接到订阅服务器”下的“登录名”“密码”“确认密码”**字段中,输入用于连接到订阅服务器的登录名和密码。 该登录名应该已配置好且应该具有足够的权限可以在订阅数据库中创建对象。

    • 在**“其他连接选项”**字段中,以连接字符串的形式为订阅服务器指定任意连接选项(Oracle 不需要其他选项)。 每个选项应该用分号分隔。 下面是 DB2 连接字符串的示例(分行符是为了阅读方便):

      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。 需要为“初始目录”选项指定一个值以标识订阅数据库。

  10. 在**“同步计划”页上,从“代理计划”菜单中为分发代理选择一个计划(计划通常为“连续运行”**)。

  11. 在**“初始化订阅”**页上,指定是否应该初始化订阅。如果应该,指定何时初始化:

    • 仅在已创建了所有对象并且在订阅数据库中添加了所有需要的数据时才能清除**“初始化”**。

    • 在**“初始化时间”列的下拉列表中选择“立即”,可以让分发代理在此向导完成后将快照文件传输到订阅服务器。 选择“首先同步”**,可以让分发代理在下次运行时传输文件。

  12. 在**“向导操作”**页上,为订阅编写脚本(可选)。 有关详细信息,请参阅编写复制脚本

在订阅服务器上保留表

  • 默认情况下,为非 SQL Server 订阅服务器启用发布会将 pre_creation_cmd 项目属性的值设置为“drop”。 此设置指定,如果复制与项目中某个表的名称相匹配,则复制应删除订阅服务器上对应的表。 如果要保留订阅服务器上的现有表,则可以对每个项目使用 sp_changearticle 存储过程,并为 pre_creation_cmd 指定值“none”。 sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'.

为发布生成快照

  1. 展开**“复制”文件夹,再展开“本地发布”**文件夹。

  2. 右键单击发布,再单击**“查看快照代理状态”**。

  3. 在**“查看快照代理状态 - <发布>”对话框中,单击“启动”**。

快照代理生成快照后,将显示一条消息,如“[100%] 已生成 17 个项目的快照”。