ITPub博客

首页 > 数据库 > Oracle > ogg 12c 搭建

ogg 12c 搭建

原创 Oracle 作者:家有ORACLE老公 时间:2020-10-30 17:48:59 0 删除 编辑

参考

https://blog.csdn.net/orabing/article/details/79932093

 

写在前面

 


源端

目标端

ip

192.168.18.70

192.168.18.60

操作系统

oracle linux 6.5

oracle linux 6.5

oracle 版本

11.2.0.4.0

11.2.0.4.0

实例名

test

test

安装用户

oracle

oracle

OGG 管理用户

ogg

ogg

待同步的用户

scott

scott

 

 

1 前期准备(源 + 目)

1、 开归档

先创建个归档目录

# mkdir /arch

# chown oracle:dba /arch -R

 

SQL> show parameter arch;

SQL> alter system set log_archive_dest_1='location=/arch';

SQL> shutdown immediate ;

SQL> startup mount ;

SQL> alter database archivelog;

SQL> atler database open;

 

 

2 、设置参数( ogg 版本是 12c 以上都需要设置)

SQL> alter system set enable_goldengate_replication=true scope=both;

 

3 、打开数据库最小附加日志

SQL> select supplemental_log_data_min from v$database;

结果为NO ,表示没有打开

alter database add supplemental log data;

alter database add supplemental log data (primary key, unique,foreign key) columns;

alter system switch logfile;    -- 如果没有变成 YES ,也可切换日志

 

4、 增加 UNDO_RETENTION

SQL> alter system set =86400;

 

5 、开启数据库强制日志模式

alter database force logging;

 

 

2 创建 ogg 管理用户 ( + )

1 创建OGG 单独使用的表空间 :

SQL>create tablespace ogg_tbs datafile '/oradata/test / ogg_ data01.dbf ' size 20m  autoextend off;

 

2 、创建 ogg 管理用户

SQL>create user ogg identified by 123456 default tablespace ogg_tbs;

 

3、 授权

grant connect, resource,CREATE SESSION to ogg;

grant  dba to ogg;

grant connect,resource to ogg;

grant SELECT ANY TABLE      to ogg;

grant FLASHBACK ANY TABLE   to ogg;

grant SELECT ANY DICTIONARY to ogg;

grant UPDATE ANY TABLE      to ogg;

grant DROP ANY TABLE        to ogg;

grant DELETE ANY TABLE      to ogg;

grant INSERT ANY TABLE      to ogg;

grant UNLIMITED TABLESPACE  to ogg;

grant create table,create sequence to ogg;

grant execute on utl_file to ogg;

 

 

3 安装 ogg

3.1 上传文件(源 + 目)

1、 上传软件到/u01/ogg

#  mkdir ogg

通过ftp 上传

# chown oracle:dba /ogg -R

# su - oracle

$ cd /u01/ogg

$ unzip V100692-01.zip

 

3.2 环境变量(源 + 目)

su - oracle

vi .bash_profile

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export OGG_HOME=/u01/ogg

export PATH=$OGG_HOME:$PATH

 

生效

source .bash_profile

 

3.3 安装 ogg (源 + 目)

$ cd /u01/ogg/fbo_ggs_Linux_x64_shiphome/Disk1

$ ./runInstaller

如果卡主,用oracle 用户直接连接 xshell

 

1 选择数据库版本( 11g

 

2 选择 ogg 的安装目录

 

 yes

 

 

3 安装

 

yes

 

4 安装成功

 

5 检查 /u01/ogg 目录下是否有 dirprm dirdef 等目录没有的话要添加

$ ggsci

 

GGSCI (db) 3> create subdirs

 

4 OGG 配置

1 证书及抽取表配置

------ 源端 ------

创建OGG 认证证书文件用于隐藏口令登录

cd /u01/ogg

./ggsci

GGSCI > add credentialstore

GGSCI > alter credentialstore add user ogg,password 123456 alias ogg1    --ogg1 ogg 的别名

 

测试登录

GGSCI (ogg1) 2> dblogin useridalias  ogg1

 

配置 抽取的表 加入trandata

GGSCI > add trandata s cott . JIA_TAB       -- 可通过 schema.* 代表添加该用户下所有表

 

查看抽取的表信息

GGSCI > info trandata s cott . JIA_TAB

 

添加检查点表

GGSCI >add checkpointtable ogg.checkpoint

 

------ 目标端 ------

cd /u01/ogg

./ggsci

GGSCI > add credentialstore

GGSCI > alter credentialstore add user ogg,password 123456 alias ogg2   --ogg2 ogg 的别名

GGSCI (ogg1) 2> dblogin useridalias  ogg2

 

添加检查点表

GGSCI  > add checkpointtable ogg.chkpt       -- 和源端的检查点名不一样

注:强列建议为每个Replicat 进程创建 checkpointtable

2 配置 MGR 进程 (源+ 目标)

1 配置全局

GGSCI> edit params ./GLOBALS

ENABLEMONITORING  

CHECKPOINTTABLE ogg.checkpoint   

GGSCHEMA ogg

 

2 mgr

GGSCI>edit param mgr

PORT 7809

DYNAMICPORTLIST 7810-7820

 

3 管理 mgr 进程命令

GGSCI> start MGR  

GGSCI> info MGR     -- 或者查看全部进程 info all

GGSCI> stop MGR  

3 配置 DDL 支持(源)

登陆 ggs

GGSCI>  dblogin useridalias ogg1

执行配置脚本

$ cd $OGG_HOME       -- 一定要去家目录

$ sqlplus "/as sysdba"

SQL> @marker_setup.sql    -- 出现提示的时候,输入 ogg

SQL> @ddl_setup.sql

SQL> @role_setup.sql

授权

Grant the role to all GoldenGate Extract users;  ----- 根据提示执行赋权操作

SQL> @ddl_enable.sql

要提高DDL 触发器的性能,可以通过 ddl_pin 脚本,该脚本会将触发器使用的包加载到内存,以此提高效率。该脚本执行时需要引用 dbms_shared_pool 系统包,因此在使用 ddl_pin 脚本前需要确保 dbms_shared_pool 可用。

检查 dbmspool

SQL> @?/rdbms/admin/dbmspool.sql

执行脚本

SQL> @ddl_pin ogg

如果在执行脚本中出错,执行下面的步骤重新做,首先把所有GG 进程停掉,包括 mgr 进程

停止进程

GGSCI> stop *

GGSCI> stop mgr

停止进程

GGSCI> stop *

GGSCI> stop mgr

删除 ddl 配置

SQL> @ddl_disable.sql  -- 首先使 DDL 触发器失效

SQL>   @ddl_remove.sql

SQL>   @marker_remove.sql

 

 

4 配置 extract 进程(源)

Extract 运行在数据库源端,负责从源端数据表或者日志中捕获数据。 Extract 的作用可以按照表来时间来划分:

初始时间装载阶段:在初始数据装载阶段,Extract 进程直接从源端的数据表中抽取数据。

同步变化捕获阶段:初始数据同步完成以后,Extract 进程负责捕获源端数据的变化 (DML DDL)

 

 

1 添加 extract 进程

GGSCI >  ext_y ,tranlog,begin now

解释:

ext_y 是进程名,一般是 ext 开头,后面可以加 1-2 为字符标识

tranlog 表示要抽取数据库日志

begin now 表示从当前时间开始抽取

 

2

本地队列(trail 文件落地在 /u01/ogg/dirdat/ 下,并且以 la 开头,用 ext_y 进程)

exttrail   /dirdat/ la , extract ext_y

add exttrail  /u01/ogg/dirdat/ la , extract ext_y , THREADS 2 (RAC 环境使用 )

 

3 配置 extract 参数

edit params ext_y

EXTRACT ext_y

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

SETENV (ORACLE_SID = test)

SETENV (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/db_1)

USERIDALIAS ogg1

exttrail /u01/ogg/dirdat/la

 

DDL INCLUDE ALL   ---DDL 时开启

DYNAMICRESOLUTION

 

LOGALLSUPCOLS

NOCOMPRESSUPDATES

UPDATERECORDFORMAT FULL

REPORTCOUNT EVERY 2 SECONDS, RATE

 

table scott.JIA_TAB;

 

 

4 启动 extract 进程

GGSCI > start extract ext_y

 

5 配置 data pump 投递进程(源)

Pump进程 
pump进程运行在数据库源端,其作用是将源端产生的本地trail文件,把trail以数据块的形式通过TCP/IP 协议发送到目标端,这通常也是推荐的方式。

注意:无论是否使用pump进程,在目标端都会生成trail文件

 

1

配置传输进程(dpea 将本地生成 la 文件)

add extract   dpea , exttrailsource /u01/ogg/dirdat/ la

 

dpea 进程传输到目标端( 192.168.18.60 /u01/ogg/dirdat/ 并且以 ra 开头,使数据落地

add rmttrail  /u01/ogg/dirdat/ ra , extract dpea

 

使用 Data Pump 的好处是:  ( 就是上面的dpea,名字叫dpea )
        ⒈ 如果目标端或者网络失败,源端的 Extract 进程不会意外终止
        ⒉ 需要在不同的阶段实现数据的过滤或者转换
        ⒊ 多个源数据库复制到数据中心
        ⒋ 数据需要复制到多个目标数据库

 

2 、配置参数

edit params dpea

EXTRACT dpea

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

passthru

rmthost 192.168.18.60, mgrport 7809, compress    -- 目标端 ip

rmttrail /u01/ogg/dirdat/ra

dynamicresolution

DDL INCLUDE ALL  ---DDL 时开启

 

table scott.JIA_TAB;

 

 

 

3 、管理 投递进程

GGSCI > start extract dpea   –启动 dpea 进程  

GGSCI > stop extract dpea   –关闭 dpea 进程  

GGSCI > kill extract dpea   -- 强制停止 dpea 进程  

GGSCI > info dpea   -- 查看进程参数信息  

GGSCI > stats dpea   -- 查看进程运行信息  

GGSCI > view report dpea  --- 查看运行报告

GGSCI > start ext *   –启动所有 exttact 进程

 

验证

info all

注意:此时保证目标端mgr 已经启动,否则 dpea 进程无法启动

 

查看错误日志

more ggserr.log | grep ERROR

6 创建Replicat 进程 目标

Replicat 进程,通常我们也把它叫做应用进程。可以简写 repa ,运行在目标端,是数据传递的最后一站,负责读取目标端 trail 文件中的内容,并将其解析为 DML DDL 语句,然后应用到目标数据库中。

Extract 进程一样, Replicat 也有其内部的 checkpoint 机制,保证重启后可以从上次记录的位置开始恢复而无数据损失的风险。

Replicat 进程的状态包括 Stopped( 正常停止 ),Starting( 正在启动 ) Running( 正在运行 ) Abended(Abnomal End 的缩写,标示异常结束 )

 

1 添加进程,指定 chkckpoint 进程

GGSCI > add replicat rep_m ,exttrail ./dirdat/ ra , checkpointtable ogg.chkpt

GGSCI >

replicat rep _m

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

SETENV (ORACLE_SID = test)

USERIDALIAS ogg2

reperror default, abend

discardfile /u01/ogg /dirout/rep _m . dsc , append

assumetargetdefs

dynamicresolution

 

ddl include all   --- 开启 ddl 同步,还需要配合执行 @ddl 脚本

ddlerror default ignore retryop maxretries 3 retrydelay 5   --- 开启 ddl 同步

 

map scott . JIA_TAB , target scott . JIA_TAB ;

 

 

 

2 启动 repa 进程,这里启动只是查看进程是否能启动,真正启动 repa 在后面,要加 scn

GGSCI > start extract rep _m    

 

7 管理进程的命令

只需要在命令后面加上进程名就可以了。以ext_y 举例

GGSCI > start ext_y –启动 进程  

GGSCI > stop ext_y –关闭 extract 进程  

GGSCI > kill ext_y   -- 强制停止 extract 进程  

GGSCI > info ext_y   -- 查看进程参数信息  

GGSCI > stats ext_y   -- 查看进程运行信息  

GGSCI > ext_y   --- 查看运行报告

 

 

5 初始化数据

1 确保事物已提交

 

select  sess.sid , sess.serial# , sess.event , sess.sql_id , sess.status

from  v$session sess ,  v$transaction trans

where  sess.SADDR = trans.SES_ADDR and  trans.START_TIME < '2020/10/30 14:00:00' ;

select  sess.sid , sess.serial# , sess.event , sess.sql_id , sess.status , lo.OBJECT_ID , b.OBJECT_NAME

from  v$session sess ,  v$transaction trans , v$locked_object lo , dba_objects b

where  sess.SADDR = trans.SES_ADDR and  trans.START_TIME < '2020/10/30 14:00:00'

and  lo.XIDUSN = trans.XIDUSN and  lo.XIDSLOT = trans.XIDSLOT and  lo.xidsqn = trans.xidsqn

and  b.OBJECT_ID = lo.OBJECT_ID

 

 

确保数据库事物的开始时间都在抽取进程创建之后。

注: 如果查询结果不为空,我们向相关人员询问,确保session相关的操作都已经提交

 

2 源端使用expdp 指定 SCN 方式导出数据

1 查看当前 scn

select name,current_scn from

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER  FROM DUAL;

1733334 (我是用的第一个结果)

 

2 创建路径并授权

S QL>create directory d2 as '/home/oracle/rman';  

SQL> grant read,write on directory d2 to public;

 

3 导出数据 - 一定要指定scn

$ expdp scott/123456  directory=d2 dumpfile= 1 .dmp tables=scott.jia_tab   flashback_scn = 1733334 logfile=a.log ;

传输

scp table.dmp oracle@192.168.18.60:/home/oracle/rman

 

3 目标 导入

$impdp scott/123456 directory=d2 dumpfile=table.dmp table_exists_action=replace logfile=a.log;

 

收集统计信息

SQL> exec DBMS_STATS.GATHER_SCHEMA_STATS (OWNNAME => ' SCOTT ',estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', DEGREE =>12, cascade => TRUE, options => 'GATHER');

 

4 对比数据

schema 为单位导, 常用

select owner,OBJECT_TYPE,status,count(*) from dba_objects where owner IN (&U) group by owner,OBJECT_TYPE,status order by owner,OBJECT_TYPE,status;

输入变量 U='SCOTT'

 

本次试验以表为单位

select count(*) from scott.jia_tab

 

5 禁用的trigger 和外键约束 ( 目标 )

把下面sql 查出来的结果,执行下

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

from dba_constraints

where constraint_type in ('R') and STATUS='ENABLED' and

owner IN (&U)

order by status,owner;

输入变量 U='SCOTT'

 

检查外键约束

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

from dba_triggers

where owner IN (&U) and status='ENABLED'

order by status,owner;

输入变量 U='SCOTT'

检查触发器

 

 

6 开启 Replicat 进程(目标)

start replicat rep _ m , aftercsn 1733334

 

 

6 测试

1 在源端插入几条数据

insert into jia_tab select * from emp where deptno=20

 

2 在目标端查看

select * from jia_tab

 

 

 

 

 

 

 

 

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69959246/viewspace-2731268/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    33
  • 访问量
    28989