十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
创新互联建站是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:网站建设、成都做网站、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。
项目 | 源端 | 目标端 |
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端无法自动处理。