Oracle RAC集群是双机热备架构,可以实现主机层面的高可用自动切换,但其缺点就是只有一份共享存储文件,所以为了保证数据的安全性,在RAC的前提下增加dataguard主备数据冗余很有必要,下面方案是对源端是RAC集群架构,并且处于上线的生产库,不能停机的情况下如何配置RAC到单机的DG热备。
1 环境说明
源端Primary Database 是一个两节点的RAC,存储采用ASM 方式,具体如下图:
DG目标端配置规划:
2 主库设置为 force logging 模式(若已是归档模式,请忽略设置)
rac 节点1 执行
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES
3 修改主库为归档模式
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 30
Current log sequence 31
切换归档,将所有节点都必须处于 mount 状态。 在其中一个节点修改模式,然后在其他节点正常启动即可。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1269366784 bytes
Fixed Size 2252864 bytes
Variable Size 872419264 bytes
Database Buffers 385875968 bytes
Redo Buffers 8818688 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 30
Next log sequence to archive 31
Current log sequence 31
SQL> select name , open_mode, log_mode,force_logging from gv$database;
NAME OPEN_MODE LOG_MODE FOR
--------- -------------------- ------------ ---
LEO READ WRITE ARCHIVELOG YES
LEO READ WRITE ARCHIVELOG YES
SQL> show parameter db_recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +DATA
db_recovery_file_dest_size big integer 4407M
这里2 个节点的归档都指向了+DATA 这个磁盘组。 也可以指向其他的磁盘组或者本地的位置(在线直接设置),如:
SQL> alter system set log_archive_dest_1='location=/u01/leo1arch' sid='leo1';
SQL> alter system set log_archive_dest_1='location=/u01/leo2arch' sid='leo2';
4 主备库添加 standby Redo log 文件
RAC 每个 Redo Thread 都需要创建对应的 Standby Redo Log。 创建原则和单实例一样,包括日志 文件大小相等,日志组数量要多 1 组。
主库
SQL> set lines 120
SQL> col member for a50
SQL> select a.thread#,
a.group#,a.bytes/1024/1024,b.member
from v$log a,v$logfile b where a.group#=b.group#;
THREAD# GROUP# A.BYTES/1024/1024 MEMBER
---------- ---------- ----------------- --------------------------------------------------
1 2 50 +DATA/leo/onlinelog/group_2.277.943664411
1 2 50 +DATA/leo/onlinelog/group_2.278.943664413
1 1 50 +DATA/leo/onlinelog/group_1.275.943664407
1 1 50 +DATA/leo/onlinelog/group_1.276.943664409
2 3 50 +DATA/leo/onlinelog/group_3.281.943668673
2 3 50 +DATA/leo/onlinelog/group_3.282.943668675
2 4 50 +DATA/leo/onlinelog/group_4.283.943668677
2 4 50 +DATA/leo/onlinelog/group_4.284.943668679
8 rows selected.
–主库添加 standby redo log:
SQL> alter database add standby logfile thread 1 group 10 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 1 group 11 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 1 group 12 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 1 group 13 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 1 group 14 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 2 group 15 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 2 group 16 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 2 group 17 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 2 group 18 ('+DATA') size 50m;
Database altered.
SQL> alter database add standby logfile thread 2 group 19 ('+DATA') size 50m;
Database altered.
–验证:
SQL> select group#,type,member from v$logfile order by 2;
GROUP# TYPE MEMBER
---------- ------- --------------------------------------------------
2 ONLINE +DATA/leo/onlinelog/group_2.277.943664411
4 ONLINE +DATA/leo/onlinelog/group_4.284.943668679
4 ONLINE +DATA/leo/onlinelog/group_4.283.943668677
3 ONLINE +DATA/leo/onlinelog/group_3.282.943668675
3 ONLINE +DATA/leo/onlinelog/group_3.281.943668673
1 ONLINE +DATA/leo/onlinelog/group_1.276.943664409
1 ONLINE +DATA/leo/onlinelog/group_1.275.943664407
2 ONLINE +DATA/leo/onlinelog/group_2.278.943664413
18 STANDBY +DATA/leo/onlinelog/group_18.330.945089519
17 STANDBY +DATA/leo/onlinelog/group_17.329.945089515
16 STANDBY +DATA/leo/onlinelog/group_16.328.945089509
GROUP# TYPE MEMBER
---------- ------- --------------------------------------------------
15 STANDBY +DATA/leo/onlinelog/group_15.327.945089505
14 STANDBY +DATA/leo/onlinelog/group_14.294.944422059
13 STANDBY +DATA/leo/onlinelog/group_13.293.944422047
12 STANDBY +DATA/leo/onlinelog/group_12.292.944422039
11 STANDBY +DATA/leo/onlinelog/group_11.291.944422031
19 STANDBY +DATA/leo/onlinelog/group_19.331.945089523
10 STANDBY +DATA/leo/onlinelog/group_10.290.944422017
18 rows selected.
5 配置主备库的监听:listener.ora
用 net manager 工具,在备库创建一个监听。 也可以手动的修改 listener.ora 文件。
–对于 RAC 环境:
在 grid 用户的 listener.ora 文件中加入如下内容:
[grid@rac1 admin]$ cat listener.ora
listener.ora Network Configuration File:
/u01/app/11.2.0/grid/network/admin/listener.ora Generated by Oracle
configuration tools.
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = leo)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = leo1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
)
ADR_BASE_LISTENER = /u01/app/grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON
LISTENER_SCAN1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
)
ADR_BASE_LISTENER_SCAN1 = /u01/app/grid
节点 2,对应修改即可。
[grid@rac2 admin]$ cat listener.ora
listener.ora Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.ora
Generated by Oracle configuration tools.
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = leo)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = leo2)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
)
ADR_BASE_LISTENER = /u01/app/grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON
LISTENER_SCAN1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
)
ADR_BASE_LISTENER_SCAN1 = /u01/app/grid
–这里写的 Oracle 用户的 ORACLE_HOME,否则连接时会报错:
ORA-01031: insufficient privileges
然后重启监听。
注意在 oracle 11gR2 的 RAC 环境下,监听是在 grid 用户下配置的。所以这里可以用 grid 用户连接,
并修 改。 最后重启监听。
对于单实例,直接在 listener.ora 里添加:
[oracle@localhost admin]$ cat listener.ora
listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
6 配置主备库的 Net Server: tnsnames.ora
节点1,节点2,单实例 的 tnsnames.ora 文件是一致的,添加以下内容:
leo=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.63)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =leo)
)
)
orcl_st=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.65)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
配置完成后,使用 tnsping 命令效验:
[oracle@rac1 admin]$ tnsping orcl_st
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 29-MAY-2017 01:59:09
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.65)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (0 msec)
[oracle@localhost dbs]$ tnsping leo
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 29-MAY-2017 01:59:38
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.63)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =leo)))
OK (0 msec)
7 单实例创建相关目录
--FRA目录
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/orcl
--DATAFILE
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/oradata/orcl
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/admin/orcl/adump
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/admin/orcl/data
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/admin/orcl/redo
[oracle@rac2 ~]$ mkdir -p /u01/app/oracle/admin/orcl/tempfile
8 创建备库口令文件
[oracle@localhost dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@localhost dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwleo1 password=oracle
[oracle@localhost dbs]$ orapwd file=$ORACLE_HOME/dbs/orapwleo2 password=oracle
[oracle@localhost dbs]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle
或者把节点的口令文件copy 到备库(在哪个节点执行操作就在把那个节点的口令文件copy过去)
[oracle@rac1 dbs]$ scp orapwleo1 192.168.1.65:/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl
9 创建修改主备库的参数文件
–主库参数增加配置说明
db_file_name_convert 和 log_file_name_convert 仅当数据库被 standby 时才会生效,
这里配置,是 为切换做准备。 log_file_name_convert 指的是 online redo log。 在 Oracle
11g 已经废除了 fal_client 参数。 RAC 的 spfile 是放在共享设备上的,所以如果想创建,就需要先创建一份
pfile 到本地,在修改, 如果不想这么折腾,就直接使用 SQL 语句修改:
1)使用 ASM 作为存储时,datafile 和 tempfile 是分别放在两个目录下的,所以在Standby 上也单独创建一个tempdata目录。并在db_file_name_convert 中作相应的设置。
2)在使用ASM 的RAC中,注意不要改变db_unique_name的参数值;因为ASM 存放文件的规则,是按照
+diskgroup_name/data_unique_name/file/tag_name.file_member.incarnation 这样一个规则存放的, 但是第二项database_unique_name并不是db_name;如果改变了db_unique_name,则之后创建的数据文件
会放在新的目录下,会导致db_file_name_convert 的失效,这一点需要特别注意。
3)如果RAC中使用db_create_online_log_dest_n 系列参数,要相应调整stangby上的log_file_name_convert 参数。
alter system set db_unique_name='leo' scope=spfile sid='*';
alter system set log_archive_config='dg_config=(leo,orcl_st)' scope=spfile sid='*';
alter system set log_archive_dest_1='location=+FRA valid_for=(all_logfiles,all_roles) db_unique_name=leo' scope=spfile sid='*';
alter system set log_archive_dest_2='service=orcl_st valid_for=(online_logfiles,primary_role) db_unique_name=orcl_st' scope=spfile sid='*';
alter system set log_archive_dest_state_1=enable scope=spfile sid='*';
alter system set log_archive_dest_state_2=enable scope=spfile sid='*';
alter system set standby_file_management='auto' scope=spfile sid='*';
alter system set fal_server='orcl_st' scope=spfile sid='*';
alter system set db_file_name_convert='/u01/app/oracle/oradata/orcl/data','+DATA/leo/datafile','/u01/app/oracle/oradata/orcl/tempfile','+DATA/leo/tempfile' scope=spfile sid='*';
alter system set log_file_name_convert='/u01/app/oracle/oradata/orcl/redo','+DATA/leo/onlinelog' scope=spfile sid='*';
alter system set log_archive_format='%t_%s_%r.arch' scope=spfile sid='*';
–备库参数
–在主库创建pfile 文件并scp 到备库修改
主要指定一些pfile的路径,不要直接create pfile from spfile
create pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/tmp.ora' from spfile;
[oracle@rac1 dbs]$ scp tmp.ora 192.168.1.65:/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
[oracle@localhost dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@localhost dbs]$ cat initorcl.ora
orcl.__db_cache_size=436207616
orcl.__java_pool_size=16777216
orcl.__large_pool_size=33554432
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=520093696
orcl.__sga_target=754974720
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=251658240
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='leo'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=leoXDB)'
*.log_archive_dest_1='location=/u01/archive/'
*.memory_target=1048576000
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='exclusive'
*.undo_tablespace='UNDOTBS1'
–添加以下内容,对应修改上面的参数
*.service_names='orcl_st'
*.db_unique_name='orcl_st'
*.log_archive_config='dg_config=(leo,orcl_st)'
*.log_archive_dest_1='location=/u01/archive valid_for=(all_logfiles,all_roles) db_unique_name=orcl_st'
*.log_archive_dest_2='service=leo valid_for=(online_logfiles,primary_role) db_unique_name=leo'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_format=%t_%s_%r.arc
*.standby_file_management='auto'
*.fal_server='leo'
*.log_file_name_convert='+DATA/leo/onlinelog','/u01/app/oracle/oradata/orcl/redo'
*.db_file_name_convert='+DATA/leo/datafile','/u01/app/oracle/oradata/orcl/data','+DATA/leo/tempfile','/u01/app/oracle/oradata/orcl/tempfile'
10 将上述参数转换成spfile,并使用 spfile 将备库启动 nomount 状态并启动监听
[oracle@localhost ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-MAY-2017 10:31:13
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 28-MAY-2017 10:31:15
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@localhost dbs]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sun May 28 22:36:14 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> create spfile from pfile;
File created.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 1043886080 bytes
Fixed Size 2259840 bytes
Variable Size 654312576 bytes
Database Buffers 381681664 bytes
Redo Buffers 5632000 bytes
11 连接主数据库并开始进行 duplicate
[oracle@rac1 ~]$ rman target sys/oracle@leo auxiliary sys/oracle@orcl_st
Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 28 22:42:26 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: LEO (DBID=1717931218)
connected to auxiliary database: LEO (not mounted)
开始正式复制还原:
RMAN> duplicate target database for standby from active database dorecover;
Starting Duplicate Db at 2017:05:28 22:42:36
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=19 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/db_1/dbs/orapwleo2' auxiliary format
'/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' ;
}
executing Memory Script
Starting backup at 2017:05:28 22:42:37
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=53 instance=leo2 device type=DISK
Finished backup at 2017:05:28 22:42:38
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/orcl/control01.ctl';
restore clone controlfile to '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' from
'/u01/app/oracle/oradata/orcl/control01.ctl';
}
executing Memory Script
Starting backup at 2017:05:28 22:42:38
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_leo2.f tag=TAG20170528T224238 RECID=12 STAMP=945211363
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:04
Finished backup at 2017:05:28 22:42:45
Starting restore at 2017:05:28 22:42:45
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 2017:05:28 22:42:46
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/orcl/tempfile/temp.279.943664427";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/orcl/data/system.269.943664299";
set newname for datafile 2 to
"/u01/app/oracle/oradata/orcl/data/sysaux.270.943664299";
set newname for datafile 3 to
"/u01/app/oracle/oradata/orcl/data/undotbs1.271.943664301";
set newname for datafile 4 to
"/u01/app/oracle/oradata/orcl/data/users.272.943664301";
set newname for datafile 5 to
"/u01/app/oracle/oradata/orcl/data/undotbs2.280.943665551";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/orcl/data/system.269.943664299" datafile
2 auxiliary format
"/u01/app/oracle/oradata/orcl/data/sysaux.270.943664299" datafile
3 auxiliary format
"/u01/app/oracle/oradata/orcl/data/undotbs1.271.943664301" datafile
4 auxiliary format
"/u01/app/oracle/oradata/orcl/data/users.272.943664301" datafile
5 auxiliary format
"/u01/app/oracle/oradata/orcl/data/undotbs2.280.943665551" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/orcl/tempfile/temp.279.943664427 in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 2017:05:28 22:42:53
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=+DATA/leo/datafile/system.269.943664299
output file name=/u01/app/oracle/oradata/orcl/data/system.269.943664299 tag=TAG20170528T224253
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:46
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=+DATA/leo/datafile/sysaux.270.943664299
output file name=/u01/app/oracle/oradata/orcl/data/sysaux.270.943664299 tag=TAG20170528T224253
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=+DATA/leo/datafile/undotbs1.271.943664301
output file name=/u01/app/oracle/oradata/orcl/data/undotbs1.271.943664301 tag=TAG20170528T224253
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:08
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=+DATA/leo/datafile/undotbs2.280.943665551
output file name=/u01/app/oracle/oradata/orcl/data/undotbs2.280.943665551 tag=TAG20170528T224253
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=+DATA/leo/datafile/users.272.943664301
output file name=/u01/app/oracle/oradata/orcl/data/users.272.943664301 tag=TAG20170528T224253
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2017:05:28 22:44:36
sql statement: alter system archive log current
contents of Memory Script:
{
backup as copy reuse
archivelog like "+FRA/leo_pd/archivelog/2017_05_28/thread_2_seq_56.304.945211383" auxiliary format
"/u01/archive/2_56_943664406.arc" archivelog like
"+FRA/leo_pd/archivelog/2017_05_28/thread_1_seq_72.302.945199597" auxiliary format
"/u01/archive/1_72_943664406.arc" archivelog like
"+FRA/leo_pd/archivelog/2017_05_28/thread_2_seq_57.306.945211479" auxiliary format
"/u01/archive/2_57_943664406.arc" archivelog like
"+FRA/leo_pd/archivelog/2017_05_28/thread_1_seq_73.303.945211381" auxiliary format
"/u01/archive/1_73_943664406.arc" archivelog like
"+FRA/leo_pd/archivelog/2017_05_28/thread_1_seq_74.305.945211477" auxiliary format
"/u01/archive/1_74_943664406.arc" ;
catalog clone archivelog "/u01/archive/2_56_943664406.arc";
catalog clone archivelog "/u01/archive/1_72_943664406.arc";
catalog clone archivelog "/u01/archive/2_57_943664406.arc";
catalog clone archivelog "/u01/archive/1_73_943664406.arc";
catalog clone archivelog "/u01/archive/1_74_943664406.arc";
switch clone datafile all;
}
executing Memory Script
Starting backup at 2017:05:28 22:44:39
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log copy
input archived log thread=2 sequence=56 RECID=98 STAMP=945211394
output file name=/u01/archive/2_56_943664406.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=72 RECID=96 STAMP=945199602
output file name=/u01/archive/1_72_943664406.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting archived log copy
input archived log thread=2 sequence=57 RECID=100 STAMP=945211479
output file name=/u01/archive/2_57_943664406.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=73 RECID=97 STAMP=945211393
output file name=/u01/archive/1_73_943664406.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=74 RECID=99 STAMP=945211477
output file name=/u01/archive/1_74_943664406.arc RECID=0 STAMP=0
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:00
Finished backup at 2017:05:28 22:44:51
cataloged archived log
archived log file name=/u01/archive/2_56_943664406.arc RECID=1 STAMP=945211492
cataloged archived log
archived log file name=/u01/archive/1_72_943664406.arc RECID=2 STAMP=945211492
cataloged archived log
archived log file name=/u01/archive/2_57_943664406.arc RECID=3 STAMP=945211493
cataloged archived log
archived log file name=/u01/archive/1_73_943664406.arc RECID=4 STAMP=945211493
cataloged archived log
archived log file name=/u01/archive/1_74_943664406.arc RECID=5 STAMP=945211493
datafile 1 switched to datafile copy
input datafile copy RECID=12 STAMP=945211493 file name=/u01/app/oracle/oradata/orcl/data/system.269.943664299
datafile 2 switched to datafile copy
input datafile copy RECID=13 STAMP=945211493 file name=/u01/app/oracle/oradata/orcl/data/sysaux.270.943664299
datafile 3 switched to datafile copy
input datafile copy RECID=14 STAMP=945211493 file name=/u01/app/oracle/oradata/orcl/data/undotbs1.271.943664301
datafile 4 switched to datafile copy
input datafile copy RECID=15 STAMP=945211493 file name=/u01/app/oracle/oradata/orcl/data/users.272.943664301
datafile 5 switched to datafile copy
input datafile copy RECID=16 STAMP=945211493 file name=/u01/app/oracle/oradata/orcl/data/undotbs2.280.943665551
contents of Memory Script:
{
set until scn 2749620;
recover
standby
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 2017:05:28 22:44:53
using channel ORA_AUX_DISK_1
starting media recovery
archived log for thread 1 with sequence 73 is already on disk as file /u01/archive/1_73_943664406.arc
archived log for thread 1 with sequence 74 is already on disk as file /u01/archive/1_74_943664406.arc
archived log for thread 2 with sequence 56 is already on disk as file /u01/archive/2_56_943664406.arc
archived log for thread 2 with sequence 57 is already on disk as file /u01/archive/2_57_943664406.arc
archived log file name=/u01/archive/1_73_943664406.arc thread=1 sequence=73
archived log file name=/u01/archive/2_56_943664406.arc thread=2 sequence=56
archived log file name=/u01/archive/2_57_943664406.arc thread=2 sequence=57
archived log file name=/u01/archive/1_74_943664406.arc thread=1 sequence=74
media recovery complete, elapsed time: 00:00:00
Finished recover at 2017:05:28 22:44:56
Finished Duplicate Db at 2017:05:28 22:45:14
12 启动备库
–完成 duplicate 之后,备库就是 mount 状态:
```sql
SQL> select NAME,open_mode from v$database;
NAME OPEN_MODE
--------- --------------------
LEO MOUNTED
SQL> alter database open;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
13 启动 MRP 进程
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
14 验证同步
节点1 执行
SQL> create table leo2 as select * from dba_users;
Table created.
SQL> alter system switch logfile;
System altered.
节点2 执行
SQL> create table nancy as select * from dba_users;
Table created.
SQL> alter system switch logfile;
System altered.
--备库查询
SQL> select count(*) from leo2;
COUNT(*)
----------
31
SQL> select count(*) from nancy;
COUNT(*)
----------
31
SQL> select THREAD#,sequence#,applied from v$archived_log order by 1,2;
THREAD# SEQUENCE# APPLIED
---------- ---------- ---------
1 72 NO
1 73 YES
1 74 YES
2 56 YES
2 57 NO
至此,RAC集群到单机的dataguard搭建完成,更多实战资源请关注我们博客!
发表评论 取消回复