一.初始化说明
GG实施过程中,初始化是一个重要的工作,尤其是要初始化的数据较多,并且系统又是7*24的时。
对于静态初始化,把业务停掉,DB 上的数据就不会有变化,这时候,我们可以用expdp/impdp 或者dblink 等方式把基数据同步过去, 在启动相关的GG 同步进程就可以了。
但如果要求零停机,DB事务就会不间断进行,可以通过如下两种方法来保证初始化过程中事务的完整性和数据的准确性
1. 利用 Keys + Handlecollisions
2. 利用 commit SCN/CSN
通常我们会使用SCN方式进行初始化(SCN方法有如下):
(1) 基于备份的表空间搬移
(2)Dataguard
(3)一致性的exp和imp
(4) 一致性的expdp和impdp
1.1 基于备份的表空间搬移
TransporttableTablespace 可以使用Expdp/impdp实现,也可以使用RMAN 来实现,这里要注意的就是传输表空间需要将表空间设置为read only,但一般生产库不允许,所以这里可以使用基于备份的RMAN 传输表空间。
基于备份的表空间搬移的一个最大的优势就是零停机,而且支持异构平台和跨版本(对于不同字节顺序的source-target平台初始化,需要进行convert),但是需要10g以上版本才支持,同样受到表空间搬移的那些限制条件。
1.2 Data Guard
Dataguard适合同平台同版本的系统环境初始化
1.2.3 exp/expdp
通过exp和expdp的一致性参数(flashback_scn),导出特定SCN点上的一致性版本. FLASHBACK_SCN 参数用于指定导出特定SCN时刻的表数据,
如:FLASHBACK_SCN=scn_value。Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用。
使用这种方法初始化存在一个问题,就是构造一致性数据过程中会对undo造成比较大的压力,尤其对大型数据库来讲,可以通过分割的datapump来实现数据的分组同步,分散undo的压力,然后合适时间将分组的datapump合并即可。
该方法的优点就是可以跨平台和跨版本初始化。
下例用带FLASHBACK_SCN 的expdp/impdp完成初始化:
1、源端、目标端关闭所有OGG服务于进程
2、只启动Extract 和 Data Pump进程:源端mgr、espdb001(extract)、psydb001(data pump);目标端:mgr。
注意:这里不要启动Replicat 进程,要等到我们用expdp/impdp 完成初始化之后,在用SCN 来启动replicat 进程;
3、在source和target 端都创建directory。
SQL> create directory backup as '/data/backup';
Directory created.
4、获取源端获取数据库当前的SCN
SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER ------------------------ 3270830 或: SQL> select current_scn from v$database; CURRENT_SCN ----------- 3270844
5、导出用户的表数据
[oracle@ORACLEOGG1 ~]$ expdp yczbmes/****@mesorcl directory=backup dumpfile=OA.dmp logfile=OA.log flashback_scn=3270844;
6、将dump scp到Target
[root@ORACLEOGG1 backup]# > scp OA.dmp 172.18.1.246:/data/backup2
oracle@172.18.1.246's password:
OA.dmp 100% 49MB 6.1MB/s 00:08
7、导入数据 impdp dump文件
[oracle@ORACLEOGG1 /home/oracle]$> impdp yczbmes/****@mesorcl directory=backup dumpfile=OA.dmp logfile=OA.log tables=pdba table_exists_action=replace;
8、用SCN 启动目标端Replicat
GGSCI (ORACLEOGG1) 32> > start rsydb001, aftercsn 3270844; Sending START request to MANAGER ... REPLICAT REP1 starting
9、验证
只要Source 和Target 表上的相关表记录数一致,就说明,已经ok了。
--Source DB:
SQL> select count(*) from oat; COUNT(*) ---------- 2678634
--Target DB:
SQL> select count(*) from oat; COUNT(*) ---------- 2678634
摘自:https://blog.csdn.net/tianlesoftware/article/details/6982908
文章评论