一. 项目背景RAC + DG 环境物理备库损坏,需要进行重建。使用duplicate target database for standby 方法进行重建可以减少主库的停机时间。 二. 删除原有物理备库1.删除主库配置(可选)
主库设置为MAXIMIZE PERFORMANCE模式 SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
移除主库下列参数 alter system reset LOG_ARCHIVE_CONFIG scope=spfile sid='*'; alter system reset DB_FILE_NAME_CONVERT scope=spfile sid='*'; alter system reset LOG_FILE_NAME_CONVERT scope=spfile sid='*'; alter system reset LOG_ARCHIVE_DEST_2 scope=spfile sid='*'; alter system reset LOG_ARCHIVE_DEST_STATE_2 scope=spfile sid='*'; alter system reset STANDBY_ARCHIVE_DEST scope=spfile sid='*'; alter system reset STANDBY_FILE_MANAGEMENT scope=spfile sid='*'; alter system reset FAL_SERVER scope=spfile sid='*'; alter system reset FAL_CLIENT scope=spfile sid='*';
移除主库standby redo alter database drop standby logfile group 7; alter database drop standby logfile group 8; alter database drop standby logfile group 9; alter database drop standby logfile group 10; alter database drop standby logfile group 11; alter database drop standby logfile group 12; alter database drop standby logfile group 13; alter database drop standby logfile group 14;
2.删除备库
关闭备库,并启动到mount状态 SQL> shutdown immediate SQL> startup mount 进入受限状态 SQL> alter system enable restricted session; 删除备库 SQL> drop database;
三.创建物理备库1.主库配置
确认主库为归档模式 SQL> select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG 确保logging force SQL> ALTER DATABASE FORCE LOGGING; 修改主库参数 alter system set log_archive_config='DG_CONFIG=(racdb12c,racdb12cdg)' scope=both sid='*'; alter system set LOG_ARCHIVE_DEST_2='SERVICE=racdb12cdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb12cdg' scope=both sid='*'; alter system set FAL_SERVER='racdb12cdg' scope=both sid='*'; alter system set FAL_CLIENT='racdb12c' scope=both sid='*'; alter system set DB_FILE_NAME_CONVERT='/oradata/racdb12cdg/datafilesys/', '+DGSYSTEM/racdb12c/', '/oradata/racdb12cdg/datafileuser/','+DGDATA1/racdb12c/', '/oradata/racdb12cdg/datafileuser/', '+DGDATA2/racdb12c/' scope=spfile sid='*'; alter system set LOG_FILE_NAME_CONVERT='/redofile/orilogfile/', '+DGSYSTEM/RACDB12C/', '/redofile/mirrlogfile/', '+DGDATA1/RACDB12C/', '/redofile/orilogfile/', '+DGDATA2/RACDB12C/' scope=spfile sid='*';
2.确保sql*net 连接性
在备库配置静态监听 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racdg)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = racdb12cdg) (ORACLE_HOME = /oracle/app/oracle/product/12.2.0.1/db_1) (SID_NAME = racdb12cdg) ) ) 主备库 TNSNAMES.ORA 配置 racdb12c = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb12c) ) ) racdb12cdg = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racdg)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb12cdg) ) ) 主备库验证连通性 tnsping racdb12c tnsping racdb12cdg
3.创建物理备库
(1).复制主库密码文件拷贝到备库 SQL> create or replace directory source_dir as '+DGSYSTEM/RACDB12C/PASSWORD/'; SQL> create or replace directory dest_dir as '/home/oracle'; begin dbms_file_transfer.copy_file( source_directory_object => 'source_dir', source_file_name => 'pwdracdb12c.267.960742987', destination_directory_object => 'dest_dir', destination_file_name => 'orapwracdb12cdg' ); end; /
(2).备库创建启动pfile *.DB_NAME='racdb12c' *.DB_UNIQUE_NAME='racdb12cdg'
(3).创建相关datafile 和 trace 文件的目录
(4).启动备库实例 % export ORACLE_SID=racdb12cdg % sqlplus "/ as sysdba" SQL> startup nomount pfile='$ORACLE_HOME/dbs/pfile.ora'
(5).备库进入RMAN $ rman target sys/<password>@racdb12c auxiliary sys/<password>@racdb12cdg
注意:避免发生报错,需要将主库$ORACLE_HOME/dbs 目录下的init.ora 等pfile全部删除。
运行下面脚本
RMAN> run {
2> allocate channel prmy1 type disk;
3> allocate channel prmy2 type disk;
4> allocate channel prmy3 type disk;
5> allocate channel prmy4 type disk;
6> allocate auxiliary channel stby type disk;
7>
8> duplicate target database for standby from active database
9> spfile
10> parameter_value_convert 'racdb12c','racdb12cdg'
11> set db_name='racdb12c'
12> set db_unique_name='racdb12cdg'
13> set cluster_database='false'
14> set db_file_name_convert='+DGSYSTEM/racdb12c/','/oradata/racdb12cdg/datafilesys/','+DGDATA1/racdb12c/','/oradata/racdb12cdg/datafileuser/','+DGDATA2/racdb12c/','/oradata/racdb12cdg/datafileuser/'
15> set log_file_name_convert='+DGSYSTEM/RACDB12C/','/redofile/orilogfile/','+DGDATA1/RACDB12C/','/redofile/mirrlogfile/','+DGDATA2/RACDB12C/','/redofile/orilogfile/'
16> set control_files='/oradata/racdb12cdg/controlfile/control01.ctl'
17> set log_archive_max_processes='5'
18> set fal_client='racdb12cdg'
19> set fal_server='racdb12c'
20> set standby_file_management='MANUAL'
21> set log_archive_config='DG_CONFIG=(racdb12c,racdb12cdg)'
22> set log_archive_dest_1='LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb12cdg'
23> set log_archive_dest_2='service=racdb12c ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=racdb12c'
24> set memory_target='1904M'
25> ;
26> }
using target database control file instead of recovery catalog
allocated channel: prmy1
channel prmy1: SID=105 instance=racdb12c1 device type=DISK
allocated channel: prmy2
channel prmy2: SID=112 instance=racdb12c2 device type=DISK
allocated channel: prmy3
channel prmy3: SID=115 instance=racdb12c1 device type=DISK
allocated channel: prmy4
channel prmy4: SID=93 instance=racdb12c1 device type=DISK
allocated channel: stby
channel stby: SID=15 device type=DISK
Starting Duplicate Db at 2020-10-15 13:29:17
contents of Memory Script:
{
backup as copy reuse
passwordfile auxiliary format '/oracle/app/oracle/product/12.2.0.1/db_1/dbs/orapwracdb12cdg' targetfile
'/oracle/app/oracle/product/12.2.0.1/db_1/dbs/spfileracdb12c2.ora' auxiliary format
'/oracle/app/oracle/product/12.2.0.1/db_1/dbs/spfileracdb12cdg.ora' ;
sql clone "alter system set spfile= ''/oracle/app/oracle/product/12.2.0.1/db_1/dbs/spfileracdb12cdg.ora''";
}
executing Memory Script
Starting backup at 2020-10-15 13:29:17
Finished backup at 2020-10-15 13:29:19
sql statement: alter system set spfile= ''/oracle/app/oracle/product/12.2.0.1/db_1/dbs/spfileracdb12cdg.ora''
contents of Memory Script:
{
sql clone "alter system set audit_file_dest =
''/oracle/app/oracle/admin/racdb12cdg/adump'' comment=
'''' scope=spfile";
sql clone "alter system set dispatchers =
''(PROTOCOL=TCP) (SERVICE=racdb12cdgXDB)'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_dest_1 =
''LOCATION=+DGRECOVER VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb12cdg'' comment=
'''' scope=spfile";
sql clone "alter system set db_name =
''racdb12c'' comment=
'''' scope=spfile";
sql clone "alter system set db_unique_name =
''racdb12cdg'' comment=
'''' scope=spfile";
sql clone "alter system set cluster_database =
false comment=
'''' scope=spfile";
sql clone "alter system set db_file_name_convert =
''+DGSYSTEM/racdb12c/'', ''/oradata/racdb12cdg/datafilesys/'', ''+DGDATA1/racdb12c/'', ''/oradata/racdb12cdg/datafileuser/'', ''+DGDATA2/racdb12c/'', ''/oradata/racdb12cdg/datafileuser/'' comment=
'''' scope=spfile";
sql clone "alter system set log_file_name_convert =
''+DGSYSTEM/RACDB12C/ONLINELOG/'', ''/redofile/orilogfile/'', ''+DGDATA1/RACDB12C/ONLINELOG/'', ''/redofile/mirrlogfile/'', ''+DGDATA2/RACDB12C/ONLINELOG/'', ''/redofile/orilogfile/'' comment=
'''' scope=spfile";
sql clone "alter system set control_files =
''/oradata/racdb12cdg/controlfile/control01.ctl'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_max_processes =
5 comment=
'''' scope=spfile";
sql clone "alter system set fal_client =
''racdb12cdg'' comment=
'''' scope=spfile";
sql clone "alter system set fal_server =
''racdb12c'' comment=
'''' scope=spfile";
sql clone "alter system set standby_file_management =
''MANUAL'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_config =
''DG_CONFIG=(racdb12c,racdb12cdg)'' comment=
'''' scope=spfile";
sql clone "alter system set log_archive_dest_2 =
''service=racdb12c ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=racdb12c'' comment=
'''' scope=spfile";
sql clone "alter system set memory_target =
2000M comment=
'''' scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set audit_file_dest = ''/oracle/app/oracle/admin/racdb12cdg/adump'' comment= '''' scope=spfile
sql statement: alter system set dispatchers = ''(PROTOCOL=TCP) (SERVICE=racdb12cdgXDB)'' comment= '''' scope=spfile
sql statement: alter system set log_archive_dest_1 = ''LOCATION=+DGRECOVER VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb12cdg'' comment= '''' scope=spfile
sql statement: alter system set db_name = ''racdb12c'' comment= '''' scope=spfile
sql statement: alter system set db_unique_name = ''racdb12cdg'' comment= '''' scope=spfile
sql statement: alter system set cluster_database = false comment= '''' scope=spfile
sql statement: alter system set db_file_name_convert = ''+DGSYSTEM/racdb12c/'', ''/oradata/racdb12cdg/datafilesys/'', ''+DGDATA1/racdb12c/'', ''/oradata/racdb12cdg/datafileuser/'', ''+DGDATA2/racdb12c/'', ''/oradata/racdb12cdg/datafileuser/'' comment= '''' scope=spfile
sql statement: alter system set log_file_name_convert = ''+DGSYSTEM/RACDB12C/ONLINELOG/'', ''/redofile/orilogfile/'', ''+DGDATA1/RACDB12C/ONLINELOG/'', ''/redofile/mirrlogfile/'', ''+DGDATA2/RACDB12C/ONLINELOG/'', ''/redofile/orilogfile/'' comment= '''' scope=spfile
sql statement: alter system set control_files = ''/oradata/racdb12cdg/controlfile/control01.ctl'' comment= '''' scope=spfile
sql statement: alter system set log_archive_max_processes = 5 comment= '''' scope=spfile
sql statement: alter system set fal_client = ''racdb12cdg'' comment= '''' scope=spfile
sql statement: alter system set fal_server = ''racdb12c'' comment= '''' scope=spfile
sql statement: alter system set standby_file_management = ''MANUAL'' comment= '''' scope=spfile
sql statement: alter system set log_archive_config = ''DG_CONFIG=(racdb12c,racdb12cdg)'' comment= '''' scope=spfile
sql statement: alter system set log_archive_dest_2 = ''service=racdb12c ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=racdb12c'' comment= '''' scope=spfile
sql statement: alter system set memory_target = 2000M comment= '''' scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 2097152000 bytes
Fixed Size 8622624 bytes
Variable Size 1728056800 bytes
Database Buffers 352321536 bytes
Redo Buffers 8151040 bytes
allocated channel: stby
channel stby: SID=1529 device type=DISK
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/oradata/racdb12cdg/controlfile/control01.ctl';
}
executing Memory Script
Starting backup at 2020-10-15 13:33:20
channel prmy1: starting datafile copy
copying standby control file
output file name=/oradata/racdb12cdg/controlfile/control01.ctl tag=TAG20201015T132333
channel prmy1: datafile copy complete, elapsed time: 00:00:36
Finished backup at 2020-10-15 13:34:10
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
"/oradata/racdb12cdg/datafilesys/tempfile/temp.274.960743057";
switch clone tempfile all;
set newname for datafile 1 to
"/oradata/racdb12cdg/datafilesys/datafile/system.271.960743017";
set newname for datafile 2 to
"/oradata/racdb12cdg/datafilesys/datafile/sysaux.272.960743041";
set newname for datafile 3 to
"/oradata/racdb12cdg/datafilesys/datafile/undotbs1.273.960743055";
set newname for datafile 4 to
"/oradata/racdb12cdg/datafilesys/datafile/undotbs2.275.960743081";
set newname for datafile 5 to
"/oradata/racdb12cdg/datafilesys/datafile/users.276.960743083";
set newname for datafile 6 to
"/oradata/racdb12cdg/datafileuser/datafile/ees_dat01.dbf";
set newname for datafile 7 to
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx01.dbf";
set newname for datafile 8 to
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx02.dbf";
set newname for datafile 9 to
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx03.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/oradata/racdb12cdg/datafilesys/datafile/system.271.960743017" datafile
2 auxiliary format
"/oradata/racdb12cdg/datafilesys/datafile/sysaux.272.960743041" datafile
3 auxiliary format
"/oradata/racdb12cdg/datafilesys/datafile/undotbs1.273.960743055" datafile
4 auxiliary format
"/oradata/racdb12cdg/datafilesys/datafile/undotbs2.275.960743081" datafile
5 auxiliary format
"/oradata/racdb12cdg/datafilesys/datafile/users.276.960743083" datafile
6 auxiliary format
"/oradata/racdb12cdg/datafileuser/datafile/ees_dat01.dbf" datafile
7 auxiliary format
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx01.dbf" datafile
8 auxiliary format
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx02.dbf" datafile
9 auxiliary format
"/oradata/racdb12cdg/datafileuser/datafile/ees_idx03.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /oradata/racdb12cdg/datafilesys/tempfile/temp.274.960743057 in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 2020-10-15 13:37:32
channel prmy1: starting datafile copy
input datafile file number=00006 name=+DGDATA1/RACDB12C/DATAFILE/ees_dat01.dbf
channel prmy2: starting datafile copy
input datafile file number=00007 name=+DGDATA2/RACDB12C/DATAFILE/ees_idx01.dbf
channel prmy3: starting datafile copy
input datafile file number=00002 name=+DGSYSTEM/RACDB12C/DATAFILE/sysaux.272.960743041
channel prmy4: starting datafile copy
input datafile file number=00001 name=+DGSYSTEM/RACDB12C/DATAFILE/system.271.960743017
output file name=/oradata/racdb12cdg/datafilesys/datafile/system.271.960743017 tag=TAG20201015T132745
channel prmy4: datafile copy complete, elapsed time: 00:14:33
channel prmy4: starting datafile copy
input datafile file number=00008 name=+DGDATA1/racdb12c/datafile/ees_idx02.dbf
output file name=/oradata/racdb12cdg/datafilesys/datafile/sysaux.272.960743041 tag=TAG20201015T132745
channel prmy3: datafile copy complete, elapsed time: 00:22:22
channel prmy3: starting datafile copy
input datafile file number=00009 name=+DGDATA1/racdb12c/datafile/ees_idx03.dbf
output file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx03.dbf tag=TAG20201015T132745
channel prmy3: datafile copy complete, elapsed time: 00:03:32
channel prmy3: starting datafile copy
input datafile file number=00003 name=+DGSYSTEM/RACDB12C/DATAFILE/undotbs1.273.960743055
output file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx02.dbf tag=TAG20201015T132745
channel prmy4: datafile copy complete, elapsed time: 00:11:55
channel prmy4: starting datafile copy
input datafile file number=00004 name=+DGSYSTEM/RACDB12C/DATAFILE/undotbs2.275.960743081
output file name=/oradata/racdb12cdg/datafilesys/datafile/undotbs1.273.960743055 tag=TAG20201015T132745
channel prmy3: datafile copy complete, elapsed time: 00:01:38
channel prmy3: starting datafile copy
input datafile file number=00005 name=+DGSYSTEM/RACDB12C/DATAFILE/users.276.960743083
output file name=/oradata/racdb12cdg/datafilesys/datafile/undotbs2.275.960743081 tag=TAG20201015T132745
channel prmy4: datafile copy complete, elapsed time: 00:01:32
output file name=/oradata/racdb12cdg/datafilesys/datafile/users.276.960743083 tag=TAG20201015T132745
channel prmy3: datafile copy complete, elapsed time: 00:01:05
output file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx01.dbf tag=TAG20201015T132745
channel prmy2: datafile copy complete, elapsed time: 00:35:16
output file name=/oradata/racdb12cdg/datafileuser/datafile/ees_dat01.dbf tag=TAG20201015T132745
channel prmy1: datafile copy complete, elapsed time: 00:40:17
Finished backup at 2020-10-15 14:18:42
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=1053872327 file name=/oradata/racdb12cdg/datafilesys/datafile/system.271.960743017
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=1053872327 file name=/oradata/racdb12cdg/datafilesys/datafile/sysaux.272.960743041
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=1053872327 file name=/oradata/racdb12cdg/datafilesys/datafile/undotbs1.273.960743055
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=1053872327 file name=/oradata/racdb12cdg/datafilesys/datafile/undotbs2.275.960743081
datafile 5 switched to datafile copy
input datafile copy RECID=5 STAMP=1053872327 file name=/oradata/racdb12cdg/datafilesys/datafile/users.276.960743083
datafile 6 switched to datafile copy
input datafile copy RECID=6 STAMP=1053872327 file name=/oradata/racdb12cdg/datafileuser/datafile/ees_dat01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=7 STAMP=1053872328 file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx01.dbf
datafile 8 switched to datafile copy
input datafile copy RECID=8 STAMP=1053872328 file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx02.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=9 STAMP=1053872328 file name=/oradata/racdb12cdg/datafileuser/datafile/ees_idx03.dbf
Finished Duplicate Db at 2020-10-15 14:18:58
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
released channel: stby
(6).重建standby log
alter database add standby logfile thread 1 group 11 ('/redofile/stdlogfile/stbredo1.log') size 50m;
alter database add standby logfile thread 1 group 12 ('/redofile/stdlogfile/stbredo2.log') size 50m;
alter database add standby logfile thread 1 group 13 ('/redofile/stdlogfile/stbredo3.log') size 50m;
alter database add standby logfile thread 1 group 14 ('/redofile/stdlogfile/stbredo4.log') size 50m;
alter database add standby logfile thread 2 group 15 ('/redofile/stdlogfile/stbredo5.log') size 50m;
alter database add standby logfile thread 2 group 16 ('/redofile/stdlogfile/stbredo6.log') size 50m;
alter database add standby logfile thread 2 group 17 ('/redofile/stdlogfile/stbredo7.log') size 50m;
alter database add standby logfile thread 2 group 18 ('/redofile/stdlogfile/stbredo8.log') size 50m;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 7;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 8;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 9;
ALTER DATABASE DROP STANDBY LOGFILE GROUP 10;
