Oracle GoldenGate安装(三)

目标端安装软件

目标端创建管理用户

创建管理用户,授予的权限和源端的不同

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

指定尝试重新启动进程的次数(默认尝试次)

waitminutes

10

指定重新启动进程的等待时间,直到必要资源变得可用或一些其他的事件发生。默认的延迟时间为分钟。

 

具体设置如下:

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

, TARGET
,COLMAP ([USEDEFAULTS, ] = );

USEDEFAULTS  :源端的列名与目标端的列名相同,使用  USEDEFAULTS
target column:
  目标列
source expression
  :源端表达式或列

 

当使用  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  的几个场景:

   target  丢失  delete  记录  (missing delete)  ,忽略该问题并不记录到  discardfile

   target  丢失  update  记录  (missing update)

²     更新的键值是主键  =    update  转换成  INSERT  ,默认情况下插入记录不完整

²     更新的键值是非主键  =    忽略该问题并不记录到  discardfile

   重复插入已存在的主键值到  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