项目 | 源端 | 目标端 |
ip | 192.168.12.23 | 192.168.22.24 |
oracle sid | orcl | orcl |
goldengate用户 | oracle | oracle |
ogg版本 | 11.2.1.0.1 | 11.2.1.0.1 |
操作系统版本 | linux | linux |
两台服务器都需要创建ogg操作系统用户(此步骤非必须)。
useradd -u 1003 -g oinstall -G dba ogg1 passwd ogg
PATH=$PATH:$HOME/bin
export PATH
umask 022
export ORACLE_HOSTNAME=segment2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=orcl
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
exportPATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_BASE/ogg
exportPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
exportLIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export ORACLE_OWNER=oracle
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
exportOGG_HOME=$ORACLE_BASE/ogg
mkdir /ogg chown -Rogg:oinstall /ogg
将OGG安装文件上传到两台服务器的OGG操作系统用户的家目录(默认为/home/ogg)。
fbo_ggs_Linux_x64_ora11g_64bit.tar
fbo_ggs_Linux_x64_ora11g_64bit.tar解包到/ogg目录(源和目标端都需要操作)
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg
$./ggsci
解压安装后目录
[oracle@sourceogg]$ ls -l |grep ^d
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 cfg
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 dirjar
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 dirprm
drwxr-x---7 oracle oinstall 4096 Apr 23 2012 UserExitExamples
GGSCI(source) 1> create subdirs
Creatingsubdirectories under current directory /u01/app/oracle/ogg
Parameterfiles /u01/app/oracle/ogg/dirprm: already exists
Reportfiles /u01/app/oracle/ogg/dirrpt: created
Checkpointfiles /u01/app/oracle/ogg/dirchk: created
Processstatus files /u01/app/oracle/ogg/dirpcs: created
SQLscript files /u01/app/oracle/ogg/dirsql: created
Databasedefinitions files /u01/app/oracle/ogg/dirdef: created
Extractdata files /u01/app/oracle/ogg/dirdat: created
Temporaryfiles /u01/app/oracle/ogg/dirtmp: created
Stdoutfiles /u01/app/oracle/ogg/dirout: created
文件路径 | 说明 |
/u01/app/oracle/ogg/dirprm | 存放OGG参数各的配置信息 |
/u01/app/oracle/ogg/dirrpt | 存放进程报告文件 |
/u01/app/oracle/ogg/dirchk | 存放检查点文件 |
/u01/app/oracle/ogg/dirpcs | 存放进程状态文件 |
/u01/app/oracle/ogg/dirsql | 存放SQL脚本文件 |
/u01/app/oracle/ogg/dirdef | 存放DEFGEN工具生成的数据定义 |
ORACLE建议使用单独的表空间存放OGG数据,表空间大小50M就可以,但是最好设置数据文件的自动扩展。
SQL>create tablespace ogg datafile'/u01/app/oracle/oradata/orcl/ogg01.dbf'size 50M autoextend on
SQL>create user ogg identified by ogg default tablespace ogg;
OGG用户需要以下权限,也有人为了省事,直接给OGG用户DBA权限。
SQL> grant CONNECT, RESOURCE to ogg;
SQL> grant SELECT ANY DICTIONARY, SELECT ANY TABLEto ogg;
SQL> grant ALTER ANY TABLE to ogg;
SQL> grant FLASHBACK ANY TABLE to ogg;
SQL> grant EXECUTE on DBMS_FLASHBACK to ogg;
SQL> grant insert any table to ogg;
SQL> grant update any table to ogg;
SQL>grant delete any table to ogg;
SQL> selectNAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SQL> alter database force logging;
SQL> alter database add SUPPLEMENTAL log data;
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MINfrom v$database;
如果要让OGG支持DDL操作,还需要额外运行几个脚本,这些脚本是OGG带的而不是ORACLE带的,在OGG的安装目录都可以找到,如果在OGG的安装目录登录数据库,可以直接@加脚本的名字,源端与目标端都需要运行
如下:
sqlplus / as sysdba
GRANT CREATE TABLE,CREATE SEQUENCE TO OGG;
权限配置以后.要重新执行
SQL>@ddl_setup
SQL>@role_setup
SQL> grantGGS_GGSUSER_ROLE to ogg;
SQL>@ddl_enable
创建测试数据
源数据库
@demo_ora_create.sql
@demo_ora_insert.sql
目标数据
@demo_ora_create.sql
添加表级的trandata可以理解为需要将哪些用户的哪些表和目标库同步,其实也是添加表级的
supplemental log,但是只有上文打开的minimal supplemental log后,这个才生效。
GGSCI (oggsource) 2> dbloginuserid ogg,password ogg
GGSCI (dbdream) 3> add trandata hr.tcustmer;
GGSCI (dbdream) 4> add trandata scott.dept_ogg
成功添加表级TRANDATA后,可以通过INFO命令查看哪些表被添加了TRANDATA.
INFO TRANDATA scott.*
GGSCI (stream) 2> EDITPARAMS MGR 加入以下两行内容
PORT 7809
PURGEOLDEXTRACTS /ogg/dirdat,USECHECKPOINTS
参数说明:
PORT 7809:OGG管理进程监控端口。
PURGEOLDEXTRACTS:清除不需要的trail文件。
/ogg/dirdat:trail文件存放位置。
USECHECKPOINTS:使用检查点队列。
start mgr
GGSCI (oggtarget) 4> info mgr
文件存放路径$OGG_HOME/dirprm
由于在创建测试表的时候,源端的测试表有数据,而目标端的测试表只有结构,没有数据,所以需要初始化目标端的数据,所谓初始化,就是让目标端的数据和源端的数据在这个时间点是一模一样的,所以初始化工作并不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,
本文主要介绍如何使用OGG进行数据初始化,
下面在源端配置捕获进程EINI_1。
GGSCI (dbdream) 11> ADD EXTRACT EINI_1, SOURCEISTABLE--------------源端加同步进程
GGSCI (dbdream) 12> INFO EXTRACT *, TASKS EXTRACT
GGSCI (dbdream) 13> EDIT PARAMS EINI_1
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=dbdream)
userid ogg, passwordogg
RMTHOST 192.168.12.203, MGRPORT 7839
RMTTASK REPLICAT, GROUP RINI_1-----目标端名字一定要对应
TABLE SCOTT.EMP_OGG;
TABLE SCOTT.DEPT_OGG;
EXTRACT EINI_1:说明这是EXTRACT进程,名字是EINI_1 SETENV:
环境变量,一定要设置和数据库字符集一样,否则可能会乱码
USERID:数据库OGG用户 PASSWORD:数据库用户OGG的密码
RMTHOST:目标端地址,如果在/etc/hosts文件里已经设置解析,可以写主机名 MGRPORT:
目标端MGR管理进程监听的端口RMTTASK REPLICAT:
目标端REPLICAT应用进程的组和名字
TABLE:源端要初始化数据的表的名字
B、配置目标端REPLICAT进程
---------------------特别留意名字为源端配置的名
add replicatRINI_1,specialrun------目标端添加同步进程
EDIT PARAMS RINI_1
--加入以下内容
REPLICAT RINI_1
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
ASSUMETARGETDEFS
USERID ogg, PASSWORD ogg
DISCARDFILE /u01/app/oracle/ogg/dirrpt/RINIaa.dsc, PURGE
MAP scott.*, TARGET scott.*;
REPLICAT RINI_1:说明这是REPLICAT应用进程,名字叫RINI_1
SETENV:语言变量,同捕获进程EINI_1
ASSUMETARGETDEFS:告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数,
USERID、PASSWORD:同捕获进程EINI_1参数介绍
DISCARDFILE:错误信息存放位置及命名规则
MAP:源端捕获的表的名字
TARGET:目标端同步的表的名字,可以不在同一SCHEMA
C、初始化数据-----源端
配置好目标端的应用进程RINI_1后,就可以启动源端的捕获进程进行捕获数据了,而目标端的应用进程RINI_1不需要手动去启动,也就是说目标端RINI_1进程不需要管。
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
GGSCI (oggsource asogg@dbdream) 17> START EXTRACT EINI_1
GGSCI (oggsource as ogg@dbdream) 17>VIEW REPORT EINI_1
可以看到初始化是正确的。初始化之后,上文提到的初始化进程(EINI_1、RINI_1)自动停止,因为通常情况下初始化数据工作只会做一次。可以通过INFO命令查看进程的状态。
INFO EXTRACT EINI_1-------------源端
INFO REPLICAT RINI_1-------目标端
此步骤不是必须的,但是为了让OGG网络中断、服务器宕机、掉电等在突发情况也能正确断点续传,ORACLE建议配置OGG的检查点队列。
GGSCI (stream) 2> EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE ogg.ggschkpt
这就告诉OGG检查点存放到OGG用户下的GGSCHKPT表中,但是还需要使用OGG用户登录数据库,创建检查点表,此时需要退出OGG,重新登录,否则可能会遇到下面的错误。
[ogg@oggsource ogg]$ ./ggsci
GGSCI (oggsource) 1> dblogin userid ogg,password ogg
GGSCI (oggsource as ogg@dbdream) 2> ADD CHECKPOINTTABLE
[ogg@dbdream ogg]$ sqlplus ogg/ogg
No checkpoint table specified. Using GLOBALS specification(ogg.ggschkpt)...
Successfully created checkpoint table ogg.ggschkpt.
此时用OGG登录数据库,就可以看到OGG创建的检查点表。
SQL> select * from tab;
$ edit param ext1
EXTRACT ext1
SETENV(ORACLE_HOME="/oracle/app/product/11.2/db")
SETENV (ORACLE_SID="orcl")
SETENV(NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
USERID ogg password ogg
EXTTRAIL ./dirdat/ext1/sd
gettruncates
DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &
INCLUDE MAPPED OBJTYPE 'INDEX'
table scott.*;
add extract ext1 tranlog, begin now
ADD EXTTRAIL ./dirdat/ext1/sd EXTRACT ext1, MEGABYTES 100-----注意是相对路径
start ext1
ADD EXTRACT EORA_2, TRANLOG, BEGIN NOW
ADD EXTTRAIL /u01/app/oracle/ogg/dirdat/zz,EXTRACT EORA_2, MEGABYTES 5
添加PUMP进程PORA_1到OGG,并指定本地的TRAIL文件。
edit pram dp1
EXTRACT dp1
PASSTHRU
DYNAMICRESOLUTION
RMTHOST 192.168.12.24 ,MGRPORT 7809
RMTTRAIL ./dirdat/ext2/sd
DISCARDFILE./dirrpt/dp2.dsc,APPEND,MEGABYTES 100
DISCARDROLLOVER AT 6:00
REPORTROLLOVER AT 6:00
REPORTCOUNT EVERY 1 HOURS,RATE
TABLE scott.*;
ADD EXTRACT dp1, EXTTRAILSOURCE./dirdat/ext1/sd
INFO EXTRACT dp2
ADD RMTTRAIL ./dirdat/ext1/sd, EXTRACT dp1, MEGABYTES100-----注意相对路径
ADD EXTRACT PORA_1, EXTTRAILSOURCE /u01/app/oracle/ogg/dirdat/pa
为PUMP进程PORA_1指定将本地TRAIL文件传输到目标端后保存成目标端TRAIL文件的名字。
ADD RMTTRAIL /u01/app/oracle/ogg/dirdat/pa, EXTRACTPORA_1, MEGABYTES 5
START EXTRACT dp1
GGSCI (oggsource as ogg@dbdream) 36>INFO EXTRACT dp1
注意路径存在和环境变量相关内容
edit param rep1
REPLICAT rep1
SETENV (ORACLE_HOME ="/u01/app/oracle/product/11.2.0/db_1" )
SETENV (ORACLE_SID = "orcl")
SETENV (NLS_LANG ="AMERICAN_AMERICA.ZHS16GBK")
USERID ogg, PASSWORD ogg
--HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/rep2.dsc ,append,megabytes 10
---SOURCEDEFS./dirdef/def.def
DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &
INCLUDE MAPPED OBJTYPE 'INDEX'
MAP SCOTT.EMP_OGG ,TARGET SCOTT.EMP_OGG ;
MAP SCOTT.DEPT_OGG ,TARGET SCOTT.DEPT_OGG ;
ADD REPLICAT rep1, EXTTRAIL ./dirdat/ext1/sd
START REPLICAT rep1
注意参数
ERROR OGG-00423 Could not find definitionfor source.person
In the Replicat param Please tryASSUMETARGETDEFS , if source and target have same table structure..
if both the structures are different ,generate the source definition and use SOURCEDEFS in Replicate Param.
handcollisions被注释了,也就是说当target端缺失delete 、update数据时,target端无法自动处理。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。