ITPub博客

首页 > 数据库 > Oracle > rman duplicate搭建第二个 dg

rman duplicate搭建第二个 dg

原创 Oracle 作者:zlingyi 时间:2015-04-16 14:37:31 0 删除 编辑
1、备库网络设置
cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 lrwltestdb  //删除lrwltestdb
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.21   lrwldb
192.168.0.28   lrwldbdg


2、 设置备库force_logging及数据库归档;
[oracle@lrwltestdb ~]$ sqlplus / as sysdba 
SQL> startup mount;
SQL> show parameter instance_name; 
SQL> alter database force logging;
SQL> select force_logging from v$database;
SQL> select name from v$archived_log;
SQL> alter database archivelog; 
SQL> archive log list;
SQL> alter database open;
SQL> alter system archive log current;  //使其产生归档目录,即/u01/app/oracle/flash_recovery_area/LRWLDBDG/archivelog


3、创建standby库密码文件并scp到备库;
主库中操作
SQL> exit
[oracle@lrwltestdb ~]$cd $ORACLE_HOME/dbs
[oracle@lrwltestdb dbs]$ orapwd file=orapwLRWLDB password=oracle force=y
[oracle@lrwltestdb dbs]$ ll
[oracle@lrwltestdb dbs]$ scp orapwLRWLDB 192.168.0.28:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwLRWLDBDG


备库中检查确认
[oracle@lrwltestdbst ~]$cd $ORACLE_HOME/dbs
[oracle@lrwltestdbst dbs]$ll


4、创建主库参数文件并做调整
主库中操作
SQL> ALTER SYSTEM SET log_archive_config='dg_config=(LRWLDB,LRWLDBST,LRWLDBDG)';
SQL> create pfile from spfile;
SQL> exit


[oracle@lrwltestdb dbs]$ cd $ORACLE_HOME/dbs
[oracle@lrwltestdb dbs]$ scp initLRWLDB.ora 192.168.0.28:$ORACLE_HOME/dbs/initLRWLDBDG.ora


5、主库修改参数后,第一备库也需要修改log_archive_config参数
SQL> ALTER SYSTEM SET log_archive_config='dg_config=(LRWLDBST,LRWLDB,LRWLDBDG)';


6、创建备库参数文件并作调整
[oracle@lrwltestdbst dbs]$ ll
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/oradata/LRWLDBDG
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/admin/LRWLDBDG/adump
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/flash_recovery_area/LRWLDBDG/
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/flash_recovery_area/LRWLDBDG/archivelog/
[oracle@lrwltestdbst dbs]$ vi initLRWLDB.ora  //添加如下内容
*.audit_file_dest='/u01/app/oracle/admin/LRWLDBDG/adump'   //LRWLDB修改为LRWLDBDG
*.control_files='/u01/app/oracle/oradata/LRWLDBDG/control01.ctl','/u01/app/oracle/flash_recovery_area/LRWLDBDG/control02.ctl'  //LRWLDB修改为LRWLDBDG
*.log_archive_config='dg_config=(LRWLDBDG,LRWLDB,LRWLDBST)';
DB_UNIQUE_NAME=LRWLDBDG
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/flash_recovery_area/LRWLDBDG/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=LRWLDBDG'
LOG_ARCHIVE_DEST_4='SERVICE=LRWLDB LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE DB_UNIQUE_NAME=LRWLDB'
DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/LRWLDB','/u01/app/oracle/oradata/LRWLDBDG'
LOG_FILE_NAME_CONVERT='/u01/app/oracle/flash_recovery_area/LRWLDB/archivelog','/u01/app/oracle/flash_recovery_area/LRWLDBDG/archivelog'
STANDBY_FILE_MANAGEMENT=AUTO


7、创建备库相应的目录和文件并复制主库数据库文件到备库上
备库中操作
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/diag/rdbms/lrwldb/LRWLDBDG/trace
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/diag/rdbms/lrwldb/LRWLDBDG/cdump
[oracle@lrwltestdbst dbs]$ mkdir -p /u01/app/oracle/diag/rdbms/lrwldb/LRWLDBDG/alert
SQL> create spfile from pfile;


8、创建监听程序并测试
主库中操作
[oracle@lrwltestdb dbs]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin
[oracle@lrwltestdb admin]$ vi tnsnames.ora              --添加
 
LRWLDBDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.28)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LRWLDBDG)
      (INSTANCE_NAME = LRWLDBDG)
    )
  )


备库中操作
[oracle@lrwltestdbst dbs]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin
[oracle@lrwltestdbst dbs]$ vi listener.ora  
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.28)(PORT = 1521))  //修改localhost为192.168.0.197
    )
  )


 //修改=LRWLDB为=LRWLDBDG
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=LRWLDBDG)
         (SID_NAME=LRWLDBDG)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
        (PRESPAWN_MAX=20)
        (PRESPAWN_LIST=
          (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
        )
       )
      )
[oracle@lrwltestdbst dbs]$ lsnrctl status
[oracle@lrwltestdbst dbs]$ lsnrctl stop
[oracle@lrwltestdbst dbs]$ lsnrctl start
[oracle@lrwltestdbst dbs]$ vi tnsnames.ora
LRWLDBDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.28)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LRWLDBDG)
      (INSTANCE_NAME = LRWLDBDG)
    )
  )


LRWLDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.21)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LRWLDB)
      (INSTANCE_NAME = LRWLDB)
    )
  )


备注:主备库都要执行以下的操作
[oracle@lrwltestdb admin]$ tnsping LRWLDB
[oracle@lrwltestdb admin]$ tnsping LRWLDBDG




9、在主端生成完全备份,包括归档日志与standby控制文件 
mkdir /u01/rman     --存放rman文件
run 
{
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/rman/%F';
ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT '/u01/rman/%U';
BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10 PLUS ARCHIVELOG FILESPERSET 20
DELETE ALL INPUT;
RELEASE CHANNEL CH1;
}
--将完全备份copy 到备机  
scp * 192.168.0.28:/u01/rman/


10、备库以pfile启动到nomount状态 
startup nomount;


11、主库使用RMAN的Duplicate创建dg,如果数据文件与重做日志文件目录相同,要添加 nofilenamecheck
rman target /
connect auxiliary sys/oracle@lrwldbdg
RMAN>  run{  
duplicate target database for standby nofilenamecheck dorecover;  
}


12、主库设置传输参数
LOG_ARCHIVE_DEST_4='SERVICE=LRWLDBDG LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=LRWLDBDG'
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_4='ENABLE';
查看主备库日志,等归档全部传输完毕
备库open;


13、测试
主库中操作
SQL> create table tab3(id int); 
SQL> insert into tab3 values(20000);
SQL> commit;
备库中检查确认:
SQL> select * from tab3;


主库中执行:
SQL> insert into tab3 values(166);
SQL> commit;
备库中检查确认:
SQL> select * from tab3;


14、主库和备库切换演练
主备切换
主切换到备,出现2个备库,可以任意提升一个为主库
SQL> select open_mode,database_role,protection_mode,switchover_status from v$database;
SQL> alter database commit to switchover to primary;  //把备切换为主
SQL> alter database commit to switchover to standby;  //把主切换到备


主库中操作
SQL> show parameter unique;
SQL> select open_mode,database_role,protection_mode,switchover_status from v$database;
SQL> alter database commit to switchover to standby with session shutdown; 
SQL> shutdown immediate
SQL> startup mount;
SQL> select open_mode,database_role,protection_mode,switchover_status from v$database;
SQL> alter database commit to switchover to primary;
SQL> select open_mode,database_role,protection_mode,switchover_status from v$database;
SQL> alter database open;


备库中操作
SQL> show parameter unique;
SQL> select open_mode,database_role,protection_mode,switchover_status from v$database;
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate;
SQL> startup

在生产操作这个文档的时候有个问题,第一次duplicate的时候由于沟通有误,文件没有完全归档完毕,第二次做的时候就一直报错,也没找到原因,且由于生产的文档里写了delete input all;删除了所有的归档文件导致之前的一个dg也没法应用,后来发现是由于备库已经有数据文件导致无法duplicate恢复,于是删除备库的数据文件,重新rman备份并duplicate,最后一看数据传送过来了,之前搞坏的 那个dg也同理重做了一个,还好没对生产造成什么影响。原本估计1-3个小时的工作搞了7个小时。下次得千万注意。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28686045/viewspace-1579947/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-12-22

  • 博文量
    76
  • 访问量
    117208