sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 产品DBA > Oracle GG >

【学习笔记】Oracle goldengate安装配置过程问题及解决办法

时间:2016-12-11 18:54   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库goldengate的文章,文章详细记录了goldengate的配置过程。

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客
本文链接地址: goldengate 学习系列2–相关配置说明

前面进行了goldengate的单向复制(支持ddl),在进行goldengate安装时,我们需要进行什么准备工作?

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配置支持

    ---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支持

   顺序执行如下脚本即可:
   ---保证执行之前回收站是关闭的:
      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.

特别是里面的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的特殊配置

由于我这里是使用的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 相关的配置说明

  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模式的
       ---对于RAhttp://www.oracleplus.netC环境,使用ALO模式,必须使用专用连接模式。
       ---源端,instance级别以及table 级都必须开启supplemental logging模式。
       ---ALO模式不支持asm环境下的archivelog读取。当然,如果archivelog 不是存在asm磁盘组里面,
           比如在文件系统上,那是可以的。

6. 关于源库存在行迁移的情况说明

  根据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小的长事务就不同步了。

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle goldengate安装配置过程问题及解决办法

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1389.html

Oracle研究中心

关键词:

Oracle Goldengate

Oracle GG配置过程问题及解决方法