第十三章:Oracle GoldenGate实施参考
点击数:2199发布日期:2020-04-19 15:14:04 来源:oracle数据库秘笈
第十三章:Oracle GoldenGate实施参考
13.1前言:
Oracle GoldenGate软件需要另外收费。GoldenGate是创建于1995年的美国公司,开发总部设在旧金山,数据库的复制领域的专业公司,2009年被甲骨文Oracle公司收购,之后简称ogg。和DataGuard一样,也是实现数据库容灾的一种技术。
GoldenGate的优势在于1、可以实现异构的IT基础结构的容灾,不同数据库版本,不同操作系统,不同的数据库之间都可以。2、对网络的压力和DataGuard相比要小。3、对生产系统的影响较小。4、可以实现数据库间的双向复制,但双向复制不能基于同一套表。5、支持双活多活,复制的目标端也可以是active的。6、过虑没必要的日志与事务。7、数据迁移时可以实现零宕机。
DataGuard的缺点是:1、需要另行购买licence.2、对于大数据量的数据一致性效验存在疑问的,还需要购买GoldenGate Veridata来校验数据一致性。3对生产库有一些特殊要求,比如强烈推荐有主键或唯一索引,存在不支持的数据类型。4、复制的实现比DataGuard较复杂。5、对于ddl的复制暂只支持Oracle to Oracle,况且对ddl的支持还需要另外的一些条件。6、需要主机存储端配合的工作较多。比如存储队列的空间,如果是RAC,要求将归档日志放在共享存储上。7、需要保留一段时间的归档日志(建议为七天)。
13.2深入了解GoldenGate
数据容灾复制的技术很多,有存储级别的,很多银行金融机构在用;有数据库级别的DataGuard,Quest Shareplex,Microsoft SQL Replication,还有DSG(迪思杰)。Oracle后来收购了GoldenGate所以摇身一变就成了Oracle官方支持的容灾软件了。
13.2.1 GoldenGate的五个进程。
Capture(抓取进程),实时读取redo变化,并可以实现过滤。
Source trail(队列文件),暂存数据的变化,可以设置保留天数。
Pump(传输进程),数据经过压缩和加密传送到目标端。
DELIVERY(投递进程),在目标数据库实现队列文件的应用提交。
MANAGER(管理进程),队列管理,进程管理,监控复制,接受UI的指令,提供延迟报告,事件报告,错误日志等,相当于总管家。
13.2.2需要在磁盘上存储的组件。
安装介质,Trail Files(队列文件),Checkpoint Files(检查点文件), Source Data Definition Files 数据定义文件,Configuration Files(配置文件), Output Files(输出文件),Report/Log Files(报告/日志文件),Binaries网络传送复本文件。
13.2.3 GoldenGate的工作特点
1、实时数据复制
2、支持异构环境
3、支持断点续传,不影响系统连续运行。
4、高性能,对生产系统影响小
5、基于事件的复制,事务完整性,只复制提交的事务。
6、功能强大的管理工具,消息服务,ETL tools, Message Service
7、灵活拓扑结构
8、复制冲突检测和解决
9、事件标记基础架构(Event marker infrastructure)
10、路由和压缩: TCP/IP, LAN, WAN
11、传输过程加密: 128-位, SSL
12、可以自定义延时应用修改,降低高峰时期的压力。
13、根据事务大小和数量自动管理内存
14、分存式松散的成对关系。
15、基于事务批量操作。
13.3 配置一个常用的GoldenGate.
13.3.1 系统现状调研
配置之前,我们要全面的了解用户的现状。最好提前半个月甚至更长时间介入调研工作,研究适不适合用ogg,如果决定使用ogg,前期要做足准备工作,到真正实施的时候,就顺利多了。有的客户前期工作做的不充分,以至在实施的过程中,困难重重。
我们需要了解的情况有:
1、主库和备库的环境。
2、操作系统列表。
3、数据库每天产生的日志量评估,峰值的日志量。
4、网络带宽,如果带宽不足,是否启用压缩功能,以及压缩对CPU占用的影响
5、端口的开放情况。
6、表结构,是否存在无主键表,是否存在不支持的数据类型。
7、下载针对不同操作系统不同数据库版本的ogg软件。
8、备库的数据库安装完毕。
9、主库归档日志建议保留三天以上,如七天,以备追平日志。
长事务需要最早记录的日志。
10、主库如果是RAC,归档日志必须放在共享存储上,共享空间要充足。
11、ogg队列日志建议保留至少三天,比如七天,以便出问题时续传。
12、需要容灾复制的用户的列表,要复制的表的列表。
13、确认是否复制ddl,复制ddl可能会影响复制效率。
14、主备库,CPU、内存大小和使用情况。
15、主库需要另处建一个ogg表空间,建议预留空间,可以设为10g。
16、无主键表或唯一索引表建议建主键或唯一索引。
17、确认同步过程所使用的技术,如RMAN或expdp/impdp.
18、测试同步expdp/impdp的时间。或了解RMAN备份恢复时间,由此估算实施时间。
13.3.2下表是我们要进行配置ogg的调查列表。
|
源端 |
目标端 |
操作系统版本 |
Redhat linux 6.1 |
Redhat linux 6.1 |
数据库版本 |
11.2.0.4 |
11.2.0.4 |
是否RAC |
NO |
NO |
IP地址 |
192.168.1.10 |
192.168.1.80 |
服务器主机名 |
yingshu |
ysogg |
Oracle SID |
ysdb |
ysdbogg |
是否ASM |
NO |
NO |
GG版本 |
ogg112101 |
ogg112101 |
GG安装所在用户 |
oracle |
oracle |
GG安装所在主机 |
192.168.1.10 |
192.168.1.80 |
GG安装路径 |
/goldengate/ |
/goldengate/ |
GoldenGate数据库用户和表空间 |
goldengate |
goldengate |
复制的用户范围 |
共1个用户需要复制: |
|
特别说明 |
1、 关闭源端的DDL复制功能; 2、 用户未加入复制的表; 3、 用户下所有包括中文字段的表均不加入复制: 4、 数据库发生的变更: (1) 源端数据库的recyclebin关闭,以支持DDL复制; (2) 源端数据库打开了数据库最小附加日志; (3) 源端数据库对所有加入复制的表增加了表级附加日志; |
13.3.3配置一个GoldenGate
创建安装目录(主备库都要创建)
[root@yingshu /]# mkdir /goldengate
[root@yingshu /]# chown -R oracle:dba /goldengate/
将下载完成的安装介质拷贝至/oramed/(主备库都要拷贝)
解压安装介质(主备库都要解压)
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip -d /goldengate/
cd /goldengate/
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar
建立ogg表空间(主库创建)
SQL> create tablespace goldengate datafile '/u01/app/oracle/oradata/ysdb/goldengate01.dbf' size 500m;
Tablespace created.
建立ogg用户(主库创建)
create user ogg identified by ogg default tablespace goldengate;
User created.
grant resource,connect,dba to ogg;
Grant succeeded.
如果不想分给ogg用户dba权限,可以细化ogg的权限。分如下权限给ogg:
grant connect to ogg;
grant alter any table to ogg;
grant alter session to ogg;
grant create session to ogg;
grant flashback any table to ogg;
grant select any dictionary to ogg;
grant select any table to ogg;
grant resource to ogg;
打开并检查主库附加日志(主库)
alter database add supplemental log data ;
Database altered.
SQL> select
supplemental_log_data_min
,supplemental_log_data_pk
,supplemental_log_data_ui
,supplemental_log_data_fk
,supplemental_log_data_all from v$database;
SUPPLEMENTAL_LOG_DATA_MI SUPPLEMEN SUPPLEMEN SUPPLEMEN SUPPLEMEN
------------------------ --------- --------- --------- ---------
YES NO NO NO NO
使用oracle用户,创建子目录 (主备库都要创建)
[root@yingshu oramed]# su - oracle
[oracle@yingshu ~]$
[oracle@yingshu goldengate]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (yingshu) 1> create subdirs
Creating subdirectories under current directory /goldengate
Parameter files /goldengate/dirprm: already exists
Report files /goldengate/dirrpt: created
Checkpoint files /goldengate/dirchk: created
Process status files /goldengate/dirpcs: created
SQL script files /goldengate/dirsql: created
Database definitions files /goldengate/dirdef: created
Extract data files /goldengate/dirdat: created
Temporary files /goldengate/dirtmp: created
Stdout files /goldengate/dirout: created
将数据库改成强制记日志forceloging(主库)
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FORCE_LOG
---------
YES
关闭数据库的recyclebin (仅实施DDL时进行配置) (主库)
SQL> alter session set recyclebin=off;
Session altered.
show parameter recyclebin
recyclebin string OFF
SQL> show parameter recyclebin
NAME TYPE VALUE
-------------------------- ------------------------- ------------------------------
recyclebin string OFF
添加环境变量(主备库都要添加)
export GG_HOME=/goldengate
export PATH=$PATH:$GG_HOME
export LIBPATH=$GG_HOME:$ORACLE_HOME/lib
编辑GLOBALS参数文件(主备库都要编辑)
edit params ./globals --在该文件中添加以下内容
ggschema ogg --指定的进行ddl复制的数据库用户
因为我们这里不复制ddl所以ddl的部分就省略了。
说明:我们这里假定生产用户有两个分别是shu和ys;
shu用户有stud表,
ys用户有tech表。
如下所示:
SQL> conn shu/shu
Connected.
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
STUD
SQL> conn ys/ys
Connected.
SQL> select table_name from user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
TEACH
打开表的补充日志(主库),所有需要复制的表,都需要打开。
GGSCI (yingshu) 1> dblogin userid ogg,password ogg
Successfully logged into database.
GGSCI (yingshu) 4> add trandata shu.stud
Logging of supplemental redo data enabled for table SHU.STUD.
GGSCI (yingshu) 5> add trandata ys.teach
Logging of supplemental redo data enabled for table YS.TEACH.
编缉MGR参数(源和目标均需要配置),为了简单,主备两边可以配成一样的。
[oracle@yingshu goldengate]$ ./ggsci
GGSCI (yingshu) 1> edit param mgr
PORT 7809
DYNAMICPORTLIST 7840-7914
PURGEOLDEXTRACTS ./dirdat/*, usecheckpoints, minkeepdays 1
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10
~
"dirprm/mgr.prm" [New] 8L, 247C written
启动管理进程mgr进程(源和目标均需要配置)
start mgr
查看管理进程mgr的状态
GGSCI (yingshu) 12> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
添加源端的抽取extract进程(主库),begin now表示从现在时刻开始抽取
GGSCI (yingshu) 7> add extract ggext, tranlog, begin now
EXTRACT added.
添加源端抽取进程生成的队列文件格式及位置(主库)
GGSCI (yingshu) 1> add exttrail ./dirdat/aa,extract ggext,megabytes 20
EXTTRAIL added.
后面的megabytes 20,指抽取后生成队列文件的大小。
如果抽取进程添加错误,可以使用以下命令删除。
unregister extract ggext logretention
delete extract ggext !
添加抽取进程的内容,我们可以用vi在./ dirprm里直接编缉,也可以在用edit params ggext在ggsci里编缉,两种方法的结果是一样的。编缉后的结果如下:
[oracle@yingshu dirprm]$ cat ggext.prm
EXTRACT ggext
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ogg, PASSWORD ogg
EXTTRAIL ./dirdat/aa
TRANLOGOPTIONS ALTARCHIVELOGDEST PRIMARY INSTANCE ysdb /arch1
GETTRUNCATES
table ys.*;
table shu.*;
启动抽取进程
GGSCI (yingshu) 4> start ggext
Sending START request to MANAGER ...
EXTRACT GGEXT starting
查看一下现在的状态,如果状态正常如下,我们就可以备份了。
GGSCI (yingshu) 6> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING GGEXT 00:00:00 00:00:05
我们还可以去/goldengate/dirdat下去查看有没有生成以aa开头的队列文件,以验定我们添加的抽取进程是否正确。
备份数据库
我们先手工执行一下crosscheck,实际生产环境中,根据实际需要执行。
crosscheck backup;
crosscheck archivelog all;
delete expired archivelog all;
report obsolete;
delete obsolete;
delete backup;
我们使用RMAN来备份,备份过程日志省略。备份脚本下如:
run{
backup database include current controlfile
format '/orabak/fullysdb_%d_%T_%s_%c' ;
sql 'alter system archive log current';
backup archivelog all
format '/orabak/ysdb_arch_%d_%T_%s_%c' ;
}
获取SCN号
col status for a15
SQL> select group#, thread#, status, first_change#, next_change# from v$log;
GROUP# THREAD# STATUS FIRST_CHANGE# NEXT_CHANGE#
---------- ---------- --------------- ------------- ------------
1 1 INACTIVE 267420 268989
2 1 INACTIVE 268989 268997
3 1 CURRENT 268997 2.8147E+14
说明:获取不活动的归档日志的最后一个SCN号,如果有多组INACTIVE,取最大的FIRST_CHANGE#号, 本次取用的SCN号为268989。
如果显示的SCN号为科学计数法,则用以下命令设置
SQL> set numw 15
使用ftp命令将备份的db和归档传到备库。我们这里在备库执行mget,--后面为注释。
[root@ysogg /]# cd /orabak
[root@ysogg orabak]# ftp 192.168.1.10 --打开ftp
ftp> cd /orabak --进入主库的/orabak文件夹
ftp> prompt --关闭提示
ftp> bin --以二进制格式传输
ftp> mget * --批量传输所有备份片
ftp> bye --退出ftp工具
我们将主库的参数文件spfile和口令文件orapwysdb同样以ftp的方法,get到备库的相应位置。
[oracle@ysogg ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs
[oracle@ysogg dbs]$ ftp 192.168.1.10
ftp> cd /u01/app/oracle/product/10.2.0/db_1/dbs
ftp> bin
ftp> get orapwysdb
ftp> bye
还原数据文件(备库执行)
RMAN> restore database;
在RMAN中恢复数据库,(备库执行)
run {
set until scn=268989;
recover database;
}
以regetlogs方式打开数据库(备库执行)
SQL> alter database open resetlogs;
Database altered.
Sql>shutdown immediate
Sql>start mount
Sql>alter database noarchivelog;
Sql>archive log list;
Sql>alter database open;
数据库正常打开,我们的数据同步就算完成了。
下面开始配置传输进程。
其实抽取进程也可以进行传输队列,但如果网络中断或数据库发生重启,抽取进程就要中断,重启后可能日志已经删除,无法正常抽取日志了。再有如果发生错误,不好区别是抽取的问题还是传输的问题。所以建议采用抽取和传输分开进程,分工明细,好定位好管理。
源端配pump进程(主库配置)
GGSCI (yingshu) 54> edit params ggpup //也可以在/goldengate/dirprm里编缉ggpup.prm文件
extract ggpup //定义抽取进程的名字
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) //设置字符集
passthru //pass through表示只传输不与库打交道
rmthost 192.168.1.80, mgrport 7809, compress //远程目标的地址端口号
rmttrail ./dirdat/aa //传到目标端后,放在什么位置
dynamicresolution //动态解析表结构,复制的表很多时,可以减少启动时间
gettruncates //复制truncate表
table ys.tech; //用户名.表名,也可以用*号代替
table shu.stud;
在ggsci中添加传送进程。(主库添加)
GGSCI (yingshu) 8> add extract ggpup, exttrailsource ./dirdat/aa
EXTRACT added.
GGSCI (yingshu) 9> add rmttrail ./dirdat/aa, extract ggpup, megabytes 20
RMTTRAIL added.
ggpup是传输进程的名字,/dirdat/表示源队列存储的位置,aa表示队列的名字。
如果添加错误或者想重新添加,可以把已添加的删除。
delete extract ggpup
创建检查点(备库创建)
edit params ./globals
checkpointtable .checktab
GGSCI (ysogg) 4> dblogin userid ogg,password ogg
GGSCI (ysogg) 5> add checkpointtable ogg.checktab
配置目标端replicate应用复写进程(备库配置)。
GGSCI (ysogg) 7> add replicat ggrep, exttrail ./dirdat/aa
如果添加错误或需要重新配置,可以删除应用进程。
delete replicat ggrep
info replicat *,tasks
配置replicate复写进程的参数文件。
edit param ggrep
replicat ggrep
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ogg, password ogg
handlecollisions //处理重复数据,必须有主键或唯一索引,多用于初始化。
assumetargetdefs //两边数据结构,表结构一致用此参数。
discardfile ./dirrpt/ggrep.dsc, append, megabytes 1000
gettruncates
map ys.* target ys.*;
map shu.* target shu.*;
启动应用进程。
start replicat ggrep
至此我们的GoldenGate就配置完成了。
下一篇:第十四章:常用Oracle工具
上一篇:第十二章:DataGuard
图文推荐
序言
2020-04-19 查看:2270
第十五章:Oracle 12c介绍
2020-04-19 查看:2207
第十四章:常用Oracle工具
2020-04-19 查看:1933
第十三章:Oracle Golde...
2020-04-19 查看:2199
第十二章:DataGuard
2020-04-19 查看:1795