首页 > 技术文章 > 快速搭建golden gate环境

alexweng 2015-04-22 23:31 原文

准备操作系统用户和文件系统

  1. 准备安装和运行用户(操作系统用户)
    1. 建议使用Oracle用户
    2. 也可使用新建用户,但需做以下配置
      1. 该用户必须加入到oinstall组
      2. 该用户使用与oracle相同的profile文件
      3. 操作系统必须为该用户开放一定的CPU、内存等资源限制,可以通过ulimit –a查看,建议在/etc/security/limits.conf中设置和oracle用户一致.
  2. 准备安装位置和空间
    1. OGG可以安装于任意位置,RAC下建议安装在存储阵列,可以在单点失败后切换到其它节点继续运行.只在一个节点上跑。
    2. 分配空间
      1. 软件本身所需空间约为200M以下 (OGG 12c需要约500M空间,建议1GB)
      2. 为缓存数据建议保留相当于1-3天归档日志的存储空间 (trial文件)--很多客户用1周的量。
    3. 将安装目录的owner修改为OGG运行用户

源库的准备

  1. 数据库必须打开归档模式:OGG重启时需要读取未提交交易开始时的日志。如果系统稳定,只要你不需要去归档日志读取就不需要打开。
  2. 验证未使用并行日志(只针对9i ):Sql> show parameter LOG_PARALLELISM。如结果为1,无需修改;否则需要修改为1。
  3. 如果是OGG12c,需要设置(不管源和目标,只要运行12c的就要设置):alter system set enable_goldengate_replication=true;
  4. 打开数据库最小附加日志:
    1. SQL>select supplemental_log_data_min from v$database;
    2. 结果为NO,表示没有打开附加日志。使用以下命令将数据库附加日志打开:
    3. SQL>alter database add supplemental log data;
    4. 切换日志以使附加日志生效:
    5. SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
  5. 建立OGG数据库用户:
    1. OGG需要从数据字典读取表结构
    2. 如Oracle日志中没有足够信息,则需通过flash back或者直接读取数据库记录(例如,CLOB/BLOG/BINARY等)
  6. OGG数据库用户权限:
    1. CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
    2. GRANT CONNECT TO goldengate;
    3. GRANT CREATE SESSION TO goldengate;
    4. GRANT ALTER SESSION TO goldengate;
    5. GRANT RESOURCE TO goldengate;
    6. GRANT SELECT ANY DICTIONARY TO goldengate;
    7. GRANT SELECT ANY TABLE TO goldengate;
    8. GRANT FLASHBACK ANY TABLE TO goldengate;
    9. GRANT ALTER ANY TABLE TO goldengate;

目标库的准备

  1. 建立OGG数据库用户:通过sql将数据写入数据库
  2. OGG目标数据库用户权限:
    1. CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE USERS ;
    2. GRANT CONNECT TO goldengate;
    3. GRANT CREATE SESSION TO goldengate;
    4. GRANT ALTER SESSION TO goldengate;
    5. GRANT RESOURCE TO goldengate;
    6. GRANT SELECT ANY DICTIONARY TO goldengate;
    7. GRANT SELECT ANY TABLE TO goldengate;
    8. GRANT FLASHBACK ANY TABLE TO goldengate;
    9. GRANT ALTER ANY TABLE TO goldengate;
    10. GRANT INSERT ANY TABLE TO goldengate;
    11. GRANT UPDATE ANY TABLE TO goldengate;
    12. GRANT DELETE ANY TABLE TO goldengate;

软件安装(源和目标)

  1. 上传软件包到安装目录
  2. 以oracle用户登录
  3. 使用unzip XXX.zip解压缩;
  4. 使用tar xvf XXX.tar解开tar包;
  5. 在goldengate目录下,执行./ggsci进入命令行界面,左侧提示出现GGSCI (myhost) 1>,表示进入成功
  6. 如果ggsci进入出错,设置一下环境变量:
  7. export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  8. 在ggsci环境下创建GoldenGate子目录:GGSCI>create subdirs
    1. 该命令会在OGG安装目录下建立若干子目录,其中几个主要目录如下所示:
    2. dirchk:用于存放各个进程的检查点
    3. dirdat:用于存放数据队列文件
    4. dirprm:用于存放各进程参数文件
    5. dirrpt:用于存放各进程报告
    6. dirpcs:存放各个正在运行的进程信息

Mgr进程配置 (源和目标):

  1. 以oracle用户登录,在goldengate目录下,执行./ggsci进入命令行界面
  2. 为mgr进程配置参数:
    1. GGSCI>edit param mgr
    2. 会打开一个编辑窗口,在其中输入以下内容然后保存退出。
      port 7809
      --DYNAMICPORTLIST 7820-7830, 7833, 7835
      --autostart er *
      --autorestart er *, retries 5, waitminutes 3
      --purgeoldextracts /u01/oracle/goldengate/dirdat/*,usecheckpoints, minkeepdays 7
    3. 启动mgr进程:GGSCI>start mgr
    4. 说明:参数前面加入两个中划线表示该参数被注释掉

添加表级附加日志(源):

  1. 以oracle用户进入goldengate目录下执行./ggsci命令进入命令行界面;
  2. 在GGSCI命令行中登录数据库,为所有要复制的数据表添加trandata:
  3. ggsci>dblogin userid goldengate, password goldengate
  4. ggsci>add trandata myschema.mytable1
  5. 或者
  6. ggsci>add trandata myschema.*
  7. 结尾无逗号,注意空格位置

添加抽取进程(源):

  1. 添加exta进程,从数据库日志中抓取有效数据
  2. GGSCI> add ext exta, tranlog, begin now
  3. exta为进程名,一般为ext开头表示是extract进程,后面可以加1-2位字符标识;
  4. tranlog表示要抽取数据库日志;
  5. begin now表示从当前时间点开始抽取

抽取进程直接到目标端(源):

  1. 添加远程队列ra, exta进程捕捉到的有效数据直接写入远程队列 :一般不会采用这样的方式。
    1. GGSCI> add rmttrail /u01/oracle/goldengate/dirdat/ra, ext exta, MEGABYTES 20
    2. 每一个ext进程都要对应一个本地或者远程队列,指明ext进程抽取的数据要写到何处。
    3. Rmttrail参数指定的位置就是目标队列的位置(注意:不是在源主机上的位置),队列一般以路径加上两个标识如ra来表示,ext后面指定该队列是对应哪个ext进程。
    4. Megabytes表示每个队列文件的大小限制,超过该大小则会滚动写下一个队列文件。
  2. 注意:如果网络中端,则extract会中止,如果长时间以后再启动则有可能日志已经被删除,因此建议在异地和系统经常要重启或停机的情况下采用添加一个传输进程的方式。

配置传输进程(源):

  1. 如果是异地复制或者网络不稳定,建议首先抽取到本地,然后再单独配一个进程传输到目标。
    1. 创建完exta进程后,使用本地队列时为exta进程配置队列如下:
      GGSCI> add exttrail /u01/oracle/goldengate/dirdat/la, ext exta, MEGABYTES 20
    2. 由于此时exta复制到了本地,还需要配置一个传输进程负责将数据原封不动的搬运到目标端:
      GGSCI> add extract dpea, EXTTRAILSOURCE /u01/oracle/goldengate/dirdat/la
    3. 注意此时exttrail指定的是本地队列位置。然后为该传输进程配置远程队列:
      GGSCI> add rmttrail /u01/oracle/goldengate/dirdat/ra, ext dpea, MEGABYTES 20
    4. 其中队列位置是在目标主机上的位置
    5. image

配置抽取进程参数(源):

  1. 如果是直接投递到目标端,不使用data pump (对应前面进程的配置方法,一般不这样用)
    GGSCI>edit param exta
    EXTRACT exta
    setenv(NLS_LANG = AMERICAN_AMERICA.AL32UTF8)
    setenv(ORACLE_SID = oggsource)
    USERID goldengate, PASSWORD goldengate
    rmthost oggtarget, mgrport 7809
    rmttrail /u01/oracle/goldengate/dirdat/ra
    dynamicresolution
    --GETUPDATEBEFORES
    --NOCOMPRESSDELETES
    table myschema.maytable1;
    table myschema.maytable2;
    --table myschema.*;
    --TABLE hq.acct, COLS (col1, col3);
    --TABLE hq.acct, COLSEXCEPT (col4);
  2. 如果是使用了data pump,则抽取日志进程exta参数如下:
    GGSCI>edit param exta
    EXTRACT exta
    setenv ( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
    setenv (ORACLE_SID = oggsource)
    USERID goldengate, PASSWORD goldengate
    EXTTRAIL /u01/oracle/goldengate/dirdat/la
    dynamicresolution
    --GETUPDATEBEFORES
    --NOCOMPRESSDELETES
    table myschema.maytable1;
    table myschema.maytable2;
    --table myschema.*;
    --TABLE hq.acct, COLS (col1, col3); //只复制该表的col1和col3列
    --TABLE hq.acct, COLSEXCEPT (col4); //复制该表除col4外的所有列
    --相比不使用data pump,其区别就是使用exttrail 代替了rmttrail,也无需再配置rmthost。
  3. 如果是使用了data pump,还需要配置data pump进程dpea
    extract dpea
    setenv ( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
    passthru
    --REPORT AT 01:59
    --reportrollover at 02:00
    rmthost 99.16.1.11,mgrport 7809, compress
    rmttrail /oradata/goldengate/dirdat/ra
    dynamicresolution
    table myschema.mytable1;
    table myschema.mytable2;
    TABLE hq.acct; //注意此时不用再过滤cols了。
    --其中:passthru表示本进程是一个传输进程data pump,无需跟数据库交互,只需要搬运数据即可;
    --因为data pump要传输数据到目标,所以需要配置rmthost和rmttrail指定目标主机和队列信息

启动源端进程(源):

  1. 启动源端所有进程:GGSCI>start ext *
  2. 表示启动所有的extract进程。也可以使用start直接加进程名,如 start dpea分别启动各个进程。
  3. 可以通过info all查看各进程状态,正常启动后应当是running状态。
  4. 注:此时应当保证目标端mgr已经启动,否则可能dpea进程无法启动。

投递进程配置(目标)初始化目标表:

  1. GoldenGate的extract进程CDC工作方式不负责为目标端建立对应表和初始数据
  2. 可以通过exp/imp、RMAN、init load进行数据初始化
  3. 如果目标端不需要历史数据,可以只建立表结构。

投递进程配置(目标端)– 添加投递进程:

  1. 添加repa进程,将队列中的数据应用到目标库
    GGSCI> add rep repa, exttrail /u01/oracle/goldengate/dirdat/ra, nodbcheckpoint
  2. repa为进程名,一般为rep开头表示是replicat进程,后面可以加1-2位字符标识,一般与ext进程对应;
  3. exttrail表示要抽取的数据队列,注意是目标端的队列位置;
  4. nodbcheckpoint表示不使用数据库检查点。

投递进程配置(目标端)– 配置投递进程参数:

  1. 为投递进程配置参数:
    GGSCI>edit param repa
    replicat repa
    setenv (NLS_LANG = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8')
    setenv (ORACLE_SID = GUTJ)
    userid goldengate, password ********
    --REPORT AT 01:59
    --reportrollover at 02:00
    reperror default,abend
    discardfile /u01/oracle/goldengate/dirrpt/repa.dsc,append, megabytes 10
    assumetargetdefs
    --allownoopupdates
    dynamicresolution
    --INSERTALLRECORDS
    map myschema.maytable, target myschema.maytable;
    map gy25500.F_09B201A_APPEND, target odiu.F_B201A_APPEND, COLMAP ( usedefaults , etltime = @GETENV ("GGHEADER", "COMMITTIMESTAMP"));
  2. 启动目标端投递进程:GGSCI>start rep *  表示启动所有的replicat进程。也可以使用start直接加进程名,如 start repa分别启动各个进程。可以通过info all查看各进程状态,正常启动后应当是running状态,注意:如果涉及到在线数据初始化过程,语法不一样.

安装过程总结:

  1. 分段配置
  2. 相关参数使用合理性
  3. 相对路径和绝对路径的一致性

推荐阅读