支持模式

  • 调用YStream的API接口进行数据变更捕获(CDC,Change Data Capture)、获取并解析YashanDB的附加日志,包括DML和DDL。

1 配置

1.1 检查数据库归档模式

SELECT NAME,LOG_MODE FROM V$DATABASE;

注:数据库要求开启归档模式,启用ARCHIVELOG模式需要数据库短暂脱机。要了解更多信息,请参阅官方归档日志说明文档。
https://doc.yashandb.com/yashandb/23.4/zh/All-Manuals/Database-Administration/Instance-Management/Archive-Management.html

1.2 开启附加日志

1.2.1 库级别

  • 查看库级附加日志开启情况,要求至少开启最小级别附加日志
    SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
  • 库级开启附加日志
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

1.2.2 表级别

  • 查看表级附加日志开启情况,要求开启标记ALL级别附加日志
    SELECT OWNER,TABLE_NAME,LOG_GROUP_TYPE FROM DBA_LOG_GROUPS WHERE OWNER='<USERNAME>' and TABLE_NAME='<TABLE_NAME>';
  • 表级开启附加日志
    ALTER TABLE <USERNAME>.<TABLE_NAME> ADD SUPPLEMENTAL LOG DATA(ALL) COLUMNS;

1.3 创建用户及赋权

1.3.1 创建数据库用户

CREATE USER ZCBUS IDENTIFIED BY "********";

1.3.2 数据库用户赋权

-- 连接数据库
GRANT CREATE SESSION TO ZCBUS;
GRANT SELECT ANY TABLE TO ZCBUS; 
grant select on dba_users to zcbus; 
grant select on dba_tables to zcbus;
grant select on dba_tab_comments to zcbus;
grant select on dba_tab_cols to zcbus;
grant select on dba_cons_columns to zcbus;
grant select on dba_constraints to zcbus;
grant select on dba_ind_columns to zcbus;
grant select on dba_indexes to zcbus;
-- 实时发布需要以下权限:
grant YSTREAM_CAPTURE to zcbus;

1.4 YStream服务创建与启动

参考官方文档:https://doc.yashandb.com/yashandb/23.4/zh/All-Manuals/Development-Guide/PL-Reference-Manual/Built-in-Advanced-PL-Packages/DBMS_YSTREAM_ADM.html

注:YStream API客户端连接YStream服务必须一对一,并且客户端只能连接启动对应YStream服务的数据库节点,同一个YStream服务不能同时连接多个YStream API客户端。要求一个YStream服务只能一个发布节点连接。

1.4.1 YStream服务创建

语法:

DBMS_YSTREAM_ADM.CREATE(
    server_name    IN  VARCHAR(64), 
    connect_user   IN  VARCHAR(64) DEFAULT NULL, 
    start_scn      IN  BIGINT DEFAULT NULL
);

说明:

  • server_name:
                YStream服务的名称,不能与已有服务名冲突,该参数不能为NULL
  • vconnect_user:
    允许连接该YStream服务的数据库用户,指定用户必须具备YSTREAM_CAPTURE权限,设置为NULL表示允许所有数据库用户连接
    由于YashanDB的语法模式会影响用户名的大小写敏感规则,在指定用户名时,请根据实际情况进行转义:
       yashan模式:大小写不敏感且会自动转为全大写。若用户名需区分大小写应使用双引号包围,例如用户名为User时应指定为'"User"'
       mysql模式:大小写敏感,且不会进行自动转换。若添加双引号会将其视作用户名的一部分,例如'"User"'将被解析为"User"
  • start_scn:
    日志解析的起始点,设置为NULL表示从当前位置开始
    如果start_scn位于一个DDL事务中间,则只能解析到该DDL事务在start_scn之后的部分日志,YStream无法通过不完整的DDL解析构建元数据,后续与该DDL相关的日志均无法解析而被忽略。如遇此种场景,需重新创建YStream服务,指定新的start_scn,以避免start_scn在某个DDL事务内部
    您可以在创建和启动YStream服务后,调用TEST函数测试start_scn是否合适。
    YStream仅支持解析归档模式下生成的redo或归档日志,请确保start_scn之后的日志都符合条件。

示例:

EXEC DBMS_YSTREAM_ADM.CREATE('server_1');
EXEC DBMS_YSTREAM_ADM.CREATE('server_2', 'zcbus');
EXEC DBMS_YSTREAM_ADM.CREATE('server_3', 'zcbus', 563517721634004992);

1.4.2 YStream服务指定解析范围(模式或表)—可选

语法:

DBMS_YSTREAM_ADM.ADD_TABLES(
    server_name   IN  VARCHAR(64),
    table_names   IN  VARCHAR(4096),
    schemas       IN  VARCHAR(4096)
);

说明:

  • server_name:
    YStream服务的名称,该参数不能为NULL
  • table_names:
    添加的表名清单,若表名或schema名称中存在空格、逗号等特殊字符需使用双引号""包围,多个表名以,分隔,每个服务最多支持1000000个表。指定表名时可以指定表所在的模式,例如'sales.tab',表的默认模式为当前模式。若不指定表名,请传入NULL
  • schemas:
    添加的模式清单,若schema名称中存在空格、逗号等特殊字符需使用双引号""包围,多个模式以,分隔,每个YStream服务最多支持10000个模式。若不指定模式,请传入NULL

示例:

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', '', '');

1.4.3 YStream服务启动

语法:

DBMS_YSTREAM_ADM.START(
    server_name   IN  VARCHAR(64)
);

说明:

  • server_name:
    YStream服务的名称,该参数不能为NULL

示例:

EXEC DBMS_YSTREAM_ADM.START('server_1');

1.4.4 YStream服务状态查询

查询sql:

SELECT SERVER_NAME, STATUS FROM V$YSTREAM_SERVER where SERVER_NAME=服务名称;

状态说明:

  • CREATED:服务已创建,还未启动过
  • STARTED:服务已启动,没有客户端通过当前实例连接服务
  • RUNNING:服务已启动,客户端通过当前实例连接服务
  • STOPPED:服务已停止

2 补充说明

2.1 db_name指定

说明:实时发布db_name需要指定cdc服务(即YStream服务)名称,定时发布可以指定为用户名。

2.2 数据类型支持列表

字段类型 字段描述 是否支持
CHAR 固定长度字符串,最大长度2000bytes
VARCHAR2 可变长度的字符串,最大长度4000bytes
NCHAR 根据字符集而定的固定长度字符串,最大长度2000bytes
NVARCHAR2 根据字符集而定的可变长度字符串,最大长度4000bytes
VARCHAR 可变长度字符串(Oracle兼容类型)
NVARCHAR 根据字符集而定的可变长度字符串(Oracle兼容类型)
DATE 日期(日-月-年),DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题
TIMESTAMP 日期(日-月-年),DD-MM-YY(HH-MI-SS:FF3),经过严格测试,无千虫问题
TIMESTAMP WITH LOCAL TIME ZONE 日期(日-月-年),该类型会转换成数据的时区来保存数据,即在数据库中保存的时间是数据库本地的时区。当别的地方用户访问数据库时在显示该类型数据时Oracle会将该时区转换成客户端的时间来显示。在数据库中保存占7到11字节
TIMESTAMP WITH TIME ZONE 日期(日-月-年),保存的是0时区的时间,和所处的时区信息。TIMESTAMP WITH TIME ZONE保存的是当前时间转化到0时区的对应的时间,并通过最后两位来保存时区信息
TIME 只存储时间,不包含日期
INTERVAL YEAR TO MONTH 年-月时间间隔
INTERVAL DAY TO SECOND 日-秒时间间隔
LONG 超长字符串,最大长度2G,足够存储大部头著作 (YashanDB中推荐由CLOB替代)
LONG RAW 可变长度的二进制数据,最大长度2G (YashanDB中推荐由BLOB替代)
RAW 固定长度的二进制数据,最大长度2000bytes
BLOB 二进制数据,最大长度4G
CLOB 字符数据,最大长度4G
NCLOB 根据字符集而定的字符数据,最大长度4G
NUMBER(P,S) 数字类型,P为整数位,S为小数位
DECIMAL(P,S) 数字类型,P为整数位,S为小数位
INTEGER/INT 整数类型,小的整数 (注意:在YashanDB中为严格的32位整数)
TINYINT 1字节小整数(-128 到 127)
SMALLINT 2字节小证书,范围 -32768 ~ 32767
BIGINT 8字节大整数
FLOAT 浮点数类型,NUMBER(38),双精度
DOUBLE 双精度浮点数类型
BINARY_FLOAT 32位单精度浮点型(Oracle兼容类型)
BINARY_DOUBLE 64位双精度浮点数(Oracle兼容类型)
REAL 实数类型,NUMBER(63),精度更高
BOOLEAN 存储TRUE/FALSE
BIT 位数据类型,存储0或1
XMLTYPE XML类型,存储XML数据
JSON JSON数据类型
ROWID 行记录的物理地址 不支持
UROWID 行记录的物理地址(可存储逻辑或物理ROWID) 不支持
BFILE 执行数据库外部二进制文件的指针 不支持
ST_GEOMETRY 地理空间数据 不支持
文档更新时间: 2026-08-11 23:00   作者:周风磊