前端之家收集整理的这篇文章主要介绍了
GG12.2 Oracle to Oracle 操作简明命令,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
How to Setup Oracle GoldenGate - Oracle to Oracle Extract and Replicat (step by step Classic Extract & Replicat setup) and Tutorials for Heterogeneous Databases (文档 ID 1484793.1)
====
==== 创建用户
useradd -u 1300 -g oinstall -G dba,oper -d /home/oggs -m oggs
echo -n Oracle_123 |passwd --stdin oggs
su - oggs
vi .bash_profile
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
GGS_HOME=/u01/app/oggs; export GGS_HOME
ORACLE_SID=ymsdb; export ORACLE_SID
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
PATH=${PATH}:$GGS_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib:$GGS_HOME
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
export TEMP=/tmp
export TMPDIR=/tmp
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
==== 创建目录
mkdir -p /u01/app/oggs
chown -R oggs:oinstall /u01/app/oggs
=== 配置SHELL Limits 限制
1. Create a file labeled 99-grid-oracle-limits.conf within /etc/security/limits.d/ as follows
(1). 创建个空文件
touch /etc/security/limits.d/99-grid-oracle-limits.conf
(2). 文件中输入以下内容
cat >> /etc/security/limits.d/99-grid-oracle-limits.conf <<EOF
oggs soft nproc 16384
oggs hard nproc 16384
oggs soft nofile 1024
oggs hard nofile 65536
oggs soft stack 10240
oggs hard stack 32768
EOF
2. create a shell script labeled oracle-grid.sh within /etc/profile.d/ to create the ulimits for the oracle and grid user.
(1). 创建个空文件
touch /etc/profile.d/oracle-grid.sh
(2). 编辑文件
vi /etc/profile.d/oracle-grid.sh
#Setting the appropriate ulimits for oracle and grid user
if [ $USER = "oracle" ] || [ $USER = "grid" ] || [ $USER = "oggs" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
/***** 安装 GG ***********/
su - oggs
cd /orasoft/ora11g
unzip fbo_ggs_Linux_x64_shiphome.zip
cd /orasoft/ora11g/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller
/********* GG 环境初始化 ******************/
1. 创建子目录
cd $GGS_HOME
ggsci
create subdirs
2. 确认gg可以正常工作(源库&目标库)
cd $GGS_HOME
ggsci
dblogin userid system,password Oracle_123
info mgr
stop mgr
edit param mgr
PORT 7809
DYNAMICPORTLIST 7819-7839
PURGEOLDEXTRACTS /u01/app/oggs/dirdat
start mgr
info mgr
/**** 模拟插入部分测试数据 *************/
create user demos identified by demos;
grant connect,resource to demos;
create table demos.test_users as select * from dba_users;
alter table demos.test_users add constraint pk_users primary key (user_id);
3. 源库配置
(1) 数据库级附加日志
alter database archivelog;
alter database force logging; ## 非必须,强制日志是针对直接路径数据加载的
select supplemental_log_data_min from v$database;
alter database add supplemental log data;
(2) 启用ENABLE_GOLDENGATE_REPLICATION
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
(3) 创建用于数据同步的用户
create user ggs identified by ggs;
grant dba to ggs;
(4) 启用表级附加日志
cd $GGS_HOME
ggsci
dblogin userid ggs,password ggs
add trandata demos.test_users
注意:
(
set linesize 300
col owner format a10
col log_group_name format a15
col table_name format a25
col LOG_GROUP_TYPE format a30
select owner,log_group_name,table_name,log_group_type,always from dba_log_groups where owner='DEMOS';
注意观察下:
OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE ALWAYS
---------- --------------- ------------------------- ------------------------------ -----------
DEMOS GGS_87352 TEST_USERS USER LOG GROUP ALWAYS
DEMOS SYS_C0011109 TEST_USERS PRIMARY KEY LOGGING ALWAYS
DEMOS SYS_C0011110 TEST_USERS UNIQUE KEY LOGGING CONDITIONAL
DEMOS SYS_C0011111 TEST_USERS FOREIGN KEY LOGGING CONDITIONAL
##等同于 alter table demos.test_users add supplemental log group <log_group_name> (user_id) always;
)
(5) 确认表是否添加附件日志
info trandata demos.test_users ##
4. 目标库配置
(1) 创建用于数据同步的用户
create user ggt identified by ggt;
grant dba to ggt;
(2) ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
(3) 级联更新带来的问题 (触发器或者级联操作(外键))
两种解决办法:
> 数据库内完成,要同步的表使用
alter table ... disable constraint ...
alter trigger ... disable
> 如果目标数据库是Oracle,并且Oracle版本是10.2.0.5或者11.2.0.2之后,使用的优势GG11g,还可以使用GG11所提供的suppresstriggers选项
DBOPTIONS suppresstriggers
处于通用性考虑,推荐使用第一种方式
(4) checkpoint table
两种方式:
> 所有replicat 使用同一个checkpoint table
这种方式会用到global文件,不同于extract,replicat(放置在$GGS_HOME/dirprm),GLOBALS文件是放置在$GGS_HOME底下的
Step:
1). $GGS_HOME下创建文件GLOBALS
cd $GGS_HOME
vi GLOBALS ## edit ./GLOBALS
CheckPointTable ggt.chkpt
GGSCHEMA GGT
exit ## 一定要退出下,重进
2). 创建表ggt.chkpt
cd $GGS_HOME
ggsci
dblogin userid ggt,password ggt
add checkpointtable
3). 确认下
info checkpointtable ggt.chkpt
注意:实际创建了两张表 ggt.chkpt & ggt.chkpt_lox
> Replicat 级别的checkpointtable
可以在add replicat 语句中直接加入 checkpointtable,相当于为每个Replicat进程定义一个专属Checkpoint Table
ggsci> add replicat rb,exttrail dirdata/rp,checkpointtable ggt.rbckt
但是注意:这个命令并没有自动创建这个检查点表,而且没有任何提示,add replicat rb时不会报错,但delete replicat rb时,会提示找不到表,正确的做法如下:
1). create table ggt.rbckt as select * from ggt.chkpt where 0=1;
2). create table ggt.rbckt_lox as select * from ggt.chkpt_lox where 0=1
3). add replicat rb,checkpointtable ggt.rbckt ## 待验证这种方式
/*************** 配置阶段 ***********************************/
1. Step:
(1) 配置extract并启动
(2) 配置datapump并启动
(3) 完成初始加载
(4) 配置Replicat并启动
2. 源库配置exttact
(1) 准备参数文件
cd $GGS_HOME
ggsci
edit params lxusers
Extract lxusers
----------------------
-- Local extract for demos
-- Author:
-- Created: 2017-07-26
----------------------
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ggs,password ggs
extrail dirdata/sp
table demos.test_users;
注意一点:
1). SETENV
GG 继承 GG用户(本例为oggs).bash_profile中的设置
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1")
setenv (ORACLE_SID="ymsdb")
2). USERID/PASSWORD
可以使用encrypt password命令对密码记性加密,指定加密时需要指定一个密钥或者加密算法,也可以使用默认密钥,步骤如下:
a. 加密密码
encrypt password ggs encryptkey default
b. 使用加密后的密码,不过需要告诉GG这是一个加密后的密码,并且需要提供加密时相同的密钥或者加密算法
> 命令行登录
dblogin userid ggs,password "",encryptkey default
> 参数文件登录聚
userid ggs,password,encryptkey default
3) Extrail
可以使用相对路径,如dirdata/sp
也可以使用绝对路径,如/u01/app/oggs/dirdata/sp ##
4) Table
demos.test_users; ## 注意分号
demos.* ## schema级别
(2) 密码加密后的参数文件
edit params lxusers
Extract lxusers
----------------------
-- Local extract for demos
-- Author:
-- Created: 2017-07-26
----------------------
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ggs,password AACAAAAAAAAAAADAFHJEXBKHIDHHAGIC,encryptkey default
exttrail dirdata/sp
table demos.test_users;
(3) 创建extract进程
add extract lxusers,tranlog,begin now ## tranlog默认指的就是online redolog,begin now,begin ExtSeqNo 或者 begin ExtRBA 是从什么时候开始抓取
add exttrail dirdat/sp,extract lxusers,megabytes 100
(4) 启动extract进程
start extract lxusers
(5) 关闭extract进程(if neccessary)
stop extract lxusers
(6) 验证extract状态
info extract lxusers
注意:正常状态下,extract应该是RUNNING,如果出现的是STOPPED或者ABENDED,就说明配置有问题,需要查看下$GGS_HOME下的ggserr.log
info extract lxusers,detail
(7) 验证extract抓取
stats extract lxusers
update demos.test_users
set username=username||'01';
stats extract lxusers
3. 配置datapump
(1) 准备参数文件
edit params lpusers
Extract lpusers
----------------------
-- Data Pump extract for demos
-- Author:
-- Created: 2017-07-26
----------------------
passthru
rmthost 192.168.30.119,mgrport 7809
rmttrail dirdat/rp
table demos.test_users;
(2) 创建 Data Pump组
add extract lpusers,exttrailsource dirdat/sp
add rmttrail dirdat/rp,extract lpusers,megabytes 100
(3) 启动Data Pump进程
start extract lpusers
(4) 验证Data Pump状态
info extract lpusers
stats extract lpusers
(5) 到目标机器检查下
/u01/app/oggs/dirdat
4. 数据的初始加载
(1)
create directory dumpdir as '/home/oracle/dump';
grant read,write on directory dumpdir to system;
(2)
select current_scn from v$database ;
(3)
expdp system/Oracle_123 directory=dumpdir tables=demos.test_users parallel=1 dumpfile=users_%u.dmp flashback_scn=1010038
(4) 拷贝到目标库
(5) 导入
create user demos identified by demos;
grant connect,resource to demos;
impdp system/Oracle_123 directory=dumpdir parallel=1 dumpfile=users_01.dmp
5. 配置Replicat
1) 准备参数文件
edit params rusers
REPLICAT rusers
----------------------
-- Replicat for demos
-- Author:
-- Created: 2017-07-26
----------------------
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ggt,PASSWORD ggt
HANDLECOLLISIONS
ASSUMetaRGETDEFS
DISCARDFILE dirrpt/rusers.des,PURGE
MAP demos.*,TARGET demos.*;
(2) 创建Replicat进程
add replicat rusers,exttrail dirdat/rp
(3) 启动Replicat进程
start replicat rusers
(4) 查看Replicat状态
info replicat rusers
stats replicat rusers
6. 测试并验证
update demos.test_users
set username=username||'02';