黄东旭解析 TiDB 的核心优势
872
2023-04-06
文章来源:https://book.tidb.io/session4/chapter5/from-***-to-tidb.html
业务的发展,以及数据的爆发式增长,公司会面临一轮数据库的垂直拆分和水平拆分。拆分后对代码的侵入性较大,后续的不断扩容让 DBA 的管理成本上升。所以急需既支持关系型数据库 RDBMS 和非关系型数据库 NoSQL 分布式的存储计算引擎。
TiDB 分布式数据库结合了传统的 RDBMS 和 NoSQL 的最佳特性。首先,高度兼容 MySQL 协议,大多数情况代码可以直接迁移到 TiDB 分布式数据库,已经分库分表的实例可以在 TiDB 中进行聚合;同时,TiDB 分布式数据库支持水平弹性扩展,通过简单地增加新节点即可实现 TiDB 分布式数据库的水平扩展,按需扩展计算节点或存储节点,轻松应对高并发、海量数据场景。
所以基于 TiDB 分布式数据库的上述特性,本文将介绍通过 OGG 将 *** 的数据同步到 TiDB 分布式数据库的相关原理及操作步骤。
*** GoldenGate 12.3.0.1.4 for *** on Linux x86-64
*** GoldenGate 12.3.0.1.5 for MySQL-compatible DBs on Linux x86-64
本文档以 *** 11G 数据库为例,对 *** 数据库通过 OGG 同步至 TiDB 分布式数据库中进行说明。
*** 端字符集为 ZHS16GBK。
2.1. 表结构转换
由于 *** 中表数据类型与 TiDB 分布式数据库中数据类型不一致,需要预先进行表结构的转换(可以使用 Navicat 工具)。
2.2. 初始化同步
初始化数据通过 OGG initial load 进程将 *** 数据导入到 TiDB 分布式数据库中,如此时 *** 数据库中仍然有写入操作,则 initial load 开始时间之后的数据变化无法同步,此时需要进行增量的数据同步,且在同步多张表时,每个表同步的时间并不一致。如采用停机同步(同步期间 *** 中表数据不再变化),仅需要进行初始化同步操作。
2.3. 增量数据同步
在初始化同步的基础上进行后续变化的数据同步,需要在初始化同步之前,先开启日志抽取。由于异构平台,无法基于统一时间点完成数据初始导入操作,所以在完成初始化导入操作之后需要完整应用开始 initial load 同步之后的所有 log,此时会存在重复执行的问题,OGG 中通过 handlecolisions 参数处理冲突的场景,保证最终数据的一致性(根据主键或唯一键进行重复的操作可以保证最终数据一致,在缺少主键的场景可能会导致数据重复)。
归档模式
Force logging
ENABLE_GOLDENGATE_REPLICATION 参数为 true (11.2.0.4)
最小补全日志(根据同步数据范围选择)
表级别
Schema 级别
数据库级
用户权限
建议 DBA 角色。
set tidb_constraint_check_in_place = 1;
该参数将 TiDB 分布式数据库中乐观锁模式下的主键冲突检查由 commit 时检查提升为 insert 时检查,在遇到主键冲突时可配置为忽略冲突,否则在遇到主键冲突时无法忽略,复制进程会 abend。仅需在 OGG 复制进程 session 级别设置,通过配置在复制进程参数中实现,无需全局修改。
lower-case-table-names = 1
OGG 复制进程需要该参数设置为 1,tidb 中修改此参数并未产生实际效果变化,仅为实现兼容。
DDL 建表语句需提前转换,并在目标端执行。
如下表的示例:
源端 ***
create table account ( account_number number(10,0), account_balance decimal(38,2), account_trans_ts timestamp(6), account_trans_type varchar2(30), primary key (account_number) using index );目标端 TiDB 分布式数据库
create table account ( account_number int, account_balance decimal(38,2), account_trans_ts timestamp, account_trans_type varchar(30), primary key (account_number));解压安装包
$unzip V975837-01.zip $ ls -l total 1201820 drwxr-xr-x 3 *** oinstall 4096 Apr 16 2018 fbo_ggs_Linux_x64_shiphome -rw-r--r-- 1 *** oinstall 1396 May 10 2018 OGG-12.3.0.1.4-README.txt -rw-r--r-- 1 *** oinstall 293566 May 10 2018 OGG_WinUnix_Rel_Notes_12.3.0.1.4.pdf采用静默安装方式
(1) 编辑应答文件
$vi ./fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp #################################################################### ## Copyright(c) *** Corporation 2017. All rights reserved. ## ## ## ## Specify values for the variables listed below to customize ## ## your installation. ## ## ## ## Each variable is associated with a comment. The comment ## ## can help to populate the variables with the appropriate ## ## values. ## ## ## ## IMPORTANT NOTE: This file should be secured to have read ## ## permission only by the *** user or an administrator who ## ## own this installation to protect any sensitive input values. ## ## ## #################################################################### #------------------------------------------------------------------------------- # Do not change the following system generated value. #------------------------------------------------------------------------------- ***.install.responseFileVersion=/***/install/rspfmt_ogginstall_response_schema_v12_1_2 ################################################################################ ## ## ## *** GoldenGate installation option and details ## ## ## ################################################################################ #------------------------------------------------------------------------------- # Specify the installation option. # Specify ORA12c for installing *** GoldenGate for *** Database 12c and # ORA11g for installing *** GoldenGate for *** Database 11g #------------------------------------------------------------------------------- INSTALL_OPTION=ORA11g ##此处为 *** 数据库版本,本文档使用 11.2.0.4,此处填写 ORA11G,如果是 12c 版本则填写 ORA12c #------------------------------------------------------------------------------- # Specify a location to install *** GoldenGate #------------------------------------------------------------------------------- SOFTWARE_LOCATION=/home/***/ogg12.3 ##此处为安装路径 #------------------------------------------------------------------------------- # Specify true to start the manager after installation. #------------------------------------------------------------------------------- START_MANAGER=false ##安装完成不启动 mgr 进程,设为 false #------------------------------------------------------------------------------- # Specify a free port within the valid range for the manager process. # Required only if START_MANAGER is true. #------------------------------------------------------------------------------- MANAGER_PORT= #------------------------------------------------------------------------------- # Specify the location of the *** Database. # Required only if START_MANAGER is true. #------------------------------------------------------------------------------- DATABASE_LOCATION= ################################################################################ ## ## ## Specify details to Create inventory for *** installs ## ## Required only for the first *** product install on a system. ## ## ## ################################################################################ #------------------------------------------------------------------------------- # Specify the location which holds the install inventory files. # This is an optional parameter if installing on # Windows based Operating System. #------------------------------------------------------------------------------- INVENTORY_LOCATION= #------------------------------------------------------------------------------- # Unix group to be set for the inventory directory. # This parameter is not applicable if installing on # Windows based Operating System. #------------------------------------------------------------------------------- UNIX_GROUP_NAME=(2) 安装
执行 fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller
$./fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller -silent -responseFile /home/***/oggsoft/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp #此处 response 文件不支持相对路径安装完成后日志中会显示如下 successful
The installation of *** GoldenGate Core was successful在指定安装目录中会生成 OGG 相关文件
$ ls -l total 225044 -rwxr-xr-x 1 *** oinstall 426 Oct 15 2010 bcpfmt.tpl -rwxr-xr-x 1 *** oinstall 1725 Oct 15 2010 bcrypt.txt -rwxrwxr-x 1 *** oinstall 1612776 Apr 15 2018 cachefiledump drwxr-xr-x 4 *** oinstall 4096 Jul 28 14:45 cfgtoollogs -rwxrwxr-x 1 *** oinstall 3563576 Apr 15 2018 checkprm -rw-rw-r-- 1 *** oinstall 1021 Apr 15 2018 chkpt_ora_create.sql -rwxrwxr-x 1 *** oinstall 3379568 Apr 15 2018 convchk -rwxrwxr-x 1 *** oinstall 4716080 Apr 15 2018 convprm drwxr-xr-x 2 *** oinstall 4096 Jul 28 14:45 crypto -rwxr-xr-x 1 *** oinstall 159 Oct 15 2010 db2cntl.tpl -rwxrwxr-x 1 *** oinstall 9696 Apr 15 2018 db_upgrade -rw-rw-r-- 1 *** oinstall 455 Apr 15 2018 ddl_cleartrace.sql -rw-rw-r-- 1 *** oinstall 8414 Apr 15 2018 ddl_create.sql -rw-rw-r-- 1 *** oinstall 3176 Apr 15 2018 ddl_ddl2file.sql -rw-rw-r-- 1 *** oinstall 90 Apr 15 2018 ddl_disable.sql -rw-rw-r-- 1 *** oinstall 88 Apr 15 2018 ddl_enable.sql -rw-rw-r-- 1 *** oinstall 2036 Apr 15 2018 ddl_filter.sql -rw-rw-r-- 1 *** oinstall 12220 Apr 15 2018 ddl_ora10.sql -rw-rw-r-- 1 *** oinstall 1725 Apr 15 2018 ddl_ora10upCommon.sql -rw-rw-r-- 1 *** oinstall 13539 Apr 15 2018 ddl_ora11.sql -rw-rw-r-- 1 *** oinstall 12564 Apr 15 2018 ddl_ora9.sql -rw-rw-r-- 1 *** oinstall 216 Apr 15 2018 ddl_pin.sql -rw-rw-r-- 1 *** oinstall 3184 Apr 15 2018 ddl_remove.sql -rw-rw-r-- 1 *** oinstall 1 Apr 15 2018 ddl_session1.sql -rw-rw-r-- 1 *** oinstall 629 Apr 15 2018 ddl_session.sql -rw-rw-r-- 1 *** oinstall 287877 Apr 15 2018 ddl_setup.sql -rw-rw-r-- 1 *** oinstall 8401 Apr 15 2018 ddl_status.sql -rw-rw-r-- 1 *** oinstall 2122 Apr 15 2018 ddl_staymetadata_off.sql -rw-rw-r-- 1 *** oinstall 2118 Apr 15 2018 ddl_staymetadata_on.sql -rw-rw-r-- 1 *** oinstall 2186 Apr 15 2018 ddl_tracelevel.sql -rw-rw-r-- 1 *** oinstall 2133 Apr 15 2018 ddl_trace_off.sql -rw-rw-r-- 1 *** oinstall 2383 Apr 15 2018 ddl_trace_on.sql -rwxrwxr-x 1 *** oinstall 5037440 Apr 15 2018 defgen drwxr-xr-x 2 *** oinstall 4096 Jul 28 14:45 deinstall -rw-rw-r-- 1 *** oinstall 882 Apr 15 2018 demo_more_ora_create.sql -rw-rw-r-- 1 *** oinstall 649 Apr 15 2018 demo_more_ora_insert.sql -rw-rw-r-- 1 *** oinstall 583 Apr 15 2018 demo_ora_create.sql -rw-rw-r-- 1 *** oinstall 504 Apr 15 2018 demo_ora_insert.sql -rw-rw-r-- 1 *** oinstall 3597 Apr 15 2018 demo_ora_lob_create.sql -rw-rw-r-- 1 *** oinstall 1943 Apr 15 2018 demo_ora_misc.sql -rw-rw-r-- 1 *** oinstall 1056 Apr 15 2018 demo_ora_pk_befores_create.sql -rw-rw-r-- 1 *** oinstall 1013 Apr 15 2018 demo_ora_pk_befores_insert.sql -rw-rw-r-- 1 *** oinstall 2305 Apr 15 2018 demo_ora_pk_befores_updates.sql drwxr-xr-x 3 *** oinstall 4096 Jul 28 14:45 diagnostics drwxr-xr-x 3 *** oinstall 4096 Jul 28 14:45 diretc drwxr-xr-x 2 *** oinstall 4096 Jul 28 14:45 dirout drwxr-xr-x 4 *** oinstall 4096 Jul 28 14:45 dirsca -rwxrwxr-x 1 *** oinstall 4272400 Apr 15 2018 emsclnt -rwxrwx--- 1 *** oinstall 12545040 Apr 15 2018 extract -rwxr-xr-x 1 *** oinstall 1968 Oct 15 2010 freeBSD.txt -rwxrwxr-x 1 *** oinstall 4280528 Apr 15 2018 ggcmd -rwxr-xr-x 1 *** oinstall 2303056 Apr 15 2018 ggMessage.dat -rwxr-xr-x 1 *** oinstall 49675440 Apr 15 2018 ggparam.dat -rwxrwx--- 1 *** oinstall 9340192 Apr 15 2018 ggsci drwxr-xr-x 2 *** oinstall 4096 Jul 28 14:45 healthcheck -rwxr-xr-x 1 *** oinstall 299451 Nov 16 2017 help.txt drwxr-xr-x 3 *** oinstall 4096 Jul 28 14:45 install drwxr-x--- 12 *** oinstall 4096 Jul 28 14:45 inventory drwxr-xr-x 7 *** oinstall 4096 Jul 28 14:45 jdk -rwxrwxr-x 1 *** oinstall 144496 Apr 15 2018 keygen -rw-rw-r-- 1 *** oinstall 56 Apr 15 2018 label.sql -rwxrwx--- 1 *** oinstall 102840 Apr 15 2018 libantlr3c.so -rwxrwxr-x 1 *** oinstall 12312 Apr 15 2018 libboost_system-mt.so.1.58.0 -rwxrwx--- 1 *** oinstall 2190856 Apr 15 2018 libdb-6.1.so -rwxrwx--- 1 *** oinstall 2198136 Apr 15 2018 libgglog.so -rwxrwx--- 1 *** oinstall 10524064 Apr 15 2018 libggnnzitp.so -rwxrwx--- 1 *** oinstall 21993240 Apr 15 2018 libggparam.so -rwxrwx--- 1 *** oinstall 210264 Apr 15 2018 libggperf.so -rwxrwx--- 1 *** oinstall 779352 Apr 15 2018 libggrepo.so -rwxrwx--- 1 *** oinstall 1108760 Apr 15 2018 libggssl.so -rwxrwx--- 1 *** oinstall 125624 Apr 15 2018 libggutil.so -rwxrwxr-x 1 *** oinstall 29764432 Apr 15 2018 libicudata.so.56 -rwxrwxr-x 1 *** oinstall 2909360 Apr 15 2018 libicui18n.so.56 -rwxrwxr-x 1 *** oinstall 1995808 Apr 15 2018 libicuuc.so.56 -rwxrwx--- 1 *** oinstall 86960 Apr 15 2018 liblmdb.so -rwxrwxr-x 1 *** oinstall 175136 Apr 15 2018 libPocoCrypto.so.48 -rwxrwxr-x 1 *** oinstall 3079760 Apr 15 2018 libPocoFoundation.so.48 -rwxrwxr-x 1 *** oinstall 373232 Apr 15 2018 libPocoJSON.so.48 -rwxrwxr-x 1 *** oinstall 1326504 Apr 15 2018 libPocoNet.so.48 -rwxrwxr-x 1 *** oinstall 350064 Apr 15 2018 libPocoNetSSL.so.48 -rwxrwxr-x 1 *** oinstall 520864 Apr 15 2018 libPocoUtil.so.48 -rwxrwxr-x 1 *** oinstall 680288 Apr 15 2018 libPocoXML.so.48 -rwxrwx--- 1 *** oinstall 1115360 Apr 15 2018 libudt.so -rwxrwx--- 1 *** oinstall 4782344 Apr 15 2018 libxerces-c-3.1.so -rwxrwxr-x 1 *** oinstall 5025840 Apr 15 2018 logdump -rw-rw-r-- 1 *** oinstall 1553 Apr 15 2018 marker_remove.sql -rw-rw-r-- 1 *** oinstall 3309 Apr 15 2018 marker_setup.sql -rw-rw-r-- 1 *** oinstall 675 Apr 15 2018 marker_status.sql -rwxrwxr-x 1 *** oinstall 6570480 Apr 15 2018 mgr -rwxr-xr-x 1 *** oinstall 41643 Jun 30 2017 notices.txt -rwxrwxr-x 1 *** oinstall 1661024 Apr 15 2018 oggerr drwxr-xr-x 12 *** oinstall 4096 Jul 28 14:45 OPatch -rw-r----- 1 *** oinstall 59 May 30 13:35 oraInst.loc drwxr-xr-x 8 *** oinstall 4096 Jul 28 14:45 oui -rw-rw-r-- 1 *** oinstall 3146 Apr 15 2018 params.sql -rwxrwxr-x 1 *** oinstall 11524576 Apr 15 2018 pmsrvr -rwxr-xr-x 1 *** oinstall 1272 Dec 28 2010 prvtclkm.plb -rwxr-xr-x 1 *** oinstall 9487 May 27 2015 prvtlmpg.plb -rw-rw-r-- 1 *** oinstall 2724 Apr 15 2018 prvtlmpg_uninstall.sql -rw-rw-r-- 1 *** oinstall 1532 Apr 15 2018 remove_seq.sql -rwxrwx--- 1 *** oinstall 10873240 Apr 15 2018 replicat -rwxrwxr-x 1 *** oinstall 1656864 Apr 15 2018 retrace -rw-rw-r-- 1 *** oinstall 3187 Apr 15 2018 role_setup.sql -rw-rw-r-- 1 *** oinstall 35254 Apr 15 2018 sequence.sql -rwxrwxr-x 1 *** oinstall 4659736 Apr 15 2018 server -rwxr-xr-x 1 *** oinstall 4917 Jan 5 2017 SQLDataTypes.h -rwxr-xr-x 1 *** oinstall 248 Oct 15 2010 sqlldr.tpl drwxr-xr-x 3 *** oinstall 4096 Jul 28 14:45 srvm -rwxrwxr-x 1 *** oinstall 759 Oct 15 2010 tcperrs -rwxr-xr-x 1 *** oinstall 37877 Apr 16 2016 ucharset.h -rw-rw-r-- 1 *** oinstall 7341 Apr 15 2018 ulg.sql drwxr-xr-x 7 *** oinstall 4096 Jul 28 14:45 UserExitExamples -rwxr-xr-x 1 *** oinstall 32987 Jun 2 2017 usrdecs.h -rwxr-xr-x 1 *** oinstall 1033 Oct 19 2016 zlib.txt(3) 设置环境变量并将环境变量加入 .bash_profile 中
export LD_LIBRARY_PATH=$ORACLE_HOME/lib(4) 测试能否正常运行,并创建相关目录
$ ./ggsci *** GoldenGate Command Interpreter for *** Version 12.3.0.1.4 OGGCORE_12.3.0.1.0_PLATFORMS_180415.0359_FBO Linux, x64, 64bit (optimized), *** 11g on Apr 15 2018 21:16:09 Operating system character set identified as UTF-8. Copyright (C) 1995, 2018, *** and/or its affiliates. All rights reserved. GGSCI ( hostname ) 1> create subdirs Creating subdirectories under current directory /home/***/ogg12.3 Parameter file /home/***/ogg12.3/dirprm: created. Report file /home/***/ogg12.3/dirrpt: created. Checkpoint file /home/***/ogg12.3/dirchk: created. Process status files /home/***/ogg12.3/dirpcs: created. SQL script files /home/***/ogg12.3/dirsql: created. Database definitions files /home/***/ogg12.3/dirdef: created. Extract data files /home/***/ogg12.3/dirdat: created. Temporary files /home/***/ogg12.3/dirtmp: created. Credential store files /home/***/ogg12.3/dircrd: created. Masterkey wallet files /home/***/ogg12.3/dirwlt: created. Dump files /home/***/ogg12.3/dirdmp: created.*** 端 OGG 完成安装。
(1) 解压安装包
$ unzip V978711-01.zip Archive: V978711-01.zip inflating: ggs_Linux_x64_MySQL_64bit.tar inflating: OGG-12.3.0.1-README.txt inflating: OGG_WinUnix_Rel_Notes_12.3.0.1.5.pdf(2) 将 ggs_Linux_x64_MySQL_64bit.tar 解压至安装目录即完成安装.
$tar xvf ./ggs_Linux_x64_MySQL_64bit.tar -C /home/tidb/ogg12.3(3) 进入解压目录测试 ggsci 是否能正常运行,并创建相应目录
$ ./ggsci *** GoldenGate Command Interpreter for MySQL Version 12.3.0.1.5 OGGCORE_12.3.0.1.0_PLATFORMS_180501.2124 Linux, x64, 64bit (optimized), MySQL Enterprise on May 2 2018 10:58:16 Operating system character set identified as UTF-8. Copyright (C) 1995, 2018, *** and/or its affiliates. All rights reserved. GGSCI ( hostname ) 1> create subdirs Creating subdirectories under current directory /home/tidb/ogg12.3 Parameter file /home/tidb/ogg12.3/dirprm: created. Report file /home/tidb/ogg12.3/dirrpt: created. Checkpoint file /home/tidb/ogg12.3/dirchk: created. Process status files /home/tidb/ogg12.3/dirpcs: created. SQL script files /home/tidb/ogg12.3/dirsql: created. Database definitions files /home/tidb/ogg12.3/dirdef: created. Extract data files /home/tidb/ogg12.3/dirdat: created. Temporary files /home/tidb/ogg12.3/dirtmp: created. Credential store files /home/tidb/ogg12.3/dircrd: created. Masterkey wallet files /home/tidb/ogg12.3/dirwlt: created. Dump files /home/tidb/ogg12.3/dirdmp: created.OGG TiDB 分布式数据库端安装完成 (OGG For MySQL 版本)。
(1) 设置 lower-case-table-names 参数为 1
$grep lower-case-table-names tidb.toml lower-case-table-names = 1(2) 检查参数是否正确
MySQL [(none)]> show variables like %lower%; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_table_names | 1 | | lower_case_file_system | 1 | +------------------------+-------+ MySQL [(none)]> show variables like %place% ; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | tidb_constraint_check_in_place | 0 | +--------------------------------+-------+(3) 创建用于同步的用户并赋权
MySQL [scott]> create user tidb identified by tidb; Query OK, 1 row affected (0.01 sec) MySQL [scott]> GRANT ALL PRIVILEGES ON scott.* to oggadmin ; Query OK, 0 rows affected (0.01 sec) MySQL [scott]> show create user tidb; +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CREATE USER for tidb@% | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CREATE USER tidb@% IDENTIFIED WITH mysql_native_password AS *465D123EE55795DBDBDAE36AFD3DCD9C429B718A REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)(4) 创建对应表结构
4.1 查看数据库是否开启归档
SQL> archive log list;若归档没有开启,需要开启归档
(1) 关闭数据库
SQL> shutdown immediate;(2) 将数据库启动到 mount 状态
SQL> startup mount;(3) 开启数据库的归档
SQL> alter database archivelog;(4) 打开数据库
SQL> alter database open;(5) 归档状态
SQL> archive log list;4.2 开启数据级别的最小增量日志
(1) 查询是否开启增量日志
select log_mode,supplemental_log_data_min,force_logging from v$database;(2) 开启 force logging
开启强同步,会记录所有的事务日志以及数据导入的日志,即使用户设置了 nolog 也会记录。
SQL> ALTER DATABASE FORCE LOGGING;(3) 附加增量日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; SQL> ALTER SYSTEM SWITCH LOGFILE;(4) 数据库中允许启动 OGG
SQL> alter system set enable_goldengate_replication=true;4.3 创建 ogg 专属账户
创建 goldengate 用户,并赋予相关权限
SQL> create tablespace goldengate datafile /opt/***/data/goldengate001.dbf size 4G; SQL> create user goldengate identified by goldengate default tablespace goldengate; SQL> grant dba to goldengate;(1) 在 ggsic 中创建免密登录秘钥
./ggsci create subdirs add credentialstore alter credentialstore add user goldengate,password goldengate(2) 直接执行下面命令即可在 ogg 中登录到 goldengate 用户
dblogin useridalias goldengate强烈建议开启 schema 级别的附加日志,因为这样能够确保 schema 下新表的附加日志也会被自动捕获
(1) 若数据库版本低于 11.2.0.2,则需要打 *** Patch 13794550
若以前的 *** 数据库版本没有打上面的补丁,开启 schema 级别附加日志会报如下错误:
ERROR OGG-06522 Cannot verify existence of table function that is required to ADD schema level supplemental logging, failed.
(2) GGSCI 登录有两种方式
1) dblogin userid goldengate, password goldengate
2) dblogin useridalias goldengate
(3) 为指定 schema 开启日志捕获
ADD SCHEMATRANDATA schema ALLCOLS
当没有启动 schema 级别的附加日志时,可以使用基于表级别的附加日志
(1) GGSCI 登录
dblogin userid goldengate, password goldengate(2)为指定 schema 开启日志捕获
ADD TRANDATA schema.tablename NOKEY基本配置中,主要是两套进程:
INITIAL LOAD:即全量同步,主要是一个抽取进程和应用进程,将存量数据从原端同步到目标端。
CHANGE SYNCHRONIZATION:即增量同步进程,有三个进程,抽取进程(捕获源端数据实时变化日志,并生成 trail 文件。*** 数据库的话为 *** 的 redo log 和 archive log),投递进程(将抽取进程产生的 trail 文件投递到目标端,给应用进程回放),应用进程(回放投递进程投递过来的日志文件,应用到目标数据库)
本地配置参数说明:
参数值参数说明/opt/***/11.2.0为 ORACLE_HOME 的值ora为 *** 的 sid 名称ext_ora抽取进程名称tdpm_ora投递进程名称rep_ora应用进程名称./dirdat/sk抽取文件存放目录及命名规则/Data/tidb/ogg/dirdat/skReplicat 端接收日志的存放目录以下示例中抽取是从 ADG 上进行抽取
Extract 和 pump 进程架构图
上图只是通过 Extract 进程增量捕获源端数据库 redo 和 archive log 的变化,然后通过 Data pump 进程将变化的日志投递到远端服务器
2.1 MGR 进程配置信息Manager 进程是 OGG 的控制进程,用于管理 Extract、Pump、Replicat 等进程,在 Extract、Pump、Replicat 进程启动之前,Manager 进程必须先要在源端和目标端启动。
(1) 进程配置信息
GGSCI (b-db-ps-055) 5> view param mgr port 9001 DYNAMICPORTLIST 9001-9020 --AUTORESTART ER *,RETRIES 5,WAITMINUTES 7 PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45参数说明:
参数说明port指定服务的默认端口DYNAMICPORTLIST端口列表,用户本地 OGG 进程与远端 OGG 进程通信AUTORESTART自动重启参数PURGEOLDEXTRACTS定期清理 trail 文件,此处表示超过 2 天的 trail 文件会进行清理LAGREPORTHOURS表示检查 lag 的频率(小时),此处表示每隔 1 小时检查一次LAGINFOMINUTES延时超过设定值(分钟),会将延时信息记录在错误日志中(2) 启动 mgr 进程
./ggsci start mgr2.2 Extract 进程配置信息Extract 进程运行在数据库源端上,它是 OGG 的捕获进程,可以配置 Extract 进程来初始数据装载和同步变化捕获。
(1) 进程配置信息
GGSCI (b-db-ps-055) 2> edit param ext_ora EXTRACT ext_ora SETENV (ORACLE_HOME="/opt/***/11.2.0") setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") setenv (ORACLE_SID="ora") useridalias goldengate GETTRUNCATES REPORTCOUNT EVERY 1 MINUTES, RATE DISCARDFILE ./dirrpt/ext_ora.dsc,APPEND,MEGABYTES 1000 WARNLONGTRANS 2h,CHECKINTERVAL 10m EXTTRAIL ./dirdat/sk TRANLOGOPTIONS EXCLUDEUSER goldengate TRANLOGOPTIONS MINEFROMACTIVEDG DBOPTIONS ALLOWUNUSEDCOLUMN DYNAMICRESOLUTION FETCHOPTIONS FETCHPKUPDATECOLS,INCONSISTENTROW ALLOW ddl include mapped objname hr.* getupdatebefores nocompressdeletes nocompressupdates table hr.table_name;主要参数说明: | 参数 | 说明 | |:----|:----| | SETENV | 设置环境变量 | | useridalias | 根据前面创建的认证登录 | | GETTRUNCATES | 捕获源端数据库的 truncate 操作,默认是不捕获 | | REPORTCOUNT | 报告进程从启动开启处理的记录数,此处表示每分钟收集处理的记录数,并报告处理的统计信息 | | WARNLONGTRANS | 监控 OGG 中的长事务,超过指定时间的长事务,进行定期检查 | | EXTTRAIL | 抽取进程产生 trail 文件的存放目录 | | TRANLOGOPTIONS EXCLUDEUSER | 在抽取时,排除掉指定用户的的日志 | | TRANLOGOPTIONS MINEFROMACTIVEDG | 指定抽取进程能够从 ADG 中读取本地日志,若没有这个参数,抽取进程将会异常结束 | | DBOPTIONS ALLOWUNUSEDCOLUMN | 抽取进程在抽取的过程中,遇到未使用的列时,进程会继续处理,并产生一个警告 | | DYNAMICRESOLUTION | OGG 进程中可能由于表比较多,OGG 为了获取处理记录的元数据,需要查询数据库,然后构建表的相关记录,这样导致 OGG 进程进程启动非常慢, 该参数是一次只生成一个表的记录,其他表的记录是 OGG 进程在抽取的事务日志中,第一次遇到表的 ID 时,再进行创建 | | FETCHOPTIONS FETCHPKUPDATECOLS,INCONSISTENTROW ALLOW | 当主键更新时,获取所有列记录;当通过 row id 获取到的列值与主键不匹配时 (原记录被删除或者更新了),设置 ALLOW 表示允许这种情况发生,并继续处理 |
(2) 添加抽取进程
./ggsci add extract ext_ora,TRANLOG, begin now add ExtTrail ./dirdat/sk, Extract ext_ora, Megabytes 502.3 Pump 进程配置信息Pump 进程是配置在源端辅助 Extract 进程,Pump 进程将 Extract 进程写好的本地 Trail 文件通过网络发送到目标端的 Trail 文件中。
GGSCI (b-db-ps-055) 4> edit param tdpm_ora EXTRACT tdpm_ora RMTHOST 31.***.***.***, MGRPORT 9001, compress PASSTHRU RMTTRAIL /Data/tidb/ogg/dirdat/sk DYNAMICRESOLUTION --table table hr.table_name;主要参数说明: | 参数 | 说明 | |:----|:----| | RMTHOST | 设置远端服务器的 IP 地址,以及远端 MGR 进程的端口 | | PASSTHRU | 使用该参数 OGG 不对元数据一致性进行校验,从而提高性能 |
(1) 添加 pump 进程
./ggsci add extract tdpm_ora, exttrailsource ./dirdat/sk add rmttrail /Data/tidb/ogg/dirdat/sk, extract tdpm_ora, megabytes 100(1) 进程配置信息
GGSCI (w-db-ps-082) 2> edit param mgr port 9001 DYNAMICPORTLIST 9001-9120 ACCESSRULE, PROG *, IPADDR 31.*.*.*, ALLOW --AUTORESTART ER *,RETRIES 5,WAITMINUTES 7 PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 10 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45(2) 启动 mgr 进程
./ggsci start mgr3.2 Replicat 进程配置信息Replicat 进程是运行在目标端系统的一个进程,负责读取 Extract 进程提取到的数据(变更的事务或 DDL 变化)并应用到目标数据库。
(1) 创建 checkpoint table (该步骤为一次性工作)
dblogin sourcedb tidb@31.***.***.***:4000 userid username password user_password add checkpointtable tidb.checkpoint_table(2) 编辑 replicat 进程的参数
GGSCI (w-db-ps-082) 4> edit param rep_ora replicat rep_ora targetdb tidb@31.***.***.***:4000 userid username password user_password SQLEXEC "set tidb_constraint_check_in_place=1" handlecollisions MAXTRANSOPS 10000 discardfile /Data/tidb/ogg/dirrpt/repora.dsc,purge map hr.table_name,target tidb.table_name,keycols(ID);主要参数说明: | 参数 | 说明 | |:----|:----| | SQLEXEC | 可以设置抽取或应用进程与数据库的交互,比如执行相关命令,设置相关参数;tidb_constraint_check_in_place:默认值为 0,即 INSERT 数据时不做唯一性校验,只在事务提交过程中做校验;OGG 同步时需要将此参数设置为 1 | | handlecollisions | 使用该参数,replicat 处理记录重复冲突和记录丢失:当目标点记录不存在时,replicat 进程转换成 insert;当目标记录存在是,repliact 将进行更新 (该参数一般只在第一次追数据时使用,上下游完全一致的情况下不会出现冲突的情况) |
(3) 添加 replicat 进程
add replicat rep_ora,exttrail /Data/tidb/ogg/dirdat/sk,checkpointtable tidb.checkpoint_table(1) 全量抽取进程参数
GGSCI (w-db-ps-082) 4>edit param init_ora extract init_ora setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) setenv (ORACLE_SID="ora") useridalias goldengate rmthost 31.***.***.***,mgrport 9001 rmttask replicat,group rnit_ora table hr.table_name;主要参数说明:
参数说明rmttask replicat,group后面为配置初始化 replicat 进程的名称(2) 添加进程
./ggsci add extract init_ora,sourceistable4.2 配置全量应用进程(1) 全量应用进程参数
GGSCI (w-db-ps-082) 4>edit param rnit_ora replicat rnit_ora SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8) targetdb tidb@31.***.***.***:4000 userid username password user_password discardfile /Data/tidb/ogg/dirrpt/rnit_ora.dsc,purge map hr.table_name, target tidb.hr.table_name;(2) 添加进程
./ggsci add replicat rnit_ora,specialrun如上图,配置表的全量及增量的完成时间流程图:
首先配置好 MGR 进程,抽取进程,投递进程,应用进程,全量抽取进程,全量应用进程;
“A 时刻” 正常启动抽取进程和投递进程,确保投递进程的投递的远端目录有相关的 trail 文件。
“C 时刻” 启动全量抽取进程,该时刻必须在 “A 时刻” 之后,不然会丢数据;
“D 时刻” 全量同步完成;
“E 时刻” 准备启动增量 replicat 进程,为了确保数据不丢失,将 repliact 进程要提前到 “C 时刻” 和 “A 时刻” 之间的任意时刻,时间重复部分的日志冲突通过使用参数配置 “handlecollisions” 自动处理。
有时候进程由于某种原因异常,需要对 OGG 的日志进行解析,判断是否有异常数据导致的。
通过下面例子详解分别查看在开启数据库附加日志时,表是否开启附加日志所对应的日志记录。
创建表
SQL> CREATE TABLE hr.table_name 2 ( 3 ID NUMBER NOT NULL, 4 CREATED_AT DATE DEFAULT sysdate NOT NULL, 5 CREATED_BY VARCHAR2(128 BYTE) DEFAULT SYS NOT NULL, 6 UPDATED_AT DATE DEFAULT sysdate NOT NULL, 7 UPDATED_BY VARCHAR2(128 BYTE) DEFAULT SYS NOT NULL 8 ) 9 ; SQL> ALTER TABLE hr.table_name ADD CONSTRAINT PK_table_name;1.1 插入日志解析
(1) 往表中插入一条记录
SQL> insert into hr.table_name(id) values(1); 1 row created. SQL> commit; Commit complete.(3) 解析 OGG 日志文件
Logdump 12 >ghdr on Logdump 13 >detail on Logdump 14 >detail data Logdump 18 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 81 (x0051) IO Time : 2020/03/06 17:26:30.000.000 IOType : 5 (x05) OrigNode : 255 (xff) TransInd : . (x03) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 3539 AuditPos : 31052304 Continued : N (x00) RecCount : 1 (x01) 2020/03/06 17:26:30.000.000 Insert Len 81 RBA 2014 Name: HR.TABLE_NAME (TDR Index: 1) After Image: Partition 12 G s 0000 0005 0000 0001 3100 0100 1500 0032 3032 302d | ........1......2020- 3033 2d30 363a 3137 3a32 363a 3238 0002 0007 0000 | 03-06:17:26:28...... 0003 5359 5300 0300 1500 0032 3032 302d 3033 2d30 | ..SYS......2020-03-0 363a 3137 3a32 363a 3238 0004 0007 0000 0003 5359 | 6:17:26:28........SY 53 | S Column 0 (x0000), Len 5 (x0005) 0000 0001 31 | ....1 Column 1 (x0001), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 2 (x0002), Len 7 (x0007) 0000 0003 5359 53 | ....SYS Column 3 (x0003), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 4 (x0004), Len 7 (x0007) 0000 0003 5359 53 | ....SYS常见参数解析:
IOType: 表示操作类型,3 表示 delete,5 表示 insert,10 表示 update(full >record),15 表示 update(compressed record)
Continued: 该属性有两种值:Y 和 N,用来定义数据片大大小,通常 lob,clob >或 varchar 类型,该值是 Y,否则是 N。
BeforeAfter: 对于 update 操作,表示该数据是 before image(用 B 表示)还是 >after image(用 A 表示)。对于 insert 操作,总是 after images, 而 delete 操>作总是 before images。
FormatType: 表示数据是从事务日志读取还是直接从数据库中获取的。取值为 F 和 >R,F 表示 fetched from database。R 表示 readable in transaction log。
可以看到,在插入数据的时候,所有列的相关数据都在 trail 文件中。
1.2 更新日志解析
(1) 执行一次 update 操作
SQL> update hr.table_name set updated_by=aaaaaaa; 1 row updated. SQL> commit;(2) 解析 OGG 日志文件
Logdump 19 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: B (x42) RecLength : 19 (x0013) IO Time : 2020/03/06 17:26:36.000.000 IOType : 15 (x0f) OrigNode : 255 (xff) TransInd : . (x00) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 3539 AuditPos : 31055376 Continued : N (x00) RecCount : 1 (x01) 2020/03/06 17:26:36.000.000 FieldComp Len 19 RBA 2207 Name: HR.TABLE_NAME (TDR Index: 1) Before Image: Partition 12 G b 0000 0004 ffff 0000 0004 0007 0000 0003 5359 53 | ................SYS Column 0 (x0000), Len 4 (x0004) ffff 0000 | .... Column 4 (x0004), Len 7 (x0007) 0000 0003 5359 53 | ....SYS Logdump 20 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 23 (x0017) IO Time : 2020/03/06 17:26:36.000.000 IOType : 15 (x0f) OrigNode : 255 (xff) TransInd : . (x02) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 3539 AuditPos : 31055376 Continued : N (x00) RecCount : 1 (x01) 2020/03/06 17:26:36.000.000 FieldComp Len 23 RBA 2334 Name: HR.TABLE_NAME (TDR Index: 1) After Image: Partition 12 G e 0000 0004 ffff 0000 0004 000b 0000 0007 6161 6161 | ................aaaa 6161 61 | aaa Column 0 (x0000), Len 4 (x0004) ffff 0000 | .... Column 4 (x0004), Len 11 (x000b) 0000 0007 6161 6161 6161 61 | ....aaaaaaa可以看到,对于数据的更新,trail 日志中有两条记录,分别为更新前的记录,和更新后的记录,同时,通过日志可以看出,对于更新的数据,在更新前和更新后的记录中,都只有主键列和更新列的值,没有其他列的值,这个正是由于没有开启表的附加日志导致的。
前面介绍 replicat 中的参数 “handlecollisions” 用于处理数据冲突和记录不存在的情况。若更新时,目标表中不存在该记录,则对应的日志会转化成 insert 语句,这样就会导致其他字段为空插入到目标库,造成数据不一致,若目标库相关字段存在非空约束,将直接导致进程异常。
(1) OGG 账户登录
GGSCI (l-db-ps-005) 3> dblogin userid goldengate, password goldengate Successfully logged into database.(2) 开启表的附加日志
GGSCI (l-db-ps-005 as goldengate@ogg) 4> add trandata hr.table_name,nokey 2020-03-06 21:13:51 WARNING OGG-01387 Table HR.TABLE_NAME has no valid key columns, added unconditional supplemental log group for all table columns. Logging of supplemental redo data enabled for table HR.TABLE_NAME. TRANDATA for scheduling columns has been added on table HR.TABLE_NAME. TRANDATA for instantiation CSN has been added on table HR.TABLE_NAME.(3) 查看表的附加日志是否开启
GGSCI (l-db-ps-005 as goldengate@ogg) 7> info trandata hr.table_name Logging of supplemental redo log data is enabled for table HR.TABLE_NAME. Columns supplementally logged for table HR.TABLE_NAME: ALL. Prepared CSN for table HR.TABLE_NAME: 57187843通过上面的命令,已经开启表的附加日志,这样表的所有字段的附加日志都会进行记录,我们可以对更新语句再次做相关的操作,并解析 ogg 日志。
(4) 再次执行更新日志
SQL> update hr.table_name set updated_by=bbb; 1 row updated. SQL> commit; Commit complete.(5) 查看 ogg 日志
Logdump 23 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: B (x42) RecLength : 85 (x0055) IO Time : 2020/03/06 21:22:21.000.000 IOType : 15 (x0f) OrigNode : 255 (xff) TransInd : . (x00) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 3539 AuditPos : 45237264 Continued : N (x00) RecCount : 1 (x01) 2020/03/06 21:22:21.000.000 FieldComp Len 85 RBA 2437 Name: HR.TABLE_NAME (TDR Index: 1) Before Image: Partition 12 G b 0000 0005 0000 0001 3100 0100 1500 0032 3032 302d | ........1......2020- 3033 2d30 363a 3137 3a32 363a 3238 0002 0007 0000 | 03-06:17:26:28...... 0003 5359 5300 0300 1500 0032 3032 302d 3033 2d30 | ..SYS......2020-03-0 363a 3137 3a32 363a 3238 0004 000b 0000 0007 6161 | 6:17:26:28........aa 6161 6161 61 | aaaaa Column 0 (x0000), Len 5 (x0005) 0000 0001 31 | ....1 Column 1 (x0001), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 2 (x0002), Len 7 (x0007) 0000 0003 5359 53 | ....SYS Column 3 (x0003), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 4 (x0004), Len 11 (x000b) 0000 0007 6161 6161 6161 61 | ....aaaaaaa Logdump 24 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 81 (x0051) IO Time : 2020/03/06 21:22:21.000.000 IOType : 15 (x0f) OrigNode : 255 (xff) TransInd : . (x02) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 3539 AuditPos : 45237264 Continued : N (x00) RecCount : 1 (x01) 2020/03/06 21:22:21.000.000 FieldComp Len 81 RBA 2630 Name: HR.TABLE_NAME (TDR Index: 1) After Image: Partition 12 G e 0000 0005 0000 0001 3100 0100 1500 0032 3032 302d | ........1......2020- 3033 2d30 363a 3137 3a32 363a 3238 0002 0007 0000 | 03-06:17:26:28...... 0003 5359 5300 0300 1500 0032 3032 302d 3033 2d30 | ..SYS......2020-03-0 363a 3137 3a32 363a 3238 0004 0007 0000 0003 6262 | 6:17:26:28........bb 62 | b Column 0 (x0000), Len 5 (x0005) 0000 0001 31 | ....1 Column 1 (x0001), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 2 (x0002), Len 7 (x0007) 0000 0003 5359 53 | ....SYS Column 3 (x0003), Len 21 (x0015) 0000 3230 3230 2d30 332d 3036 3a31 373a 3236 3a32 | ..2020-03-06:17:26:2 38 | 8 Column 4 (x0004), Len 7 (x0007) 0000 0003 6262 62 | ....bbb可以看到,开启表的附加日志后,对于更新语句而言,无论是更新前的记录,还是更新后的记录,都包含了全字段,在日志中,任何一个操作都包含被更新表的全字段记录。
TiDB 分布式数据库存在大事务的限制,上述 OGG 复制进程参数,拆分事务为每个事物最大 100 条
SQLEXEC "set tidb_constraint_check_in_place = 1 "OGG 复制进程参数,启动进程后在 TiDB 分布式数据库中执行 set tidb_constraint_check_in_place = 1,需要设置该参数将主键冲突检测提前,否则遇到主键冲突复制进程会直接 abend。
在源端为 GBK 字符集时,注意查看复制进程的 report 日志,其中有进行字符集转换相关的信息,以及确保中文字符能正常显示。
2019-07-28 21:01:10 INFO OGG-02243 Opened trail file /home/tidb/ogg12.3/dirdat/p1000000002 at 2019-07-28 21:01:10.232896. 2019-07-28 21:01:10 INFO OGG-03506 The source database character set, as determined from the trail file, is zhs16gbk. 2019-07-28 21:05:57 INFO OGG-06505 MAP resolved (entry scott.account): MAP "SCOTT"."ACCOUNT", TARGET "scott"."account". 2019-07-28 21:05:57 INFO OGG-02756 The definition for table SCOTT.ACCOUNT is obtained from the trail file. 2019-07-28 21:05:57 INFO OGG-06511 Using following columns in default map by name: account_number, account_balance, account_trans_ts, account_trans_type. 2019-07-28 21:05:57 INFO OGG-06510 Using the following key columns for target table scott.account: account_number. 2019-07-28 21:05:57 INFO OGG-03010 Performing implicit conversion of column data from character set zhs16gbk to UTF-8.请使用与本文相同的 OGG 版本,新版本的 OGG 存在无法通过密码连接 TiDB 分布式数据库,无法进行字符集转换的问题。
在 TiDB 分布式数据库中建表使用小写,同时 OGG replicat 进程参数中 map 对应的也为小写。
初始化过程中对大表可以通过 OGG RANGE 方法,通过将多个分区映射给不同的 replicat 进程,达到并行复制提升效率。
例:
filter(@RANGE ( 分片 , 总分片数量 , 分片键)) ;
以下为两个分片时配置文件,其中分片键在有主键或唯一键时可不指定
EXTRACT initext1 userid oggadmin ,password oggadmin RMTHOST target-ogg, MGRPORT 7909 RMTTASK replicat, GROUP initrep1 TABLE scott.account, filter(@RANGE(1,2,account)) ; EXTRACT initext2 userid oggadmin ,password oggadmin RMTHOST target-ogg, MGRPORT 7909 RMTTASK replicat, GROUP initrep2 TABLE scott.account, filter(@RANGE(2,2,account)) ;问题原因:
This is due to a new security restriction in GoldenGate 12.2. In order to allow access from a remote system the ACCESSRULE parameter must be put into the manager parameter file on the target in order to allow access from the source.
处理方法:需要在源端 mgr 增加允许访问目标端 ip 的规则
(1) 编辑 mgr 参数文件 edit params mgr (2) 增加以下内容: ACCESSRULE, PROG *, IPADDR *, ALLOW问题原因:
之前把 *** 的 date 类型改为了 TIDB timestmap 类型,但是 *** 里面部分时间类型数据超过了 TIDB timestamp 的范围。(TIDB 范围为 1970-01-01 00:00:01.000000 到 2038-01-19 03:14:07.999999,*** 部分时间数据超过 2038 年,应该是原先遗留的测试数据)。
处理方法:
将 TIDB 的 timestamp 改为支持更大的 datetime 类型;同时在 OGG replicat 端增加异常数据不 abended 而是记录 discard 的方式,具体参数为:REPERROR (default,discard),防止 OGG 因为异常数据终止。
问题原因:*** 端有时间类型数据通过 OCI 接口入库时,*** 不做时间校验,但是查询的时候就会校验时间格式,正常 *** select * 都会报错,属于 *** 端数据问题。
处理方法:
用 to_char(date,’yyyy-mm-dd hh24:mi:ss’)处理错误日期后,*** 可以正常查出来,但是显示的时间为 ‘0000-00-00 00:00:00’ 的样式,可以通过类似以下的语句查出错误数据,在源端处理掉错误数据:
(1)备份错误数据 create table t_bak as select * from t where to_char(date1,’yyyy-mm-dd hh24:mi:ss’)= ‘0000-00-00 00:00:00’; (2)删除原表错误数据: delete from t where id in (select id from t_bak); commit;版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。