#DBMS_YSTREAM_ADM
DBMS_YSTREAM_ADM包提供了一组内置函数,用于数据变更捕获(CDC,Change Data Capture)解析数据库附加日志,并通过不同函数对解析服务进行创建、调整配置、启停以及删除等管理操作。
解析服务通过状态标示其运行情况,且在不同状态下允许对其执行的管理操作略有不同。
状态 | 描述 | 允许执行的操作 |
---|---|---|
CREATED | 服务的初始状态,表示服务已创建但未启动 | * ADD_TABLES * DROP_TABLES * SET_PARAMETER * START * DROP |
STARTED | 表示服务已启动,等待客户端连接 | STOP |
RUNNING | 表示客户端已连接,服务运行中 | STOP |
STOPPED | 表示服务已停止 | * ADD_TABLES * DROP_TABLES * SET_PARAMETER * START * DROP |
DBMS_YSTREAM_ADM包仅适用于单机部署。
# CREATE
DBMS_YSTREAM_ADM.CREATE(
server_name IN VARCHAR(64),
connect_user IN VARCHAR(64) DEFAULT NULL,
start_scn IN BIGINT DEFAULT NULL
);
CREATE函数用于新建一个服务,最多允许创建32个服务。
仅允许在主库调用该函数。
参数 | 描述 |
---|---|
server_name | 服务名,不能与已有服务名冲突,该参数不能为NULL |
connect_user | 允许连接该服务的数据库用户,指定用户必须具备YSTREAM_CAPTURE权限。设置为NULL表示允许所有数据库用户连接 |
start_scn | 日志解析的起始点。设置为NULL表示从当前位置开始 |
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.CREATE('server_1');
EXEC DBMS_YSTREAM_ADM.CREATE('server_2', 'sales');
EXEC DBMS_YSTREAM_ADM.CREATE('server_3', 'sales', 563517721634004992);
EXEC DBMS_YSTREAM_ADM.CREATE('server_4');
EXEC DBMS_YSTREAM_ADM.CREATE('server_5');
# ADD_TABLES
DBMS_YSTREAM_ADM.ADD_TABLES(
server_name IN VARCHAR(64),
table_names IN VARCHAR(4096),
schemas IN VARCHAR(4096)
);
ADD_TABLES函数用于为已有服务新增解析表名和模式,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
仅允许在主库调用该函数,允许为同一服务多次新增解析表名和模式,最终结果将为多次操作的累加(重复的表和模式会自动去重)。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
table_names | 添加的表名清单,若表名或schema名称中存在空格、逗号等特殊字符需使用双引号"" 包围,多个表名以, 分隔,每个服务最多支持10000个表。指定表名时可以指定表所在的模式,例如'sales.tab',表的默认模式为当前模式。该参数不能为NULL,若不指定表名,请传入空字符串'' |
schemas | 添加的模式清单,若schema名称中存在空格、逗号等特殊字符需使用双引号"" 包围,多个模式以, 分隔,每个服务最多支持100个模式。该参数不能为NULL,若不指定模式,请传入空字符串'' |
函数使用规则如下:
- 若不执行ADD_TABLES或执行ADD_TABLES时将table_names和schemas参数均设置为空字符串,表示不做任何过滤,解析所有表和模式。
- 系统不会校验table_names和schemas参数所传入的表名和schema名称是否存在,可用于过滤规划中暂未创建的表或schema。
- 允许table_names和schemas参数传入重复的表名、shcema名称,系统会自动去重,且不会报错。
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.ADD_TABLES('server_1', 'sales.employees', '');
EXEC DBMS_YSTREAM_ADM.ADD_TABLES('server_2', 'sales.employees,sales.employees,sales.department,sales.branches', '');
EXEC DBMS_YSTREAM_ADM.ADD_TABLES('server_3', '', 'schema1,schema2');
EXEC DBMS_YSTREAM_ADM.ADD_TABLES('server_4', 'sales.department,sales.branches', '"schema{3}",schema4');
EXEC DBMS_YSTREAM_ADM.ADD_TABLES('server_5', '', '');
# DROP_TABLES
DBMS_YSTREAM_ADM.DROP_TABLES(
server_name IN VARCHAR(64),
table_names IN VARCHAR(4096),
schemas IN VARCHAR(4096)
);
DROP_TABLES函数用于为已有服务删除表名、模式,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
仅允许在主库调用该函数。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
table_names | 删除的表名清单,若表名或schema名称中存在空格、逗号等特殊字符需使用双引号"" 包围,多个表名以','分隔。指定表名时可以指定表所在的模式,例如'sales.tab',表的默认模式为当前模式。该参数不能为NULL,若不指定表名,请传入空字符串'' |
schemas | 删除的模式清单,若schema名称中存在空格、逗号等特殊字符需使用双引号"" 包围,多个模式以','分隔。该参数不能为NULL,若不指定模式,请传入空字符串'' |
函数使用规则如下:
- 系统不会校验table_names和schemas参数所传入的表名和schema名称是否存在。
- 允许table_names和schemas参数传入重复的表名、shcema名称,系统会自动去重,且不会报错。
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.DROP_TABLES('server_1', 'sales.department,sales.branches', '');
EXEC DBMS_YSTREAM_ADM.DROP_TABLES('server_2', 'sales.department,sales.department', 'schema1,schema2');
# SET_PARAMETER
DBMS_YSTREAM_ADM.SET_PARAMETER(
server_name IN VARCHAR(64),
parameter IN VARCHAR(64),
value IN VARCHAR(64)
);
SET_PARAMETER函数用于为已有服务设置参数,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
仅允许在主库调用该函数。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
parameter | 参数名,该参数不能为NULL |
value | 参数值,应在取值范围内,该参数不能为NULL |
支持设置以下参数:
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
PARALLELISM | [1,128] | 1 | Redo解析线程并发数,提高解析线程并发数可以提升性能但会消耗更多资源,请合理配置该值。 |
TXN_AGE_SPILL_THRESHOLD | [1,100000] | 600 | LCR溢出触发的时间阈值,单位为秒。解析过程中,若某个事务长时间不提交,等待时间超过该值时该事务所有LCR会溢出到系统表进行持久化并释放内存,此类LCR所对应的日志无需再被重复解析,用户可自行按需清理归档日志。 |
TXN_LCR_SPILL_THRESHOLD | [32K,1T] | 128M | LCR溢出触发的内存占用阈值,单位为字节。解析过程中,若某个事务所占内存超过该值,该事务所有LCR会溢出到系统表进行持久化并释放内存,此类LCR所对应的日志无需再被重复解析,用户可自行按需清理归档日志。 |
CHECKPOINT_INTERVAL | [1,3600] | 3 | Checkpoint执行的间隔,单位为秒。每次Checkpoint会在系统表持久化最新的重启恢复点。客户端设置最新的applied position后,需要等待一个Checkpoint间隔才能被数据库感知。 |
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.SET_PARAMETER('server_1', 'PARALLELISM', '3');
# START
DBMS_YSTREAM_ADM.START(
server_name IN VARCHAR(64)
);
START函数用于启动一个已有服务,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
可在主库或备库执行,启动服务后客户端只允许连接到执行该指令的节点。如需将客户端连接到其他节点,需先在已启动的节点上停止服务,再在其他节点启动服务。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.START('server_1');
EXEC DBMS_YSTREAM_ADM.START('server_2');
# STOP
DBMS_YSTREAM_ADM.STOP(
server_name IN VARCHAR(64),
force IN BOOL DEFAULT FALSE
);
STOP函数用于停止一个已有服务,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
请在执行START函数的节点调用,如果启动节点不可用,请在主库停止。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
force | 强制停止服务。当连接到备库,备库与备库断连时,忽略错误直接停止服务,系统表中状态不会发生变化 |
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.STOP('server_1');
EXEC DBMS_YSTREAM_ADM.STOP('server_2', TRUE);
# DROP
DBMS_YSTREAM_ADM.DROP(
server_name IN VARCHAR(64)
);
DROP函数用于删除一个已有服务,对应服务必须处于允许执行当前操作的状态(可通过查询V$YSTREAM_SERVER视图获取服务的状态)。
仅允许在主库调用该函数。
参数 | 描述 |
---|---|
server_name | 服务名,该参数不能为NULL |
示例(单机部署)
EXEC DBMS_YSTREAM_ADM.DROP('server_1');