--oogg搭建
-----(源,目标)
-----1 创建ogg用户 ,在操作系统中,创建ogg用户。
useradd -g dba -G oinstall -d /home/ogg ogg
-----2 设置环境变量
cp /home/oracle/.bashrc /home/ogg/
chown ogg:dba /home/ogg/.bashrc
vim /home/ogg/.bashrc
--------------------
export PATH=$ORACLE_BASE/ogg:$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export OGG_HOME=$ORACLE_BASE/ogg
--------------------
-----3 创建OGG安装目录
---------------------------
mkdir -p /u01/app/oracle/ogg
chown -R ogg:oinstall /u01/app/oracle/ogg --OGG_HOME
---4 安装
mkdir -p /home/ogg/insogg/
unzip /home/oracle/ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip -d /home/ogg/insogg/
cd /home/ogg/insogg/
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/app/oracle/ogg
---5 登录OGG测试(源)
cd /u01/app/oracle/ogg
ggsci
GGSCI (localhost.localdomain) 1> create subdirs
Creating subdirectories under current directory /u01/app/oracle/ogg
Parameter files /u01/app/oracle/ogg/dirprm: already exists
Report files /u01/app/oracle/ogg/dirrpt: created
Checkpoint files /u01/app/oracle/ogg/dirchk: created
Process status files /u01/app/oracle/ogg/dirpcs: created
SQL script files /u01/app/oracle/ogg/dirsql: created
Database definitions files /u01/app/oracle/ogg/dirdef: created
Extract data files /u01/app/oracle/ogg/dirdat: created
Temporary files /u01/app/oracle/ogg/dirtmp: created
Stdout files /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工具生成的数据定义
------6 oracle 配置
-----------创建表空间ogg
create tablespace ogg datafile '/u01/app/oracle/data/orcl/ogg01.dbf' size 50M autoextend on;
----------创建用户
create user ogg identified by ogg default tablespace ogg;
-----------为OGG用户授权
--OGG用户需要以下权限,也有人为了省事,直接给OGG用户DBA权限。
SQL> grant CONNECT, RESOURCE to ogg;
SQL> grant SELECT ANY DICTIONARY,SELECT ANY TABLE to 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;
----------- 打开源数据库的附加日志和force log
SQL> select NAME,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_MIN from v$database;
---运行OGG支持DDL脚本
--如果要让OGG支持DDL操作,还需要额外运行几个脚本,这些脚本是OGG带的而不是ORACLE带的,在OGG的安装目录都可以找到,如果在OGG的安装目录登录数据库,可以直接@加脚本的名字,源端与目标端都需要运行
chown -R ogg:oinstall /u01/app/oracle/ogg
sqlplus / as sysdba
GRANT CREATE TABLE,CREATE SEQUENCE TO OGG;
--权限配置以后.要重新执行
SQL>@marker_setup.sql
SQL>@ddl_setup
SQL>@role_setup
SQL> grant GGS_GGSUSER_ROLE to ogg;
SQL>@ddl_enable
--OGG原理及数据制造
----创建测试数据
----源数据库(源)
conn scott/tiger
@demo_ora_create.sql
@demo_ora_insert.sql
----目标数据(目标)
@demo_ora_create.sql
---------------OGG配置
/*
MGR管理进程(源,目标)
检查点 (源,目标)
捕获进程(源)
投递进程(源)
REPLICAT进程(目标)
*/
----源端添加表级TRANDATA(源)
--添加表级的trandata可以理解为需要将哪些用户的哪些表和目标库同步,其实也是添加表级的supplemental log,但是只有上文打开的minimal supplemental log后,这个才生效。
GGSCI (oggsource) 2> dblogin userid ogg,password ogg
---增加检查点
GGSCI (oggsource) 2> add checkpointtable ogg.checkpoint
GGSCI (dbdream) 3> add trandata scott.tcustmer (---goldengate对符号比较敏感,在add trandata时不要用分号),成功添加表级TRANDATA后,可以通过INFO命令查看哪些表被添加了TRANDATA.
GGSCI (dbdream) 3>INFO TRANDATA scott.*
---目标和源端配置MGR管理进程 (源,目标)
GGSCI (stream) 2> EDIT PARAMS MGR 加入以下两行内容
PORT 7809
PURGEOLDEXTRACTS /ogg/dirdat,USECHECKPOINTS
参数说明:
PORT 7809:OGG管理进程监控端口。
PURGEOLDEXTRACTS:清除不需要的trail文件。
/ogg/dirdat:trail文件存放位置。
USECHECKPOINTS:使用检查点队列。
GGSCI (localhost.localdomain) 11> start mgr
GGSCI (oggtarget) 4> info mgr
文件存放路径$OGG_HOME/dirprm
---配置初始化数据进程(此步骤非必须,可以由其他方式完成)
-------下面在源端配置捕获进程EINI_1。(源)
GGSCI (orcl) 11> ADD EXTRACT EINI_1, SOURCEISTABLE--------------源端加同步进程 删除进程 delete EXTRACT EIXI_1--对应的进程名称
GGSCI (orcl) 12> INFO EXTRACT *, TASKS
GGSCI (orcl) 13> EDIT PARAMS EINI_1
----------------------------
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=orcl)
userid ogg, password ogg
RMTHOST 192.168.137.131, MGRPORT 7809
exttrail /u01/app/oracle/ogg/dirdat/ea
--RMTTASK REPLICAT, GROUP RINI_1
TABLE SCOTT.TCUSTMER;
------------------
--源端配置捕获进程
GGSCI (orcl) 13> EDIT PARAMS EINI_1
----------------------------
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=orcl)
userid ogg, password ogg
RMTHOST 192.168.137.131, MGRPORT 7809 --端口号要和mgr一致
--RMTTASK REPLICAT, GROUP RINI_1-----目标端名字一定要对应
TABLE SCOTT.TCUSTMER;
--TABLE SCOTT.DEPT_OGG;
/*
EXTRACT EINI_1:说明这是EXTRACT进程,名字是EINI_1 SETENV:
环境变量,一定要设置和数据库字符集一样,否则可能会乱码
USERID:数据库OGG用户 PASSWORD:数据库用户OGG的密码
RMTHOST:目标端地址,如果在/etc/hosts文件里已经设置解析,可以写主机名 MGRPORT:
目标端MGR管理进程监听的端口RMTTASK REPLICAT:
目标端REPLICAT应用进程的组和名字
TABLE:源端要初始化数据的表的名字
*/
add extract EINI_1,tranlog,begin now --添加抽取进程
add exttrail /u01/app/oracle/ogg/dirdat/ea,extract EINI_1,megabytes 5 --意思是将EINI_1捕获的extract跟踪文件添加到./dirdat 目录,文件最大5M。
start extract EINI_1
--配置投递(传输跟踪文件)的pump进程(源)
edit params pump1
---
EXTRACT pump1
RMTHOST 192.168.137.131, MGRPORT 7809
RMTTRAIL ./dirdat/et
PASSTHRU
DYNAMICRESOLUTION
TABLE scott.TCUSTMER;
-----
--如果添加错,下面命令删除
--GGSCI (oracle1) 5> DELETE extract pump1、
add extract pump1,exttrailsource /u01/app/oracle/ogg/dirdat/ea , begin now
add rmttrail ./dirdat/et ,extract pump1
info extract pump1
start extract pump1
--datapump 进程参数
/*
EXTRACT <进程名>
RMTHOST IP地址, MGRPORT 7809, COMPRESS
—目标端的ip地址,7809为目标端的管理端口,要求配置compress压缩参数,节省网络带宽,但会增加CPU开销
PASSTHRU
—传输进程直接跟抽取进程交互,而不再和数据库进行交互,减少数据库资源的利用
NUMFILES 5000 —最多处理多少个表
RMTTRAIL ./dirdata/ya —投递哪个队列,必须和抽取保持一致
DYNAMICRESOLUTION —动态解析表名
TABLE schema.; —需要投递的对象列表
Sequence schema.; —需要投递的sequence对象
*/
---源端和目标端配置OGG的检查点(源,目标)
EDIT PARAMS GLOBALS
-----
CHECKPOINTTABLE ogg.checkpoint
--------------
--这就告诉OGG检查点存放到OGG用户下的GGSCHKPT表中,但是还需要使用OGG用户登录数据库,创建检查点表,此时需要退出OGG,重新登录,否则可能会遇到下面的错误
GGSCI (oggsource) 1> dblogin userid ogg,password ogg
GGSCI (oggsource as ogg@dbdream) 2> ADD CHECKPOINTTABLE
----配置目标端REPLICAT进程 (特别留意名字为源端配置的名) (目标端)
add replicat RINI_1,specialrun------目标端添加同步进程
GGSCI (oracle2) 5> EDIT PARAMS RINI_1
-----------
REPLICAT RINI_1
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
ASSUMETARGETDEFS
USERID ogg, PASSWORD ogg
DISCARDFILE /u01/app/oracle/ogg/dirrpt/RINI_1.dsc, PURGE
MAP scott.*, TARGET scott.*;
---------------------
add replicat RINI_1,exttrail ./dirdat/et
info replicat RINI_1
start replicat RINI_1
/*
REPLICAT RINI_1:说明这是REPLICAT应用进程,名字叫RINI_1
SETENV:语言变量,同捕获进程EINI_1
ASSUMETARGETDEFS:告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数,
USERID、PASSWORD:同捕获进程EINI_1参数介绍
DISCARDFILE:错误信息存放位置及命名规则
MAP:源端捕获的表的名字
TARGET:目标端同步的表的名字,可以不在同一SCHEMA
*/
--如果错误需要删除 可以命令 delete replicat RINI_1
--------启动
--配置好目标端的应用进程RINI_1后,就可以启动源端的捕获进程进行捕获数据了,而目标端的应用进程RINI_1不需要手动去启动,也就是说目标端RINI_1进程不需要管。
--ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;(没找到对应得参数先略过,以后要改再说)
--1.启动源端的管理进程(源,目标)
start mgr
--2.启动目标端的复制进程(目标)
start replicat RINI_1
--查看源端捕获进程状态:
VIEW replicat RINI_1
--3.启动源端的捕获进程:(源)
START EXTRACT EINI_1
--查看源端捕获进程状态:
VIEW REPORT EINI_1
--4.启动源端的投递进程(源)
start extract pump1
--查看源端投递进程状态
info extract pump1
info all --可以查看所有进程
--源端进程
---------------------------
GGSCI (localhost.localdomain) 14> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EINI_1 00:00:00 00:00:08
EXTRACT RUNNING PUMP1 00:00:00 00:00:01
--目标端进程
GGSCI (oracle2) 27> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING RINI_1 00:00:00 00:00:03
-------------------------------------------
总结:这个ogg实际难度还好,但是要细致,想一想好几年前我就没有配置正确,缺的课以后都是要补的,接下来先把新版的oracle安装学习一下,后面再学rac
---验证数据
insert into scott.tcustmer select 'Ac','baikaishui','China','cc' from dual;