Rman通过duplicate创建standby
1.试验环境
[oracle@gaojf orcl]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 6 08:54:45 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL>
2.确认主库处于归档模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/archive_log
Oldest online log sequence 69
Next log sequence to archive 71
Current log sequence 71
SQL>
3:创建备库instance
windows平台利用oradim工具创建一个新的instance,unix/linux平台设置新的ORACLE_SID即可,我的是linux平台,设置ORACLE_SID即可。
4:准备好备库的参数文件
本次试验在两个系统上建主备库,另外如果主备库都在一起的话,db_name设置为主库名,lock_name_space设置为备库名,同时要注意设置好DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT参数。
备库主要的几个参数如下:
db_name='dbsour'
db_unique_name='standby'
log_archive_config='dg_config=(primary,standby)'
log_archive_dest_1='location=/home/oracle/arch_log'
log_archive_dest_2='service=primary valid_for=(online_logfiles,primary_role) db_unique_name=standby'
fal_client='primary'
fal_server='standby'
log_archive_dest_state_1='enable'
log_archive_dest_state_2='enable'
standby_archive_dest='/home/oracle/standby_log'
standby_file_management='auto'
主库几个主要参数如下:
log_archive_config='DG_CONFIG=(PRIMARY,STANDBY)'
DB_UNIQUE_NAME='PRIMARY'
LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive_log'
log_archive_dest_2='SERVICE=STANDBY valid_for=(online_logfiles,primary_role) DB_UNIQUE_NAME=STANDBY'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT='arc%s%t%r.arc'
FAL_SERVER='primary'
FAL_CLIENT='standby'
STANDBY_FILE_MANAGEMENT='AUTO'
STANDBY_ARCHIVE_DEST='/home/oracle/standby_log'
5.在备库生成password file
[oracle@gaojfdbs]$Orapwd file= /opt/oracle/product/dbs password= entries
或者可以直接复制主库密码文件到备库相应的位置也可。
6.配置网络
配置主备库的listener.ora,tnsnames.ora。修改完lisner.ora后注意重启监听。
主库Listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /free/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.144)(PORT = 1521))
)
)
备库Listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /free/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.253)(PORT = 1521))
)
)
tnsnames.ora(主备库配置一样)
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.144)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = primary)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.60.253)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = standby)
)
)
7.利用rman备份主库
注意同时备库控制文件
[oracle@gaojf ~]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Thu Dec 7 10:10:02 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: ORCL (DBID=1132959697)
RMAN> backup full format='/opt/oracle/backup/FULL_%d_%T_%s' database include current controlfile for standby
plus archivelog format='/opt/oracle/backup/arch_%d_%T_%s';
Starting backup at 07-DEC-06
current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=159 devtype=DISK
skipping archive log file /opt/oracle/backup/arc2951605985194.arc; already backed up 1 time(s)
skipping archive log file /opt/oracle/backup/arc2961605985194.arc; already backed up 1 time(s)
skipping archive log file /opt/oracle/backup/arc2971605985194.arc; already backed up 1 time(s)
skipping archive log file /opt/oracle/backup/arc2981605985194.arc; already backed up 1 time(s)
8:复制 rman全备份到备库
利用操作系统命令scp,或者ftp bin方式复制rman全备份到备库。
由于我rman主库备份时设置备份文件位置为/opt/oracle/backup,因此必须把此备份文件也放到备库同样的位置。
9.启动备库到nomount
SQL> startup nomount
ORACLE instance started.
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
10.利用rman恢复备库
[oracle@localhost ~]$ rman target sys/oracle@primary auxiliary /
Recovery Manager: Release 10.2.0.1.0 - Production on Tue Mar 31 15:32:19 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: DBSOUR (DBID=1207697562)
connected to auxiliary database: DBSOUR (not mounted)
RMAN> duplicate target database for standby dorecover nofilenamecheck;
Starting Duplicate Db at 31-MAR-09
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK
contents of Memory Script:
{
set until scn 1217985;
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
executing Memory Script
executing command: SET until clause
Starting restore at 31-MAR-09
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /opt/oracle/backup/FULL_DBSOUR_20090331_35
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/opt/oracle/backup/FULL_DBSOUR_20090331_35 tag=TAG20090331T153600
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
output filename=/opt/oracle/oradata/orcl/control01.ctl
output filename=/opt/oracle/oradata/orcl/control02.ctl
output filename=/opt/oracle/oradata/orcl/control03.ctl
Finished restore at 31-MAR-09
11.将备库置于自动恢复状态
SQL> alter database recover managed standby database disconnect from session;
Database altered.
12.在主库上执行检查
SQL> conn /as sysdba
Connected.
SQL> select dest_name,status,error from v$archive_dest;
DEST_NAME STATUS ERROR
------------------------------ -------- ----------
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 VALID
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
LOG_ARCHIVE_DEST_6 INACTIVE
LOG_ARCHIVE_DEST_7 INACTIVE
LOG_ARCHIVE_DEST_8 INACTIVE
LOG_ARCHIVE_DEST_9 INACTIVE
LOG_ARCHIVE_DEST_10 INACTIVE
10 rows selected.
SQL> select * from v$archive_gap;
no rows selected
SQL> select sequence# from v$log_history;
SEQUENCE#
----------
1
2
...
321
13.在备库上执行检查
SQL> conn / as sysdba
Connected.
SQL> select * from v$archive_gap;
no rows selected
SQL> select sequence# from v$log_history;
SEQUENCE#
----------
1
2
...
321
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIE
---------- ------
320 YES
321 YES
SQL> select process,status from v$managed_standby;
PROCESS STATUS
------------------ ------------------------
ARCH CONNECTED
ARCH CONNECTED
RFS IDLE
MRP0 WAIT_FOR_LOG
至此,备库创建成功。
可以看到,使用rman的duplicate来创建备库,过程简洁了不少,无需在手动创建备库控制文件。
14.主备库正常切换测试
1.交换主备库的参数文件,并停止主库的监听器(备库的监听器不能停)
2. primary site
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate
startup nomount; #用备库的初始化参数启动。
alter database mount standby database;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
3.standby site
alter database commit to switchover to primary;
shutdown immediate;
startup #用拷贝过来的主库的初始化参数修改。