cdcleo
2024 年7 月 12 日 16:45
#1
【 使用环境 】
测试环境
【 其他组件 】
obcdc_tailf
【 使用版本 】
OceanBase_CE-v4.3.0.1
【问题描述】
下载obcdc后,修改 etc/libobcdc.conf 中三个字段的值
tenant_endpoint=192.168.2.2:2881
tenant_user=testuser@testtenant
tenant_password=123456
执行命令
bin/obcdc_tailf -f etc/libobcdc.conf -R3600 -o -T1720773346570
命令结束,log/libobcdc.log 中有错误信息
[2024-07-12 16:38:34.294328] WDIAG [TLOG] get_data_dict_in_log_info_ (ob_log_meta_data_service.cpp:371) [104449][][T0][Y0-0000000000000000-0-0] [lt=24][errcode=-4018] sql_queryer get_data_dict_in_log_info fail(ret=-4018, ret="OB_ENTRY_NOT_EXIST", tenant_id=1004, start_timestamp_ns=1720773346570000, data_dict_in_log_info={snapshot_scn:-1, end_scn:-1, start_lsn:{lsn:18446744073709551615}, end_lsn:{lsn:18446744073709551615}})
[2024-07-12 16:38:34.294344] ERROR issue_dba_error (ob_log.cpp:1891) [104449][][T0][Y0-0000000000000000-0-0] [lt=11][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4018, file="ob_log_meta_data_service.cpp", line_no=385, info="[FATAL][DATA_DICT] Can't find suitable data_dict to launch OBCDC, please try use online schema(refresh_mode=online && skip_ob_version_compat_check=1)")
辞霜
2024 年7 月 12 日 17:32
#4
第二行报错找不到数据。
确认是否snapshot_scn >= CLOG最早可用位点
cdcleo
2024 年7 月 15 日 09:17
#5
是大于的,我是根据 SELECT CEIL(MAX(BEGIN_SCN)/1000) AS START_TS_US FROM oceanbase.GV$OB_LOG_STAT; 的结果设置的。
之前不加 -T1720773346570 报这样的错
[2024-07-15 09:33:00.093141] ERROR issue_dba_error (ob_log.cpp:1891) [187849][][T0][YDD50C0A80202-0000000000500001-0-0] [lt=31][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-5150, file=“ob_log_rpc.cpp”, line_no=106, info=“rpc fail: req_start_lsn_by_ts”)
辞霜
2024 年7 月 15 日 09:57
#6
SELECT SNAPSHOT_SCN, SCN_TO_TIMESTAMP(SNAPSHOT_SCN) FROM CDB_OB_DATA_DICTIONARY_IN_LOG where tenant_id = 1010 and snapshot_scn >= ${CLOG最早可用位点} order by snapshot_scn ASC limit 1;
使用这条sql的scn试试
cdcleo
2024 年7 月 15 日 10:48
#8
报了这个错:
ERROR 1146 (42S02): Table ‘oceanbase.cdb_ob_data_dictionary_in_log’ doesn’t exist
cdcleo
2024 年7 月 15 日 10:58
#10
我用root和我新创建的用户都试了一遍,都提示表不存在
cdcleo
2024 年7 月 15 日 11:13
#12
yq@yq_tenant
obclient [oceanbase]> SELECT BEGIN_SCN FROM oceanbase.GV$OB_LOG_STAT;
±--------------------+
| BEGIN_SCN |
±--------------------+
| 2 |
| 1720774942303760869 |
±--------------------+
2 rows in set (0.002 sec)
root@sys
obclient [oceanbase]> SELECT SNAPSHOT_SCN, SCN_TO_TIMESTAMP(SNAPSHOT_SCN) FROM CDB_OB_DATA_DICTIONARY_IN_LOG where tenant_id = 1006 and snapshot_scn >= 1720774942303760869 order by snapshot_scn ASC limit 1;
±--------------------±-------------------------------+
| SNAPSHOT_SCN | SCN_TO_TIMESTAMP(SNAPSHOT_SCN) |
±--------------------±-------------------------------+
| 1720774943266257583 | 2024-07-12 17:02:23.266257 |
±--------------------±-------------------------------+
执行:bin/obcdc_tailf -f etc/libobcdc.conf -R3600 -o -T1720774943267
依然有报错
[2024-07-15 11:11:46.443091] ERROR issue_dba_error (ob_log.cpp:1891) [241266][][T0][Y0-0000000000000000-0-0] [lt=42][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4018, file="ob_log_meta_data_service.cpp", line_no=385, info="[FATAL][DATA_DICT] Can't find suitable data_dict to launch OBCDC, please try use online schema(refresh_mode=online && skip_ob_version_compat_check=1)")
[2024-07-15 11:11:46.443120] EDIAG [TLOG] get_data_dict_in_log_info_ (ob_log_meta_data_service.cpp:385) [241266][][T0][Y0-0000000000000000-0-0] [lt=28][errcode=-4018] [FATAL][DATA_DICT] Can't find suitable data_dict to launch OBCDC, please try use online schema(refresh_mode=online && skip_ob_version_compat_check=1)(ret=-4018, ret="OB_ENTRY_NOT_EXIST", tenant_id=1006, start_timestamp_ns=1720774943267000) BACKTRACE:0x1e274c4d 0xe42b0f6 0xe42ac91 0xe42a90c 0xe378145 0xe45727c 0xe451c6a 0xe44f5b6 0xe787be1 0xe792697 0xe4d9c5e 0xe4d51cf 0xe4c756e 0xe4bea0d 0xe4bd9ca 0x562350bc17d7 0x562350bc128c 0x7fe4daa21555 0x562350bc0cd2
辞霜
2024 年7 月 15 日 16:44
#13
CDC能正常跑起来需要保证回拉的事务的日志也在归档范围内
获取租户某个日志流的归档进度(用于判断某个日志流指定LSN的日志是否在归档范围内):
SELECT * FROM CDB_OB_LS_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID=xxx AND LD_ID = yyy;
cdcleo
2024 年7 月 15 日 19:22
#15
SELECT * FROM CDB_OB_LS_LOG_ARCHIVE_PROGRESS WHERE TENANT_ID=1006;
输出内容为空
另外,用当前时间去启动tailf也是报同样的错
辞霜
2024 年7 月 16 日 09:37
#16
oceanbase.CDB_OB_ARCHIVELOG。检查一下归档是否开启了
cdcleo
2024 年7 月 16 日 09:51
#17
root@sys 执行
select * from oceanbase.CDB_OB_ARCHIVELOG;
输出为空
root@yq_tenant 执行
alter system archivelog;
输出
ERROR 9091 (HY000): Already in ARCHIVELOG mode
辞霜
2024 年7 月 16 日 11:17
#18
麻烦老师确认下 备份介质挂载 是否正常,集群备份必须挂在备份介质的
如已挂载按以下方式获取下开启归档失败的日志:
登录业务租户执行开启归档操作
1)设置trace信息
SET ob_enable_show_trace=‘ON’;
2)执行开启归档
ALTER SYSTEM ARCHIVELOG;
3)获取上个命令的trace
select last_trace_id();
4)获取trace对应的节点
select query_sql,svr_ip from gv$ob_sql_audit where trace_id=‘第三步获取的trace信息’;
5)取对应的svr_ip节点 过滤日志
grep “第三步获取的trace信息” observer.log*
grep “第三步获取的trace信息” rootservice.log*
6)提供日志信息即可。
cdcleo
2024 年7 月 16 日 11:56
#19
三木大大
2024 年7 月 16 日 15:05
#20
这个报错说明找不到合适的数据字典来启动CDC
(1)检查下你的testuser是否有testtenant的oceanbase库的读权限?
(2)检查下租户的oceanbase库(oracle租户可以看sys schema)下的DBA_OB_DATA_DICTIONARY_IN_LOG表中是否有snapshot_scn <= 1720773346570000000的记录?如果没有,说明启动位点前还没有生成过数据字典;CDC也无法启动(可以参考报错日志中的提示,修改etc/libobcdc.conf中的CDC配置后再启动:refresh_mode=online 和skip_ob_version_compat_check=1)
(3)确保请求的CLOG没有被回收(或已经通过OB的ARCHIVELOG功能归档到其他介质且归档未被回收)
三木大大
2024 年7 月 16 日 15:07
#21
obcdc_tailf时OBCDC的测试工具,下游应用应当直接适配和使用动态库libobcdc.so.4
4.x版本推荐开启OB的归档日志,因为租户本地存储的CLOG会比较有限,很容易发生日志回收,4.x版本开始支持消费归档日志,尽量减少日志回收导致数据同步链路断流的风险。
2 个赞