
Oracle Goldengate目前支持主被动式的双向配置,换而言之OGG可以将来自于激活的主库的数据变化完全复制到从库中,从库在不断同步数据的同时已经为计划内的和计划外的outages做好了故障切换的准备,也就是我们说的Live Standby。这里我们重点介绍一下配置Oracle Goldengate Live Standby系统的步骤,和具体的故障切换过程。
如果自己搞不定可以找ASKMACLEAN专业ORACLE数据库修复团队成员帮您恢复!
SQL> conn clinic/clinicConnected
SQL> drop table tv;
create table tv (t1 int primary key,t2 int,t3 varchar2(30));
Table dropped
SQL>
Table created
SQL> drop sequence seqt1;
create sequence seqt1 start with 1 increment by 1;
Sequence dropped
SQL> SQL>
Sequence created
declare
rnd number(9,2);
begin
for i in 1100000 loop
insert into tv values(seqt1nextval,idbms_randomvalue,'MACLEAN IS TESTING');
commit;
end loop;
end;
/
/ 以上脚本在primary主库的某个应用账户下创建了测试用的数据,
接着我们可以使用各种工具将数据初始化到从库中,如果在这个过程中
希望实时在线数据迁移的话,可以参考《Goldengate实现在线数据迁移》
/
/ 注意我们在Live Standby的环境中往往需要复制sequence序列,以保证切换到备库时业务可以正常进行 /
/ 初始化备库数据后,确保已与主库完全一致 /
primary :
SQL> select sum(t2) from tv;
SUM(T2)
----------
2498624495
SQL> select last_number from user_sequences;
LAST_NUMBER
-----------
100001
standby:
SQL> select sum(t2) from tv;
SUM(T2)
----------
2498624495
SQL> select last_number from user_sequences;
LAST_NUMBER
-----------
100001
以上完成准备工作后,我们可以进入到正式配置Goldengate live stanby的阶段,包括以下步骤:
配置由主库到备库的extract、replicat、data pump,该步骤同普通的单向复制没有太大的区别
配置由备库到主库的extract、replicat、data pump
启动由主库到备库的extract、replicat、data pump
接下来我们会实践整个配置过程:
1
创建由主库到备库的extract、data pump、replicat
GGSCI (rh2oraclecom) 10> dblogin userid maclean
Password:
Successfully logged into database
GGSCI (rh2oraclecom) 11> add trandata clinic
Logging of supplemental redo data enabled for table CLINICTV
GGSCI (rh2oraclecom) 4> add extract extstd1,tranlog,begin now
EXTRACT added
GGSCI (rh2oraclecom) 5> add exttrail /d01/ext/cl,megabytes 100,extract extstd1
EXTTRAIL added
GGSCI (rh2oraclecom) 7> view params extstd1
-- Identify the Extract group:
EXTRACT extstd1
-- Specify database login information as needed for the database:
userid maclean, password maclean
-- Specify the local trail that this Extract writes to:
EXTTRAIL /d01/ext/cl
-- Specify sequences to be captured:
SEQUENCE clinicseqt1;
-- Specify tables to be captured:
TABLE clinic;
-- Exclude specific tables from capture if needed:
-- TABLEEXCLUDE
GGSCI (rh2oraclecom) 17> add extract pumpstd1,exttrailsource /d01/ext/cl,begin now
EXTRACT added
GGSCI (rh2oraclecom) 98> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd1
RMTTRAIL added
GGSCI (rh2oraclecom) 129> view params pumpstd1
-- Identify the data pump group:
EXTRACT pumpstd1
userid maclean, password maclean
-- Specify database login information as needed for the database:
userid maclean, password maclean
RMTHOST rh3oraclecom, MGRPORT 7809
-- Specify the remote trail on the standby system:
RMTTRAIL /d01/rmt/cl
-- Pass data through without mapping, filtering, conversion:
PASSTHRU
sequence clinicseqt1;
Table clinic;
在备库上配置由主库到备库的replicat:
GGSCI (rh3oraclecom) 4> add replicat repstd1,exttrail /d01/rmt/cl,begin now
REPLICAT added
GGSCI (rh3oraclecom) 49> view params repstd1
-- Identify the Replicat group:
REPLICAT repstd1
-- State that source and target definitions are identical:
ASSUMETARGETDEFS
-- Specify database login information as needed for the database:
userid maclean, password maclean
-- Specify tables for delivery:
MAP clinic, TARGET clinic;
-- Exclude specific tables from delivery if needed:
-- MAPEXCLUDE
2
创建由备库到主库的extract、data pump、replicat
GGSCI (rh3oraclecom) 51> dblogin userid maclean
Password:
Successfully logged into database
GGSCI (rh3oraclecom) 52> add trandata clinic
Logging of supplemental redo data enabled for table CLINICTV
/ 不要忘记在备库端的相关表加上追加日志 /
GGSCI (rh3oraclecom) 53> add extract extstd2,tranlog,begin now
EXTRACT added
GGSCI (rh3oraclecom) 54> add exttrail /d01/ext/cl,megabytes 100,extract extstd2
EXTTRAIL added
GGSCI (rh3oraclecom) 58> view params extstd2
-- Identify the Extract group:
EXTRACT extstd2
-- Specify database login information as needed for the database:
userid maclean, password maclean
-- Specify the local trail that this Extract writes to:
EXTTRAIL /d01/ext/cl
-- Specify sequences to be captured:
SEQUENCE clinicseqt1;
-- Specify tables to be captured:
TABLE clinic;
-- Exclude specific tables from capture if needed:
-- TABLEEXCLUDE
GGSCI (rh3oraclecom) 59> add extract pumpstd2,exttrailsource /d01/ext/cl,begin now
EXTRACT added
GGSCI (rh3oraclecom) 60> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd2
RMTTRAIL added
GGSCI (rh3oraclecom) 63> view params pumpstd2
-- Identify the data pump group:
EXTRACT pumpstd2
userid maclean, password maclean
-- Specify database login information as needed for the database:
userid maclean, password maclean
RMTHOST rh2oraclecom, MGRPORT 7809
-- Specify the remote trail on the standby system:
RMTTRAIL /d01/rmt/cl
-- Pass data through without mapping, filtering, conversion:
PASSTHRU
sequence clinicseqt1;
Table clinic;
在主库上配置replicat:
GGSCI (rh2oraclecom) 136> add replicat repstd2,exttrail /d01/rmt/cl,begin now,checkpointtable macleanck
REPLICAT added
GGSCI (rh2oraclecom) 138> view params repstd2
-- Identify the Replicat group:
REPLICAT repstd2
-- State that source and target definitions are identical:
ASSUMETARGETDEFS
-- Specify database login information as needed for the database:
userid maclean, password maclean
-- Specify tables for delivery:
MAP clinic, TARGET clinic;
-- Exclude specific tables from delivery if needed:
-- MAPEXCLUDE
3
完成以上OGG配置后,可以启动主库到备库的extract、pump、以及replicat:
GGSCI (rh2oraclecom) 141> start extstd1
Sending START request to MANAGER
EXTRACT EXTSTD1 starting
GGSCI (rh2oraclecom) 142> start pumpstd1
Sending START request to MANAGER
EXTRACT PUMPSTD1 starting
GGSCI (rh3oraclecom) 70> start repstd1
Sending START request to MANAGER
REPLICAT REPSTD1 starting
/ 如果你是在offline状态下配置的话,那么此时可以启用应用了/
接下来我们尝试做有计划的主备库切换演练:
1
首先停止一切在主库上的应用,这一点和DataGuard Switchover一样。在保证没有活动事务的情况下,才能切换干净。
2
在主库端使用LAG等命令了解extract的延迟,若返回如"At EOF, no more records to process"的信息,则说明所有事务均已被抽取。
GGSCI (rh2oraclecom) 144> lag extstd1
Sending GETLAG request to EXTRACT EXTSTD1
Last record lag: 0 seconds
At EOF, no more records to process
在EOF的前提下关闭extract:
GGSCI (rh2oraclecom) 146> stop extstd1
Sending STOP request to EXTRACT EXTSTD1
Request processed
3
同样对pump使用LAG命令,若返回如"At EOF, no more records to process"的信息,则说明已抽取的数据都被发送到备库了。
GGSCI (rh2oraclecom) 147> lag pumpstd1
Sending GETLAG request to EXTRACT PUMPSTD1
Last record lag: 3 seconds
At EOF, no more records to process
在EOF的前提下,关闭data pump
GGSCI (rh2oraclecom) 148> stop pumpstd1
Sending STOP request to EXTRACT PUMPSTD1
Request processed
3
检查备库端replicat的同步情况,如返回"At EOF, no more records to process",则说明所有记录均被复制。
GGSCI (rh3oraclecom) 71> lag repstd1
Sending GETLAG request to REPLICAT REPSTD1
Last record lag: 5 seconds
At EOF, no more records to process
在EOF的前提下关闭replicat
GGSCI (rh3oraclecom) 72> stop repstd1
Sending STOP request to REPLICAT REPSTD1
Request processed
4
紧接着我们可以在备库上为业务应用用户赋予必要的insert、update、delete权限,启用各种触发器trigger及cascade delete约束等;
以上手段在主库上对应的 *** 作是收回应用业务的权限,disable掉各种触发器及cascade delete约束,
之所以这样做是为了保证在任何时候扮演备库角色的数据库均不应当接受任何除了OGG外的手动的或者应用驱动的业务数据变更,
以保证主备库间的数据一致。
5
修改原备库上的extract的启动时间到现在,已保证它不去抽取那些之前的重做日志
GGSCI (rh3oraclecom) 75> alter extstd2 ,begin now
EXTRACT altered
GGSCI (rh3oraclecom) 76> start extstd2
Sending START request to MANAGER
EXTRACT EXTSTD2 starting
若之前没有启动由备库到主库的pump和replicat的话可以在此时启动:
GGSCI (rh3oraclecom) 78> start pumpstd2
Sending START request to MANAGER
EXTRACT PUMPSTD2 starting
GGSCI (rh2oraclecom) 161> start repstd2
Sending START request to MANAGER
REPLICAT REPSTD2 starting
6此时我们可以正式启动在原备库现在的主库上的应用了
接下来我们尝试回切到原主库上:
1前提步骤与之前的切换相似,首先停止在原备库上的任何应用,
之后使用LAG命令确认extract和replicat的进度,在确认后关闭extract和replicat。
完成在主库上的维护工作:包括赋予权限,启用触发器等等。
2修改原主库上的extract的开始时间为当前,保证它不去处理之前的重做日志:
GGSCI (rh2oraclecom) 165> alter extract extstd1,begin now
EXTRACT altered
3此时我们已经可以启动在原主库现在的主库上的应用了
4启动最早配置的由主库到备库的extract、pump、replicat:
GGSCI (rh2oraclecom) 166> start extstd1
Sending START request to MANAGER
EXTRACT EXTSTD1 starting
GGSCI (rh2oraclecom) 171> start pumpstd1
Sending START request to MANAGER
EXTRACT PUMPSTD1 starting
GGSCI (rh3oraclecom) 86> start repstd1
Sending START request to MANAGER
REPLICAT REPSTD1 starting
以上完成了OGG的Live Standby中主备库之间的计划内的切换Switchover,That's Great!
下面还需要对ogg及oracle进行一系列配置(ogg支持多种复制方式,比如单项复制、双OGG的抓取进程所产生的数据队列远远大于 Oracle数据库所产生的归档日志,导致 OGG 缩短保留队列的时间可以调节 OGG自动删除队列间的参数,缩短保留队列的时间。例如
在老版本的MySQL 322中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 323开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。
而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。
当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。
以上就是关于Oracle goldengate ogg要怎么实现主备库切换啊全部的内容,包括:Oracle goldengate ogg要怎么实现主备库切换啊、oracle ogg怎么配置复制端自动删除、Goldengate mysql 数据同步 数据库连接不上 报 OGG-00770等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)