RAC环境创建STANDBY数据库.docx
《RAC环境创建STANDBY数据库.docx》由会员分享,可在线阅读,更多相关《RAC环境创建STANDBY数据库.docx(46页珍藏版)》请在冰豆网上搜索。
![RAC环境创建STANDBY数据库.docx](https://file1.bdocx.com/fileroot1/2023-4/20/cac0ca99-28e3-40e7-985c-450a4fad5c09/cac0ca99-28e3-40e7-985c-450a4fad5c091.gif)
RAC环境创建STANDBY数据库
这篇文章描述为RAC环境创建STANDBY数据库。
由于篇幅限制,加上碰到了很多的bug,只能将文章拆分成多篇。
这章介绍STANDBY数据库的准备和创建过程。
STANDBY数据库同样是RAC环境,不过和主数据库采用VOLUMNCLUSTERMANAGER不同,STANDBY数据库采用ASM。
在源数据库中设置FORCE_LOGGING和相应的初始化参数:
SQL>SELECTDBID,NAME,LOG_MODE,FORCE_LOGGINGFROMV$DATABASE;
DBIDNAMELOG_MODEFOR
----------------------------------
1712482917RAC11GARCHIVELOGNO
SQL>ALTERDATABASEFORCELOGGING;
数据库已更改。
SQL>ALTERSYSTEMSETLOG_ARCHIVE_CONFIG='DG_CONFIG=(rac11g,rac11g_s)';
系统已更改。
SQL>ALTERSYSTEMSETLOG_ARCHIVE_DEST_1=
2'LOCATION=/data/oracle/oradata/rac11g/archivelog/VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=rac11g';
系统已更改。
SQL>ALTERSYSTEMSETLOG_ARCHIVE_DEST_2='SERVICE=rac11g_sLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=rac11g_s';
系统已更改。
SQL>ALTERSYSTEMSETFAL_SERVER=rac11g_s;
系统已更改。
SQL>ALTERSYSTEMSETFAL_CLIENT=rac11g;
系统已更改。
SQL>ALTERSYSTEMSETSTANDBY_FILE_MANAGEMENT=AUTO;
系统已更改。
手工在源数据库的两个节点分别添加访问STANDBY数据库的服务名,以及在STANDBY数据库恢复过程中临时使用的服务名:
RAC11G_S=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.68)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.69)(PORT=1521))
(LOAD_BALANCE=yes)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=rac11g_)
)
)
RAC11G1_S=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.62)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SID=rac11g1)
)
)
同样,在STANDBY数据库的TNSNAMES.ORA中也要添加STANDBY和PRIMARY数据库的服务名。
STANDBY数据库的Oraclerac环境已经建立,ASM也已经启动,数据库版本时11g,本打算采用FROMACTIVEDATABASE方式创建STANDBY,但是这种方式对于源数据库为裸设备,目标数据库使用ASM的情况存在很多的bug,所以仍然使用备份恢复的方法。
首先检查当前环境:
$env|grepORA
ORACLE_BASE=/data/oracle
ORACLE_HOME=/data/oracle/product/11.1/database
ORACLE_SID=rac11g1
编辑初始化参数,创建spfile,启动AUXILIARY实例:
rac11g1.__db_cache_size=137********
rac11g2.__db_cache_size=136********
rac11g2.__java_pool_size=67108864
rac11g1.__java_pool_size=134217728
rac11g2.__large_pool_size=67108864
rac11g1.__large_pool_size=67108864
rac11g1.__oracle_base='/data/oracle'#ORACLE_BASEsetfromenvironment
rac11g2.__oracle_base='/data/oracle'#ORACLE_BASEsetfromenvironment
rac11g2.__pga_aggregate_target=2147483648
rac11g1.__pga_aggregate_target=2147483648
rac11g2.__sga_target=150********
rac11g1.__sga_target=150********
rac11g2.__shared_io_pool_size=0
rac11g1.__shared_io_pool_size=0
rac11g1.__shared_pool_size=1006632960
rac11g2.__shared_pool_size=1207959552
rac11g2.__streams_pool_size=0
rac11g1.__streams_pool_size=0
*.audit_file_dest='/data/oracle/admin/rac11g/adump'
*.audit_trail='db'
*.cluster_database_instances=2
*.cluster_database=true
*.compatible='11.1.0.0.0'
*.control_files='+DATA/RAC11G/rac11g_control_1','+DATA/RAC11G/rac11g_control_2','+DATA/RAC11G/rac11g_control_3'
*.db_block_size=16384
*.db_domain=''
*.db_name='rac11g'
*.diagnostic_dest='/data/oracle'
*.dispatchers='(PROTOCOL=TCP)(SERVICE=rac11gXDB)'
fal_client='RAC11G_S'
fal_server='RAC11G'
log_archive_dest_1='LOCATION=+DATA/RAC11GVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=rac11g_s'
log_archive_dest_2='SERVICE=rac11gLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=rac11g'
db_unique_name='rac11g_s'
rac11g2.instance_number=2
rac11g1.instance_number=1
rac11g1.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.62)(PORT=1521))'
rac11g2.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.63)(PORT=1521))'
*.log_archive_config='DG_CONFIG=(rac11g,rac11g_s)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=17179869184
*.open_cursors=300
*.pga_aggregate_target=2147483648
*.processes=600
*.remote_listener='LISTENERS_RAC11G'
*.remote_login_passwordfile='exclusive'
*.sessions=600
rac11g1.sga_target=150********
*.sga_target=150********
rac11g2.sga_target=150********
*.standby_file_management='AUTO'
rac11g2.thread=2
rac11g1.thread=1
rac11g2.undo_tablespace='UNDOTBS2'
rac11g1.undo_tablespace='UNDOTBS1'
db_file_name_convert=('/dev/vx/rdsk/datavg','+DATA/RAC11G')
log_file_name_convert=('/dev/vx/rdsk/datavg','+DATA/RAC11G')
下面通过这个初始化参数启动实例:
bash-3.00$sqlplus"/assysdba"
SQL*Plus:
Release11.1.0.6.0-Productionon星期二9月918:
29:
342008
Copyright(c)1982,2007,Oracle.Allrightsreserved.
已连接到空闲例程。
SQL>createspfilefrompfile='/data/initrac11g.ora';
文件已创建。
SQL>startupnomount
ORACLE例程已经启动。
TotalSystemGlobalArea1.7108E+10bytes
FixedSize2101632bytes
VariableSize3344420480bytes
DatabaseBuffers1.3757E+10bytes
RedoBuffers4431872bytes
SQL>exit从OracleDatabase11gEnterpriseEditionRelease11.1.0.6.0-64bitProduction
WiththePartitioning,RealApplicationClusters,OLAP,DataMining
andRealApplicationTestingoptions断开
和DUPLICATERAC环境一样的问题,由于本地备份集是存放在ASM中,因此只能通过CATALOG方式,手工修改CATALOG中BACKUPPIECE的HANDLE记录,将其改为目标数据库上ASM中备份集的全路径:
SQL>conncatalog_user/catalog_user已连接。
SQL>colhandleformata60
SQL>selectbp_key,handlefromrc_backup_piece;
BP_KEYHANDLE
----------------------------------------------------------------------
1475/data/01jpk0bj_1_1
SQL>updaterc_backup_piecesethandle='+DATA/backup/01jpk0bj_1_1'
2wherebp_key=1475;
已更新1行。
SQL>commit;
提交完成。
确保源数据库的归档日志,在STANDBY数据库中的相同目录下可以被访问,然后通过RMAN来执行DUPLICATE命令:
bash-3.00$rmantargetsys/test@172.0.2.54/catalogcatalog_user/catalog_user@172.0.2.61/dbauxiliary/
RecoveryManager:
Release11.1.0.6.0-ProductiononWedSep1010:
02:
152008
Copyright(c)1982,2007,Oracle.Allrightsreserved.
connectedtotargetdatabase:
RAC11G(DBID=1712482917)
connectedtorecoverycatalogdatabase
connectedtoauxiliarydatabase:
RAC11G(notmounted)
RMAN>duplicatetargetdatabaseforstandby
2>dorecover;
StartingDuplicateDbat10-SEP-08
allocatedchannel:
ORA_AUX_DISK_1
channelORA_AUX_DISK_1:
SID=660instance=rac11g1devicetype=DISK
contentsofMemoryScript:
{
setuntilscn29148537;
restoreclonestandbycontrolfile;
sqlclone'alterdatabasemountstandbydatabase';
}
executingMemoryScript
executingcommand:
SETuntilclause
Startingrestoreat10-SEP-08
usingchannelORA_AUX_DISK_1
channelORA_AUX_DISK_1:
restoringcontrolfile
ORA-19625:
erroridentifyingfile/data/oracle/product/11.1/database/dbs/snapcf_rac11g1.f
ORA-27037:
unabletoobtainfilestatus
SVR4Error:
2:
Nosuchfileordirectory
Additionalinformation:
3
ORA-19600:
inputfileiscontrolfile(/data/oracle/product/11.1/database/dbs/snapcf_rac11g1.f)
ORA-19601:
outputfileiscontrolfile(+DATA/rac11g/rac11g_control_1)
failovertopreviousbackup
channelORA_AUX_DISK_1:
startingdatafilebackupsetrestore
channelORA_AUX_DISK_1:
restoringcontrolfile
channelORA_AUX_DISK_1:
readingfrombackuppiece+DATA/backup/01jpk0bj_1_1
channelORA_AUX_DISK_1:
piecehandle=+DATA/backup/01jpk0bj_1_1tag=TAG20080902T204539
channelORA_AUX_DISK_1:
restoredbackuppiece1
channelORA_AUX_DISK_1:
restorecomplete,elapsedtime:
00:
00:
03
outputfilename=+DATA/rac11g/rac11g_control_1
outputfilename=+DATA/rac11g/rac11g_control_2
outputfilename=+DATA/rac11g/rac11g_control_3
Finishedrestoreat10-SEP-08
sqlstatement:
alterdatabasemountstandbydatabase
contentsofMemoryScript:
{
setuntilscn29148537;
setnewnamefortempfile1to
"+DATA/rac11g/rac11g_temp_1_4g";
setnewnamefortempfile2to
"+DATA/rac11g/rac11g_temp_2_16g";
switchclonetempfileall;
setnewnamefordatafile1to
"+DATA/rac11g/rac11g_system_1_1g";
setnewnamefordatafile2to
"+DATA/rac11g/rac11g_sysaux_1_1g";
setnewnamefordatafile3to
"+DATA/rac11g/rac11g_undotbs1_1_4g";
setnewnamefordatafile4to
"+DATA/rac11g/rac11g_undotbs2_1_4g";
setnewnamefordatafile5to
"+DATA/rac11g/rac11g_users_1_4g";
setnewnamefordatafile6to
"+DATA/rac11g/rac11g_ndmain_1_32g";
setnewnamefordatafile7to
"+DATA/rac11g/rac11g_ndmain_2_32g";
setnewnamefordatafile8to
"+DATA/rac11g/rac11g_ndmain_3_32g";
setnewnamefordatafile9to
"+DATA/rac11g/rac11g_ndmain_4_32g";
setnewnamefordatafile10to
"+DATA/rac11g/rac11g_ndmain_5_32g";
setnewnamefordatafile11to
"+DATA/rac11g/rac11g_ndmain_6_32g";
setnewnamefordatafile12to
"+DATA/rac11g/rac11g_undotbs1_2_32g";
setnewnamefordatafile13to
"+DATA/rac11g/rac11g_undotbs2_2_32g";
setnewnamefordatafile14to
"+DATA/rac11g/rac11g_perfstat_1_8g";
restore
clonedatabase
;
}
executingMemoryScript
executingcommand:
SETuntilclause
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
renamedtempfile1to+DATA/rac11g/rac11g_temp_1_4gincontrolfile
renamedtempfile2to+DATA/rac11g/rac11g_temp_2_16gincontrolfile
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
executingcommand:
SETNEWNAME
Startingrestoreat10-SEP-08
usingchannelORA_AUX_DISK_1
channelORA_AUX_DISK_1:
startingdatafilebackupsetrestore
channelORA_AUX_DISK_1:
specifyingdatafile(s)torestorefrombackupset
channelORA_AUX_DISK_1:
restoringdatafile00001to+DATA/rac11g/rac11g_system_1_1g
channelORA_AUX_DISK_1:
restoringdatafile00002to+DATA/rac11g/rac11g_sysaux_1_1g
channelORA_AUX_DISK_1:
restoringdatafile00003to+DATA/rac11g/rac11g_undotbs1_1_4g
channelORA_AUX_DISK_1:
restoringdatafile00004to+DATA/rac11g/rac11g_undotbs2_1_4g
channelORA_AUX_DISK_1:
restoringdatafile00005to+DATA/rac11g/rac11g_users_1_4g
channelORA_AUX_DISK_1:
restoringdatafile00006to+DATA/rac11g/rac11g_ndmain_1_32g
channelORA_AUX_DISK_1:
restoringdatafile00007to+DATA/rac11g/rac11g_ndmain_2_32g
channelORA_AUX_DISK_1:
restoringdatafile00008to