OGG数据库迁移方案(三)

时间:2022-09-13 00:55:40

的安装与配置

配置GoldenGate 进行数据复制,主要包括如下环节:

n   对源端和目标端GoldenGate 工作环境的检查

n   在源和目标环境分别安装GoldenGate 软件

n   配置源端

n   目标库的初始化

n   配置目标端

n   启动GoldenGate ,执行数据复制

下文将对这些部分详细说明。

环境介绍:

源端:AIX 5.3 oracle 10.2.0.4 2 节点RAC

目标端: Linux X86 64bit oracle 11.2.0.4 2 节点RAC

ogg 进程配置:

对于数据变化量不大的系统(每天生成归档量小于500G ),通常源端只配置一个extract 进程即可满足要求。目标端配置replicat 进程的多少依赖于复制效率,可以根据具体情况进行拆分。

复制的表

对于静态表,不建议通过OGG 复制。

无法通过OGG 或者不需要通过OGG 进行复制的表,将在割接期间采用传统的expdp & impdp 的方式实现。

需要从以下方面保证OGG 在同步过程中的数据一致性:

n   需要逐表检查所复制的表的附加日志已经打开

n   保证初始化数据的完整性。

n   对于目标库:

n   必须避免后台的Job, 包括:Crontab Job ,数据库内部的 job ;华为TaskMon 工具等。

n   避免人为修改目标端表中的数据

n   监视触发器的状态(最好导入时在目标库drop 触发器)、避免有级联触发器等。

n   对于所复制的表,在同步期间(即开始同步到上线割接)避免修改表的主键或者索引字段。

n   可以在执行数据同步期间把数据库中其它数据库用户的账号lock

如果在OGG 同步期间发现个别表的同步出现问题,可以参照以下的步骤处理:

1.        将出现问题的表从复制进程中去掉

stop rep1

edit param rep1

 

删除或者注视出现问题的表的一行配置,比如去除tbcs.ogg_test表的复制,为其增加注释:

-- MAP tbcs.ogg_test, TARGET tbcs.ogg_test;

 

start rep1

 

2.        重新初始化出现问题的表的数据

在目标端:

truncate table tbcs.ogg_test;

 

使用Data Pump导入问题表的数据:

选择一个系统负载低的时刻,首先从生产库查询出一个当前的SCN,比如:

col current_scn for 99999999999999999999

select current_scn from v$database;

       12872889897855

 

使用这个SCN作为flashback_scn值进行导出&导入:

flashback_scn   = 12872889897855

注意:仅导入数据,不要导入触发器

 

记录该SCN对应的时间点以及在目标端的trail文件的序号:

cd $GG_HOME/dirdat01

ls –ltr

 

数据导入完成后在目标端新建一个复制进程,主要步骤参见“3.8.8 配置OGG的复制进程Replicat”小节。

不同之处如下:

在启动新建的复制进程之前,需要增加一个操作:

alter r_tbcs_01 extseqno xx, extrba 0

 

GSCI (kdyyb1) 2> info r_tbcs

 

REPLICAT   R_TBCS    Last Started 2015-03-04 18:45   Status RUNNING

Checkpoint Lag       00:00:02 (updated 00:00:00 ago)

Log Read Checkpoint  File ./dirdat01/tb000179

                     2015-03-05 14:54:38.002275  RBA 58679836

 

注意新建的复制进程的“Log Read Checkpoint”是刚修改的文件序号,并且RBA为0。

 

在使用前面步骤的SCN启动新建的复制进程。

 

如果需要重新对目标库重建,可以参考如下步骤:

1.        停止目标端的复制进程(不要停止manager 进程),源端不作处理(即保持数据抽取的状态)

ggsci

 

stop *

 

2.        删除所有目标端的抽取进程

dblogin userid ggadmin, password AACAAAAAAAAAAAIAKBWGTCOFUEPDSFQH , encryptkey default

 

delete recpliat r_tbcs

……

 

3.        truncate 所有OGG 复制的表

剩下的步骤参见本文“3.6 源端配置”小节。

不同之处如下:

在增加了新建的复制进程之前,需要增加一个操作:

alter rep1 extseqno xx, extrba 0

这个trail 文件的序号使用数据初始化时的SCN 对应的时间点,可以再往前一些。

复制的效率

作为一种准实时的数据同步工具,OGG 的同步有三个方面的延迟:

n   抽取,即Extract 进程

n   传输或者分发,即Data Pump 进程

n   复制,即Replicat 进程

需要察看这三个环节分别的延迟(即lag ),命令是:

登录的源或者目标端主机:

cd $GG_HOME

./ggsci

info all

 

-- 注意观察每个进程的lag值

更的方式是使用lag命令,即

lag ext1

lag dp1

lag rep1

 

在配置好OGG 的同步后,需要监视lag ,如果发现lag 逐渐变长则需要处理。

文件的管理

OGG 通过manager 进程实现对trail 文件的自动清除操作。有两种清除策略:时间或者文件的数量。

分别通过如下参数配置:

n   MinKeepDays 或者MinKeepHours

MinKeepFiles :通过这种方式可以限制trail文件占用空间的总体大小(在复制正常的时刻)。

现在Oracle工程师将源端配置为

MinKeepHours 12

目标端:

MinKeepDays 1

客户可以根据需要进行调整。

在割接当天要特别注意避免长交易,因为如果需要重起抽取进程的话,抽取进程在启动后需要花一些时间才能追上,这样可能会影响割接进度

说明:正常情况下仅需要停止抽取进程而不需要再启动,则这方面没有关系。

在重起抽取进程后OGG 需要从最早事务开始时刻的redo 中读取数据,因此需要访问一定量的归档文件,如果因为备份已经将最近的归档文件成功备份后删除,抽取进程就会出错,为此可以对备份策略进行调整,比如备份8 个小时之前的归档(这样可以保留最近8 个小时的归档文件):

backup

archivelog until time 'sysdate-1/12'

 

的监控

OGG 的监控主要包括以下方面:

n   对进程的监控,即使用info all 命令查看源端和目标端的相关进程,其状态为“RUNNING

n   Trail 文件占用磁盘空间的监控

n   lag 的监控:参见前文。

 

工作环境的检查

xlC libpthreads 版本要求

本节内容适用于源和目标端。

根据MOS 文档“Oracle GoldenGate GGSCI fails with "0509-036 Cannot load program ggsci because of the following errors:" (Doc ID 1108601.1) ”, GoldenGate 从版本V10 开始在AIX 5.3 平台上对xlC 库有如下的最小版本要求:

  xlC.aix50.rte             10.1.0.0  COMMITTED  XL C/C++ Runtime for AIX 5.3

  xlC.msg.en_US.rte         10.1.0.0  COMMITTED  XL C/C++ Runtime

  xlC.rte                   10.1.0.0  COMMITTED  XL C/C++ Runtime

还要求libpthreads 库具有5.3.0.51 或以上版本。

可以通过以下命令查看xlC libpthreads 版本:

查看xlC 版本:

# lslpp -l | grep -i xlc

 

查看libpthreads 版本:

lslpp -h bos.rte.libpthreads

 

如果发现当前Aix 平台下的xlC 或者libpthreads 版本低于规定版本则必须首先升级,然后才能安装GoldenGate 软件。

由于受到GoldenGate 工作机制的限制,源库数据库必须满足一定的条件,才能保证GoldenGate 可以工作正常,这些条件包括:

n   数据库运行于归档日志模式下。

n   在数据库级别打开了Force Logging

n   在数据库级别打开了最小附加日志(supplemental log min )。

检查数据库是否处于归档模式:

select log_mode from v$database;

 

使用以下SQL 语句检查数据库Force Logging 和附加日志的打开状况:

select supplemental_log_data_min, force_logging

from v$database;

确定需要复制的表。

不能配置防火墙来阻止源端主机和目标端主机之间GoldenGate 使用的端口。具体端口是在源端和目标端mgr 进程配置中指定的端口,当前配置环境下使用的端口是: 7809 - 7820

软件安装

首先要为GoldenGate 软件划分适当的集群文件系统(比如GPFS 等),以/arch 为例。Goldengate 最好安装在共享文件系统上,但不是必须。

登录RAC 的节点1 主机,使用操作系统oracle 用户(即Oracle 数据库软件的安装和运行用户)来安装GoldenGate 。所使用的GoldenGate 软件版本为11.2.1.0.18

GoldenGate for 10g : p18307056_1121018_AIX64-5L.zip

将安装介质p18307056_1121018_AIX64-5L.zip 文件上传到数据库服务器/ogg 目录,使用unzip 命令解压缩,会出现ggs_AIX_ppc_ora10.2_64bit.tar 文件,再使用tar 对该文件解报。解压缩/ 解包的过程就是安装过程。

cd /arch/ogg

unzip p18307056_1121018_AIX64-5L.zip

tar xvf ggs_AIX_ppc_ora10.2_64bit.tar

解压后,创建 GoldenGate 需要的子目录(使用create subdirs 命令):

cd /arch/ogg

./ggsci

 

Oracle GoldenGate Command Interpreter for Oracle

… …

GGSCI (aaopdb2) 1> create subdirs

 

Creating subdirectories under current directory /arch/ogg

 

Parameter files                /arch/ogg/dirprm: already exists

Report files                   /arch/ogg/dirrpt: created

Checkpoint files               /arch/ogg/dirchk: created

Process status files           /arch/ogg/dirpcs: created

SQL script files               /arch/ogg/dirsql: created

Database definitions files     /arch/ogg/dirdef: created

Extract data files             /arch/ogg/dirdat1: created

Temporary files                /arch/ogg/dirtmp: created

Stdout files                   /arch/ogg/dirout: created

 

编辑oracle 用户主目录下的.profile 文件,在文件末尾追加以下内容:

export GG_HOME=/arch/ogg

export LIBPATH=$LIBPATH:$GG_HOME:$ORACLE_HOME/lib

 

的数据库用户

在旧营业系统库创建GoldenGate 运行所需要的数据库用户。

使用下面的SQL 创建GoldenGate 的数据库用户ggadmin

-- 源端数据库:

 

create tablespace goldengate datafile 'xxx' size 10g autoextend on;

  /* 配置DDL同步,必须为goldengate用户分配单独的表空间,且自动扩展 */

create user ggadmin identified by ggadmin default tablespace ogg temporary tablespace temp;

grant dba to ggadmin;

 

为满足GoldenGate 的工作条件,必须对源端数据库进行如下的配置:

 

$ sqlplus / as sysdba

 

-- 检查foce logging当前是否启用:

SQL> set linesize 80

SQL> col name            format a20

SQL> col force_logging   format a20

SQL>

SQL> select d.name, d.force_logging from v$database d;

 

-- 如果“force_logging”字段的返回值为“YES”,则已经启用,不需要执行下面的SQL;否则执行:

SQL> alter database force logging;

 

-- 重新执行上面的检查SQL,确认返回值为“YES”。

 

如果需要进行回退,关闭强制日志模式,请使用以下 sql

alter database no force logging;

 

根据MOS 文档“How To Turn On Supplemental Logging At The Database Or The Table Level (Oracle Specific) (Doc ID 1059352.1) ”,GoldenGate 必须要求打开附加日志并同时切换日志:

 

$ sqlplus / as sysdba

 

-- 检查数据库级别的 Logging是否打开:

SQL> set linesize 80

SQL> col supplemental_log_data_min   format a30

SQL>

 

-- 如果“supplemental_log_data_min”字段的返回值为“YES”,则已经启用,不需要执行下面的SQL;--- 否则执行:

SQL> alter database add supplemental log data;

 

-- 重新执行上面的检查SQL,确认返回值为“YES”。

-- 执行日志文件的切换(This change to add supplemental logging will not take effect until the -- current redo log -- is switched, so the following command must also be executed):

SQL> alter system switch logfile;

 

回退操作:如果出现问题,可以通过以下语句进行回退:

SQL> alter database drop supplemental log data ;

选取一个schema 创建一个名为ogg_test 的测试表,创建脚本如下:

create table SCHEMA .ogg_test(id number, in_date date);

为所有需要进行复制的表生成add trandata 命令:

由于每个schema 包含的表较多,执行该步骤会花费很长时间,可以多开几个窗口并行执行。

GGSCI > dblogin userid ggadmin, password ggadmin

 

add trandata SI_INFORMTN_SCHEMA.*

add trandata ORDPLUGINS.*

add trandata PRDXIVMILC.*

add trandata PRDABPPSZVMIREAD.*

add trandata PRDABPPWHVMIREAD.*

add trandata PRDABPPXMVMIREAD.*

add trandata PRDABPPWHBSVMIREAD.*

add trandata PRDHKFGVMIREAD.*

add trandata PRDXIVMI1.*

add trandata PRDXIVMIBRP.*

add trandata SHARING.*

add trandata PRDSPUSERVMI2READ.*

add trandata PRDVMIBRPREAD.*

add trandata PRDSPUSERVMI1READ.*

add trandata PRDHKFGSPVMI.*

add trandata PRDINFOVMIK2.*

add trandata PRDINFREPVMI.*

add trandata PRDSPUSERVMI3.*

add trandata PRDSPVMIBRP.*

add trandata PRDSPUSERVMI2.*

add trandata CSETRACK.*

add trandata PRDCSE.*

add trandata PRDCSEVMI3.*

add trandata PRDCSEVMI2.*

add trandata PRDCSEVMIBRP.*

add trandata PRDCSEVMI1.*

add trandata PRDABPPCDVMIREAD.*

add trandata PRDABPPSHVMIREAD.*

add trandata PRDABPPBSVMIREAD.*

add trandata PRDSPUSERVMI1.*

add trandata PRDABPPWHBSVMI.*

add trandata PRDABPPSZVMI.*

add trandata PRDABPPWHVMI.*

add trandata PRDABPPXMVMI.*

add trandata PRDABPPSHVMI.*

add trandata PRDABPPCDVMI.*

add trandata PRDHKFGVMI.*

add trandata PRDABPPVMI3.*

add trandata PRDABPPVMIBRP.*

add trandata PRDABPPVMI1.*

add trandata PRDABPPVMI2.*

add trandata PRDABPPBSVMI.*

add trandata PUBLIC.*

 

检查表的SUPPLEMENTAL_LOG是否开启:

/* 出现如下信息说明开启supplemental log,若出现disable 说明未开启

Logging of supplemental redo log data is enabled for table PRDABPPVMI1.AGGLVLCRITERIA_NC.

对未开启supplemental log的表需要单独添加,执行:

add trandata username.TABLE_NAME

 

info trandata SI_INFORMTN_SCHEMA.*

info trandata ORDPLUGINS.*

info trandata PRDXIVMILC.*

info trandata PRDABPPSZVMIREAD.*

info trandata PRDABPPWHVMIREAD.*

info trandata PRDABPPXMVMIREAD.*

info trandata PRDABPPWHBSVMIREAD.*

info trandata PRDHKFGVMIREAD.*

info trandata PRDXIVMI1.*

info trandata PRDXIVMIBRP.*

info trandata SHARING.*

info trandata PRDSPUSERVMI2READ.*

info trandata PRDVMIBRPREAD.*

info trandata PRDSPUSERVMI1READ.*

info trandata PRDHKFGSPVMI.*

info trandata PRDINFOVMIK2.*

info trandata PRDINFREPVMI.*

info trandata PRDSPUSERVMI3.*

info trandata PRDSPVMIBRP.*

info trandata PRDSPUSERVMI2.*

info trandata CSETRACK.*

info trandata PRDCSE.*

info trandata PRDCSEVMI3.*

info trandata PRDCSEVMI2.*

info trandata PRDCSEVMIBRP.*

info trandata PRDCSEVMI1.*

info trandata PRDABPPCDVMIREAD.*

info trandata PRDABPPSHVMIREAD.*

info trandata PRDABPPBSVMIREAD.*

info trandata PRDSPUSERVMI1.*

info trandata PRDABPPWHBSVMI.*

info trandata PRDABPPSZVMI.*

info trandata PRDABPPWHVMI.*

info trandata PRDABPPXMVMI.*

info trandata PRDABPPSHVMI.*

info trandata PRDABPPCDVMI.*

info trandata PRDHKFGVMI.*

info trandata PRDABPPVMI3.*

info trandata PRDABPPVMIBRP.*

info trandata PRDABPPVMI1.*

info trandata PRDABPPVMI2.*

info trandata PRDABPPBSVMI.*

info trandata PUBLIC.*

 

 

管理进程mgr

在旧营业系统执行该配置任务。

$ cd /arch/ogg

$ ./ggsci

 

编辑mgr 进程配置参数,配置信息将保存于./dirprm/mgr.prm 文件中。

ggsci> edit params mgr

 

运行后将进入vi 编辑模式,输入以下内容。

在源端:

Port 7809

DynamicPortList

DynamicPortReassignDelay 5

 

 

-- AutoRestart ER *, Retries 5, WaitMinutes 10, ResetMinutes 60

 

LagReportHours 1

LagInfoMinutes 3

LagCriticalMinutes 5

保存并退出vi 编辑。启动源端的mgr 管理进程:

ggsci> start mgr

 

DDL 复制

关闭回收站功能( 重启数据库生效)

alter system set recyclebin=off scope=spfile;

 

EDIT PARAMS ./GLOBALS

输入以下内容

GGSCHEMA ggadmin

执行一系列同步DLL 语句要用到的GoldenGate 脚本,这些脚本存放在GG 的安装目录下:

停止所有数据库连接( sqlplus goldengate 以及所有应用连接),执行过程中不要有新的连接

SYSDBA 身份登录

sqlplus / as sysdba

SQL> GRANT EXECUTE ON utl_file TO GGADMIN;

SQL> @marker_setup ggadmin

SQL> @ddl_setup

SQL> @role_setup

SQL> grant GGS_GGSUSER_ROLE to GGADMIN;

SQL> @ddl_enable

SQL> @?/rdbms/admin/dbmspool

SQL> @ddl_pin

复制支持

在主端和备端都执行sequence.sql

SQL> @sequence.sql ggadmin

在主端执行下面的命令

GRANT EXECUTE on ggadmin.updateSequence TO ggadmin;

在目标端端执行

GRANT EXECUTE on ggadmin.replicateSequence TO ggadmin;

在源端执行下面的命令

alter table sys.seq$ add supplemental log data (primary key) columns;

的数据抽取进程Extract

Extract 抽取进程 ext1

ADD EXTRACT ext1, TRANLOG, THREADS 2, BEGIN NOW

创建ext1 进程的数据队列文件:

ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, Megabytes 200

 

检查配置是否正确:

GGSCI> INFO EXTRACT *

 

编辑ext1 进程参数设置,配置信息将保存于./dirprm/ext1.prm 文件中。

ggsci> edit params ext1

 

ext1 抽取进程参数配置如下:(包含所有schema

SETENV (NLS_LANG=American_America.UTF8)

UserID ggadmin, Password ggadmin

DiscardFile ./dirrpt/ext1.dsc, append, Megabytes 200

 

Extract ext1

SETENV (NLS_LANG=American_America.UTF8)

UserID ggadmin@netdb, Password ggadmin

ExtTrail ./dirdat/lt

--TranlogOptions RawDeviceOffset 0

DynamicResolution

GETTRUNCATES

 

DDL INCLUDE OBJNAME I_INFORMTN_SCHEMA.* &

    INCLUDE OBJNAME ORDPLUGINS.*         &

    INCLUDE OBJNAME PRDXIVMILC.*         &

    INCLUDE OBJNAME PRDABPPSZVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPWHVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPXMVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPWHBSVMIREAD.* &

    INCLUDE OBJNAME PRDHKFGVMIREAD.*     &

    INCLUDE OBJNAME PRDXIVMI1.*          &

    INCLUDE OBJNAME PRDXIVMIBRP.*        &

    INCLUDE OBJNAME SHARING.*            &

    INCLUDE OBJNAME PRDSPUSERVMI2READ.*  &

    INCLUDE OBJNAME PRDVMIBRPREAD.*      &

    INCLUDE OBJNAME PRDSPUSERVMI1READ.*  &

    INCLUDE OBJNAME PRDHKFGSPVMI.*       &

    INCLUDE OBJNAME PRDINFOVMIK2.*       &

    INCLUDE OBJNAME PRDINFREPVMI.*       &

    INCLUDE OBJNAME PRDSPUSERVMI3.*      &

    INCLUDE OBJNAME PRDSPVMIBRP.*        &

    INCLUDE OBJNAME PRDSPUSERVMI2.*      &

    INCLUDE OBJNAME CSETRACK.*           &

    INCLUDE OBJNAME PRDCSE.*             &

    INCLUDE OBJNAME PRDCSEVMI3.*         &

    INCLUDE OBJNAME PRDCSEVMI2.*         &

    INCLUDE OBJNAME PRDCSEVMIBRP.*       &

    INCLUDE OBJNAME PRDCSEVMI1.*         &

    INCLUDE OBJNAME PRDABPPCDVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPSHVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPBSVMIREAD.*   &

    INCLUDE OBJNAME PRDSPUSERVMI1.*      &

    INCLUDE OBJNAME PRDABPPWHBSVMI.*     &

    INCLUDE OBJNAME PRDABPPSZVMI.*       &

    INCLUDE OBJNAME PRDABPPWHVMI.*       &

    INCLUDE OBJNAME PRDABPPXMVMI.*       &

    INCLUDE OBJNAME PRDABPPSHVMI.*       &

    INCLUDE OBJNAME PRDABPPCDVMI.*       &

    INCLUDE OBJNAME PRDHKFGVMI.*         &

    INCLUDE OBJNAME PRDABPPVMI3.*        &

    INCLUDE OBJNAME PRDABPPVMIBRP.*      &

    INCLUDE OBJNAME PRDABPPVMI1.*        &

    INCLUDE OBJNAME PRDABPPVMI2.*        &

    INCLUDE OBJNAME PRDABPPBSVMI.*       &

    INCLUDE OBJNAME PUBLIC'.*           

 

DDLOPTIONS REPORT

--DDLOPTIONS UPDATEMETADATA, REPORT

DDLOPTIONS ADDTRANDATA, REPORT

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

TRANLOGOPTIONS EXCLUDEUSER ggadmin

 

 

TABLEEXCLUDE PRDABPPVMI2.RUPD$*;

TABLEEXCLUDE PRDABPPVMI3.RUPD$*;

TABLEEXCLUDE PRDABPPWHVMI.RUPD$*;

TABLEEXCLUDE PRDABPPCDVMI.RUPD$*;

TABLEEXCLUDE PRDABPPBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPXMVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSZVMI.RUPD$*;

TABLEEXCLUDE PRDABPPWHBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPVMIBRP.RUPD$*;

TABLEEXCLUDE PRDABPPVMI1.RUPD$*;

TABLEEXCLUDE PRDHKFGVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSHVMI.RUPD$*;

 

TABLEEXCLUDE PRDABPPVMI2.MLOG$*;

TABLEEXCLUDE PRDABPPVMI3.MLOG$*;

TABLEEXCLUDE PRDABPPWHVMI.MLOG$*;

TABLEEXCLUDE PRDABPPCDVMI.MLOG$*;

TABLEEXCLUDE PRDABPPBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPXMVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSZVMI.MLOG$*;

TABLEEXCLUDE PRDABPPWHBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPVMIBRP.MLOG$*;

TABLEEXCLUDE PRDABPPVMI1.MLOG$*;

TABLEEXCLUDE PRDHKFGVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSHVMI.MLOG$*;

 

 

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_UI_GROUPITEM;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SPRBOM_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_PCDW_BOMCONFLICT;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_OPERATION_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_MASTER_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_BOM_RTNG_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CONSTRAINT_COUNT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CTO_ORDER_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MP_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MRQ_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MTM_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1_69;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CFL;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CONSTRAINT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_DPD;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SMP_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SO_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ROUTING_T1;

TABLEEXCLUDE PRDABPPVMI1.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI2.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI3.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMIBRP.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDHKFGVMI.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDSPUSERVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMIBRP.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE SHARING.Z_MID_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.CONF_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK;

TABLEEXCLUDE SHARING.CONF_WORKTIME_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP2;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP1;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME1;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP;

 

TABLE SI_INFORMTN_SCHEMA.*;

TABLE ORDPLUGINS.*;

TABLE PRDXIVMILC.*;

TABLE PRDABPPSZVMIREAD.*;

TABLE PRDABPPWHVMIREAD.*;

TABLE PRDABPPXMVMIREAD.*;

TABLE PRDABPPWHBSVMIREAD.*;

TABLE PRDHKFGVMIREAD.*;

TABLE PRDXIVMI1.*;

TABLE PRDXIVMIBRP.*;

TABLE SHARING.*;

TABLE PRDSPUSERVMI2READ.*;

TABLE PRDVMIBRPREAD.*;

TABLE PRDSPUSERVMI1READ.*;

TABLE PRDHKFGSPVMI.*;

TABLE PRDINFOVMIK2.*;

TABLE PRDINFREPVMI.*;

TABLE PRDSPUSERVMI3.*;

TABLE PRDSPVMIBRP.*;

TABLE PRDSPUSERVMI2.*;

TABLE CSETRACK.*;

TABLE PRDCSE.*;

TABLE PRDCSEVMI3.*;

TABLE PRDCSEVMI2.*;

TABLE PRDCSEVMIBRP.*;

TABLE PRDCSEVMI1.*;

TABLE PRDABPPCDVMIREAD.*;

TABLE PRDABPPSHVMIREAD.*;

TABLE PRDABPPBSVMIREAD.*;

TABLE PRDSPUSERVMI1.*;

TABLE PRDABPPWHBSVMI.*;

TABLE PRDABPPSZVMI.*;

TABLE PRDABPPWHVMI.*;

TABLE PRDABPPXMVMI.*;

TABLE PRDABPPSHVMI.*;

TABLE PRDABPPCDVMI.*;

TABLE PRDHKFGVMI.*;

TABLE PRDABPPVMI3.*;

TABLE PRDABPPVMIBRP.*;

TABLE PRDABPPVMI1.*;

TABLE PRDABPPVMI2.*;

TABLE PRDABPPBSVMI.*;

TABLE PUBLIC.*;

 

SEQUENCE PRDABPPVMI2.*;

SEQUENCE PRDABPPVMI3.*;

SEQUENCE PRDABPPWHVMI.*;

SEQUENCE PRDSPUSERVMI1.*;

SEQUENCE PRDSPUSERVMI2.*;

SEQUENCE PRDHKFGSPVMI.*;

SEQUENCE PRDABPPCDVMI.*;

SEQUENCE PRDSPVMIBRP.*;

SEQUENCE PRDABPPBSVMI.*;

SEQUENCE PRDABPPXMVMI.*;

SEQUENCE PRDABPPSZVMI.*;

SEQUENCE PRDABPPWHBSVMI.*;

SEQUENCE PRDABPPVMIBRP.*;

SEQUENCE SHARING.*;

SEQUENCE PRDABPPVMI1.*;

SEQUENCE PRDHKFGVMI.*;

SEQUENCE PRDSPUSERVMI3.*;

SEQUENCE PRDABPPSHVMI.*;

 

的数据传输进程Datapump

dp1

ADD EXTRACT dp1, exttrailsource ./dirdat/lt, begin now

 

创建远程队列文件:

ADD RMTTRAIL ./dirdat/rt, EXTRACT dp1, Megabytes 200

 

编辑dp1 进程参数设置,配置信息将保存于./dirprm/dp1.prm 文件中。

ggsci> edit params dp1

 

dp1 传输进程参数配置如下:

Extract dp1

RmtHost 10.99.205.76, MgrPort 7809, timeout 30, Compress

RmtTrail ./dirdat/rt

Passthru

 

 

TABLEEXCLUDE PRDABPPVMI2.RUPD$*;

TABLEEXCLUDE PRDABPPVMI3.RUPD$*;

TABLEEXCLUDE PRDABPPWHVMI.RUPD$*;

TABLEEXCLUDE PRDABPPCDVMI.RUPD$*;

TABLEEXCLUDE PRDABPPBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPXMVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSZVMI.RUPD$*;

TABLEEXCLUDE PRDABPPWHBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPVMIBRP.RUPD$*;

TABLEEXCLUDE PRDABPPVMI1.RUPD$*;

TABLEEXCLUDE PRDHKFGVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSHVMI.RUPD$*;

 

TABLEEXCLUDE PRDABPPVMI2.MLOG$*;

TABLEEXCLUDE PRDABPPVMI3.MLOG$*;

TABLEEXCLUDE PRDABPPWHVMI.MLOG$*;

TABLEEXCLUDE PRDABPPCDVMI.MLOG$*;

TABLEEXCLUDE PRDABPPBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPXMVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSZVMI.MLOG$*;

TABLEEXCLUDE PRDABPPWHBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPVMIBRP.MLOG$*;

TABLEEXCLUDE PRDABPPVMI1.MLOG$*;

TABLEEXCLUDE PRDHKFGVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSHVMI.MLOG$*;

 

 

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_UI_GROUPITEM;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SPRBOM_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_PCDW_BOMCONFLICT;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_OPERATION_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_MASTER_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_BOM_RTNG_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CONSTRAINT_COUNT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CTO_ORDER_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MP_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MRQ_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MTM_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1_69;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CFL;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CONSTRAINT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_DPD;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SMP_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SO_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ROUTING_T1;

TABLEEXCLUDE PRDABPPVMI1.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI2.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI3.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMIBRP.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDHKFGVMI.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDSPUSERVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMIBRP.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE SHARING.Z_MID_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.CONF_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK;

TABLEEXCLUDE SHARING.CONF_WORKTIME_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP2;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP1;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME1;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP;

 

TABLE SI_INFORMTN_SCHEMA.*;

TABLE ORDPLUGINS.*;

TABLE PRDXIVMILC.*;

TABLE PRDABPPSZVMIREAD.*;

TABLE PRDABPPWHVMIREAD.*;

TABLE PRDABPPXMVMIREAD.*;

TABLE PRDABPPWHBSVMIREAD.*;

TABLE PRDHKFGVMIREAD.*;

TABLE PRDXIVMI1.*;

TABLE PRDXIVMIBRP.*;

TABLE SHARING.*;

TABLE PRDSPUSERVMI2READ.*;

TABLE PRDVMIBRPREAD.*;

TABLE PRDSPUSERVMI1READ.*;

TABLE PRDHKFGSPVMI.*;

TABLE PRDINFOVMIK2.*;

TABLE PRDINFREPVMI.*;

TABLE PRDSPUSERVMI3.*;

TABLE PRDSPVMIBRP.*;

TABLE PRDSPUSERVMI2.*;

TABLE CSETRACK.*;

TABLE PRDCSE.*;

TABLE PRDCSEVMI3.*;

TABLE PRDCSEVMI2.*;

TABLE PRDCSEVMIBRP.*;

TABLE PRDCSEVMI1.*;

TABLE PRDABPPCDVMIREAD.*;

TABLE PRDABPPSHVMIREAD.*;

TABLE PRDABPPBSVMIREAD.*;

TABLE PRDSPUSERVMI1.*;

TABLE PRDABPPWHBSVMI.*;

TABLE PRDABPPSZVMI.*;

TABLE PRDABPPWHVMI.*;

TABLE PRDABPPXMVMI.*;

TABLE PRDABPPSHVMI.*;

TABLE PRDABPPCDVMI.*;

TABLE PRDHKFGVMI.*;

TABLE PRDABPPVMI3.*;

TABLE PRDABPPVMIBRP.*;

TABLE PRDABPPVMI1.*;

TABLE PRDABPPVMI2.*;

TABLE PRDABPPBSVMI.*;

TABLE PUBLIC.*;

 

SEQUENCE PRDABPPVMI2.*;

SEQUENCE PRDABPPVMI3.*;

SEQUENCE PRDABPPWHVMI.*;

SEQUENCE PRDSPUSERVMI1.*;

SEQUENCE PRDSPUSERVMI2.*;

SEQUENCE PRDHKFGSPVMI.*;

SEQUENCE PRDABPPCDVMI.*;

 

源端启动数据抽取进程

ggsci> start ext1

人工记录抽取进程启动的时间点,例如:“ 2015-01-06 11:20:55 ,将此时间点作为在下一步中查找长事务的一个判断条件。

可以使用info all 检查extract 进程状态是否为RUNNING

如果状态不是RUNNING ,则可以使用以下命令查看报错原因,再根据错误原因具体分析和处理:

ggsci> view report ext1

使用stats 命令对抽取和传输进行进行检查:

stats ext1

通常使用的初始化方法有以下几种:

l   对于数据量不大的数据库可以采用数据泵的方式进行初始化。

l   对于数据量较大的数据库,可以采用RMAN 的方式。

l   对于数据量较大且不能采用RMAN 的数据库,建议找一个中间环境,将数据RMAN 恢复到中间环境,再采用数据泵导数。

长事务处理:在V$TRANSACTION 中查找当前正在运行的事务(RAC 环境下,查看gv$transaction ),并找出相应的长事务。在执行数据同步之前,确保这些长事务已经完成,或者被kill 掉(需要得到dba 或者相关管理人员的确认)。

Select  start_time  from gv$transaction

where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss')<to_date('2015-01-06 11:20:55', 'yyyy-mm-dd hh24:mi:ss');

注:通过上面的SQL语句查找到比3.6.9歩中记录下的时间点早的事务,需要等到该事务结束,然后执行数据同步;

同步开始时确保数据库中长事务已完成或者被kill 掉。

SCN

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

使用expdp 导出生产库数据,flashback_scn 为上一步骤获取的scn ,并行数可适当调整。

( 并行度参数parallel 的值根据数据量大小和系统负载调整

由于指定了flashback_scn ,当数据量较大时可能会出现ORA-01555 报错,建议在数据库空闲时进行。)

expdp \'/ as sysdba\' directory= EXP_DIR dumpfile=PRDABPPVMI1_%U.dmp logfile=exp_PRDABPPVMI1.log  schemas=PRDABPPVMI1  parallel=4 FLASHBACK_SCN= 359963860636

使用impdp 导入,并行数可适当调整。

impdp \'/ as sysdba\' directory= EXP_DIR dumpfile=PRDABPPVMI1_%U.dmp logfile=imp_PRDABPPVMI1.log  full=y  parallel=4 cluster=n

查看日志确认数据导入正常。

 

进行初始化

源库做RMAN 备份;

在目标库做restore

在源库获取当前SCN

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

将备份以来的所有归档copy 到目标库,目标库recover 到上一步获取的SCN

 

注意用来启动OGG 复制进程的SCN 为“从生产获取的SCN - 1 ,因为”recover untial scn” 只恢复到指定SCN 之前的数据,不包括指定SCN

假如从生产获取的 SCN 14245600463106 ,则启动 OGG 复制进程的 SCN:

start_SCN = 14245600463106 - 1 = 14245600463105

 

软件安装

首先要为GoldenGate 软件划分适当的共享文件系统,这里假设使用/arch

登录RAC 的节点1 主机,使用操作系统oracle 用户(即Oracle 数据库软件的安装和运行用户)来安装GoldenGate 。所使用的GoldenGate 软件版本为11.2.1.0.25

GoldenGate for 11g : p19269552_1121025_Linux-x86-64.zip

将安装介质p19269552_1121025_Linux-x86-64.zip 文件上传到数据库服务器/arch/ogg 目录,使用unzip 命令解压缩,会出现fbo_ggs_Linux_x64_ora11g_64bit.tar 文件,再使用tar 对该文件解报。解压缩/ 解包的过程就是安装过程。

cd /arch/ogg

unzip p19269552_1121025_Linux-x86-64.zip

tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

解压后,创建 GoldenGate 需要的子目录(使用create subdirs 命令):

cd /arch/ogg

./ggsci

 

Oracle GoldenGate Command Interpreter for Oracle

… …

GGSCI (aaopdb2) 1> create subdirs

 

Creating subdirectories under current directory /arch/ogg

 

Parameter files                /arch/ogg/dirprm: already exists

Report files                   /arch/ogg/dirrpt: created

Checkpoint files               /arch/ogg/dirchk: created

Process status files           /arch/ogg/dirpcs: created

SQL script files               /arch/ogg/dirsql: created

Database definitions files     /arch/ogg/dirdef: created

Extract data files             /arch/ogg/dirdat1: created

Temporary files                /arch/ogg/dirtmp: created

Stdout files                   /arch/ogg/dirout: created

 

编辑oracle 用户主目录下的.profile 文件,在文件末尾追加以下内容:

export GG_HOME=/arch/ogg

export SHLIB_PATH =$ SHLIB_PATH:$GG_HOME:$ORACLE_HOME/lib

 

管理进程mgr

在新系统执行该配置任务。

$ cd /arch/ogg

$ ./ggsci

 

编辑mgr 进程配置参数,配置信息将保存于./dirprm/mgr.prm 文件中。

ggsci> edit params mgr

 

运行后将进入vi 编辑模式,输入以下内容。

Port 7809

DynamicPortList 7810-7820

DynamicPortReassignDelay 5

 

PurgeOldExtracts ./dirdat/rt*, UseCheckpoints, MinKeepDays 5

 

-- AutoRestart ER *, Retries 5, WaitMinutes 10, ResetMinutes 60

 

LagReportHours 1

LagInfoMinutes 3

LagCriticalMinutes 5

保存并退出vi 编辑。启动源端的mgr 管理进程:

ggsci> start mgr

 

的数据库用户

在目标数据库创建GoldenGate 运行所需要的数据库用户。

使用下面的SQL 创建GoldenGate 的数据库用户ggadmin

目标端数据库:

create tablespace goldengate datafile 'xxx' size 10g autoextend on; /* 创建单独的表空间*/

 

create user ggadmin identified by gadmin

default tablespace users

temporary tablespace temp;

 

grant dba to ggadmin;

 

数据初始化完成后,在启动复制进程前,还需要如下的检查与配置工作。

在源端由于主外键约束和级联删除约束所产生的DML 本身已经被GoldenGate 捕获并且投递到目标端,如果在目标端启用了外键约束和级联删除,则可能造成重复记录等数据不一致的问题。为了防止此类问题,需要在目标库上禁用外键约束和级联删除约束。

通过下面的方法禁用这些约束:

在 执行下面的SQL ,生成用于禁用外键约束的脚本文件:

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool disable_foreign_constraints.sql

select 'alter table '||owner||'.'||table_name|| ' disable constraint '||constraint_name||';'

from dba_constraints

where constraint_type = 'R'

and owner 'PRDABPPVMI1','PRDSPUSERVMI1' );

spool off

 

在新系统数据库执行disable_foreign_constraints.sql 脚本禁用外键约束。

然后执行以下语句确认所有的外键约束都已经禁用:

Col owner for a10

Col table_name for a30

Col constraint_name for a30

select owner, table_name, constraint_name, status

from dba_constraints

where constraint_type='R' and owner in('PRDABPPVMI1','PRDSPUSERVMI1');

在新系统执行下面的SQL ,生成用于禁用级联删除的脚本文件:

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool disable_cascade_delete_constraints.sql

 

select 'alter table '||owner||'.'||table_name||'  disable constraint '||constraint_name||';'

from dba_constraints

where owner in('PRDABPPVMI1','PRDSPUSERVMI1')  and constraint_type = 'R' and delete_rule = 'CASCADE';

 

spool off

 

在新系统数据库执行disable_cascade_delete_constraints.sql 脚本禁用级联删除。

然后执行以下语句确认所有的级联删除都已经禁用:

select owner, table_name, constraint_name, status

from dba_constraints

where delete_rule = 'CASCADE'and owner in('PRDABPPVMI1','PRDSPUSERVMI1');

 

在源端执行的job 会生成对应的DML GoldenGate extract 进程捕获并且投递到目标端,如果目标端同时也开启了job 则有可能造成数据的不一致,例如重复记录等。为了防止目标端数据库系统的job 对复制产生干扰,在启动目标端的GoldenGate 进程之前,需要禁用目标端数据库的job

使用以下命令将新系统数据库的job 队列修改为0 ,从而达到禁用目标库job 的目的:

 

修改为以后使用以下命令确认当前的修改已经生效,job 队列为0

show parameter job;

在数据库源端触发器产生的DML 已经被GoldenGate extract 进程捕获,并且通过pump 投递到目标端。如果目标端的触发器启用,则可能造成目标端数据的不一致,最典型的一种场景是在目标端没有主键索引的表上产生重复数据。为了防止上述情况的出现,需要在目标端数据库禁用触发器。

在新系统执行下面的语句,生成禁用触发器的脚本文件disable_triggers.sql

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool  disable_triggers.sql

select 'alter trigger '||owner||'.'||trigger_name|| ' disable;'

from dba_triggers

where owner in('PRDABPPVMI1','PRDSPUSERVMI1') and status = 'ENABLED';

 

spool off

 

在新系统执行脚本disable_triggers.sql 禁用触发器。然后执行以下语句确认所有的触发器都已经被禁用:

sqlplus / as sysdba

@ disable_triggers.sql

 

select owner, status, count(*)

from dba_triggers

where owner in('PRDABPPVMI1','PRDSPUSERVMI1')

group by owner, status;

在目标端创建Checkpoint 表,表名为ggadmin.ggchkpt

$ cd /arch/ogg

$./ggsci

ggsci> DBLOGIN USERID ggadmin, PASSWORD ggadmin

Successfully logged into database.

 

ggsci> add checkpointtable ggadmin.ggchkpt

Successfully created checkpoint table GGADMIN.GGCHKPT.

 

编辑GLOBALS 参数配置文件:

ggsci> EDIT PARAMS ./GLOBALS

CheckpointTable ggadmin.ggchkpt

GGSCHEMA ggadmin

 

的复制进程Replicat

目标端配置

分别为两个schema 创建一个复制进程。

创建复制进程 rep1

ADD REPLICAT rep1, CHECKPOINTTABLE ggadmin.ggchkpt, EXTTRAIL ./dirdat/rt

 

编辑Rep1 的参数,自动保存于./dirprm/repl.prm 文件中:

 edit params rep1

Replicat rep1

SETENV (NLS_LANG=American_America.AL32UTF8)

USERID ggadmin, PASSWORD ggadmin

DiscardFile ./dirrpt/rep1.dsc, Purge, Megabytes 200

 

MaxDiscardRecs 10

REPERROR DEFAULT ABEND

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS

GetUpdateBefores

--AllowNoopUpdates

ASSUMETARGETDEFS

CHECKSEQUENCEVALUE

-- HandleCollisions

GETTRUNCATES

 

DDL

--DDL INCLUDE OBJNAME bocnet.*

DDLOPTIONS REPORT

DDLOPTIONS UPDATEMETADATA, REPORT

DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter

DDLERROR DEFAULT ABEND

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

-- To increase replicat speed

BatchSQL

 

 

MAP PRDABPPVMI1.*, TARGET PRDABPPVMI1.*;

创建复制进程 rep2

ADD REPLICAT rep2, CHECKPOINTTABLE ggadmin.ggchkpt, EXTTRAIL ./dirdat/rt

编辑Rep2 的参数,自动保存于./dirprm/rep2.prm 文件中:

 edit params rep2

Replicat rep2

SETENV (NLS_LANG=American_America.AL32UTF8)

USERID ggadmin, PASSWORD ggadmin

DiscardFile ./dirrpt/rep2.dsc, Purge, Megabytes 200

 

MaxDiscardRecs 10

REPERROR DEFAULT ABEND

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS

GetUpdateBefores

--AllowNoopUpdates

ASSUMETARGETDEFS

CHECKSEQUENCEVALUE

-- HandleCollisions

GETTRUNCATES

 

DDL

--DDL INCLUDE OBJNAME bocnet.*

DDLOPTIONS REPORT

DDLOPTIONS UPDATEMETADATA, REPORT

DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter

DDLERROR DEFAULT ABEND

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

-- To increase replicat speed

BatchSQL

 

--MAPEXCLUDE bocnet.mlog$_bocorg_admin;

 

MAP PRDSPUSERVMI1.*, TARGET PRDSPUSERVMI1.*;

 

 

启动复制进程前需要登录源端启动 dp1 进程

登录源端系统

GGSCI> start dp1

务必确认新生产库中需要同步表上的外键约束、级联删除、 job 、触发器已经禁用

在检查确认没有问题后,使用下面的命令启动复制进程:

SCN

start rep2 aftercsn SCN

 

若采用数据泵初始化,SCN为“3.7.2”小节中获取的SCN。

若采用RMAN初始化,SCN为“3.7.3”小节中获取的SCN-1。

可以使用info all 检查replicat 进程状态是否为RUNNING ;如果状态不是RUNNING ,则可以使用以下命令查看报错原因:

ggsci>view report rep1

然后再根据错误原因具体分析和处理。