使用RMAN duplicate做GoldenGate实例化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53895518

一、背景 GoldenGate从源数据库的事务日志捕获数据,并应用到目标数据库,它提供了一种灵活的、松耦合的体系结构,可以被用于实现几乎所有复制的场景。最大的挑战之一就是为复制建立一个目标库,在目标数据库初始实例化后,应用改变的数据时,确保没有数据冲突,也没有数据丢失。GoldenGateton通过“CSN”(Commit Sequence Number)解决此问题。“CSN”并不是Oracle的“SCN”,虽然它们在功能上相似,但语法是不同的。GoldenGate使用此功能获得源数据库的读一致性映像进行目标数据库的实例化,并且对一致性映像的CSN保持跟踪。 本文假设这样一个场景,源数据库是生产系统数据库,需要做到停机最小化,并且已有很大的数据量。现在需要用GoldenGate搭建一个复制环境。源和目标都已经安装配置好GoldenGate。 二、环境 两台Oracle VM VirtualBox虚拟机 host:master1、master2 IP:192.168.1.1、192.168.1.2 OS:Linux 2.6.32 DB:Oracle 11.2.0.3,启用归档 OGG:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit 2.2.3 master1上是源数据库,master2上建立auxiliary DB,其数据库名称和相关的目录结构都和源库一样 三、使用RMAN duplicate复制实例化目标库 11g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现。这里的测试使用的是Active database duplicate,因为Active database duplicate 功能强大,不需要先把目标数据库进行rman备份,只要目标数据库处于归档模式下即可直接通过网络对数据库进行copy,且copy完成后自动open数据库。这对于大数据特别是T级别的数据库来说优点非常明显,复制前不需要进行备份,减少了备份和传送备份的时间,同时节省备份空间。下面来进行具体的duplicate操作。 1. 开启源库的补充日志 在master1上:

alter database add supplemental log data;

2. 启动GoldenGate抽取进程 在master1上:

start manager
ADD EXTRACT pri_ext, TRANLOG, BEGIN NOW
ADD EXTTRAIL /home/oracle/ogg/dirdat/lt, EXTRACT pri_ext
ADD EXTRACT pum_ext, EXTTRAILSOURCE /home/oracle/ogg/dirdat/lt
ADD RMTTRAIL /home/oracle/ogg/dirdat/rt, EXTRACT pum_ext
START EXTRACT pri_ext
START EXTRACT pum_ext

3. 创建auxiliary DB参数文件,启动实例到nomount状态 在master1上执行

create pfile from spfile;

使用scp直接拷贝到master2的相关目录,或者在master2上直接编辑参数文件。

scp /u01/app/oracle/product/11.2.0/db_1/dbs/initmydb1.ora 192.168.1.2:/u01/app/oracle/product/11.2.0/db_1/dbs

如果有则删除掉这行*.local_listener='LISTENER_MYDB1' 4. 在master2上创建参数文件中的相关目录并修改所属

mkdir -p /u01/app/oracle/admin/mydb1
mkdir -p /u01/app/oracle/admin/mydb1/adump
mkdir -p /u01/app/oracle/oradata/mydb1
mkdir -p /u01/app/oracle/fast_recovery_area/
mkdir -p /u01/app/oracle/fast_recovery_area/mydb1

5. 在master2上启动实例到nomount状态

startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initmydb1.ora';
create spfile from pfile;

6. 创建密码文件,把master1上的orapwmydb1拷贝到master1的相应目录下

scp /u01/app/oracle/product/11.2.0/db_1/dbs/orapwmydb1 192.168.1.2:/u01/app/oracle/product/11.2.0/db_1/dbs

7. 配置网络 master1上: 修改listener.ora文件如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = mydb1)
    )         
  )
  
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

修改tnsnames.ora文件如下:

MYDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb1)
    )
  )

oradu =                 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb1)
    )
  )

master2上: 修改listener.ora文件如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = mydb1)
    )         
  )
  
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

修改tnsnames.ora文件如下:

MYDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb1)
    )
  )

oradu =                 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb1)
    )
  ) 

8. 在master1上启动复制

rman target sys/123456@mydb1 auxiliary sys/123456@oradu
RMAN> duplicate target database to mydb1 from active database nofilenamecheck;

9. 复制完成后,查看auxiliary DB上最后恢复到的最后SCN 在master2上查看alert log文件,查找RESETLOGS after incomplete recovery UNTIL CHANGE条目

vi /u01/app/oracle/diag/rdbms/mydb1/mydb1/trace/alert_mydb1.log
RESETLOGS after incomplete recovery UNTIL CHANGE 1474353

10. 重启auxiliary DB库 在master2上:

shutdown immediate;
create spfile from pfile;
startup;

11. 启动GoldenGate复制进程 在master2上:

-- 建立检查点表
start manager
DBLOGIN USERID ogg, PASSWORD 123456
# 源库上没有OGG的添加检查点表,所以目标库上要手工添加
ADD CHECKPOINTTABLE ogg.cpt
ADD REPLICAT rep, EXTTRAIL /home/oracle/ogg/dirdat/rt  
start replicat rep, aftercsn 1474353  

五、参考 Oracle GoldenGate Best Practices: Instantiation from an Oracle Source Database Oracle Rman duplicate数据库复制 Oracle11gR2使用RMAN duplicate复制数据库

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券