第四部分 生产库安装 DDL 相关组件
若生产库数据库版本在11204 后则不需要安装DDL 相关组件
查询数据库的COMPATIBLE 参数,若为11204 或高版本则支持通过数据库日志挖掘服务器捕获DDL 。此方法称为DDL 捕获(也成为无触发器DDL 捕获)。
若生产库数据库版本在11204 前,则需要手工安装DDL 组件
确定DDL SCHEMA
需要配置在GLOBALS 中:GGSCHEMA odc
授予odc 读写操作系统上的文本文件权限
GRANT EXECUTE ON UTL_FILE TO odc;
退出所有ORACLE 会话,不允许新会话产生
sqlplus "/as sysdba" ---- 必须sysdba 连入
在这之前要先进入到odc 目录下再开启sql
要使基于触发器的 DDL 复制能够将 Oracle 不可见索引识别为唯一标识符,请在参数中将以下参数设置为 TRUE 。 params.sql 脚本 :
define allow_invisible_index_keys = 'TRUE'
@marker_setup
-- 该脚本安装marker 系统,这部分为启用DLL 支持所必备,执行该脚本时会提示输入GoldenGate 管理帐户schema 名。
@ddl_setup
-- 执行该脚本要确认关闭掉所有ORACLE 会话,未被关闭的会话会以列表形式显示,执行过程中会要求希望对象属主,并选择安装模式。如果是初次安装就选择“INITIALSETUP ”,该模式假设当前没有任何GoldenGate DDL 对象存在,如果存在则会删除并重建。如果是重新安装,则应该选择“NORMAL ”.
提示输入DDL SCHEMA ;
若提示选择安装类型:INITIALSETUP (不一定)
@role_setup
-- 该操作会重建DDL 同步所需的权限,授予GoldenGate 中的DDL 对象以DML 权限。
提示你执行一条GRANT 语句,执行即可!
GRANT GGS_GGSUSER_ROLE TO odc;
@ddl_enable.sql
-- 启用DDL 触发器,以捕获DDL 操作。
@ddl_pin.sql odc
要提高DDL 触发器的性能,可以通过ddl_pin 脚本,该脚本会将触发器使用的包加载到内存,以此提高效率。该脚本执行时需要引用dbms_shared_pool 系统包,因此在使用ddl_pin 脚本前需要确保dbms_shared_pool 可用。执行ddl_pin 脚本需要指定GoldenGate 管理员schema 名称.
查看ddl 的状态
@ddl_status.sql
注意!!!
后续铲除ogg 时,要把触发器给关掉
@ddl_disable
特别是GGS_DDL_TRIGGER_BEFORE 这个触发器
alter trigger GGS_DDL_TRIGGER_BEFORE disable;
第五部分 创建抽取进程
抽取进程要配置的参数:
|
参数 |
阀值 |
定义 |
|
extract |
sm_ext |
指定进程名和类型 |
|
setenv |
(NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") |
配置系统环境变量 |
|
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
|
USERIDALIAS |
tiger1 |
使用12c 新特性的别名,提高安全性 |
|
MININGUSERALIAS |
如果使用下游采矿数据库上的登录采矿服务器,则指定其连接信息。 | |
|
INTEGRATEDPARAMS |
可选,将参数传递给包含数据库日志挖掘服务器的Oracle 数据库。仅用于更改日志挖掘服务器参数的默认设置. | |
|
LOGALLSUPCOLS |
将所有补充记录的列写入跟踪,包括冲突检测和解决所需的列,以及支持集成Replicat 所需的调度列 | |
|
UPDATERECORDFORMAT |
[FULL | COMPACT] |
可以控制抽取进程兼容更新操作的前镜像和后镜像信息并写入到一个trail 文件中 |
|
ENCRYPTTRAIL |
AES128 | AES192 | AES256 |
加密本地踪迹。 |
|
exttrail |
./dirdat/cr |
指定写入到本地的哪个队列 |
|
tranlogoptions |
指定在解析数据库日志时所需要的特殊参数 | |
|
altarchivelogdest |
/oradata/oradata/smkdb/archive |
指定归档路径 |
|
FETCHOPTIONS |
指定ogg 获取数据的方式 | |
|
FETCHPKUPDATECOLS |
复制进程出现丢失update 记录(missing update )并且更新的是主键,update 将转换成insert 。( 当使用了HANDLECOLLISIONS 时,请使用该参数。) | |
|
ddl |
include objname UCR_CRM1.* exclude objtype 'TRIGGER' |
使用DDL 参数,指定DDL 的支持和过滤DDL 操作。 |
|
table |
UCR_CRM1.* |
定义需要复制的表,后面需以; 结尾 |
具体参数设置如下:
DBLOGIN USERIDALIAS tiger1
REGISTER EXTRACT sm_ext DATABASE [CONTAINER (container[, ...])] [SCN system_change_number]
group 是Extract 组的名称。
CONTAINER (CONTAINER[ ,…]) 指定多租户容器数据库中的一个可插数据库(PDB) ,或者一个用逗号分隔的PDB 列表。在执行REGISTER 命令之前,指定的pdb 必须已经存在。Extract 将只从该命令中列出的pdb 中捕获。若没有则不写该参数。
ADD EXTRACT sm_ext, INTEGRATED TRANLOG, BEGIN NOW
ADD EXTTRAIL /odc/dirdat/sm, EXTRACT sm_ext
注:
INTEGRATED :表示集成模式
tranlog :表示数据抓取的来源是数据库的redo 数据。
begin now :表示我们在启动这个抓取进程的就去抓取数据。
./dirdat :表示trail 文件的目录
sm :trail 文件的前缀
extract sm_ext :值指定给那个进程用的(sm_ext )。
查看数据库字符集对应设置环境变量
SQL> SELECT * FROM nls_database_parameters WHERE PARAMETER = 'NLS_CHARACTERSET';
ggsci>edit param sm_ext
参数:
extract sm_ext
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
--userid odc password odc
USERIDALIAS tiger1
--TRANLOGOPTIONS MININGUSERALIAS tiger2
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 164, &
DOWNSTREAM_REAL_TIME_MINE y)
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
--ENCRYPTTRAIL AES192
exttrail ./dirdat/sm
tranlogoptions altarchivelogdest /oracle/odc/data
--RAC TranlogOptions DBLOGREADER
FETCHOPTIONS FETCHPKUPDATECOLS
ddl include objname test1.* exclude objtype 'TRIGGER'
DDLOPTIONS ADDTRANDATA RETRYOP RETRYDELAY 10 MAXRETRIES 10
table test1.*;
--PDB 环境
DDL INCLUDE MAPPED SOURCECATALOG pdb1 INCLUDE MAPPED SOURCECATALOG pdb2
SOURCECATALOG pdb1
TABLE schema*.tab*;
或者可以直接table pdb1.schema.table
第六部分 创建传输进程
传输进程要配置的参数:
|
参数 |
阀值 |
定义 |
|
extract |
dmpucr |
指定进程名和类型 |
|
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
|
USERIDALIAS |
tiger1 |
使用12c 新特性的别名,提高安全性 |
|
ENCRYPTTRAIL |
AES128 | AES192 | AES256 |
加密本地踪迹。 |
|
rmthost |
132.151.15.10 |
指定目标端主机IP |
|
mgrport |
7809 |
指定管理进程端口号 |
|
rmttrail |
./dirdat/cr |
指定目标端保存队列文件的目录 |
|
passthru |
采用pass-through 模式处理表 | |
|
table |
UCR_CRM1.* |
定义需要复制的表,后面需以; 结尾 |
具体参数如下:
ggsci>add extract sm_dmp EXTTRAILSOURCE ./dirdat/sm
ggsci>ADD RMTTRAIL ./dirdat/sm, EXTRACT sm_dmp
注:
EXTTRAILSOURCE :指定提取文件作为数据源
ADD RMTTRAIL :在目标数据库上创建一个trail
ggsci>edit param sm_dmp
参数:
extract sm_dmp
--userid odc,password odc
USERIDALIAS tiger1
rmthost 192.168.31.139, mgrport 7809
--ENCRYPT AES192, KEYNAME securekey2
rmttrail ./dirdat/sm
passthru
table test1.*;
--CDB 环境
SOURCECATALOG pdb1
TABLE test1.*;
第七部分 备份创建用户
SQL> create tablespace odc_tps datafile '/oradata/orcl/odc01.dbf' size 100M autoextend on;
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;
第八部分 初始化同步
生产端查询相关信息
-- 生产端查询表格所在表空间
select distinct tablespace_name from dba_tables where owner in ('UCR_CRM1',’UCR_CRM2’,’UCR_CEN1’);
select distinct tablespace_name from dba_tab_partitions where table_owner in ('UCR_CRM1',’UCR_CRM2’,’UCR_CEN1’);
-- 备份端查询是否存在以上表空间,若没有则创建,如果不想创建,在后面的impdp 中需要配置remap_tablespace 参数。
-- 生产端索引所在表空间
select distinct tablespace_name from dba_indexes where owner in ('UCR_CRM1',’UCR_CRM2’,’UCR_CEN1’);
select distinct tablespace_name from dba_ind_partitions where index_owner in ('UCR_CRM1',’UCR_CRM2’,’UCR_CEN1’);
-- 生产端用户默认临时表空间:
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> 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=172800;
SQL> ALTER tablespace UNDOTBS1 RETENTION GUARANTEE;
生产端查询SCN
SQL> select to_char(current_scn) from v$database;
14569604987950
生产端导出
$ expdp odc/odc schemas=UCR_CRM1,UCR_CRM2,UCR_CEN1 directory=expdp flashback_scn=14569604987950 dumpfile=UCRexp.dmp logfile=UCRexp.log
目标端导入
$ impdp odc/odc schemas= UCR_CRM1,UCR_CRM2,UCR_CEN1 directory=expdp dumpfile=UCRexp.dmp logfile=UCRimp.log
-- 导入前检查目标端表空间的大小
select segment_type,count(*),sum(bytes/1024/1024) from dba_segments where owner in (‘UCR_CRM1’,’UCR_CRM2’,’UCR_CEN1’) group by segment_type;
备份库相关操作
备份库禁用触发器
select 'alter trigger '||owner||'.'||trigger_name||' disable;' from dba_triggers where owner in (‘UCR_CRM1’,’UCR_CRM2’,’UCR_CEN1’) and status='ENABLED';
移除JOB :
select job,log_user,schema_user,next_date,broken from dba_jobs;
exec dbms_job.remove(<that job id>);
exec dbms_ijob.remove(21);
exec dbms_job.broken(186,true)
select * from dba_scheduler_jobs where owner in (‘UCR_CRM1’,’UCR_CRM2’,’UCR_CEN1’);
禁用:
DBMS_SCHEDULER.DISABLE('job1, job2, job3, sys.jobclass1, sys.jobclass2');
或删除:
DBMS_SCHEDULER.DROP_JOB (job_name => 'my_job1');
第九部分 创建应用进程
应用进程要配置的参数:
|
参数 |
阀值 |
定义 |
|
replicat |
repucr |
指定进程名和类型 |
|
setenv |
(NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") |
配置系统环境变量 |
|
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
|
USERIDALIAS |
tiger1 |
使用12c 新特性的别名,提高安全性 |
|
INTEGRATEDPARAMS |
该参数适用于一体化模式的Replicat 。它为入站服务器指定可选参数。 | |
|
ASSUMETARGETDEFS |
源端和目标端数据库类型一致,无需生成数据定义文件 | |
|
ALLOWNOOPUPDATES |
允许执行无实际变化的updata | |
|
DBOPTIONS |
DEFERREFCONST |
约束延迟设置。在复制进程的事物被提交之前,延迟级联删除、级联更新时的校验和实施。 |
|
HANDLETPKUPDATE |
定义即使目标数据库环境中存在数据完整性问题,replicat 进程仍然能够继续处理 trail 中的数据。 | |
|
ddlerror |
955 ignore |
定义来处理被找到的对象错误 |
|
DISCARDFILE |
/odc/dirrpt/cr.dsc |
定义discardfile 文件位置,如果处理中油记录出错会写入到此文件中 |
|
APPEND |
discardfile 文件中如果已经包含记录的话,在后面继续追加,不删除之前的记录。 | |
|
megabytes |
20 |
定义discardfile 文件大小 |
|
DISCARDROLLOVER |
on Sunday |
定义文件过期设定,为了防止discard file 被写满 |
|
map target |
用于指定源端和目标端表的映射关系 |
具体参数如下:
ggsci>dblogin userid odc password odc
ggsci>add replicat sm_rep, INTEGRATED, exttrail ./dirdat/sm
ggsci>edit param sm_rep
参数:
replicat sm_rep
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
--userid odc, password odc
USERIDALIAS tiger2
--handlecollisions
ASSUMETARGETDEFS
-- 如果源表和目标表没有相同的结构,那么使用SOURCEDEFS 参数而不是ASSUMETARGETDEFS 。
ALLOWNOOPUPDATES
DBOPTIONS DEFERREFCONST
HANDLETPKUPDATE
--batchsql
ddlerror 955 ignore
ddlerror 1917 ignore
ddlerror 24344 ignore
ddlerror 1031 ignore
ddl include mapped
DISCARDFILE /oracle/odc/dirrpt/sm.dsc, APPEND megabytes 20
DISCARDROLLOVER on sunday
--DISCARDROLLOVER
map xjm.* target test1.*;
USERIDALIAS tiger2
ASSUMETARGETDEFS
MAP hr.*, TARGET hr2.*;
--PDB 环境
SOURCECATALOG pdb1
MAP schema*.tab*, TARGET *1.*;
或者
MAP pdb1.schema*.tab*, TARGET *1.*;
启动
ggsci>start sm_rep aftercsn 14569604987950
