码迷,mamicode.com
首页 > 数据库 > 详细

Oracle 11G R2利用RMAN搭建DataGuard环境

时间:2016-02-19 14:36:10      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:rman dataguard

环境:

角色
机器名
操作系统
IP
备注
主库
db1
CentOS 5.11 x86_64192.168.2.241
安装Oracle,创建数据库
备库
db2
CentOS 5.11 x86_64
192.168.2.242
只安装Oracle

准备工作:

在db1的/etc/hosts里增加

127.0.0.1       db1

192.168.2.242    db2

在db2的/etc/hosts里增加

127.0.0.1       db2

192.168.2.241    db1



目录

  1. 主库打开归档及强制归档

  2. 创建3组standby redolog

  3. 修改参数文件

  4. 修改监听文件

  5. RMAN备份主库

  6. 复制文件至备库



1.主库打开归档及强制归档(db1)


检查Oracle是否开启归档

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     6
Current log sequence           8

#可以看到Automatic archival             Disabled说明未打开归档

打开归档(打开归档需要先关闭Oracle,然后将数据库启动至mount状态才能修改)

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;         #打开归档

SQL> alter database force logging;    #打开强制归档也可以在数据库open状态下打开

SQL> alter database open;                  #打开数据库

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     6
Next log sequence to archive   8
Current log sequence           8


2.创建多组standby redo log,最少需要多一组,standby redo log是使用Real Time Apply的必要条件

SQL> select group#,member from v$logfile;
    GROUP#        MEMBER
--------------------------------------------------------------------------------
         3                /opt/oracle/oradata/tpy100/redo03.log
         2                /opt/oracle/oradata/tpy100/redo02.log
         1                /opt/oracle/oradata/tpy100/redo01.log

SQL> alter database add standby logfile (‘/opt/oracle/oradata/tpy100/standby04.log‘) size 50m;
SQL> alter database add standby logfile (‘/opt/oracle/oradata/tpy100/standby05.log‘) size 50m;
SQL> alter database add standby logfile (‘/opt/oracle/oradata/tpy100/standby06.log‘) size 50m;
SQL> alter database add standby logfile (‘/opt/oracle/oradata/tpy100/standby07.log‘) size 50m;

SQL> select group#,member from v$logfile;
    GROUP#        MEMBER
--------------------------------------------------------------------------------
         3                /opt/oracle/oradata/tpy100/redo03.log
         2                /opt/oracle/oradata/tpy100/redo02.log
         1                /opt/oracle/oradata/tpy100/redo01.log

         4                /opt/oracle/oradata/tpy100/standby04.log
         5                /opt/oracle/oradata/tpy100/standby05.log
         6                /opt/oracle/oradata/tpy100/standby06.log

         7                /opt/oracle/oradata/tpy100/standby07.log


3.修改参数文件

修改参数文件前,我们先进行备份

SQL> create pfile=‘/tmp/tpy100.pfile‘ from spfile;

在修改前我们需要查看下备份的参数文件,根据具体环境更改下面语句

SQL> alter system set db_unique_name=db1 scope=spfile;
SQL> alter system set log_archive_config=‘dg_config=(db1,db2)‘ scope=both;
SQL> alter system set log_archive_dest_1= ‘location=/opt/oracle/flash_recovery_area/ valid_for=(all_logfiles,all_roles)  db_unique_name=db1‘ scope=both;
报错:
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16053: DB_UNIQUE_NAME db1 is not in the Data Guard Configuration

可能会遇上如下报错信息,这个时候需要重启下数据库

SQL> shutdown immediate;
SQL> startup

SQL> alter system set log_archive_dest_1= ‘location=/opt/oracle/flash_recovery_area/ valid_for=(all_logfiles,all_roles)  db_unique_name=db1‘ scope=both;
SQL> alter system set log_archive_dest_2= ‘service=db2 async  valid_for=(online_logfiles,primary_role)  db_unique_name=db2‘ scope=both;
SQL> alter system set log_archive_dest_state_1=enable scope=both;
SQL> alter system set log_archive_dest_state_2=enable scope=both;
SQL> alter system set standby_file_management=auto scope=both;
SQL> alter system set fal_server=db2 scope=both;
SQL> alter system set fal_client=db1 scope=both;
SQL> alter system set db_file_name_convert=‘/opt/oracle/flash_recovery_area‘,‘/opt/oracle/flash_recovery_area‘ scope=spfile;
SQL> alter system set log_file_name_convert=‘/opt/oracle/flash_recovery_area‘,‘/opt/oracle/flash_recovery_area‘ scope=spfile;


4.修改监听文件

[oracle@db1 ~]$ vim /opt/oracle/product/11.2.0/network/admin/tnsnames.ora
在后面增加

db1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db1)
    )
  )

db2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db2)
    )
  )


5.RMAN备份主库

创建备份存放目录

[oracle@db1 ~]$ mkdir -p /opt/oracle/dbackup

执行备份

rman>run{
allocate channel c1 type disk;
backup format ‘/opt/oracle/dbackup/tpy100_%T_%s_%p‘ database;
sql ‘alter system archive log current‘;
backup format ‘/opt/oracle/dbackup/archive_log_%T_%s_%p‘ archivelog all;
backup spfile format ‘/opt/oracle/dbackup/spfile_%u_%T.bak‘;
release channel c1;
}
rman>copy current controlfile for standby to ‘/opt/oracle/dbackup/standby.ctl‘;


6.复制文件至备库

[oracle@db1 ~]$ scp -r /opt/oracle/dbackup/ db2:/opt/oracle

[oracle@db1 ~]$ cd $ORACLE_HOME/dbs

[oracle@db1 dbs]$ scp -r orapwtpy100 db2:$ORACLE_HOME/dbs

[oracle@db1 dbs]$ cd $ORACLE_HOME/network/admin

[oracle@db1 admin]$ scp -r listener.ora tnsnames.ora db2:$ORACLE_HOME/network/admin


7.恢复参数文件(db2)

RMAN> set dbid 2926260986

RMAN> startup nomount;

#这里会报错不用理会即可

RMAN> restore spfile to pfile ‘/tmp/tpy100.pfile‘ from ‘/opt/oracle/dbackup/spfile_04quaekm_20160219.bak‘;

#我们将参数文件恢复至/tmp/tpy100.pfile,因为这个是主库的参数文件,备库略有不同

[oracle@db2 ~]$ vim /tmp/tpy100.pfile

#将里面的DB1 db1变成相应的DB2 db2,将DB1变成db1
tpy100.__db_cache_size=322961408
tpy100.__java_pool_size=4194304
tpy100.__large_pool_size=4194304
tpy100.__oracle_base=‘/opt/oracle‘#ORACLE_BASE set from environment
tpy100.__pga_aggregate_target=339738624
tpy100.__sga_target=503316480
tpy100.__shared_io_pool_size=0
tpy100.__shared_pool_size=159383552
tpy100.__streams_pool_size=0
*.audit_file_dest=‘/opt/oracle/admin/tpy100/adump‘
*.audit_trail=‘db‘
*.compatible=‘11.2.0.0.0‘
*.control_files=‘/opt/oracle/oradata/tpy100/control01.ctl‘,‘/opt/oracle/flash_recovery_area/tpy100/control02.ctl‘
*.db_block_size=8192
*.db_domain=‘‘
*.db_file_name_convert=‘/opt/oracle/flash_recovery_area‘,‘/opt/oracle/flash_recovery_area‘
*.db_name=‘tpy100‘
*.db_recovery_file_dest=‘/opt/oracle/flash_recovery_area‘
*.db_recovery_file_dest_size=4070572032
*.db_unique_name=‘DB2‘
*.diagnostic_dest=‘/opt/oracle‘
*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=tpy100XDB)‘
*.fal_client=‘DB2‘
*.fal_server=‘DB1‘

*.log_archive_config=‘dg_config=(db2,db1)‘
*.log_archive_dest_1=‘location=/opt/oracle/flash_recovery_area/ valid_for=(all_logfiles,all_roles)  db_unique_name=db2‘
*.log_archive_dest_2=‘service=db1 async  valid_for=(online_logfiles,primary_role)  db_unique_name=db1‘
*.log_archive_dest_state_1=‘ENABLE‘
*.log_archive_dest_state_2=‘ENABLE‘
*.log_file_name_convert=‘/opt/oracle/flash_recovery_area‘,‘/opt/oracle/flash_recovery_area‘
*.memory_target=843055104
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.standby_file_management=‘AUTO‘
*.undo_tablespace=‘UNDOTBS1‘


创建相应的目录,以便启动oracle

[oracle@db2 ~]$ mkdir -p /opt/oracle/admin/tpy100/adump
[oracle@db2 ~]$ mkdir -p /opt/oracle/oradata/tpy100
[oracle@db2 ~]$ mkdir -p /opt/oracle/flash_recovery_area/tpy100

[oracle@db2 ~]$ cp /opt/oracle/dbackup/standby.ctl /opt/oracle/oradata/tpy100/control01.ctl
[oracle@db2 ~]$ cp /opt/oracle/dbackup/standby.ctl /opt/oracle/flash_recovery_area/tpy100/control02.ctl


SQL> shutdown immediate;

SQL> startup nomount pfile=‘/tmp/tpy100.pfile‘

SQL> create spfile from pfile=‘/tmp/tpy100.pfile‘;

SQL> alter database mount;


RMAN> restore database;


SQL > alter database open read only;

SQL > alter database recover managed standby database using current logfile disconnect from session;


如果需要重启备库,则需要按如下命令进行重启

SQL> startup mount;
SQL> alter database open read only;

#在这里启动的时候如果出现

ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: ‘/opt/oracle/oradata/tpy100/system01.dbf‘

则是备库的监听未开启,使用lsnrctl start,启动监听,再打开数据库就不会报错了.


SQL> alter database recover managed standby database using current logfile disconnect from session;



测试有如下语句:
SQL> select sequence#,applied from v$archived_log;
SQL> select process,status from v$managed_standby;
SQL> select sequence# from v$log_history;



本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1743295

Oracle 11G R2利用RMAN搭建DataGuard环境

标签:rman dataguard

原文地址:http://fengwan.blog.51cto.com/508652/1743295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!