goldengate 学习系列2–相关配置说明
本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客
本文链接地址: goldengate 学习系列2–相关配置说明
前面进行了goldengate的单向复制(支持ddl),但是很多内容对于新手来说,比较模糊。
这一篇重点描述,在进行goldengate安装时,我们需要进行什么准备工作?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
1. 创建user ---你可以直接使用oracle用户 ---你可以单独创建用户来管理goldengate,例如: groupadd ggs useradd -g oinstall -G dba ggs (必须加到oracle的组里面,因为需要调用$ORACLE_HOME/lib) passwd ggs 2. 配置用户环境变量 ---配置SID、数据库字符集、LIB Path export ORACLE_SID=10gasm export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK export ORACLE_HOME=/home/oracle/oracle/product/10.2.0 export LD_LIBRARY_PATH=/home/ggs/ggs_home:$ORACLE_HOME/lib |
3. DDL配置支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
---goldengate ddl支持保护那些操作 +++++ For ogg 10.4: DDL support for sequences (CREATE, ALTER, DROP, RENAME) is compatible with, but not required for, replicating sequence values. To replicate just sequence values, you do not need to install the GoldenGate DDL support environment. You can just use the SEQUENCE parameter. 我们可以看到是支持sequence的 create,alter、drop以及rename等ddl操作。 这里需要说明的是,如果指定了EXCLUDE, TABLEEXCLUDE等参数,针对这些对象 的ddl操作是不会被进程抓取的。 ----ddl scripts描述 Object Purpose Default name DDL marker table Stores DDL information. This table GGS_MARKER only receives inserts. Sequence on marker table Used for a column in the marker GGS_DDL_SEQ table. DDL history table Stores object metadata history. This GGS_DDL_HIST table receives inserts, updates, deletes. Object ID history table Contains object IDs of configured GGS_DDL_HIST_ALT objects. DDL trigger Fires on DDL operations. Writes GGS_DDL_TRIGGER_BEFORE information about the operation to the marker and history tables. Installed with the trigger are some packages. DDL schema Contains the DDL synchronization None; must be specified during objects. installation and in the GLOBALS file. User role Establishes the role needed to GGS_GGSUSER_ROLE execute DDL operations. Internal setup table Database table for internal use GGS_SETUP only. ddl_pin Pins DDL tracing, the DDL ddl_pin package, and the DDL trigger for performance improvements. ddl_cleartrace.sql Removes the DDL trace file. ddl_cleartrace.sql ddl_status.sql Verifies that the GoldenGate DDL ddl_status.sql objects are installed marker_status.sql Verifies that the marker table is marker_status.sql installed. ddl_tracelevel.sql Sets the level for DDL tracing. ddl_tracelevel.sql |
—-配置ddl支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
顺序执行如下脚本即可: ---保证执行之前回收站是关闭的: alter system set recyclebin=off; --10.2 or later version alter system set "_recyclebin"=flase; --10.1 ---execute sql scripts SQL > GRANT EXECUTE ON UTL_FILE TO ggs; SQL >@ marker_setup.sql SQL >@ ddl_setup.sql SQL >@ role_setup.sql SQL >@ ddl_enable.sql SQL >@ ?/rdbms/admin/dbmspool SQL >@ ddl_pin.sql 对于生产库,如果涉及到的DDL对象比较多,那么建议创建单独的表空间来存在goldengate 用户的ddl对象, 当你执行完ddl相关脚本以后,会发现数据库中存在如下的ggs用户表: SQL> set lines 120 SQL> col table_name for a30 SQL> select owner,table_name from dba_tables 2 where owner='GGS'; OWNER TABLE_NAME ------------------------------ ------------------------------ GGS GGS_MARKER GGS GGS_DDL_RULES GGS GGS_DDL_RULES_LOG GGS GGS_SETUP GGS GGS_DDL_HIST_ALT GGS GGS_DDL_HIST GGS GGS_DDL_COLUMNS GGS GGS_DDL_LOG_GROUPS GGS GGS_DDL_PARTITIONS GGS GGS_DDL_PRIMARY_KEYS GGS GGS_DDL_OBJECTS GGS GGS_STICK GGS GGS_TEMP_UK GGS GGS_TEMP_COLS 14 rows selected. SQL> 特别是里面的GGS_MARKER 和 GGS_DDL_HIST 可能会增长的比较快。 SQL> select count(*) from ggs.GGS_DDL_HIST; COUNT(*) ---------- 96 SQL> select count(*) from ggs.GGS_MARKER; COUNT(*) ---------- 93 |
4. 对于ASM的特殊配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
由于我这里是使用的asm(源端和目标端都是asm),开始在进行配置时,还经过了一点小小的折腾, 最后查看文档,发现asm的配置有一点差异,这里进行一下说明。 4.1) 有人说针对asm,配置的时候,必须使用sys连接,其实不是这样的,oracle mos文档进行了描述: Using Oracle GoldenGate In An Oracle ASM Environment With A Non Sys User [ID 1060535.1] 文中提到了remote_login_passwordfile参数,有SHARED和EXCLUSIVE 两种模式,对于SHARED模式, 我感觉相对操作简单,于是我选择了SHARED模式,针对这种情况,ggs用户授予sysdba权限即可。 4.2) 源端抽取进程参数必须增加如下信息: userid ggs@10gasm,password ggs TRANLOGOPTIONS ASMUSER sys@+ASM, ASMPASSWORD oracle ---必须添加这行信息 4.3) listener.ora、tnsnames.ora配置的改变 ---源端和目标端 listener.ora: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /home/oracle/oracle/product/10.2.0/) (PROGRAM = extproc) ) (SID_DESC = (ORACLE_HOME = /home/oracle/oracle/product/10.2.0/) (SID_NAME = +ASM) ) ) 红色部分是需要增加的内容 tnsnames.ora: 添加如下内容: +ASM = (DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=10gasm)(PORT=1521)) (CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=+ASM) (INSTANCE_NAME=+ASM) (UR=A)) ) |
5. redo logs 相关的配置说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
5.1) log_parallelism为1 如果源端数据库是9i版,那么必须设置参数 _log_parallelism为1.因为goldengate不支持该参数大于1的情况。 5.2) io 由于ogg 抽取进程也是直接读取redo log或archivelog的,所以如果数据库本身IO就存在瓶颈, 那么此时,如果抽取进程也比较多,可能会导致严重的性能问题。特别是当抽取进程和lgwr都在 写同一个redo log时。因此,尽可能的保证redo log磁盘更快。当然,显示就不推荐RAID 5,事实 上就不普通的数据库环境,我们也不推荐将redo log放到RAID 5的disk上。 5.3) 如果你redo log和archivelog分别在不同的平台上,此时可以考虑使用如下两种情况: ---使用NFS 存放archivelog ---使用logsource、pathmap、TRANLOGOPTIONS参数,例如如下例子: TRANLOGOPTIONS LOGSOURCE WINDOWS, PATHMAP & J:\ORACLE\ORA92\RDBMS\REDO & \\vm-051\j$\ORACLE\ORA92\RDBMS\REDO, & PATHMAP J:\ORACLE\ORADATA\ARCH\ & \\vm-051\j$:\ORACLE\ORADATA\ARCH\ 5.4) 最好源库是归档模式,且保留archivelog的时间也够长。如果使用非归档模式,考虑到goldengate 有时出现延时的情况(实际上经常出现),最好是保证你的online redo log有尽量多的组,防止 数据还没被抽取就被lgwr进程给覆盖了。 5.5) 对于rac环境,必须保障抽取进程能够读取每个节点的online log和archivelog。 如果archivelog没有在默认位置,且不是默认的日志格式,你可能还需要使用如下参数: archivelogdest、alterarchivelogformat 5.6) 如果你不需要实时的数据同步,那么还可以配置ogg的抽取进程只读取archivelog,这种模式 下,抽取进程是不会去读online redo logs的,这种模式简称ALO模式。 ALO模式存在如下的一些限制: ---仅仅支持oracle 9i以及以后的版本 ---如果源库创建了standby,那么是不能使用resetlogs操作的。 ---这种模式下,不支持DDL操作 ---如果源库是rac环境,standby环境是非RAC,那么此时standby是能使用ALO模式的 ---对于RAC环境,使用ALO模式,必须使用专用连接模式。 ---源端,instance级别以及table 级都必须开启supplemental logging模式。 ---ALO模式不支持asm环境下的archivelog读取。当然,如果archivelog 不是存在asm磁盘组里面, 比如在文件系统上,那是可以的。 |
6. 关于源库存在行迁移的情况说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
根据goldengate文档描述,如何ogg配置中的表存在行迁移或链接(行碎片)的情况下,goldengate 的抽取进程可能需要做更多的工作,这里文档没有说明具体是什么,根据猜测,应该可能会导致更 多的io和cpu消耗。 文档的建议是如果表的行迁移和链接比较严重,那么建议从ogg配置中讲这些表 去掉。推荐的一个步骤是这样的: ----从ogg配置中删除该表或者使用tableexclude 参数 ----对表进行重组(move,rebuild index,修改pctfree等等) ----还原配置 ----另外,你还可以针对严重的表单独创建一个extract group。 7. adjusting cursors 从文档描述来看,goldengate 抽取进程也是使用cursor来进行fetch 数据,所以可能需要设置 maxfetchstatements参数。另外,数据库实例中,open_cusros参数,可能需要调的更大一些。 8. 长事务的相关配置 我们知道,数据库中有时可能某些事务执行时间会很长,针对这种情况,goldengate有专门的参数。 在事务没有commit之前,ogg的抽取进程是不会写入到trial文件的。例如: GGSCI (10gasm) 13> view param ext1 extract ext1 userid ggs@10gasm,password ggs TRANLOGOPTIONS ASMUSER sys@+ASM, ASMPASSWORD oracle discardfile ./dirrpt/ext1.dsc, append, megabytes 50 warnlongtrans 2h, checkinterval 3m ---2小时 EXTTRAIL ./dirdat/ex NUMFILES 3000 ALLOCFILES 200 GETTRUNCATES SEQUENCE roger.*; table roger.*; GGSCI (10gasm) 14> 需要说明一下的是,TRANLOGOPTIONS参数的意思是,超过2小时的长事务,goldengate会记录waring信息的。 并不是说超过2小的长事务就不同步了。 |
One Response to “goldengate 学习系列2–相关配置说明”
good work!
Leave a Reply
You must be logged in to post a comment.