OGG_理论部分01

工作原理:
ogg的实现原理是抽取源端的redo_log和archive_log,然后通过TCP/IP协议投递到目标端,最后解析还原到目标端,使目标端实现源端的数据同步。
工作步骤:
1.捕获进程从redo或者归档日志中获取变更信息,将变更信息写入到trail文件
2.pump进程请求目标端MGR开启collector进程,然后将压缩的变更信息通过网络传输至目标collector进程。
3.目标端collector进程接收pump传输过来的数据保存至trail文件
4.replicat从trail文件中获取已经commit的变更信息,转换为目标DB的sql语句,并在目标DB上云行。
5.完成数据同步工作。
ogg目录说明:
**dirprm:**存放ogg的参数文件,这些参数文件可以通过文本编辑器直接编辑,也可以在ggsci命令下edit params+文件名来编辑,用于保存启动相关manger,extract,replicat 等进程时读取的参数。
**dirrpt:**存放各个进程的报告文件,内容为manager,extract,replicat进程相关的统计报告信息,当进程出现ABENDED挂起或STOPED意外终止时,可以查看相关错误信息。
**dirchk:**存放由extract抽取进程和replicat复制进程创建的checkpoint文件,checkpoint文件保存当前读写时间戳信息,通过这些信息保证了数据的准确性。
**dirpcs:**存放各个进程的状态信息
**dirdat:**存放ogg跟踪文件和由extract抽取进程创建的抽取文件,这些文件将被replicat复制进程进一步使用。文件名为人为指定两位字符,加上系统自动生成的六位序列号。
**dirdef:**存放由defgen工具创建的定义文件,包含在易购环境同步中的源或者目标端的数据定义
**dirtmp:**用于执行大事务处理过程,不要对此文件下的内容进行编辑。
EXTRACT进程:
extract进程运行在数据库的源端,负责从源端数据表或者日志中捕获数据,extract 的作用按照时间来划分:
1.初始数据装载阶段:在初始数据装载阶段,extract进程直接从源端的数据表中抽取数据。
2.同步变化捕获阶段:初始数据同步完成以后extract进程负责捕获源端数据的变化(DML,DDL)。
extract进程状态包括stopped、startting、running、abended
extract进程根据:userid参数,环境变量oracle_sid(也可通过setenv参数设置),环境变量Oracle_home(也可通过setenv参数设置)登录数据库。
(注意:环境变量NLS_LANG设置必须与数据库保持一致)
extract进程:根据检查点确定读取日志,寻找并开始解析日志。
Oracle日志的读取-在线日志
1.根据检查点中的日志序列号判断是在线还是归档日志,由于在线日志频繁读写,在系统IO缓存中,读取速度较快。
2.在线日志位置及特殊参数,ASM:需要配置如下(只能使用sys登录ASM实例):
TRANLOGOPTIONS ASMUSER SYS@<ASM_INSTANCE>
ASMPASSWORD PASSWORD
3.RAW DEVICE 在AIX下一般需要配置如下参数:
tranlogoptions rawdeviceoffset 0(注意:该参数只在内部参考手册中存在)

CLOB抽取:如果需要抽取CLOB必须加上
tranlogoptions convertucs2clobs

如果使用begin now 时ogg读取日志序列号错误,可以尝试使用extrba和extseqno直接指定日志位置。

Oracle日志的读取-归档日志
缺省查询数据库中归档日志的位置和格式并到指定位置查找对应归档日志文件
可通过参数指定归档日志
TRANLOGOPTIONS{
[ALTARCHIVELOGFORMAT ]< string >[INSTANCE< instance_name >][ THREADID < id >]
指定日志文件名的格式
[ALTARCHIVELOGDEST [PRIMARY] [INSTANCE < instance_name >]< path name >]
PUMP进程:
pump进程运行在数据库源端,其作用非常简单,如果源端使用了本地的trail文件,那么pump进程就会把trail文件以数据块的形式通过TCP/IP协议发送到目标端,pump进程本质是extract进程的一种特殊形式,如果不使用trails文件,那么就是extract进程抽取数据以后,直接投递到目标端。
与pump进程相对应的叫server collector 进程,这个进程不需要引起我们的关注,它运行在目标端,其任务就是把extract/pump进程投递过来的数据块重新组装成trail文件,我们称之为远端trail文件。
TRAIL文件
为了更有效更安全的把数据库事务信息从源端投递到目标端,ogg引进trail文件的概念。extract进程抽取完数据以后ogg会将抽取的事务信息转化为一种ogg专有格式的文件。然后pump负责把远端的trail文件投递到目标端,所以源、目标两端都会存在着中间文件,远端存放的trail文件叫做远程trail文件。trail文件存在的目的防止单点故障,将事务信息持久化,并且使用checkpoint机制来记录其读写位置,如果发生故障,则数据可以根据checkpoint信息重传数据。
REPLICAT进程
replicat 进程运行在目标端,是数据传递的最后一站,负责读取目标端的trail文件中得到内容,并将其解析为DML/DDL语句,然后应用到目标数据库中。
和extract 进程一样,replicat也有其内部的checkpoint机制,保证进程重启启动后可以从上次记录的位置开始恢复而无数据丢失的风险。它的运行状态和extract进程一致,包括:stopped,startting,running,abended
rreplicat 进程根据:userid参数,环境变量oracle_sid(也可通过setenv参数设置),环境变量Oracle_home(也可通过setenv参数设置)登录数据库。
(注意:环境变量NLS_LANG设置必须与数据库保持一致)
DDL复制
ddl复制的范围,只支持Oracle数据库,暂不支持其他数据ddl复制,对于Oracle数据库,ogg能够支持除去数据库系统对象之外所有对象ddl变化的复制
ogg dll复制需要关闭Oracle的recyclebin参数(待考证)
ddl复制的原理及特点:
ogg ddl复制是基于trigger的复制,在源库建立一个Oracle全库级的trigger 捕捉ddl操作到中间表,extract读取中间表ddl语句并dml语句根据csn排序,目标端重现该ddl操作语句。ddl复制和dml复制的复制机理是完全不同的,ddl复制基于trigger,而dml复制基于日志,两者的复制机理不同,其数据捕捉是没有联系的,只是在主extract进程中通过csn号按照发生的顺序进行组装,保证ddl操作和dml操作按照其原来的顺序执行。ddl复制的trigger建立和启用后,无论dml复制是否运行,该trigger一直发生作用,捕捉ddl sql语句到中间表。因此,dml复制的起停并不影响dml复制,只是该trigger被禁止以后不在抓取ddl操作。ddl复制只是简单的sql复制,通过trigger捕捉ddl其实就是抓取原始sql语句并发送到目标重新执行一遍。
ddl复制的限制
1.捕获ddl语句的trigger是全库级别的trigger,即该数据库上的任何一个ddl操作无论其是否在复制范围内均会触发该trigger并记录到中间表供extract进程删选。因此启用ddl复制会导致源库的ddl操作全部出发trigger,如果数据库日常业务较多并且ddl操作较多,会导致数据库性能下降很多。
2.ddl语句并不一定能在目标执行成功。
使用原则:
1.源目端必须是Oracle数据库
2.两端表结构完全相同
3.数据复制过程中无数据转换
4.数据库每日产生的日志量不超过50G
5.应用系统在数据库中不能由频繁的ddl操作,如频繁建立中间表操作
源端需要做如下配置:
1.确定ddl schema
需要配置在GLOBALS中:GGSCHEMA ogg
2.授予ogg读写操作系统上文本文件权限
grant execute on utl_file to ogg;
3.准备表空间
为ogg_ddl_hist 、ogg_marker 等表准备表空间,如果表空间不足,会导致无法进行DDL 从而影响业务
sql>alter user ogg default tablespace ogg;
4以sysdba连入,安装DDL触发器。
4.1 @marker_setup.sql
该脚本安装marker系统,为启用ddl支持所必备
4.2 @ddl_setup.sql
执行该脚本要确认关闭掉所有Oracle会话,以及提交相应提交的事物
4.3 @role_setup.sql
该操作会重建ddl同步所需的权限,授予gg中ddl对象以dml权限
sql>grant ggs_ggsuser_role to ogg;
4.4 @ddl_enable.sql
启用ddl触发器,以捕获ddl操作
4.5 @ddl_pin.sql ogg
先执行@?/rdbms/admin/dbmspool.sql(ddl性能工具)
要提高ddl触发器的性能,可以通过ddl_pin脚本,该脚本会将触发器使用的包加载到内存,以提高效率。
4.6 @ddl_status.sql
验证是否由该对象创建的每个对象ogg ddl支持特性的存在和存在正常运作。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值