月度归档:2016年07月

Oracle 11g ADG SWITCHOVER 切换过程

--- 主库操作
alter system archive log current;
alter system checkpoint;
select switchover_status from v$database;
alter database commit to switchover to physical standby with session shutdown;
startup mount;
--- 备库操作
select switchover_status from v$database;
alter database commit to switchover to primary with session shutdown;
alter database open;
--- 切换后备库操作
alter database open;
alter database recover managed standby database using current logfile disconnect from session;

--- 下面为切换输出过程
sys@DBPOD> alter system archive log current;

System altered.

sys@DBPOD> alter system checkpoint;

System altered.

sys@DBPOD> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO STANDBY

sys@DBPOD> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
ERROR:
ORA-01034: ORACLE not available
Process ID: 13037
Session ID: 21 Serial number: 543



Database altered.

sys@DBPOD> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 13037
Session ID: 21 Serial number: 543


ERROR:
ORA-01034: ORACLE not available
Process ID: 13037
Session ID: 21 Serial number: 543

sys@DBPOD> exit 
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
[oracle@dbtest5 dbpod]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 22 14:52:13 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

idle> startup mount;
ORACLE instance started.

Total System Global Area 3290345472 bytes
Fixed Size                  2257720 bytes
Variable Size            2113932488 bytes
Database Buffers         1157627904 bytes
Redo Buffers               16527360 bytes
Database mounted.

sys@DBPOD> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

sys@DBPOD> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

Database altered.

sys@DBPOD> ALTER DATABASE OPEN;

Database altered.

sys@DBPOD> select status from v$instance;

STATUS
------------
OPEN

sys@DBPOD> select open_mode from V$DATABASE;

OPEN_MODE
--------------------
READ WRITE

idle> alter database open;

Database altered.

idle> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.

Oracle 11g ADG 配置[RMAN DUPLICATE]-补充篇

前一篇《Oracle 11g ADG 配置[RMAN DUPLICATE]》中,我们使用duplicate from active database的方式将主库在线恢备库。
在实际生产实施中,当源库(或主库)数据量很大例如10TB级别以上的时候,如果仍然使用duplicate from active database的方式将主库在线恢备库则已经不是最佳的选择了。
首先占用生产网络带宽,其次对源库的资源消耗及性能影响都很大,此时我们可以考虑使用其他方式将源库恢复到备库。
本篇只列出源库恢复到备库部分的其他可行的方法,其他步骤均和前一篇相同,不在赘述。

--- 1.创建物理备库【主库关闭拷贝到备库进行恢复】
--- 创建备库密码文件【可以直接将主库的密码文件拷贝到备库或者使用orapwd命令创建但要保证密码和主库相同】
$ scp /u01/app/oracle/product/11.2.0/db_1/dbs/orapwdbpod dbtest6:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwdbsdb

--- 主库创建备库控制文件并传输到备库
SQL> shutdown immediate
SQL> startup mount 
SQL> alter database create standby controlfile as '/home/oracle/dbsdb.ctl';
$ scp /home/oracle/dbsdb.ctl dbtest6:/u01/app/oracle/oradata/dbsdb/control01.ctl
$ scp /home/oracle/dbsdb.ctl dbtest6:/u01/app/oracle/fast_recovery_area/dbsdb/control02.ctl
--- 关闭主库
shutdown immediate
--- 将主库数据文件和redo文件传输到备库【注意修改文件名和路径】
scp /u01/app/oracle/oradata/dbpod/redo01.log            dbtest6:/u01/app/oracle/oradata/dbsdb/redo01.log
scp /u01/app/oracle/oradata/dbpod/redo02.log            dbtest6:/u01/app/oracle/oradata/dbsdb/redo02.log
scp /u01/app/oracle/oradata/dbpod/redo03.log            dbtest6:/u01/app/oracle/oradata/dbsdb/redo03.log
scp /u01/app/oracle/fast_recovery_area/dbpod/redo01.rdo dbtest6:/u01/app/oracle/fast_recovery_area/dbsdb/redo01.rdo
scp /u01/app/oracle/fast_recovery_area/dbpod/redo02.rdo dbtest6:/u01/app/oracle/fast_recovery_area/dbsdb/redo02.rdo
scp /u01/app/oracle/fast_recovery_area/dbpod/redo03.rdo dbtest6:/u01/app/oracle/fast_recovery_area/dbsdb/redo03.rdo
scp /u01/app/oracle/oradata/dbpod/sysaux01.dbf          dbtest6:/u01/app/oracle/oradata/dbsdb/sysaux01.dbf
scp /u01/app/oracle/oradata/dbpod/system01.dbf          dbtest6:/u01/app/oracle/oradata/dbsdb/system01.dbf
scp /u01/app/oracle/oradata/dbpod/temp01.dbf            dbtest6:/u01/app/oracle/oradata/dbsdb/temp01.dbf
scp /u01/app/oracle/oradata/dbpod/undotbs01.dbf         dbtest6:/u01/app/oracle/oradata/dbsdb/undotbs01.dbf
scp /u01/app/oracle/oradata/dbpod/users01.dbf           dbtest6:/u01/app/oracle/oradata/dbsdb/users01.dbf
--- 启动备库实时应用日志
SQL> startup
SQL> alter database recover managed standby database using current logfile disconnect from session;
--- 打开主库
SQL> startup
--- 主库关闭拷贝到备库进行恢复明显的缺点是涉及到业务停机,停机时间和拷贝主库的数据文件大小及网络带宽有关,此方式一般只在实验测试时使用。

--- 2.创建物理备库【使用主库的RMAN备份恢复备库】
--- 密码文件创建同上
--- 主库执行RMAN备份
[oracle@dbtest5 backup]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Jul 18 15:30:27 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: DBPOD (DBID=3530613280)
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/fast_recovery_area/backup/DB_POD_CF%F';
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/fast_recovery_area/backup/DB_POD_CF%F';
new RMAN configuration parameters are successfully stored
RMAN> backup database format '/u01/app/oracle/fast_recovery_area/backup/DB_POD_full_%U.bak' plus archivelog format '/u01/app/oracle/fast_recovery_area/backup/DB_POD_arc_%U.bak';
Starting backup at 21-JUL-16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=4 RECID=10 STAMP=917527508
input archived log thread=1 sequence=5 RECID=12 STAMP=917527508
input archived log thread=1 sequence=6 RECID=13 STAMP=917527508
input archived log thread=1 sequence=7 RECID=14 STAMP=917527508
input archived log thread=1 sequence=8 RECID=11 STAMP=917527508
input archived log thread=1 sequence=9 RECID=6 STAMP=917527361
input archived log thread=1 sequence=10 RECID=7 STAMP=917527363
input archived log thread=1 sequence=11 RECID=8 STAMP=917527419
input archived log thread=1 sequence=12 RECID=9 STAMP=917527420
input archived log thread=1 sequence=13 RECID=15 STAMP=917537272
input archived log thread=1 sequence=14 RECID=16 STAMP=917537339
input archived log thread=1 sequence=15 RECID=17 STAMP=917537454
input archived log thread=1 sequence=16 RECID=18 STAMP=917537467
input archived log thread=1 sequence=17 RECID=19 STAMP=917792505
input archived log thread=1 sequence=18 RECID=20 STAMP=917792508
input archived log thread=1 sequence=19 RECID=21 STAMP=917792572
input archived log thread=1 sequence=20 RECID=22 STAMP=917792590
input archived log thread=1 sequence=21 RECID=23 STAMP=917792740
input archived log thread=1 sequence=22 RECID=24 STAMP=917792752
input archived log thread=1 sequence=23 RECID=25 STAMP=917792858
channel ORA_DISK_1: starting piece 1 at 21-JUL-16
channel ORA_DISK_1: finished piece 1 at 21-JUL-16
piece handle=/u01/app/oracle/fast_recovery_area/backup/DB_POD_arc_0jrb8q2q_1_1.bak tag=TAG20160721T142738 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 21-JUL-16
Starting backup at 21-JUL-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/dbpod/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/dbpod/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/dbpod/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/dbpod/users01.dbf
channel ORA_DISK_1: starting piece 1 at 21-JUL-16
channel ORA_DISK_1: finished piece 1 at 21-JUL-16
piece handle=/u01/app/oracle/fast_recovery_area/backup/DB_POD_full_0krb8q2t_1_1.bak tag=TAG20160721T142741 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 21-JUL-16
channel ORA_DISK_1: finished piece 1 at 21-JUL-16
piece handle=/u01/app/oracle/fast_recovery_area/backup/DB_POD_full_0lrb8q34_1_1.bak tag=TAG20160721T142741 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 21-JUL-16
Starting backup at 21-JUL-16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=24 RECID=26 STAMP=917792870
channel ORA_DISK_1: starting piece 1 at 21-JUL-16
channel ORA_DISK_1: finished piece 1 at 21-JUL-16
piece handle=/u01/app/oracle/fast_recovery_area/backup/DB_POD_arc_0mrb8q36_1_1.bak tag=TAG20160721T142750 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 21-JUL-16
--- 将主库备份传到备库服务器并保证备份和主库保持相同的存放位置【方式1使用SCP方式2使用NFS方式3使用共享存储或文件系统ACFS/DBFS】
$ scp /u01/app/oracle/fast_recovery_area/backup/DB_POD_arc_0jrb8q2q_1_1.bak dbtest6:/u01/app/oracle/fast_recovery_area/backup/
$ scp /u01/app/oracle/fast_recovery_area/backup/DB_POD_full_0krb8q2t_1_1.bak dbtest6:/u01/app/oracle/fast_recovery_area/backup/
$ scp /u01/app/oracle/fast_recovery_area/backup/DB_POD_full_0lrb8q34_1_1.bak dbtest6:/u01/app/oracle/fast_recovery_area/backup/
$ scp /u01/app/oracle/fast_recovery_area/backup/DB_POD_arc_0mrb8q36_1_1.bak dbtest6:/u01/app/oracle/fast_recovery_area/backup/
--- 创建备库控制文件并传输到备库
SQL> alter database create standby controlfile as '/home/oracle/dbsdb.ctl';
$ scp /home/oracle/dbsdb.ctl dbtest6:/u01/app/oracle/oradata/dbsdb/control01.ctl
$ scp /home/oracle/dbsdb.ctl dbtest6:/u01/app/oracle/fast_recovery_area/dbsdb/control02.ctl
--- 启动备库到mount
SQL> startup mount
--- 备库执行恢复【这里rman执行restore时不用加set newname for datafile子句因为备库参数文件中已经设置了file_name_convert参数为保证不会出错也可以加上】
$ rman target /
RMAN> restore database;
RMAN> recover database;
--- 开启主库实时应用日志
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;

--- 3.创建物理备库【使用主库的RMAN备份duplicate恢复备库】
--- 密码文件创建同上
--- 主库执行RMAN备份同上
--- 主库创建备库控制文件并传输到备库同上【此步是否可以和下面1步合并直接将备库启动到nomount然后duplicate】
--- 启动备库到mount【此步是否可以和上面1步合并直接将备库启动到nomount然后duplicate】
SQL> startup mount
--- 使用主库备份duplicate恢复到备库
RMAN> rman target sys/oracle@dbpod auxiliary sys/oracle@dbsdb nocatalog
RMAN> duplicate target database for standby nofilenamecheck dorecover;---【此处加nofilenamecheck是为了告诉RMAN主备库数据文件目录结构一致dorecover指的是如果有增量备份则使用增量备份恢复】
--- 开启主库实时应用日志
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;

### 以上从3个方面列出了恢复物理备库的方法,从生产实践上来看方式1只适用于实验测试,方式2和3更常用,不涉及生产业务停机操作。