创建复制集

在Red Hat集群主机上的Db2 Warehouse复制源上初始化复制目标后,就可以创建复制集。 复制集是源数据库中要在目标数据库上复制的表的集合。

开始之前

此任务在复制源的集群主机上完成。 在运行 API 调用之前,请确保收集以下信息:
  • 集群主机上源的基本授权令牌。1
  • 复制源数据库和复制目标数据库的主机名。
  • 复制源数据库和复制目标数据库的外部端口号。2
  • 要复制的表和模式集合的复制集名称 (如果有)。
  • 用于表复制的源模式和表列表。
  • 模式和表包含和排除模式复制的模式。
此外,请确保在源数据库与目标数据库之间配置 Db2® 传输层安全(TLS)。 此外,请确保您的表满足复制键要求
1 您需要创建基本授权令牌以运行 cURL 请求。 要创建令牌,请运行以下命令:
echo <source_db_username>:<source_db_password> | base64

其中 source 指的是源数据库或目标数据库。

2 您可以通过运行以下命令来检索复制源数据库和复制目标数据库的外部端口号:
oc get svc | grep <db2_instance_id> | grep db2u-engn-svc | grep 50001 | sed 's/.*50001://' | sed 's/\/TCP.*//')

关于本任务

通常,复制集将包含要保持事务一致性的表,例如应用程序所使用的所有表。 对于复制集,所有从属事务都将以源落实顺序应用于目标,而其他事务将以并行方式应用。

注意: 请注意以下限制:
  • 请勿在多个复制集中包含同一源表。
  • 如果要复制按行组织的表,请确保源表和目标表都具有强制实施的主键。
  • 如果必须将唯一约束添加到按列组织的表以进行复制,请确保先取消激活并重新激活数据库,然后再将该表添加到复制集。 如果未执行此步骤,那么表上的 Db2 DELETE 操作的性能将显着下降。 对性能的此影响是由于 Db2 补充日志记录直到在系统中的所有数据成员上刷新关联的高速缓存之后才检测到约束。

过程

  1. 为指定的源和目标系统创建复制集:
    curl --insecure -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic <your_authorization_token>' -d '{ "sourceHost": "<source_host_name>", "sourceDatabase": "BLUDB", "sourcePort": <source_rest_port>, "targetHost": "<target_host_name>", "targetDatabase": "BLUDB", "targetPort": <target_rest_port>, "tables": [ { "sourceSchema": "<source_table_schema>", "sourceTable": "<source_table_name>", "skipLoad": false } ], "schemaSubs": [ "schemaIncludePattern": "<schema_pattern>", "tableIncludePattern": "<table_pattern>", "excludePattern": [ { "schemaName": "<source_schema>", "objectName": "<object_name>" } ], "skipLoad": false } ], "startReplication": true }' 
    'https://<source_hostname>:<source_rest_port>/dr/v1/replicationset/<replication_set_name>'
    注: 可以在 JSON 数组中指定零个或多个源表模式和模式模式。
    • 如果未指定源表模式或模式模式,那么将创建空的复制集。
    • 如果您不希望初始装入目标表,请包含 “skipLoad”: true
    • 如果您不希望在创建复制集后启动该复制集,请包含 “startReplication”: false

    此 API 调用返回作业号 (id)。

    {
      "id": <job_number>,
      "url": "https://<source_hostname>:<source_rest_external_port>/dr/v1/target/progress/<job_number>"
    }
    
  2. 在以下 API 调用中包含作业号以检查复制集创建进度:
    curl --insecure -X GET --header 'Accept: application/json' --header 'Authorization: Basic <your_authorization_token>' 
    'https://<source_hostname>:<source_rest_port>/dr/v1/replicationset/progress/<job_number>'

结果

当返回包含 executionState=COMPLETEDoverallJobResult=PASS 的响应消息时,添加到复制集的表已准备好进行复制。 在返回这些值之前,请检查响应中的错误代码,消息和解决方法。
下表列出了复制集创建 API 调用可能的 HTTP 状态代码和响应消息。 它还包含用于显示响应语法的样本代码。
HTTP 状态码 原因 响应模型
202 复制集创建已启动 用户请求返回成功响应以完成 API 调用 (样本值):
{
  "id": 5,
  "url": "https://dr-source1.ibm.com:31023/dr/v1/replicationset/progress/5",
 "cgName": "DEMORE0001"
}
200 已成功对 API 进行状态检查 在响应中查找 executionState=COMPLETEDoverallJobResult=PASS
4xx 客户机请求错误 由于请求语法格式不正确或存在其他客户机问题,因此未实现用户请求:
{
  "errorCode": "string",
  "errorMessage": "string",
  "errorResolution": "string"
}
5xx 服务器错误 用户请求似乎有效,但由于服务器存在问题而未实现:
{
  "errorCode": "string",
  "errorMessage": "string",
  "errorResolution": "string"
}

示例

以下示例显示用于从源数据库创建复制集的命令语法。 请参阅步骤 1
curl --insecure -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic ZHNhZG06MDNRVWlMczFhcmoxb3ky' -d '{ "sourceHost": "dr-source1.ibm.com", "sourceDatabase": "BLUDB", "sourcePort": 32621, "targetHost": "dr-target2.ibm.com", "targetDatabase": "BLUDB", "targetPort": 30138, "tables": [ { "sourceSchema": "DRADMIN1", "sourceTable": "T5R", "skipLoad": false }, { "sourceSchema": "DRADMIN2", "sourceTable": "T5C", "skipLoad": false } ] }' 
'https://dr-source1.ibm.com:31023/dr/v1/replicationset/DEMOREPLSET1/DEMORE0001/table'
以下示例显示了使用生成的作业号 9 检查复制集创建状态的命令语法。 请参阅步骤 2

curl --insecure -X GET --header 'Accept: application/json' --header 'Authorization: Basic ZHNhZG06MDNRVWlMczFhcmoxb3ky' 
'https://dr-source1.ibm.com:30674/dr/v1/replicationset/progress/5'

下一步操作

从复制集中删除一个或多个表