共计 8473 个字符,预计需要花费 22 分钟才能阅读完成。
Oracle Golden gate 12 版本已经很长世间了,对比前几个版本变化很大。在安装过程已经摈弃了原有命令行形式,采用了与 Oracle DB 以及 weblogic 一样的图形解决,在界面上可以选择对应数据库版本的 ogg。
下面就为大家介绍一下新版的 ogg 的安装实施过程。我们采用 linux+oracle11g 和 solairs+12c 的异构环境搭建,先完成单向复制再扩展为支持 DDL 操作。
1、项目背景
2、源 端安 装 o gg
2.1 编辑 oracle 用户的.profile 增加环境变量
- export PATH=$ORACLE_HOME/bin:/oracle/ogg:$PATH
- #set OGG LD_LIBRARY_PATH
- export LD_LIBRARY_PATH=/oracle/ogg:$ORACLE_HOME/lib:$LD_LIBRARY_PATH
安装的过程就比较简单,类似我们安装数据库,运行 runInstaller 命令调用 OUI 界面。
- [oracle@node01 Disk1]$ ls
- install response runInstaller stage
- [oracle@node01 Disk1]$ ./runInstaller
3、目标端安装 ogg
编辑 oracle 用户的 .profile 增加环境变量
- PATH=$PATH:/usr/local/bin:/usr/ccs/bin:$ORACLE_HOME/bin:/oracle/ogg
- #set ogg
- LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
安装过程,如同源端
- $ ls
- install response runInstaller stage
- $ ls -l
- total 8
- drwxr-xr-x 4 oracle oinstall 512 Dec 16 2015 install
- drwxrwxrwx 2 oracle oinstall 512 Dec 16 2015 response
- -rwxr-xr-x 1 oracle oinstall 918 Dec 16 2015 runInstaller
- drwxr-xr-x 11 oracle oinstall 512 Dec 16 2015 stage
- $ ./runInstaller
4、测试 ogg
· 源端 ogg
· 目标端 ogg
5、创建 ogg 用户
5.1、源端数据库
点击 ( 此处 ) 折叠或打开
- SQL> create tablespace ogg datafile ‘/oracle/database/oradata/inds/ogg.dbf’ size 200m;
- Tablespace created.
- SQL> create user ogg identified by ogg default tablespace ogg;
- User created.
- SQL> grant connect ,resource,unlimited tablespace to ogg;
- Grant succeeded.
- SQL> grant execute on utl_file to ogg;
- Grant succeeded.
- SQL> grant select any dictionary,select any table to ogg;
- Grant succeeded.
- SQL> grant alter any table to ogg;
- Grant succeeded.
- SQL> grant flashback any table to ogg;
- Grant succeeded.
- SQL> grant execute on DBMS_FLASHBACK to ogg;
- Grant succeeded.
- SQL> show parameter enable_goldengate
- NAME TYPE VALUE
- ———————————— ———————- ——————————
- enable_goldengate_replication boolean FALSE
- SQL>grant dba to ogg;
- Grant succeeded.
登陆源端 Oracle GoldenGate,测试并确认可以访问数据库
5.2、目标端数据库
点击 ( 此处 ) 折叠或打开
- SQL> create tablespace ogg datafile ‘/oracle/appnewdb/oradata/mynewdb/ogg.dbf’ size 200m;
- Tablespace created.
- SQL> create user ogg identified by ogg default tablespace ogg;
- User created.
- SQL> grant connect ,resource,unlimited tablespace to ogg;
- Grant succeeded.
- SQL> grant execute on utl_file to ogg;
- Grant succeeded.
- SQL> grant select any dictionary,select any table to ogg;
- Grant succeeded.
- SQL> grant alter any table to ogg;
- Grant succeeded.
- SQL> grant flashback any table to ogg;
- Grant succeeded.
- SQL> grant execute on DBMS_FLASHBACK to ogg;
- Grant succeeded.
- SQL> show parameter enable_goldengate
- NAME TYPE VALUE
- ———————————— ———– ——————————
- enable_goldengate_replication boolean FALSE
登陆Oracle GoldenGate,确认可以访问数据库
6、开启归档和附加日志
1)检查源端数据库是否为归档模式,若为非归档模式,将其改为归档模式
SQL> archive log list;
2)检查 源端和目标端 数据库 附加补充日志是否打开
SQL>select supplemental_log_data_min from v$database;
1. 将数据库附加日志打开
SQL>alter database add supplemental log data;
2. 切换日志以使附加日志生效
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
数据库的附加日志分为 3 个级别:
· 数据库级别的附加日志
SQL>alter database add supplemental log data;
·用户级别附加日志(使用 DDL 抽取功能时要启用该级别)
GGSCI (node01 as ogg@inds) 20>add schematrandata scott
·表级别的附加日志
GGSCI (node01 as ogg@inds) 8>add trandata hr.employees
7、配置源端 OGG
OGG 配置分为源端和目标端配置,在源端配置 mgr 进程、extract 进程、pump 进程;在目标端配置 mgr 进程、replicat 进程 。
对于各个进程的作用,大家都耳熟能详了,在这里就不一一阐述了。
在以往的版本中需要创建 subdirs,但在最新的版本中一下在安装 ogg 过程中已经创建好了。
如果再执行 create 命令会提示“已经存在“。这是 ogg 的目录结构,用于保持运行过程中生成的文件
7.1、配置 mgr
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 22>info mgr
- Manager is running (IP port node01.7809, Process ID 3387).
- GGSCI (node01 as ogg@inds) 25>view params mgr
- PORT 7809 #默认 MGR 服务端口 7809
- DYNAMICPORTLIST 7810–7820 #其它进程如 Extract 进程、Replicat 进程分配的端口
- AUTOSTART ER E* #以下表示 MGR 进程启动后失败时自动启动或重启
- AUTORESTART ER P*,RETRIES 4, WAITMINUTES 4
- STARTUPVALIDATIONDELAY 5
# 添加表级 trandata
trandata hr.employees,仅当该表具有主键或是唯一约束时才可以表级别附加日志; 如果表中没有主键或唯一索引时则必须指定一个或多个或全部列做主键,目的是避免重复数据
· 具有主键或唯一约束的表
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 8>add trandata hr.employees
- Logging of supplemental redo data enabled for table HR.EMPLOYEES.
- TRANDATA for scheduling columns has been added on table ‘HR.EMPLOYEES’.
- TRANDATA for instantiation CSN has been added on table ‘HR.EMPLOYEES’.
·不具有主键和唯一约束的表
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 13>add trandata scott.t
- 2017-01-12 10:35:04 WARNING OGG-06439 No unique key is defined for table T. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
- Logging of supplemental redo log data is already enabled for table SCOTT.T.
- TRANDATA for instantiation CSN has been added on table ‘SCOTT.T’.
# 添加 schema 级别的 trandata
添加 schema 级别的 trandata,命令与添加表级别的相同 add schematrandata SCHEMA
另外还需要设置参数 enable_goldengate_replication 为 true
点击 ( 此处 ) 折叠或打开
- SQL> show parameter enable_goldengate_replication
- NAME TYPE VALUE
- ———————————— ———————- ——————————
- enable_goldengate_replication boolean TRUE
如果enable_goldengate_replication 为 false 会提示以下错误
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 20>add schematrandata scott
- ERROR: Operation not supported becauseenable_goldengate_replicationis not set to true.
- # 在这里我们需要设置参数 enable_goldengate_replication 为 true#
- GGSCI (node01 as ogg@inds) 21>add schematrandata scott
- 2017-01-12 10:59:07 INFO OGG-01788 SCHEMATRANDATA has been added on schema scott.
- 2017-01-12 10:59:07 INFO OGG-01976 SCHEMATRANDATA for scheduling columns has been added on schema scott.
当然也可以通过 delete schematrandata SCHEMA 取消。
7.2、添加 checkpoint 表
在 目标端配置复制进程 replicat 之前,需要在目标数据库中创建一个 checkpoint 表。这个 checkpoint 表是基于 GoldenGate checkpoint 文件的,它记录了所有 GoldenGate 可以恢复的 checkpoint 以及 sequence。
尽管这个操作不是必须的,但是 Oracle 强烈建议使用它,因为它可以使得 checkpoint 包含在 Replicat 的事物中,保证了可以从各类失败场景中恢复。
添加的步骤为在目标机器上编辑 GLOBALS 文件,添加
checkpointtable ogg.checkpoint
然后在 ggsci 中登陆 ogg,使用 add checkpoint 添加
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 9>edit params ./GLOBALS
- GGSCI (node01 as ogg@inds) 10>view params ./GLOBALS
- checkpointtable ogg.checkpoint
- GGSCI (node01 as ogg@inds) 12>add checkpointtable ogg.checkpoint
- Successfully created checkpoint table ogg.checkpoint.
- GGSCI (node01 as ogg@inds) 13>info checkpointtable ogg.checkpoint
- Checkpoint table ogg.checkpoint created 2017-01-12 10:34:26.
阐述一下 GLOBALS 文件,它是一个全局文件,文件中的参数对全局起作用,其中的参数有 mgrservname、checkpointtable、ggschema、ddltable、markertable、outputfiletable。文件名称必须大写。
7.3、配置抽取 extract 进程
抽取进程在源端运行,负责抓取需要传输的数据。
GGSCI (node01 as ogg@inds) 14>edit params extnd
GGSCI (node01 as ogg@inds) 15>view params extnd
SETENV 用于设置操作系统环境变量
GGSCI (node01 as ogg@inds) 16> add extract extnd,tranlog,begin now
EXTRACT added.
表示创建一个 extract 进程,名称为 extnd。注意:这个名称要与 edit params extnd 里面的名称一致。
#add extract extnd,tranlog,begin now,threads 2#
GGSCI (node01 as ogg@inds) 17>add exttrail ./dirdat/et,extract extnd
EXTTRAIL added.
命令 add exttrail 创建本地文件./dirdat/et,进程 extract 进程抽取的源数据转换为数据写入该文件中,进程 pump 负责读取该文件。
7.4、数据传输 pump 进程
Pump 进程又称为 secondly extract 进程。如果没有 pump 进程,则 extract 进程负责将把抽取来的数据库传递给目标端,配置 pump 进程还有个好处就是当网络故障时,可以把数据无差错的传递给目标端。
创建 parameter pump_sos 文件
GGSCI (node01 as ogg@inds) 12> edit params pump_sos
添加 params pump_sos 进程到 ggsci 队列
点击 ( 此处 ) 折叠或打开
- GGSCI (node01 as ogg@inds) 31> add extract pump_sos,exttrailsource ./dirdat/et
- EXTRACT added.
- GGSCI (node01 as ogg@inds) 32> add rmttrail ./dirdat/pt,extract pump_sos
- RMTTRAIL added.
- GGSCI (node01 as ogg@inds) 33> start pump_sos
- Sending START request to MANAGER …
- EXTRACT PUMP_SOS starting
- GGSCI (node01 as ogg@inds) 34> info all
- Program Status Group Lag at Chkpt Time Since Chkpt
- MANAGER RUNNING
- EXTRACT RUNNING EXTND 00:00:00 00:00:05
- EXTRACT RUNNING PUMP_SOS 00:00:00 00:00:07
8、配置目标端
8.1、配置 mgr
依照配置源端的 mgr 参数,配置目标端的 mgr,步骤如下
GGSCI (Idota as ogg@mynewdb) 3> edit params mgr
配置完成后,重启 mgr 进程
8.2、添加 replicat 复制进程
Replicat 进程运行在目标端,负责读取源端抽取进程抽取的文件,然后把文件中的变化数据应用目标端,形成数据同步
创建 replicat 复制进程
在 GGSCI 中添加 replicat 进程管理
点击 ( 此处 ) 折叠或打开
- GGSCI (Idota as ogg@mynewdb) 12> add replicat repl,exttrail ./dirdat/pt
- REPLICAT added.
- GGSCI (Idota as ogg@mynewdb) 22> start repl
- Sending START request to MANAGER …
- REPLICAT REPL starting
- GGSCI (Idota as ogg@mynewdb) 23> info all
- Program Status Group Lag at Chkpt Time Since Chkpt
- MANAGER RUNNING
- REPLICAT RUNNING REPL 00:00:00 00:00:06
9、DML 测试验证同步
检查源端和目标端的 scott.dept 数据
·源端
·目标端
·源端做 DML 操作
·目标端数据检查是否同步
OGG 很完美的完成基于 DML 操作的数据同步,但是无法完成基于 DDL 的操作。如何完成 DDL 操作同步呢,在 ogg 12 版本中还需要我们执行几个脚本:
marker_setup.sql、ddl_setup.sql、role_setup.sql、ddl_enable.sql、以及性能优化工具
@?/rdbms/admin/dbmspool.sql
ddl_pin.sql ogg
10、配置 DDL 复制
我们需要再源端执行 ogg 提供的支持 DDL 操作的脚本,就是上面提到的 6 个 sql,分别执行。大家对于执行 SQL 都是信手拈来,下面只简单的说明下主要事项。
·marker_setup.sql 输入 ogg 的 schema:ogg
·ddl_setup.sql 检查是否具有 default tablespace 以及 autoextend on。同时对 oracle 10g 对回收站有要求,必须关闭。在 oracle 11g 和 12c 可以开启。
·role_setup.sql 该脚本生成 GGS_GGSUSER_ROLE 角色,授予给 ogg
·ddl_enable.sql 启用 DDL 复制,实质是个触发器。用以想 MARKER 和 HISTORY 表插入 DDL 信息
·@?/rdbms/admin/dbmspool.sql(可选项)把执行过程中使用的 package 加载到内存中以提高 DDL 触发器和性能效率。它引用了 dbms_shared_pool 系统包。
· ddl_pin.sql(可选项)它与 dbmspool.sql 共同使用,指定 schema ogg。
至此,执行 DDL 复制的脚本执行完成,接下来需要分别修改源端和目标端的参数文件,是对应的进程执行 DDL 复制。
在 extract 进程和 pump 进程中分别添加“DDL INCLUDE ALL“
在目标端的 replicat 进程中,添加“DDL INCLUDE ALL”和“DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5”
修改完成后重启进程生效。
11、DDL 测试验证同步
·源端数据库
·目标端数据库
通过测试不能发现在目标端数据库也生成了表 T2,实现了 DDL 操作。仔细观察,发现源端数据库和目标端数据库的 T2 的数据量不一致呢,不禁联想到 ogg 复制是通过解析和应用 SQL 语句实现数据同步的。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140646.htm