Oracle通过rman方式搭建DG

环境描述

操作系统:RHEL Linux 7.4(64位)
数据库版本:Oracle 11g R2 11.2.0.4 (64位)单实例
存储方式:文件系统
主数据库和备数据库目录一致(安装路径都在/u01/app/oracle下)、SID相同
主库IP地址:20.4.1.81
备库IP地址:20.4.1.79

一、环境配置

1、配置主备库tnsname.ora文件

在主库上编辑tnsname.ora文件,然后拷贝到备库上。
[oracle@pri ~]$ cat /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.81)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
 
#连接到主库的tns
ORCL_PRI =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.81)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
 
#连接到备库的tns
ORCL_STD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 20.4.1.79)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

配置好之后,将该tnsname.ora拷贝的standby备库上。

验证一下tnsping,和使用sqlplus登陆一下,连接是通的
[oracle@pri ~]$ tnsping orcl_pri
[oracle@pri ~]$ tnsping orcl_std

2、配置主备库的listener.ora文件(如果不做switch over就不需要做)

在备库添加SID_LIST_LISTENER内容:
SID_LIST_LISTENER = 
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl_pri)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
  )
添加这个的时候,需要注意的是SID_LIST_LISTENER必须定格写,不然会报错。

在备库的时候也需要添加如下内容:
SID_LIST_LISTENER = 
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl_std)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)
    )
  )

3、主数据库改为强制日志模式并开启归档

将主数据库改为强制日志模式(此步骤只在主库上做)
SQL> alter database force logging;

创建归档日志目录并赋权限
mkdir /u01/app/arch
chown oracle:oinstall /u01/app/arch
SQL> alter system set log_archive_dest_1='location=/u01/app/arch/' scope=spfile;

修改主库为归档模式:
SQL> archive log list;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;

4、创建密码文件(此步骤只在主库上做)

注意:两端分别创建自己的密码文件好像有问题,备库的密码文件需要跟主库一致, 否则导致日志传输不到备库,有待验证。我最后是将主库的密码文件直接copy 到备库,重命名后使用。
[oracle@pri ~]$ cd $ORACLE_HOME/dbs
[oracle@pri dbs]$ orapwd file=orapwpri password=OraAdmin_HisDB force=y
#这条命令可以手动生成密码文件,force=y 的意思是强制覆盖当前已有的密码文件,给主库添加密码文件,如果主库的密码文件没有的话,需要这样添加。

将主库的密码文件copy 给备库,并重命名:
[oracle@pri dbs]$ scp orapworcl 10.6.1.220:$ORACLE_HOME/dbs/orapworcl

5、主备库参数文件修改

(1)在主库创建 pfile 文件并修改 pfile内容
SQL> create pfile from spfile;
修改主库参数文件
$ cd $ORACLE_HOME/dbs
$ vi initpri.ora
--------------------------------
#添加一下内容
*.db_unique_name=orcl_pri
*.log_archive_config='dg_config=(orcl_pri,orcl_std)'
*.log_archive_dest_1='location=/u01/app/arch valid_for=(all_logfiles,all_roles) db_unique_name=orcl_pri'
*.log_archive_dest_2='service=orcl_std ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=orcl_std' 
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=30
*.fal_server='orcl_std' 
*.fal_client='orcl_pri'
*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
*.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
*.log_archive_format='%t_%s_%r.dbf'
*.standby_file_management='auto'

(2)在备库端,修改pfile 参数文件(只在备库端做)
将主库导出的参数文件传到备库,然后在备库端进行修改:
$ scp initorcl.ora 10.6.1.220:$ORACLE_HOME/dbs/initstd.ora
$ cd $ORACLE_HOME/dbs
$ cd $ORACLE_HOME/dbs
$ vi initstd.ora
---------------------------------
#添加一下内容
*.db_unique_name=orcl_std
*.log_archive_config='dg_config=(orcl_pri,orcl_std)'
*.log_archive_dest_1='location=/u01/app/arch valid_for=(all_logfiles,all_roles) db_unique_name=orcl_std'
*.log_archive_dest_2='service=orcl_pri ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=orcl_pri'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=30
*.fal_server='orcl_pri'
*.fal_client='orcl_std'
*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
*.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
*.log_archive_format='%t_%s_%r.dbf'
*.standby_file_management='auto'

6、在备库上补建参数文件中的相关文件夹

因为我们的备库没有创建实例,所以是没有相关的目录的,我们需要参考主库的位置来创建。
将主库oracle目录下的admin,cfgtollogs,diag,flash_recover_area目录拷贝到备用库的相同路径,备库已经有的文件和文件夹直接覆盖掉吧。
归档日志文件存放目录:/u01/app/arch
审计文件目录:/u01/app/oracle/admin/orcl/adump
数据文件目录:/u01/app/oracle/oradata

--FRA目录
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
--DATAFILE
mkdir -p /u01/app/oracle/oradata/orcl
--adump
mkdir -p /u01/app/oracle/admin/orcl/adump
--归档日志
mkdir -p /u01/app/arch/

7、使用新参数文件建立主备库实例

SQL> startup nomount pfile='$ORACLE_HOME/dbs/initorcl.ora';
SQL> create spfile from pfile='$ORACLE_HOME/dbs/initorcl.ora'; 
或者: SQL> create spfile from pfile;
SQL> shutdown immediate;
主库启动
SQL> startup;
备库启动到nomount
SQL> startup nomount;

二、数据同步

1、在主库备份数据文件

RMAN> backup database format='/backup/data_%d_%s.dbf';
并将备份文件拷贝到备库相同的目录/backup下
scp /backup/data* oracle@10.6.1.220:/backup

2、在主库备份控制文件

RMAN> backup current controlfile for standby format '/backup/control_%T_%s.bak';
拷贝备份文件在备库恢复控制文件
scp /backup/control_* oracle@10.6.1.220:/backup

3、在备库恢复控制文件,启动到mount

备库启动到nomount状态,开始恢复控制文件
SQL> startup nomount;
RMAN> restore standby controlfile from '/backup/control_%T_%s.bak';

#将备库启动到mount状态下
SQL> alter database mount standby database;

4、在备库利用rman恢复出备用库

rman target /
RMAN> catalog start with '/backup';  
RMAN> restore database;
RMAN> recover database;

5、由于从Primary数据库复制文件时并没有复制Online Redologs,因此需将主库的重做日志文件redo.log联机状态拷至备库

SYS@pri> select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
3 /u01/app/oracle/oradata/orcl/redo03.log
2 /u01/app/oracle/oradata/orcl/redo02.log
1 /u01/app/oracle/oradata/orcl/redo01.log 

6、在备库需手动创建备库重做日志

SQL> select group#,sequence#,status, bytes/1024/1024 from v$standby_log;
创建备库重做日志:
alter database add standby logfile group 11 ('/u01/app/oracle/oradata/orcl/redo11_std.log') size 500M;
alter database add standby logfile group 12 ('/u01/app/oracle/oradata/orcl/redo12_std.log') size 500M;
alter database add standby logfile group 13 ('/u01/app/oracle/oradata/orcl/redo13_std.log') size 500M;
alter database add standby logfile group 14 ('/u01/app/oracle/oradata/orcl/redo14_std.log') size 500M;

如果已经存在,则先删除在重建,否则报错:ORA-19527: physical standby redo log must be renamed。
SQL> alter database drop logfile group 11;
SQL> alter database drop logfile group 12;
SQL> alter database drop logfile group 13;
SQL> alter database drop logfile group 14;

7、将备库启动至日志应用模式下

SQL> alter database recover managed standby database disconnect from session;

# 查看应用状态,并在主库切换日志,查看序列变化
select max(sequence#),applied,archived from v$archived_log group by applied,archived;

开启物理备库的实时redo应用:
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> alter database recover managed standby database using current logfile disconnect from session;

# 启动后台实施应用日志
SQL> alter database recover managed standby database cancel;
SQL> alter database recover managed standby database disconnect from session using current logfile;

8、主备库配置归档日志删除策略

#主库
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
这里有个警告, 解决方法,执行如下命令:
SQL> alter system set "_log_deletion_policy"=ALL scope=spfile sid='*';
#备库
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容