Oracle Golden Gate数据库同步技术
2013-07-15Oracle GoldenGate是一款实时访问、基于日志变化捕捉数据,并且在异构平台之间进行数据传输的产品。利用这个技术,GoldenGate能够实现低延迟、高性能、低影响进行连续的数据集成。
Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。Oracle Golden Gate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。同时,Oracle Golden Gate可以实现一对一、广播(一对多)、聚合(多对一)、双向、点对点、级联等多种灵活的拓扑结构。
1、支持的Database
Oracle ,MS Sql Server,IBM DB2,SYBASE,MySql等
2、支持的操作系统平台
Windows 2000, 2003, XP,Linux,Sun Solaris,HP NonStop,HP-UX
3、内存要求
GoldenGate对操作系统内存的需求主要取决于Extract和Replicat进程数,一般建议>2G。
4、DISK空间需求
由于要数据库必须设置为归档模式,所以要求至少保存7天以上的日志,建议剩余空间在10G~100G之间。
5、对于RAC环境
GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩余的node启动而无须修改任何配置参数。否则如果运行在单个node上的话,需要将剩余node中的归档日志通过一定的技术共享出来并加载到GoldenGate运行节点。
对于RAC环境,GoldenGate要求所有node必须保持时钟同步,同时必须保持所有RAC node和运行extract进程的node节点保持时钟同步。因为GoldenGate会比较本地的系统时间和commit的时间戳。所以不能忽略这个设置。否则可能导致数据复制的紊乱。
6、Oracle GoldenGate can be deployed quickly and easily in five steps:
1). Prepare the Environment
2). Initial Load
3). Change Capture
4). Change Delivery
5). Verify the results
7、GoldenGate几个重要进程介绍:
1)、Manager管理进程在两端开启,监控和重启其他进程;分配数据存储和报告错误及事件;
2)、Extract进程从日志中抓取并传输到target端事务数据;
3)、Server Collector进程在target(接受)端接受数据并写入trail文件;
4)、Replicat进程读取trail文件,并应用到traget数据库;
5)、trail文件时gg自己抓捕信息的文件,是一个OS文件,存放在./dirdat/下,以X00000命名,N顺序1,2,3…此文件用完可配置参数自动删除。
8、Goldengate安装及命令
su - oracle
mkdir /u02/oracle/ogg11
cd /u02/oracle/ogg11
tar xf /opt/fbo_ggs_Linux_x64_ora10g_64bit.tar
./ggsci
GGSCI> CREATE SUBDIRS 创建目录
GGSCI> HELP 查看帮助
GGSCI> SHOW 显示环境
9、设置环境变量
stty erase ^h(stty erase 如何使Backspace键做删除操作,而不是显示^H )
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_BASE/ogg11
alias ogg='cd $ORACLE_BASE/ogg11;rlwrap ggsci'
10、在oracle源数据库开启归档模式
SQL> shutdown immediate;(启动归档前先要停止数据库)
SQL> startup mount;(数据库以mount方式启动)
SQL> alter database archivelog;(启动数据库归档)
SQL> alter system set log_archive_dest_1="/arch"(改变归档日志路径,windows系统使用盘符)
SQL> alter database open;(打开数据库)
SQL> alter system archive log start;
SQL> alter system switch logfile 执行切换命令
SQL> select * from v$log;检查日志
SQL> archive log list;(查看归档是否已经打开)
SQL> alter system set log_archive_format='%s_%t_%r.arc' scope=spfile
11、在oracle源数据库打开最小附加日志
SQL > select a.SUPPLEMENTAL_LOG_DATA_MIN FROM v$database a;
NO
SQL > alter database add supplemental log data;打开最小附加日志
SQL > alter system archive log current;
SQL > select log_mode,supplemental_log_data_min,force_logging from v$database;
YES
12、在源和目的数据库创建GoldenGate管理用户ggadmin:
#source
create tablespace GOLDENGATE_TS datafile '/u02/oracle/oradata/test/gg_ts_01.dbf' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
create user ggadmin identified by "ggadmin" default tablespace GOLDENGATE_TS;
grant connect,resource,dba to ggadmin;
#target
create tablespace GOLDENGATE_TS datafile '/u02/oracle/oradata/test/gg_ts_01.dbf' SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED;
create user ggadmin identified by "ggadmin" default tablespace GOLDENGATE_TS;
grant connect,resource,dba to ggadmin;
sqlplus / as sysdba
SQL>@marker_setup.sql; --提示过程中输入用户:ggadmin
SQL>@ddl_setup.sql; --提示过程中输入用户:ggadmin;INITIALSETUP
RECYCLEBIN must be turned off.set _RECYCLEBIN in parameter file to FALSE
select flashback_on from v$database;
show parameter recyclebin
alter session set recyclebin=off;
SQL>@role_setup.sql; --提示过程中输入用户:ggadmin
SQL>grant GGS_GGSUSER_ROLE to ggadmin;
SQL>@ddl_enable.sql;
######################
GGSCI > dblogin userid ggadmin, password ggadmin
SQL> set lines 1000 pages 1000
SQL> col username for a10
SQL> select sid ,username,program from v$SESSION where username is not null;
######################
执行ggsci命令报错OGG-00014(清空./GLOBALS)
> GLOBALS
GGSCHEMA ggadmin
13、准备源数据,创建空表或导入初始化数据。
drop public database link CORE_DB102;
create public database link core_db102 connect to core identified by 123456 using 'DB102';
select * from tab@CORE_DB102;
create table t1 (id int primary key,name varchar2(16));
select name ,open_mode,force_logging,supplemental_log_data_min from v$database;
创建空表:
create table t1 as select * from t1@core_db102 where 1=2;
14、source & target都需要准备参数
./ggcgi
ggcgi> edit parameter ./GLOBALS
GGSCHEMA ggadmin
:wq!
ggcgi> edit params mgr
PORT 7809
:wq!
ggsci> start mgr
ggsci> info mgr
用vi一样sh vi dirprm/mgr.prm
15、源准备
ggcgi> edit params ex1
EXTRACT ex1
USERID ggadmin,PASSWORD ggadmin
EXTTRAIL /u02/oracle/ogg11/dirdata/ex
TABLE user01.*;
ggcgi> edit params dp1
EXTRACT dp1
USERID ggadmin,PASSWORD ggadmin
RMTHOST 192.168.137.64,MGRPORT 7809
RMTTRAIL /u02/oracle/ogg11/dirdata/rt
TABLE user01.*;
##source#####################
ggsci(source)> dblogin userid ggadmin,password ggadmin
ggsci(source)> ADD TRANDATA core.t1
ggsci(source)> add TRANDATA user01.t1;
################################################################
ggsci(source)> add EXTRACT ex1,TRANLOG,BEGIN now
ggsci(source)> info all
ggsci(source)> add exttrail /u02/oracle/ogg11/dirdat/ex,EXTRACT ex1
ggsci(source)> sh ls -lrt dirdat
ggsci(source)> ADD EXTRACT dp1 EXTTRAILSOURCE /u02/oracle/ogg11/dirdat/ex
ggsci(source)> ADD RMTTRAIL /u02/oracle/ogg11/dirdat/rt,EXTRACT dp1
ggsci(source)> info all
ggsci(source)> start mgr
ggsci(source)> start *
16、target主机准备
ggcgi> edit params rt1
REPLICAT rt1
USERID ggadmin,PASSWORD ggadmin
ASSUMETARGETDEFS
DISCARDFILE /u01/discards.dsc,PURGE
MAP user01.*,TARGET user01.*;
GGSCI > dblogin userid ggadmin, password ggadmin
$CHKPOINT table$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
conn /as sysdba
select sid,username,program from v$SESSION where username iso not null;
ggsci(target)> dblogin userid ggadmin,password ggadmin
ggsci(target)> add checkpointtable ggadmin.checkpointtable
select object_name,object_type from user_objects;
(ggsci target)
edit params ./GLOBALS
GGSCHEMA ggadmin
CHECKPOINTTABLE ggadmin.checkpointtable
17、修改source数据,insert or delete等,观察target数据是否同步
分类:数据库 | 标签: database |相关日志
- oracle中drop一个表,让数据文件释放空间
- oracle批量杀掉死锁进程
- ORA-00257: archiver error. Connect internal only, until freed. (DBD ERROR: OCISessionBegin)
- oracle同义词SYNONYM
- substr()函数
- oracle create dblink
- oracle 启动归档模式
- oracle表空间文件
- linux删除oracle表空间文件后空间不释放
- nagios check_oracle_health install shell
- oracle最大连接数processes
- nagios check_oracle_health
- cx_Oracle for python
- 数据库查询重复行shell脚本
- oracle导入txt数据文件实例
- mysql导入txt数据文件实例
- 修改NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET字符集
- NLS_NCHAR_CHARACTERSET和NLS_CHARACTERSET的区别
- 如何安装mysql-5.6.12
- 设置NLS_LANG环境变量
- mysql或oracle合并行函数
- Oracle InstantClient安装步骤
- shell sqlplus run sql
- oracle误删datafile
- mysqld_safe — MySQL Server Startup Script
- 如何禁用mysql端口3306
- oracle触发器实例 (8)
- sql语句处理BLOB (8)
- Drizzle A database for the Cloud (1)
- SGA/PGA的设置与调整 (9)
- 根据v$SGA_TARGET_ADVICE设置SGA SIZE (6)
- shmmax/shmall和sga_max_size/sga_target应该设置多大 (3)
- exp/imp和expdp/impdp的逻辑哲学 (1)
- oracle安装后期stop big port (1)
- OLTP和OLAP的区别 (3)
- mysql创建数据库及用户 (1)
- Mysql分支MariaDB简介 (6)
- ORA-01843: not a valid month (3)
- sql语句where 1=1和1=2的作用 (4)
- 如何安装mysql-5.5.31 (8)
- rlwrap实现sqlplus使用上下键查历史命令
- CentOS_x64_6.3 install Oracle 10.2.0.1报错ins_emdb.mk (2)