目标端安装软件
目标端创建管理用户
创建管理用户,授予的权限和源端的不同
SQL> create tablespace odc_tps datafile '/oradata/smkdb/odc01.dbf' size 100M autoextend on;
Tablespace created.
SQL> create user odc identified by odc default tablespace odc_tps;
GRANT CONNECT TO odc;
GRANT ALTER ANY TABLE TO odc;
GRANT ALTER SESSION TO odc;
GRANT CREATE SESSION TO odc;
GRANT FLASHBACK ANY TABLE TO odc;
GRANT SELECT ANY DICTIONARY TO odc;
GRANT SELECT ANY TABLE TO odc;
GRANT RESOURCE TO odc;
GRANT DBA TO odc;
配置library 环境变量
不同操作系统不同的环境变量配置:
HP-UX : SHLIB_PATH
AIX : LIBPATH
LINUX : LD_LIBRARY_PATH
例如:
export LD_LIBRARY_PATH =$ORACLE_HOME/lib:$LD_LIBRARY_PATH
安装软件
1. 将对应操作系统数据库版本的介质拷贝到源端后,创建安装目录或文件系统
例如 /odc
# su - oracle
$ mkdir /odc
2. 解压软件安装包
$ cd /odc
$ tar xf ggs_LINUX_ppc_ora11g_64bit_v11_1_1_0_11_001.tar
注:如果是 windows ,需要单独安装服务
运行cmd ,cd 到安装软件目录下,执行:
C:\odc> install addservice
3. 创建子工作目录
解压并解包成功后在/odc 目录执行
$ ./ggsci
ggsci>create subdirs
以上所创建的目录的作用:
Name |
purpose |
|
dirchk |
Checkpoint files |
用来存放检查点(checkpoint) 文件, 次检查点是ogg 自己的检查点与实例不同 |
dirdat |
GoldenGate trails |
用来存放TRAIL 文件 |
dirdef |
Data definition files |
用来存放通过DEFGEN 工具生成的源或目标端数据定义文件 |
dirprm |
Parameter files |
用来存放配置参数文件 |
dirpcs |
Process status files |
用来存放进程状态文件 |
dirrpt |
Report files |
用来存放进程报告文件 |
dirsql |
SQL script files |
用来存放SQL 脚本文件 |
dirtmp |
Temporary files |
当事物所需要的内存超过已分配内存时, 默认存储在这个目录 |
4. 创建管理进程
创建管理进程所需参数:
参数 |
阀值 |
定义 |
port |
7809 |
mgr 进程使用的TCP/IP 端口侦听请求,默认端口为7809 |
DYNAMICPORTLIST |
7800-7810 |
指定可用动态 TCP/IP 端口列表,用于源端与目标端进程通信的绑定,最大支持256 个端口 |
PURGEOLDEXTRACTS |
./dirdat/sm* |
定期清理抽取出的过期文件,可以被设置在Manager, Extract, and Replicat 参数文件中,oracle 建议设置在Manager 中 |
USECHECKPOINTS |
|
根据任何MINKEEP 规则,允许清除那些已经被Extract 和Replicat 进程检测过的,保证数据不丢失。 |
MINKEEPHOURS |
24 |
trail 文件的保留时间,超过这个时间则删除 |
autorestart |
replicat* |
指定进程失败时自动重启 |
retries |
10 |
指定尝试重新启动进程的次数(默认尝试2 次) |
waitminutes |
10 |
指定重新启动进程的等待时间,直到必要资源变得可用或一些其他的事件发生。默认的延迟时间为2 分钟。 |
具体设置如下:
ggsci>edit param mgr
输入:
port 7809
DYNAMICPORTLIST 7800-7810
PURGEOLDEXTRACTS ./dirdat/sm*, USECHECKPOINTS, MINKEEPHOURS 24
autorestart replicat* retries 10 waitminutes 10
autostart RE *
ggsci>edit param ./GLOBALS
输入:
GGSCHEMA odc
CHECKPOINTTABLE odc.ggs_checkpoint --- 保存退出
ggsci>start mgr
5. 创建 checkpoint table :
cd /odc
$ sqlplus odc/odc@smkdb
SQL> @chkpt_ora_create.sql
DROP TABLE ggs_checkpoint
*
ERROR at line 1:
ORA-00942: table or view does not exist
Table created.
(以同构oracle 数据库为例)
源端查询相关信息
源端端查询表格所在表空间
SQL> select distinct tablespace_name from dba_tab_partitions where table_owner='OGGTEST ';
目标端端查询是否存在以上表空间,若没有则创建,如果不想创建,在后面的impdp 中需要配置remap_tablespace 参数。
源端索引所在表空间:
SQL> select distinct tablespace_name from dba_indexes where owner in ('OGGTEST ');
SQL> select distinct tablespace_name from dba_ind_partitions where index_owner in ('OGGTEST ');
源端用户默认临时表空间:
SQL> select distinct temporary_tablespace from dba_users
检查源端undo 保留时间及表空间大小
SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS1';
SQL> select file_name,tablespace_name,bytes/1024/1024/1024,AUTOEXTENSIBLE,maxbytes/1024/1024/1024 from dba_data_files where tablespace_name='UNDOTBS2';
SQL> show parameter undo
SQL> select tablespace_name,sum(bytes/1024/1024/1024) from dba_data_files group by tablespace_name;
SQL> select tablespace_name,sum(bytes/1024/1024) from dba_free_space group by tablespace_name;
SQL> alter system set undo_retention=172800sid='*';
SQL> ALTER tablespace UNDOTBS1 RETENTION GUARANTEE;
SQL> ALTER tablespace UNDOTBS2 RETENTION GUARANTEE;
SQL> ALTER tablespace UNDOTBS1 RETENTION NOGUARANTEE;
SQL> ALTER tablespace UNDOTBS2 RETENTION NOGUARANTEE;
如果空间不够则添加:
SQL> ALTER tablespace UNDOTBS1 add datafile ' +MCDATA/ora11g/undotbs103.ora' size 3g autoextend on;
SQL> ALTER tablespace UNDOTBS2 add datafile ' +MCDATA/ora11g/undotbs03.ora' size 3g autoextend on;
源端查询SCN
SQL> select to_char(current_scn) from v$database;
14569604987950
9i 数据库:
SQL> select to_char(dbms_flashback.get_system_change_number) from dual;
14644839175132
源端导出
$ export NLS_LANG=american_america.zhs16gbk
$
目标端导入
$ nohup impdpodc/odcschemas=OGGTESTdirectory=expdpdumpfile=OGGTEST.dmp logfile=OGGTEST.log&
导入前检查目标端表空间的大小
select segment_type,count(*),sum(bytes/1024/1024) from dba_segments where owner='OGGTEST' group by segment_type;
目标端相关操作
备份库禁用触发器
select 'alter trigger '||owner||'.'||trigger_name||' disable;' from dba_triggers where owner='OGGTEST' and status='ENABLED';
e.g.
alter trigger ZJHIS4.TRI_ZY_DETAIL_CHAREGE disable;
alter trigger EMR4.TRI_BL_BINGCHENGBCJL disable;
alter trigger ZJHIS4.TRI_LAB_TEST_MASTER_ZY disable;
移除JOB :
select job,log_user,schema_user,next_date,broken from dba_jobs;
select 'exec dbms_job.remove('||JOB||');' FROM dba_jobs;
exec dbms_job.remove(
exec dbms_ijob.remove(21);
exec dbms_job.broken(186,true)
select * from dba_scheduler_jobs where owner= 'OGGTEST';
禁用:
DBMS_SCHEDULER.DISABLE('job1, job2, job3, sys.jobclass1, sys.jobclass2');
或删除:
DBMS_SCHEDULER.DROP_JOB (job_name => 'my_job1');
注意:要在当前用户下执行(sys 用户不用管)
进程
应用进程要配置的参数:
参数 |
阀值 |
定义 |
replicat |
sm_rep |
指定进程名和类型 |
setenv |
(NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") |
配置系统环境变量 |
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
ASSUMETARGETDEFS |
|
源端和目标端数据库类型一致,无需生成数据定义文件 |
ALLOWNOOPUPDATES |
|
允许执行无实际变化的updata |
DBOPTIONS |
DEFERREFCONST |
约束延迟设置。在复制进程的事物被提交之前,延迟级联删除、级联更新时的校验和实施。 |
HANDLETPKUPDATE |
|
定义即使目标数据库环境中存在数据完整性问题,replicat 进程仍然能够继续处理 trail 中的数据。 |
ddlerror |
955 ignore |
定义来处理被找到的对象错误 |
DISCARDFILE |
/odc/dirrpt/sm.dsc |
定义discardfile 文件位置,如果处理中油记录出错会写入到此文件中 |
APPEND |
|
discardfile 文件中如果已经包含记录的话,在后面继续追加,不删除之前的记录。 |
megabytes |
20 |
定义discardfile 文件大小 |
DISCARDROLLOVER |
on sunday |
定义文件过期设定,为了防止discard file 被写满 |
map target |
map OGGTEST.* target OGGTEST.*; |
用于指定源端和目标端表的映射关系 |
具体参数如下:
ggsci>dblogin userid odc password odc
ggsci>add replicat sm_rep exttrail ./dirdat/sm
ggsci>edit param sm_rep
参数:
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
--setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid odc, password odc
--handlecollisions
ASSUMETARGETDEFS
ALLOWNOOPUPDATES
DBOPTIONS DEFERREFCONST
SOURCEDEFS /odc/dirdef/sm.def
map oggtest.t2,target oggtest.t2,colmap(USEDEFAULTS col1=cola,col2=colb2,col3=colc);
-- ( 表结构不同时,要加以上参数)
sql
ddlerror 955 ignore
ddlerror 1917 ignore
ddlerror 24344 ignore
ddlerror 1031 ignore
ddl include mapped
ddlerror 10655 ignore
ddlerror 10636 ignore
ddlerror 942 ignore
ddlerror 1435 ignore
REPERROR (1843, DISCARD)
ddlerror 4063 ignore
ddlerror 4043 ignore
ddlerror 2019 ignore
DISCARDFILE /odc/dirrpt/sm.dsc, APPEND megabytes 20
DISCARDROLLOVER on sunday
--DISCARDROLLOVER
--ddlerror 942 ignore
map OGGTEST.* target OGGTEST.*;
4043 对象不存在
2019 连接串不存在
注 1 : oracle 11.2.0.4 不支持 replicat 进程中的 DBOPTIONS DEFERREFCONST 参数,如果要使这个参数正常生效必须在数据库中配置 ENABLE_GOLDENGATE_REPLICATION ,即:
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
参数介绍:
Colmap 参数
语法结构:
MAP
USEDEFAULTS
:源端的列名与目标端的列名相同,使用
USEDEFAULTS
当使用
COLMAP
为源端与目标端的表的结构不相同的时候,必须使用
defgen
生成定义文件。
当使用
COLMAP
为源端与目标端的表的结构相同的时候,仅使用
COLMAP
进行其他的功能例如转换等,不需要定义文件,但是必须使用
ASSUMETARGETDEFS
参数。
例如: map oggtest.t1,target oggtest.t2,colmap(USEDEFAULTS col1=col2,col2=colb3,col3=col1);
Handlecollisions
参数
HANDLECOLLISIONS
是我们使用
goldengate
过程中常有的一个
REPLICAT
参数,该参数依赖于主键或唯一索引处理冲突数据,常用于初始化阶段。对于无主键或唯一索引的表无法处理冲突,且可能导致重复记录。注意打开此参数则所有数据错误不管
reperror
如何配置均不再写
discard
文件,即所有数据冲突信息被默认规则处理,没有任何日志
(
则会忽略
error mapping
数据错误,而且不会报告到
discard
文件
)
,因此日常复制不建议使用该参数;可予以考虑的特殊场景为只需新增数据,无需复制历史数据。
使用
HANDLECOLLISIONS
的几个场景:
l
target
丢失
delete
记录
(missing delete)
,忽略该问题并不记录到
discardfile
l
target
丢失
update
记录
(missing update)
²
更新的键值是主键
=
》
update
转换成
INSERT
,默认情况下插入记录不完整
²
更新的键值是非主键
=
》
忽略该问题并不记录到
discardfile
l
重复插入已存在的主键值到
target
表中,这将被
replicat
转换为
UPDATE
现有主键值的行的其他非主键列
另:该参数仅处理数据本身的
Insert/Delete
冲突,如果出现两端映射或其它结构性问题
Replicat
进程依然会
abend
,不能被忽略
此外对于主键的更新操作,若在
target
使用
HANDLECOLLISIONS
且该
update
丢失,在会转换为
INSERT
该主键的操作,注意默认情况下插入的记录不完整,
FETCHOPTIONS FETCHPKUPDATECOLS
将捕获完整的
redo image
镜像到
trail
中,这保证把
primary key
的更新通过
HANDLECOLLISIONS
转换为对
target
的一个完整记录的插入。
我们可以通过
send
命令动态取消
HANDLECOLLISIONS
:
GGSCI (XIANGBLI-CN) 29> send rep2, NOHANDLECOLLISIONS
Sending NOHANDLECOLLISIONS request to REPLICAT REP2 ...
REP2 NOHANDLECOLLISIONS set for 1 tables and 0 wildcard entries
参数
语法结构:
DISCARDFILE ./dirrpt/sm.dsc, APPEND megabytes 20
表示该
discard
文件在
ogg
安装目录的
dirrpt
文件下,文件名为
sm.dsc
,该文件的最大大小为
20M
,当该文件达到
20M
,且还没到清理时间时,
ogg
应用会报错:
处理方法:
Ø
清理 discard
文件后重启进程( ./dirrpt/sm.dsc
) ;
修改该参数,将大小改为合适的值后重启进程。 ggsci> 14569604987950
, TARGET
,COLMAP ([USEDEFAULTS, ]
target column:
目标列
source expression
:源端表达式或列