OGG 是一个数据库 Replication 工具
如果您的来源库和目标仅是Oracle数据库,使用Data Guard就可以了,如果我的源端是Oracle,而目标是任何其他数据库之一,最受欢迎且受支持的工具,最可行的方案是OGG(OGG 还支持从 mysql 同步到 sqlserver 之类)
我们都知道 OGG 是基于日志更改的捕获
trail 文件
可以是
用户可以自由的开发扩展应用
OGG 通过类似逻辑时钟同步(内部有序CSN号/事务号)的机制,提升实时冗余 Replication 的容错性
注意当需要配置多个数据库的时候,请把窗口排齐整,确保我们正在连接到正确的数据库,不要问我为啥知道
在源端和目标端创建一个数据库用户
-- 创建用户这种事情 …… 请使用想象力解决
OGG 从Redo日志文件中读取信息,而 redo 文件仅具有有关对象ID的信息,所以OGG软件需要访问数据库
grant unlimited tablespace to ogg;
grant create session, alter session to ogg;
grant alter system to ogg;
grant select any dictionary to ogg;
grant flashback any table to ogg;
grant select any table, insert any table, update any table, delete any table, drop any table to ogg;
grant create table, create sequence to ogg;
grant select on dba_clusters to ogg;
grant select on v_$database to ogg;
grant select on sys.logmnr_buildlog to ogg;
grant select any transaction to ogg;
grant lock any table to ogg;
grant ggs_ggsuser_role to ogg;
grant execute on dbms_flashback to ogg;
grant execute on dbms_logmnr_d to ogg;
grant execute on dbms_capture_adm to ogg;
grant execute on dbms_streams to ogg;
grant execute on utl_file to ogg;
exec dbms_streams_auth.grant_admin_privilege(‘ogg’);
OGG 必须在目标数据库执行 DML,这个用户拥有在目标端数据库执行 DML 权限
开启supplemental日志,并立即切换为 supplemental 日志模式
select * from v$flash_recovery_area_usage; --查看空间占用率,如果 ARCHIVED LOG 超过90%,Oracle随时有宕机的危险
select * from v$recovery_file_dest; --查看归档日志大小及使用情况
select group#, bytes, status from v$log; --查看现有日志
select sequence#,first_time from v$loghist;--列出所有归档redo日志文件的顺序和产生的时间
select * from v$archived_log; --查看v$archive_log
select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有归档,未删除的归档日志
b) 修改闪回区大小show parameter db_recovery
-- 首先是关闭数据库:以SYS身份链接到oracle,执行
shutdown immediate;
-- 启动数据库到mount状态:
startup mount
-- 查看回闪恢复区的大小和存放目标:
show parameter db_recovery_file_dest
-- 修改回闪恢复区的大小
alter system set db_recovery_file_dest_size = 4G
-- (缺省是2G,可以根据实际情况调整大小)
-- 最后打开数据库:
alter database open;
alter system set log_archive_dest_1='location=/oralog/NC65/archivelog' scope=spfile;
alter system set log_archive_dest_2='location=/data/oracle/log2/archive_log';
shutdown immediate;
startup mount
alter database archivelog;
alter database open;
archive log list;
alter database force logging;
alter database add supplemental log data
-- 如果启用DDL 支持,必须关闭recycle bin
alter system set recyclebin=offscope=spfile;
alter system switch logfile;
-- 切换一下日志,最好还能重启一下
-- 运行GGSCI,进入OGG管理控制台
dblogin userid admin password admin
add trandata xxxx.*
add extract extwest, tranlog, begin now
edit param extwest
EXTRACT extwest
USERID admin,PASSWORD oracle
RMTHOST 127.0.0.1, MGRPORT 7809
RMTTRAIL .\dirdat\ew
dynamicresolution
gettruncates
TABLE admin.*;
STATOPETIONS RESETREPORTSTAS
REPORT AT 00:01
REPORTROLLOVER AT 00:01
REPORTCOUNT EVERY 60 SECONDS, RATE
--
add exttrail ./dirdat/ew, extract extwest, megabytes 50
edit param extwest
EXTRACT extwest
EXTRAIL ./dirdat/ew
USERID gguser, PASSWORD gguser
TABLE west.*;
STATOPETIONS RESETREPORTSTAS
REPORT AT 00:01
REPORTROLLOVER AT 00:01
REPORTCOUNT EVERY 60 SECONDS, RATE
add extract extwest, tranlog, begin now
add exttrail ./dirdata/ew, extract extwest, megabytes 50
-- 创建 pump
edit param pwest
EXTRACT pwest
RMTHOST 192.168.1.110, MGRPORT 15001, COMPRESS
RMTTRAIL ./dirdat/pe
PASSTHRU
TABLE west.*;
add extract pwest, extrailsource ./dirdata/ew
add rmttrail ./dirdata/pe, extract pwest, megabytes 50
start extract extwest
start extract pwest
对比手动备份恢复,OGG 执行初始同步之后,不管源代码发生了什么变化,都可以被捕获并同步到目标中
再执行初始同步之前,请确保从源端的抽取进程已经是开启状态,以防初始同步期间的数据丢失
DBLOGIN USERID ogg, PASSWORD ogg
ADD CHECKPOINTTABLE ogg.checkpoint
edit param rep1
REPLICAT rep1
USERID root,PASSWORD oracle
ASSUMETARGETDEFS
REPERROR default,discard
DISCARDFILE .\repsz.dsc,append,megabytes 100 // 请将目录更换成自己的,
MAP admin.*, TARGET root.*;
add replicat rep1 exttrail .\dirdat\pe, checkpointtable ogg.checkpoint
如果数据之间没有依赖(通过 range 函数,或者分表),可以开启多个抽取进程,进行优化
文档翻译?CSDN 审核中啊