GoldenGate实施参考
转载一篇原厂的Oracle GoldenGate的实施参考
安装信息收集收集客户信息(建议至少提前两周)
– 测试/生产环境
– 操作系统列表
– 数据库列表
– 数据库日志增量评估每天日志增量、峰值日志增量
–网络配置:带宽、端口等带宽评估(如带宽不足,是否需要启动压缩,压缩对CPU占用测试)
– 数据结构包括表数量、是否存在无主键表、是否有不支持数据类型等
– 验证OGG版本可用性!针对不同的操作系统和数据库版本下载需要的OGG版本并安装测试带宽估算根据峰值产生日志量估算带宽占用假设条件
– 假设OGG队列与日志比例为1:4。如只复制部分表则此比
例可以假设为更低。
– 假设网络传输效率为0.7
– 假设网络传输压缩比例为1:8。根据数据内容有所变化,一
般字符数据较多时压缩比例较大,二进制对象压缩效率较低带宽估算算法
– 以客户业务高峰期每小时产生40G为例,可以估算如下
带宽=40G/3600(秒/小时)/ 4(日志过滤比例)/8(压缩比率) * 8(每字
节8位) /0.7(网络传输效率)=4Mbps无主键表的复制GoldenGate可以正常复制无主键表,以所有列作为基准
代替主键强烈建议排除掉无主键表或者增加主键(或唯一索引)
– 一般为临时表或者历史表
– 导致附加日志增量较大,可能影响生产系统性能
– 目标端replicat投递效率非常低且无法进行优化
– 容易出现数据不一致且不易修复
– 无法使用HANDLECOLLISIONS该参数依赖于表的主键进行逻辑判断,无主键表使用该参数会导
致重复记录出现
测试安装准备
– 测试安装文档准备拟定安装操作文档拟定初始化方案并与客户达成一致
– 根据测试安装场景准备数据库脚本,如建立用户、赋予权限等准备OGG安装所需脚本,如add trandata命令脚本、目标
端禁止trigger和cascade delete脚本等OGG参数文件,列出所有可能用到参数OGG命令,常用命令预先放在文本里验证参数、命令、脚本的可行性发现潜在的问题,及时寻求解决方案
– 预订技术支持测试安装准备 –网络端口对于GoldenGate所在的数据库主机
– 源和目标均向对方开放端口7800-7810,用于mgr管理进程通讯和数据
传输进程传输数据。
– Director管理各个GoldenGate实例需要执行大量监控命令,每次命令需
要一个端口,建议开放7811-7850端口;
– Veridata为了实现并发比较,同样需要大量端口,建议开放7851-7950
端口;
– 综上所述,建议复制源和目标相互以及为Director Server和Veridata
Server开放7800-7950端口。对于Veridata Server和Director Server
– 由于国网需要每个Director Server监控上百台主机,需要大量动态分配
端口,建议Director Server向所有受控服务器开放所有端口。测试安装准备 –系统设置(源和目标)建立GoldenGate运行用户
– 需访问数据库的动态库、在线日志及归档日志
– 使用oracle用户,也可为其创建新的系统用户将其加入到oracle安装用
户所在组(一般为oinstall)。
– 为GoldenGate运行用户配置内存限制分析和抽取交易数据需一定内存,需放宽GoldenGate运行系统用户
对内存大小(memory)、文件大小(fsize)、DATA、STACK等参数
的值,在系统允许的情况下尽量将参数设置为-1(ulimited),一般
在/etc/security/limits文件中。RAC各节点配置时钟同步
– GoldenGate在单节点上对所有节点日志进行解析,为了保证其在各节点
抽取数据顺序的一致性,需要在各个节点主机上配置时钟同步(例如在
AIX下配置NTP服务)。创建OGG所需数据库用户(源和目标)OGG用户在源端所需权限(DML)
– GRANT CONNECT TO goldengate;
– GRANT ALTER ANY TABLE TO goldengate; //用于添加表附加日志
– GRANT ALTER SESSION TO goldengate;
– GRANT CREATE SESSION TO goldengate;
– GRANT FLASHBACK ANY TABLE TO goldengate;
– GRANT SELECT ANY DICTIONARY TO goldengate;
– GRANT SELECT ANY TABLE TO goldengate;
– GRANT RESOURCE TO goldengate;目标端DML复制需所有源端权限加上
– GRANT INSERT ANY TABLE TO goldengate;
– GRANT UPDATE ANY TABLE TO goldengate;
– GRANT DELETE ANY TABLE TO goldengate;如需复制DDL,则两端均需要sysdba权限
– grant sysdba to goldengate;测试安装准备 – 存储空间(源和目标)为GoldenGate分配空间
– 建议在共享阵列,可以在单节点失败后由其它节点接管,通过
脚本可以与集群软件集成
– GoldenGate软件所需空间主要取决于队列的产生速度,一般建
议为其保留相当于数据库1-3天归档日志量的存储空间。
– 存储划分完后建立OGG安装目录并将该目录Owner设为OGG运
行用户为数据库保留1-3天归档日志
– 长交易需要其开始时段的日志测试安装准备 – 数据库(源)打开归档模式
– 避免OGG重启无法找到对应日志配置parallelism(针对Oracle 9i)
– 将LOG_PARALLELISM参数设为1,OGG不支持大于1关闭recycle bin(针对DDL复制)
– Oracle 10g R2 and later: 将RECYCLEBIN初始化参数设置为
OFF.
– Oracle 10g R1: 将 _RECYCLEBIN初始化参数设置为FALSE.OGG软件安装 (源和目标)上传和解压OGG软件
– 检查安装目录Owner是否是OGG运行用户配置环境变量
– 如使用Oracle运行用户一般无需调整
– 如非Oracle用户则建议拷贝Oracle的profile文件,至少需配置如
下环境变量PATHORACLE_SIDORACLE_HOMELD_LIBRARY_PATH (Solaris, Linux), LIBPATH (AIX),
SHLIB_PATH (HPUX)配置完毕可以通过能否执行sqlplus进行初步验证
– 使用ulimit –a检查内存等限制OGG软件安装 -续(源和目标)执行ggsci,检查是否能够进入OGG命令行界面执行create subdirs创建子目录执行edit param mgr为manager配置参数,然后尝试
启动mgr进程
如以上步骤均能顺利执行,则表明初步安装成功.由于
以上步骤并不影响生产库运行,可以在测试安装前几
天提前完成.打开附加日志(源)以渐进模式打开附加日志
– 第一步,在晚上或其他业务较空闲时段打开数据库级最小附加日
志
– 第二步,经过一段时间运行观察数据库最小附加日志对数据库是
否有影响,观察日志量的增加
– 第三步,同样选择空闲时段打开所需复制表的附加日志
– 第四步,经过一段时间运行观察数据库是否有性能下降,归档日志
量是否有明显增加如何降低附加日志影响(☆)
– 排除一些应用的中间表
– 尽量排除无主键和唯一索引表(记录全部列会导致日志量显著增
加)或给他们加上主键、如何打开附加日志数据库级附加日志
– 视图v$databaseSUPPLEMENTAL_LOG_DATA_MIN:最小附加日志,开关
– 打开所需复制表的表级附加日志ALTER DATABASE add SUPPLEMENTAL LOG DATA;目的是产生最小日志增量,避免对生产主机产生较大影响表级附加日志
– 通过OGG命令行中的add trandata schema.table 命令添加
– 如果有主键则只加入主键;无主键添加唯一索引;两者皆无,则
自定义添加,否则添加所有列Extract进程设置操作系统变量
– 继承mgr进程变量设置进程本身参数和变量
– 读取参数文件
– 设定内存限制(可以通过CACHEMGR修改,缺省单个进程32位
系统最大2G,64位系统最大8G内存)连接数据库
– 根据下列信息登录数据库userid参数环境变量ORACLE_SID(也可通过setenv参数设置)环境变量ORACLE_HOME (也可通过setenv参数设置)
– 获取数据库版本信息和字符编码注意:环境变量中NLS_LANG设置必须与数据库保持一致
– 根据检查点确定读取日志,寻找并开始解析日志Oracle日志的读取 – 在线日志根据检查点中的日志序列号判断是在线还是归档在线日志
– 由于在线日志频繁读写,在系统IO缓存中,读取速度较快
– 在线日志位置及特殊参数文件系统ASM。需配置如下(只能使用SYS登录ASM实例):
TRANLOGOPTIONS ASMUSER SYS@<ASM_instance>,
ASMPASSWORD <password>RAW DEVICE。在Aix下一般需要配置如下参数:
tranlogoptions rawdeviceoffset 0
注意:该参数只在内部参考手册中存在如果需抽取CLOB必须加上
– TRANLOGOPTIONS CONVERTUCS2CLOBS说明:如果使用begin now时OGG读取日志序列号错误,可以尝试使
用extrba和extseqno直接指定日志位置Oracle日志的读取 – 归档日志缺省查询数据库中归档日志位置和格式并到指定位置查找
对应归档日志文件可通过参数指定归档日志
– TRANLOGOPTIONS {
[ALTARCHIVEDLOGFORMAT <string>] [INSTANCE
<instance_name>] [THREADID <id>]指定日志文件名的格式
[ALTARCHIVELOGDEST [PRIMARY] [INSTANCE
<instance_name>] <path name>]指定归档日志目录。如果是RAC,需要访问到所有节点归档日
志,可使用共享文件系统或者使用nfs等将其它节点归档共享到
运行节点如果为所有节点指定了归档日志目录,则可以使用PRIMARY
参数告诉GoldenGate无需再去查询log_archive_dest_N
– 可以通过降低进程对控制文件访问次数Replicat进程设置操作系统变量
– 继承mgr进程变量设置进程本身参数和变量
– 读取参数文件初始化加载之后指定开始的CSN连接数据库
– 根据下列信息登录数据库userid参数环境变量ORACLE_SID(也可通过setenv参数设置)环境变量ORACLE_HOME (也可通过setenv参数设置)
– 获取数据库版本信息和字符编码注意:环境变量中NLS_LANG设置必须与数据库保持一致宕机初始化步骤完成前面所述的所有准备工作根据约定时间停止业务应用源端
– 锁定除去OGG数据库用户以外其余所有用户
– 停止Oracle内部的所有Job
– 关闭数据库
– 重新启动数据库
– 配置OGG抽取进程和本地队列
– 启动OGG抽取进程,验证抽取进程是否可以正常启动,主要是验证是否能正常读取日志观察是否有数据被抽取出来,如有则说明尚有其它连接在修改数据,
需找出原因并停止
– 停止OGG抽取进程
– 可使用脚本记录部分主要表或所有表记录总数
– 关闭数据库OGG最佳实践 – 宕机初始化 (续一)源端
– 使用RMAN/可传输表空间/BCV等方式将数据导出
– 在源端打开数据库
– 启动源端抽取进程(也可重新配置一遍,注意清除旧的队列)
– 解开锁定的其它用户,恢复job
– 启动应用
– 观察数据抽取是否正常目标端
– 将数据导入到目标库
– 打开数据库
– 解锁其它用户(如允许也可保持锁定状态防止修改数据)
– 对比记录的源端数据库记录数与目标记录数是否相同,验证恢复完成OGG最佳实践 – 宕机初始化 (续二)源端
– 配置Data Pump和远程队列
– 启动Data Pump观察数据传输是否正常目标端
– 配置Replicat注意目标端用户权限比源端多几个
– 启动Replicat观察数据是否正常注:此时一般将reperr设置为abended模式(即默认模式)并配置
discardfile参数,遇有错误进程可以立即中止,便于及时查找错误
– 如Replicat速度跟不上队列增长速度,需进行Replicat拆分OGG最佳实践 – 基于SCN号的无宕机初始化前提条件
– 客户具有能够将目标恢复到某一特定SCN号的备份/恢复工具RMAN (强烈推荐)Exp/imp操作步骤
– 源端完成前面所述的所有准备工作配置OGG抽取进程和本地队列启动OGG抽取进程并记录开始时间查询数据库中当前交易最早的开始时间,直到该时间超过OGG抽取
启动时间点查询和记录此时SCN号为最小所需SCN可每隔半小时或一小时重新查询SCN号和记录此时全库所有表或部
分关键业务表中记录数OGG最佳实践 – 基于SCN号的无宕机初始化 (续一)目标端
– 使用备份/恢复工具恢复目标库到指定SCN号如果是RMAN可以边恢复边观察,直到恢复出来的SCN号和时间点
大于记录的最小所需SCN号
– 查询目标库中全部表或关键表记录,看其是否大致符合源端记录数
– 删除掉目标端物化视图等无用对象
– 通过SQL禁止目标端trigger和外键或者配置GoldenGate目标端参数
在会话级禁止
– 配置Replicat注:此时一般将reperr设置为abended模式(即默认模式)并配置
discardfile参数,遇有错误进程可以立即中止,便于及时查找错误
– 使用以下命令启动ReplicatStart myrep, AFTERCSN <目标恢复到的CSN>
– 观察数据复制是否正常目标初始化方案初始化的关键
– 如何避免数据丢失
– 如果处理冲突数据使用HANDLECOLLISIONS处理冲突数据
– 条件:表均有主键或唯一索引
– 方法:在启动replicat前加入HANDLECOLLISIONS参数,依赖
表主键处理掉重复数据
– 问题:如果表没有主键则可能产生重复记录使用SCN
– 启动extract后按照前面说述选择合适时间点获取其SCN;
– 使用exp或rman等获取对应于该SCN的影像并装载到目标端;
– 启动replicat时使用start replicat <name>, aftercsn <number>或
者在replicat的map参数加入filter ( @getenv (“TRANSACTION”,
“CSN”) > <number>) ;使replicat从该scn后的记录开始。数据复制典型场景 – 重新获取最近数据变化可以通过修改ext/replicat起始检查点到指定时间
– 方案一:使用alter extga,begin 2010-03-21 08:00:00条件:对应归档日志依然存在
– 方案二:修改replicat从指定位置队列重新开始应用ALTER REPLICAT finance, EXTSEQNO 53,EXTRBA 0可以通过查看队列生成时间或者logdump查看记录时间戳定位时间重复数据处理
– 在replicat使用handlecollisions(必须有主键或者唯一索引)DDL复制的范围只支持Oracle数据库
– 暂不支持其它数据库DDL复制!对于Oracle数据库,GoldenGate能够支持除去数据
库系统对象之外所有对象DDL变化的复制GoldenGate DDL复制需要关闭Oracle的
– _RECYCLEBIN参数(Oracle 10.1)
–RECYCLEBIN参数(Oracle 10.2及以后版本)。DDL复制的原理及特点Oracle GoldenGate的DDL复制是基于Trigger的复制,
– 在源库建立一个Oracle全库级的Trigger捕捉DDL操作到中
间表
– Extract读取中间表DDL语句并与DML语句根据csn排序
– 目标端重现该DDL操作sql语句特点
– DDL复制与DML复制的复制机理是完全不同的DDL复制基于Trigger,而DML复制基于日志,两者的复
制机理不同,其数据捕捉是没有联系的,只是在主
Extract进程中通过scn号按照发生的顺序进行组装,保
证DDL操作和DML操作按照其原来的顺序执行。DDL复制的原理及特点(续)特点(续)
– DDL复制与DML复制是相互独立的DDL复制的Trigger建立和启用后,无论DML复制是否运
行,该Trigger一直在发生作用,捕捉DDL sql语句到中
间表。因此,DML复制的起停并不影响DDL的捕获。同样,DDL Trigger的启用和停止并不影响DML复制,
只是该Trigger被禁止后不再抓取DDL操作。它们之间只是在Extract进行组装时根据scn号进行排序,
没有其它任何联系。
– DDL复制只是简单的sql复制通过Trigger捕捉DDL其实就是抓取原始的sql语句并发送
到目标重新执行一遍。DDL复制的限制DDL复制会影响数据库性能
– 捕获DDL语句的Trigger是全库级别的Trigger,即该数据库
上的任何一个DDL操作无论其是否在复制范围内均会触发
该Trigger并被记录到中间表供Extract进程删选。因此启用
DDL复制会导致源库的DDL操作全部触发Trigger,如果数
据库日常业务量较多并且DDL操作较多,会导致数据库性
能下降很多。DDL语句并不一定能在目标执行成功
– 由于两端数据库总存在物理和逻辑上的不同,例如两边的
安装目录和数据文件、表空间等会有所区别,造成同样的
DDL语句在源端能够执行但无法在目标端执行。虽然可以
通过字符串替换预先定义和解决类似问题,但DDL语句有
可能在目标重现后产生与源端不同结果,需要较多的维护
操作。何时打开DDL复制DDL复制优点
– 打开DDL复制能够可以自动创建每次补丁新建和修改的对象,并自动
维护对应的附加日志,无需人工介入,减少人工工作量。使用原则:
– 两端必须是Oralce数据库;
– 两端的表结构完全相同;
– 数据复制过程中没有数据的转换;
– 数据库每日产生日志量不超过50G;
– 应用系统在数据库中不能有频繁的DDL操作,如频繁建立中间表等操
作。
如果符合以上条件,可以联系Oracle GoldenGate技术支持探讨打开DDL
复制。

转载于:https://blog.51cto.com/evils798/1420535

GoldenGate实施参考相关推荐

  1. 绷紧数据安全这根弦 数据安全法 实施参考发布

    2022年4月"<数据安全法>实施参考"(简称<实施参考>)第一版正式发布,该书由中国网络安全产业联盟数据安全工作委员会(简称"CCIA数安委&q ...

  2. oracle goldengate实施简明介绍

    一.检查环境 1.1.跑预检查脚本和快照脚本 本数据库是否存在OGG不支持的数据类型 1.2.检查生产端的归档日志的空间 1.3.检查生产库实际占用空间大小 1.4.检查主机文件系统剩余空间,规划OG ...

  3. PDM系统的实施说明书

    PDM实施是一项复杂的系统工程,它涉及的知识面广.部门多,不仅涉及技术,而且涉及管理业务.组织和行为,它不仅是科学而且是艺术,至今仍然没有完全有效的方法来很好地.系统的完成PDM的实施.因此,探索和总 ...

  4. 2021年下半年信息系统项目管理师上午客观题参考答案及解析(三)

    41.工程师小王作为项目干系人之一, 主动去访问项目相关的知识库,这种沟通属于(). A.交互式沟通 B.拉式沟通 C.推式沟通 D.集中式沟通 参考答案:B 参考解析: 10.3项目沟通管理的技术和 ...

  5. 机器学习调参与贝叶斯优化及其典型python实现hyperopt

    机器学习调参与贝叶斯优化及其典型python实现hyperopt hyperopt的详细实施参考笔者的如下文章: 使用hyperopt(Bayesian optimization)为lightGBM模 ...

  6. oracle数据库查询人员和岗位,oracle岗位需求收集

    1. 负责业务系统数据库管理,包括数据库日常维护,数据库性能监控和调优,数据备份/恢复计划的制定.执行,系统数据安全以及权限管理: 2. 负责数据库系统部署方案的计划.设计和实施,参与项目的数据库设计 ...

  7. 天下程序员苦文档久已 | 《活文档》第一波短评

    小伙伴们都知道,这是我们最近刚刚上架的一本书.这本书切中了不少程序员的痛点,因此,一上架就成为大家抢购的图书,最近一周一直稳居新书销量榜榜单. 除了预览版大佬们推心置腹的推荐,我们已经收获了第一批读者 ...

  8. 如何快速研究透一篇 Paper 并提出有价值的问题?

    来自知乎:https://www.zhihu.com/question/24708090/answer/32479805 --------------------------------------- ...

  9. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

  10. DPDK ring库:环形缓冲区的解剖

    目录 ring库 FreeBSD *中的Ring实施参考 Linux *中的无锁环形缓冲区 附加功能 名称 用例 环形缓冲区的解剖 单一生产者入队 单一消费者出队 多个生产者入队 模数32位索引 生产 ...

最新文章

  1. 【STM32】GPIO功能复用
  2. 模式(一)javascript设计模式
  3. python中格式化字符串的作用_python中字符串格式化的意义(化妆)
  4. idea关闭coverage
  5. soltrace教程(3)基本使用
  6. ktm390蓝牙连接安卓_车机蓝牙连接常见问题说明
  7. 自动化通讯协定——现场总线
  8. js结束当前循环关键词_干货||什么是事件循环机制
  9. 首次!让我们出一个基于延迟的同行 IP 库数据评估来打个样~
  10. 杨森翔的书法:二月二;四条屏
  11. html中设置背景图片为平铺,html背景图片怎么设置平铺方式
  12. 【2.5TB,磁盘自费】535亿余次HTTP请求,来自IUB的Click数据集
  13. QQ会员首页HTML+CSS
  14. 栖霞牌王是怎样炼成的——利用django实现网页版千秋戏(1)
  15. BUUCTF 每日打卡 2021-4-5
  16. 工资买不起薪iphone,你还不跳槽?
  17. 新绝代双骄三常见问题解答(不同于网上那片)
  18. web桌面程序之锁屏功能分析
  19. 燃气管道泄漏监测监控报警管理系统软件解决方案
  20. 首先,打破一切常规 学习笔记 之一

热门文章

  1. pycharm 2018.1 专业版激活 亲测可用!!!
  2. noip模拟赛 对刚
  3. AFNetworking 图片的本地缓存问题
  4. Oracle 游标Cursor 的基本用法
  5. NetSuite 在中国 - 一个全程信息化管理平台
  6. MySQL的高可用实现:MySQL系列之十四
  7. 新概念英语(1-95)Tickets,please!
  8. 【LeetCode】026. Remove Duplicates from Sorted Array
  9. MFC中显示一张位图
  10. HDU 1087 Super Jumping! Jumping! Jumping!(DP)