1.安装环境说明
5.
5
64bit
db:Oracle
11.
2.
0.
3
64bit
采用goldengate典型的配置:
在
source端,配置一个管理进程,添加一个
Extract进程,添加一个本地队列路径,定义一个远端接受路径.
在target端,配置一个管理进程和添加一个Replicat进程,指定一个应用队列,即抽取进程定义的远端队列。
注意:这种配置没有
Data Pump进程,数据直接从源端又Ext进程刷新到target端的trail中,因此存在一定的风险。
(经典的生产一半不能用)进程容易中断
2.配置ORACLE_HOME 和 ORACLE_SID
如果系统上只有一个单实例,那么可以在操作系统级别设置ORACLE_HOME和ORACLE_SID变量。
如果有多个instance,那么可以再Extrace和Replicat group 中设置setenv变量,这种session级别的设置会覆盖操作系统的设置。
如果有多个实例,那么可以分别配置同步的Extrace groups,那么参数文件可以按照如下进行配置:
group 1:
extract ora9a
setenv (ORACLE_HOME="/u01/app/product")
setenv("ORACLE_SID="oraa")
useridalias tiger1
rmhost sysb
rmttrail /u01/ggs/dirdat/rt
table hr.emp;
table hr.salary;
group 2:
extract orab
setenv (ORACLE_HOME="/u01/app/product")
setenv("ORACLE_SID="orab")
useridalias tiger1
rmhost sysb
rmttrail /u01/ggs/dirdat/st
table fin.sales;
table fin.cust;
3.设置library路径
ogg使用共享的library.所以在linux上运行ogg之前,必须先配置好library路径。
假设ogg的安装目录是/u01/ggs,那么在/home/oracle/.bash_profile文件里添加如下内容:
export PATH=/u01/ggs:$PATH
export LD_LIBRARY_PATH=/u01/ggs:$LD_LIBRARY_PATH
4.安装ogg
在ogg11中,直接解压缩安装文件就行了,到了ogg12c的版本,ogg使用oui来进行安装。
[oracle@ogg2 Disk1]$ pwd
/u01/software/fbo_ggs_Linux_x64_shiphome/Disk1
[oracle@ogg2 Disk1]$ ls
install response runInstaller stage
[oracle@ogg2 Disk1]$
运行RunInstaller:
如果数据库版本是12c,就选择12c;如果数据库是11g,就选择11g的。
software location 选择ogg的解压安装目录
进入ogg安装目录,运行如下命令:
ldd ggsci
[oracle@ogg1 ggs]$ ldd -version
[oracle@ogg1 ggs]$ldd ggsci --查看需要的安装包
librt.so.1 => /lib64/librt.so.1 (0x0000003dafe00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003daf200000)
libgglog.so => /u01/zw/libgglog.so (0x00002b9d080f3000)
libggrepo.so => /u01/zw/libggrepo.so (0x00002b9d0849c000)
libdb-5.2.so => /u01/zw/libdb-5.2.so (0x00002b9d08707000)
libggperf.so => /u01/zw/libggperf.so (0x00002b9d089a2000)
libicui18n.so.48 => /u01/zw/libicui18n.so.48 (0x00002b9d08bd1000)
libicuuc.so.48 => /u01/zw/libicuuc.so.48 (0x00002b9d08edf000)
libicudata.so.48 => /u01/zw/libicudata.so.48 (0x00002b9d0915d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003daf600000)
libxerces-c.so.28 => /u01/zw/libxerces-c.so.28 (0x00002b9d0a823000)
libantlr3c.so => /u01/zw/libantlr3c.so (0x00002b9d0ad3a000)
libnnz11.so => not found
libclntsh.so.11.1 =>not found
libggnnzitp.so => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003dc1000000)
libm.so.6 => /lib64/libm.so.6 (0x0000003daee00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003dbd400000)
libc.so.6 => /lib64/libc.so.6 (0x0000003daea00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003dae600000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003db2e00000)
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002b9d0e305000)
少包了,解决办法。
[oracle@ogg02 ggs]$ find /u01 -name libons.so 或 find / -name libons.so
[oracle@ogg02 ggs]$ ln -s /u01/app/oracle/product/11.2.0.3/db_1/lib/libons.so
假设OGG的安装目录是/u01/ggs,那么在/home/oracle/.bash_profile文件里添加如下内容:
export PATH=/u01/ggs:$PATH
export LD_LIBRARY_PATH=/u01/ggs:$LD_LIBRARY_PATH
--source 使修改生效:
[oracle@ogg1 u01]$ source ~/.bash_profile
[oracle@ogg02 ggs] cd /u01/ggs
[oracle@ogg02 ggs] ggsci
GGSCI (ogg1) 1>info manager
在 Oracle 11g中,安装完后,需要ggsci执行create subdirs创建ogg的目录,到了12c,就不用创建了。
5.开启归档模式、强制日志、附加日志
5.1 开规档
SQL> alter system set log_archive_dest_1='location=/oradata/arch' scope=both;
SQL> alter database archivelog;
SQL> archive log list;
5.2 添加附加日志
SQL
>
5.3 强制日志
SQL
> alter database force logging;
--确认修改:
SQL
> select LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN,FORCE_LOGGING from v$database;
6.启用DDL支持
ogg可以配置支持ddl的同步,对ddl的支持是通过创建一些table来保存这些ddl的信息,并且有一些限制。
6.1.禁用recycel bin
SQL
> alter system set recyclebin
=off scope
=spfile;
6.2. 创建存放DDL 信息的user并赋权
创建GG的表空间:(source和target端都要创建)
SQL
> create tablespace ggs datafile
'/oradata/ggs01.dbf' size
200m autoextend off;
这里的表空间不能自动扩展。ogg11g可以使用默认的user表空间,
12c需要独立的表空间,否则报错。
SQL
> create user ggs identified by ggs default tablespace ggs temporary tablespace temp;
SQL
> grant connect,resource to ggs;
SQL
> grant execute on utl_file to ggs;
退出oracle的所有session,然后用sysdba权限执行以下脚本
注意:要先进入/u01/ggs,再执行脚本
[oracle@ogg02 ggs] cd /u01
/ggs
[oracle@ogg02 ggs] sqlplus
/ as sysdba
6.3执行脚本
(1)创建DDL标记表
SQL
> @
/u01
/zt
/marker_setup.sql;
(这里会提示要输入ggs用户)
(2)将在数据库中创建捕获DDL语句的Trigger等必要组件
(这里会提示要输入ggs用户)
SQL
> @
/u01
/zt
/ddl_setup.sql;
注意:(
1)执行时必须断开GGSCI连接,否则报错
(
2)执行的时候不用选择操作类型了。在
11g中需要选择initialsetup选项。
(3) 创建GGS_GGSUSER_ROLE角色 ( 这里会提示要输入ggs用户)
SQL
> @
/u01
/zt
/role_setup.sql;
(4) 授予给extract group参数中定义的userid用户
SQL
> grant GGS_GGSUSER_ROLE to ggs;
(5) 启用ddl捕获触发器:
SQL
> @
/u01
/zt
/ddl_enable.sql;
还有两个可选的脚本,用来提高ddl复制性能:
@
?
/rdbms
/admin
/dbmspool
--
-创建DBMS_SHARED_POOL包
@
/u01
/ggs
/ddl_pin.sql
--通过DBMS_SHARED_POOL.keep存储过程将DDLReplication相关对象keep在共享池中,保证这些对象不要reload,提升性能。
注意,在oracle
11.
2.
0.
4 中需要配置;
SQL
> alter system set enable_goldengate_replication
=true;
System altered.
7.检查点表配置
goldengate 的检查点表示 目标端 的一个可选的配置,默认情况下,goldengate不会设置检查点表机制,而依耐于文件系统的保证,相对于后者,检查点表机制更可靠,且便于日常维护。
建议在首次配置目标库的时候,在全局变量中设置检查点表,并创建,这样做的话,以后所有的replicat进程默认情况下均会使用这个检查点表。
配置检查点表后,goldengate日常维护的操作区别在于,所有replicate进程的添加删除前均需要从ggsci中登录数据。
配置步骤如下:
1. 登录ggsci界面,在./GLOBALS文件里添加checkpoint表名
checkpointtable owner.table
--指定的检查点记录表
2.连上db,创建checkpoint表
dblogin sourcedb dbname,userid db_user,password pw
add checkpointtable ggs.checkpoint
--生成一个检查点记录表
这里不做配置,直接在后面测试中配置。
8.OGG单向复制测试
注意三点: (
1)目标库的用户名和对象名称可以和源端不同,关键在于配置文件中能够正确匹配。
(
2)配置源端和目标端tnsnames,保持互联互通。
(
3)对于采用oralce asm的实例,还需要配置监听,使得goldengate能够连接到对应的asm实例上,访问redo日志。
可以通过lsnrctl status 命令查看监听器状态,看看能否找到asm实例的信息,默认情况下asm实例已经注册,信息类似
service
"+ASM" has
1 instance(s)
8.1在source和target database 上创建测试用户
--source database
SQL
> create user sender identified by oracle default tablespace users temporary tablespace temp;
--创建用户
User created.
SQL
> grant connect,resource,dba to sender;
Grant succeeded.
2.
--target database
SQL
> create user receiver identified by oracle default tablespace users temporary tablespace temp;
--创建用户
User created.
SQL
> grant connect,resource,dba to receiver;
Grant succeeded.
8.2在source和target上配置manager
cd
/u01
/ogg
ggsci
info all
edit params mgr
--编辑manager参数
port
7809
--这里指定了端口,保存退出
start manager mgr
--启动manager
8.3配置sourcedb的复制队列
8.
3.
1 连接到数据库,测试连接
dblogin userid ggs@ogg02,password ggs
8.
3.
2 增加一个抽取 添加 extract 进程
GGSCI (ogg1)
10
> add extract ext1, tranlog, begin now
ext1 :是 extract进程名称
begin now: 从现在开始捕获事务日志
GGSCI (ogg1)
11
> add exttrail
/u01
/zt
/dirdat
/lt, extract ext1
exttrail :trail 文件所在目录,以及命名规则;extract ext1
修改抽取进程ext1参数:
GGSCI (ogg1)
13
> edit params ext1
extract ext1
userid ggs@ogg02, password ggs
rmthost
192.
168.
56.
23, mgrport
7809
rmttrail
/u01
/zt
/dirdat
/lt 本地
ddl include mapped objname sender.
*; ddl 和 sender用户
table sender.
*;
info all
8.4 配置targetdb 同步队列
8.
4.
1
1. 在Target 端添加checkpoint表
GGSCI (gg4)
6
> edit params .
/GLOBAL
--在.
/GLOBAL文件里添加checkpoint表名
GGSCHEMA ggs
--DDL同步必须指定,DML同步不需要
CHECKPOINTTABLE ggs.checkpoint
--指定的检查点记录表
GGSCI (ogg4)
1
> dblogin userid ggs@ogg04,password ggs
--连上db
Successfully logged into database.
GGSCI (ogg4)
2
> add checkpointtable ggs.checkpoint
--
--生成一个检查点记录表checkpoint
8.
4.
2 创建同步队列 (添加repliact进程)
GGSCI (ogg2)
3
> add replicat rep1,exttrail
/u01
/zt
/dirdat
/lt, checkpointtable ggs.checkpoint
REPLICAT added.
GGSCI (ogg2)
4
> edit params rep1
replicat rep1
ASSUMETARGETDEFS
userid ggs@ogg04,password ggs
discardfile
/u01
/zt
/dirdat
/rep1_discard.txt,append, megabytes
100
--megabytes
100单个trail文件
100M
ddl
map sender.
*, target receiver.
*;
sender 用户下的表,映射到target receiver用户下
discardfile : 同步不了的数据,放到
/u01
/ggs
/dirdat
/rep1_discard.txt
8.5 开启同步
8.
5.
1 sourcedb
:
info all
start extract ext1
into all
8.
5.
2 targetdb
info all
start replicat rep1
info all
8.6 测试data复制
我们在sourcedb 上 的sender用户下创建一张表,然后看这张表是否同步到了target db的receiver用户下。
sourcedb
conn sender/oracle;
create table zw as select * from sys.all_users;
targetdb
conn receiver/oracle;
select count(*) from zw;
数据同步过来了,因为我们启用了ddl的支持。
删除的步骤如下:
1. 登陆GGSCI
2. 用dblogin 登陆数据库。
3. 停止Extract 或者 Replicat 进程
4. 执行删除操作
DELETE EXTRACT group_name
DELETE REPLICAT group_name