这篇文章主要介绍“Oracle Data Guard部署方法是什么”,在日常操作中,相信很多人在Oracle Data Guard部署方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle Data Guard部署方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、 文档介绍

本实施方案主要对Oracle DataGuard实施部署作相应的说明。以便能根据当前业务特点,规划、建设符合高可用、高可靠的数据库集群系统。

二、 Oracle Data Guard介绍(一) Data Guard环境拓展(二) Data Guard特点

数据库服务器采用Data Guard灾备模式,可以满足对可用性有特殊需求的应用,具备以下特点:

1. 需要冗余的服务器设备,该模式需要有冗余的服务器硬件,硬件成本较高。

2. 需要冗余的存储设备,主机和备机都需要同样的存储空间,成本较高。

3. 安装配置比较复杂,该模式比单节点、单实例的模式配置复杂一些,需要更多的配置步骤。

4. 管理维护成本高,该模式对维护人员的要求较高,维护成本高。

5. 具备一定的容灾特性。当主机整个数据库系统不可用并短期内无法恢复时,可以把数据库系统切换到备机上,具备容灾的功能。

6. 备机可以用作只读查询,备机可以切换到只读状态供报表之类的查询操作,减轻主机的压力。

三、 Oracle Data Guard单实例部署一主两备(一) 安装环境

主机1

主机2

主机3

操作系统

Oracle Linux Server release 6.5

Oracle Linux Server release 6.5

Oracle Linux Server release 6.5

主机名

test1.us.oracle.com

test2.us.oracle.com

test5.us.oracle.com

IP

192.168.1.2

192.168.1.3

192.168.1.6

数据库软件版本

11.2.0.4.0

11.2.0.4.0

11.2.0.4.0

ORACLE_BASE

/u01/app/oracle

/u01/app/oracle

/u01/app/oracle

ORACLE_HOME

/u01/app/oracle/product/11.2.0/db_1

/u01/app/oracle/product/11.2.0/db_1

/u01/app/oracle/product/11.2.0/db_1

ORACLE_SID

PROD1

PROD2

PROD5

闪回区路径

/home/oracle/flash



闪回区大小

4G



归档

archovelog



主从关系

Primiry

Standby

Standby

强制日志

logging force



闪回

flashbackdatabase



是否开启监听

start

start

start

是否建立实例

setup

no setup

no setup

(二) 主数据库配置

1. 设置数据库归档

[oracle@test1dbs]$exportORACLE_SID=PROD1[oracle@test1dbs]$sqlplus/assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar308:07:152019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedtoanidleinstance.SQL>startupmount;ORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytesDatabasemounted.SQL>altersystemsetdb_recovery_file_dest='/home/oracle/flash';Systemaltered.SQL>altersystemsetdb_recovery_file_dest_size=4G;Systemaltered.SQL>alterdatabasearchivelog;Databasealtered.SQL>alterdatabaseopen;Databasealtered.

2. 设置数据库闪回

SQL>selectflashback_onfromv$database;FLASHBACK_ON------------------------------------NOSQL>altersystemsetdb_recovery_file_dest='/home/oracle/flash';Systemaltered.SQL>altersystemsetdb_recovery_file_dest_size='5G';Systemaltered.SQL>shutdownimmediate;ORA-01109:databasenotopenDatabasedismounted.ORACLEinstanceshutdown.SQL>startupmount;ORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytesDatabasemounted.SQL>alterdatabaseflashbackon;Databasealtered.SQL>alterdatabaseopen;Databasealtered.SQL>selectflashback_onfromv$database;FLASHBACK_ON------------------------------------YES

3. 设置数据库强制归档

SQL>selectforce_loggingfromv$database;FORCE_------NOSQL>alterdatabaseforcelogging;Databasealtered.SQL>selectforce_loggingfromv$database;FORCE_------YES

4. 添加Standby日志文件

在备库,当RFS进程接受到日志后,就将其写入Standby日志文件里,备库的Standby日志文件可以看做是主库在线日志文件的一个镜像,当主库做日志切换时,备库的Standby日志也做相应的切换,切换后的Standby日志由备库的ARCH进程归档。

Oracle规定备库的Standby日志文件大小不能小于主库在线日志文件最大的一个,一般情况下,为了管理方便,最好把所有的在线日志和Standby日志大小设为一样。

通过下面语句可以查询主库在线日志的大小和组数:

SQL>selectgroup#,bytes/1024/1024fromv$log;GROUP#BYTES/1024/1024-------------------------150250350SQL>selectgroup#,bytes/1024/1024fromv$standby_log;norowsselectedSQL>alterdatabaseaddstandbylogfilegroup4'/home/oracle/s1.log'size50M;Databasealtered.SQL>alterdatabaseaddstandbylogfilegroup5'/home/oracle/s2.log'size50M;Databasealtered.SQL>alterdatabaseaddstandbylogfilegroup6'/home/oracle/s3.log'size50M;Databasealtered.SQL>alterdatabaseaddstandbylogfilegroup7'/home/oracle/s4.log'size50M;Databasealtered.SQL>selectgroup#,bytes/1024/1024fromv$standby_log;GROUP#BYTES/1024/1024-------------------------450550650750

5. 修改参数文件

SQL>createpfilefromspfile;Filecreated.SQL>exitDisconnectedfromOracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions[oracle@test1dbs]$lshc_PROD1.datinit.orainitPROD1.oralkPROD1orapwPROD1spfilePROD1.ora[oracle@test1dbs]$catinitPROD1.oraPROD1.__db_cache_size=419430400PROD1.__java_pool_size=16777216PROD1.__large_pool_size=83886080PROD1.__oracle_base='/u01/app/oracle'#ORACLE_BASEsetfromenvironmentPROD1.__pga_aggregate_target=503316480PROD1.__sga_target=721420288PROD1.__shared_io_pool_size=0PROD1.__shared_pool_size=184549376PROD1.__streams_pool_size=0*.audit_file_dest='/u01/app/oracle/admin/PROD1/adump'*.audit_trail='db'*.compatible='11.2.0.4.0'*.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='PROD1'*.db_recovery_file_dest='/home/oracle/flash'*.db_recovery_file_dest_size=4294967296*.diagnostic_dest='/u01/app/oracle'*.dispatchers='(PROTOCOL=TCP)(SERVICE=PROD1XDB)'*.undo_tablespace='UNDOTBS1'*.processes=150*.open_cursors=300*.memory_target=1211105280*.DB_UNIQUE_NAME='PROD1'*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD1,PROD2,PROD5)'*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/flashVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=PROD1'*.LOG_ARCHIVE_DEST_2='SERVICE=PROD1_2ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD2'*.LOG_ARCHIVE_DEST_3='SERVICE=PROD1_5ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD5'*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'*.LOG_ARCHIVE_DEST_STATE_3='ENABLE'*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'*.LOG_ARCHIVE_MAX_PROCESSES=30*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'*.FAL_CLIENT='PROD2,PROD5'*.FAL_SERVER='PROD1'

注意:上面修改的参数有的需要重启数据库才能生效

6. 修改监听配置文件

[oracle@test1~]$cd/u01/app/oracle/product/11.2.0/db_1/network/admin/[oracle@test1admin]$catlistener.ora#listener.oraNetworkConfigurationFile:/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora#GeneratedbyOracleconfigurationtools.LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test1.us.oracle.com)(PORT=1521))(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))))ADR_BASE_LISTENER=/u01/app/oracleSID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=PROD1)(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)(SID_NAME=PROD1)))

7. 修改TNS配置文件

[oracle@test1admin]$cattnsnames.ora#tnsnames.oraNetworkConfigurationFile:/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora#GeneratedbyOracleconfigurationtools.PROD1_5=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=test5.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD5)))PROD1_2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=test2.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD2)))PROD1_1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=test1.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD1)))

8. 重启监听服务,测试服务名的连通情况

[oracle@test1dbs]$lsnrctlstop[oracle@test1dbs]$lsnrctlstart

9. 拷贝参数文件

[oracle@test1dbs]$scpinitPROD1.oraoracle@test2:/u01/app/oracle/product/11.2.0/db_1/dbs/oracle@test2'spassword:initPROD1.ora100%15191.5KB/s00:00[oracle@test1dbs]$scpinitPROD1.oraoracle@test5:/u01/app/oracle/product/11.2.0/db_1/dbs/oracle@test5'spassword:initPROD1.ora100%15191.5KB/s00:00

10. 拷贝密码文件

[oracle@test1dbs]$scporapwPROD1oracle@test2:/u01/app/oracle/product/11.2.0/db_1/dbs/oracle@test2'spassword:orapwPROD1100%15361.5KB/s00:00[oracle@test1dbs]$scporapwPROD1oracle@test5:/u01/app/oracle/product/11.2.0/db_1/dbs/oracle@test5'spassword:orapwPROD1100%15361.5KB/s00:00(三) 两备数据库配置

1. 修改参数文件

[oracle@test2dbs]$catinitPROD1.oraPROD2.__db_cache_size=419430400PROD2.__java_pool_size=16777216PROD2.__large_pool_size=83886080PROD2.__oracle_base='/u01/app/oracle'#ORACLE_BASEsetfromenvironmentPROD2.__pga_aggregate_target=503316480PROD2.__sga_target=721420288PROD2.__shared_io_pool_size=0PROD2.__shared_pool_size=184549376PROD2.__streams_pool_size=0*.audit_file_dest='/u01/app/oracle/admin/PROD1/adump'*.audit_trail='db'*.compatible='11.2.0.4.0'*.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='PROD1'*.db_recovery_file_dest='/home/oracle/flash'*.db_recovery_file_dest_size=4294967296*.diagnostic_dest='/u01/app/oracle'*.dispatchers='(PROTOCOL=TCP)(SERVICE=PROD1XDB)'*.undo_tablespace='UNDOTBS1'*.processes=150*.open_cursors=300*.memory_target=1211105280*.DB_UNIQUE_NAME='PROD2'*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD2,PROD1,PROD5)'*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/flashVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=PROD2'*.LOG_ARCHIVE_DEST_2='SERVICE=PROD1_1ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD1'*.LOG_ARCHIVE_DEST_3='SERVICE=PROD1_5ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD5'*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'*.LOG_ARCHIVE_DEST_STATE_3='ENABLE'*.LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'*.LOG_ARCHIVE_MAX_PROCESSES=30*.REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'*.FAL_CLIENT='PROD2,PROD5'*.FAL_SERVER='PROD1'

[oracle@test5dbs]$catinitPROD1.oraPROD5.__db_cache_size=469762048PROD5.__java_pool_size=16777216PROD5.__large_pool_size=33554432PROD5.__oracle_base='/u01/app/oracle'#ORACLE_BASEsetfromenvironmentPROD5.__pga_aggregate_target=503316480PROD5.__sga_target=721420288PROD5.__shared_io_pool_size=0PROD5.__shared_pool_size=184549376PROD5.__streams_pool_size=0*.audit_file_dest='/u01/app/oracle/admin/PROD1/adump'*.audit_trail='db'*.compatible='11.2.0.4.0'*.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='PROD1'*.db_recovery_file_dest='/home/oracle/flash'*.db_recovery_file_dest_size=4294967296*.diagnostic_dest='/u01/app/oracle'*.dispatchers='(PROTOCOL=TCP)(SERVICE=PROD1XDB)'*.memory_target=1211105280*.open_cursors=300*.processes=150*.remote_login_passwordfile='EXCLUSIVE'*.undo_tablespace='UNDOTBS1'DB_UNIQUE_NAME=PROD5LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD5,PROD1,PROD2)'LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/flashVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=PROD5'LOG_ARCHIVE_DEST_2='SERVICE=PROD1_2ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD2'LOG_ARCHIVE_DEST_3='SERVICE=PROD1_1ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PROD1'LOG_ARCHIVE_DEST_STATE_1=ENABLELOG_ARCHIVE_DEST_STATE_2=ENABLELOG_ARCHIVE_DEST_STATE_3=ENABLEREMOTE_LOGIN_PASSWORDFILE=EXCLUSIVELOG_ARCHIVE_FORMAT=%t_%s_%r.arcLOG_ARCHIVE_MAX_PROCESSES=30FAL_SERVER=PROD1FAL_CLIENT=PROD2,PROD5STANDBY_FILE_MANAGEMENT=AUTO

2. 修改密码文件创建相应的文件目录

根据上面修改的参数文件,为备库创建相应的文件目录

[oracle@test2dbs]$mvorapwPROD1orapwPROD2[oracle@test2dbs]$mvinitPROD1.orainitPROD2.ora[oracle@test2dbs]$mkdir-p/u01/app/oracle/admin/PROD1/adump[oracle@test2dbs]$mkdir-p/u01/app/oracle/oradata/PROD1[oracle@test2dbs]$mkdir-p/u01/app/oracle/fast_recovery_area/PROD1[oracle@test2dbs]$mkdir-p/home/oracle/flash[oracle@test5dbs]$mvorapwPROD1orapwPROD5[oracle@test5dbs]$mvinitPROD1.orainitPROD5.ora[oracle@test5dbs]$mkdir-p/u01/app/oracle/admin/PROD1/adump[oracle@test5dbs]$mkdir-p/u01/app/oracle/oradata/PROD1[oracle@test5dbs]$mkdir-p/u01/app/oracle/fast_recovery_area/PROD1[oracle@test5dbs]$mkdir-p/home/oracle/flash

3. 修改监听配置文件

[oracle@test2admin]$catlistener.ora#listener.oraNetworkConfigurationFile:/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora#GeneratedbyOracleconfigurationtools.LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test2.us.oracle.com)(PORT=1521))(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))))ADR_BASE_LISTENER=/u01/app/oracleSID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=PROD2)(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)(SID_NAME=PROD2)))

[oracle@test5admin]$catlistener.ora#listener.oraNetworkConfigurationFile:/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora#GeneratedbyOracleconfigurationtools.LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test5.us.oracle.com)(PORT=1521))(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))))ADR_BASE_LISTENER=/u01/app/oracleSID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=PROD5)(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)(SID_NAME=PROD5)))

4. 修改TNS配置文件

两备库的TNS配置文件与主库相同

[oracle@test2admin]$cattnsnames.ora#tnsnames.oraNetworkConfigurationFile:/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora#GeneratedbyOracleconfigurationtools.PROD1_1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD1)))PROD1_2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=test2.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD2)))PROD1_5=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=test5.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PROD5)))

5. 重启监听服务

[oracle@test2dbs]$lsnrctlstop[oracle@test2dbs]$lsnrctlstart[oracle@test5dbs]$lsnrctlstop[oracle@test5dbs]$lsnrctlstart

6. 启动数据库到nomonunt状态

[oracle@test2dbs]$exportORACLE_SID=PROD2[oracle@test2dbs]$sqlplus/assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar308:04:272019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedtoanidleinstance.SQL>startupnomount;ORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytes

[oracle@test5dbs]$exportORACLE_SID=PROD5[oracle@test5dbs]$sqlplus/assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar308:04:472019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedtoanidleinstance.SQL>startupnomount;ORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytes

7. 验证监听和TNS配置

主备库上都需要验证

[oracle@test1dbs]$sqlplussys/oracle@PROD1_1assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar305:35:152019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsSQL>quitDisconnectedfromOracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions[oracle@test1dbs]$sqlplussys/oracle@PROD1_2assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar305:35:542019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsSQL>quitDisconnectedfromOracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions[oracle@test1dbs]$sqlplussys/oracle@PROD1_5assysdbaSQL*Plus:Release11.2.0.4.0ProductiononSunMar305:36:022019Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptionsSQL>quitDisconnectedfromOracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions

注意:该步骤一定要在主备库上都能通过才能执行下面步骤

(四) 恢复数据库

[oracle@test1~]$rmantargetsys/oracle@prod1_1auxiliarysys/oracle@prod1_2RecoveryManager:Release11.2.0.4.0-ProductiononSatMar216:03:552019Copyright(c)1982,2011,Oracleand/oritsaffiliates.Allrightsreserved.connectedtotargetdatabase:PROD1(DBID=2223201576)connectedtoauxiliarydatabase:PROD1(notmounted)RMAN>duplicatetargetdatabaseforstandbyfromactivedatabasenofilenamecheck;StartingDuplicateDbat2019-03-0216:04:03usingtargetdatabasecontrolfileinsteadofrecoverycatalogallocatedchannel:ORA_AUX_DISK_1channelORA_AUX_DISK_1:SID=10devicetype=DISKcontentsofMemoryScript:{backupascopyreusetargetfile'/u01/app/oracle/product/11.2.0/db_1/dbs/orapwPROD1'auxiliaryformat'/u01/app/oracle/product/11.2.0/db_1/dbs/orapwPROD2';}executingMemoryScriptStartingbackupat2019-03-0216:04:03allocatedchannel:ORA_DISK_1channelORA_DISK_1:SID=144devicetype=DISKFinishedbackupat2019-03-0216:04:04contentsofMemoryScript:{backupascopycurrentcontrolfileforstandbyauxiliaryformat'/u01/app/oracle/oradata/PROD1/control01.ctl';restoreclonecontrolfileto'/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl'from'/u01/app/oracle/oradata/PROD1/control01.ctl';}executingMemoryScriptStartingbackupat2019-03-0216:04:04usingchannelORA_DISK_1channelORA_DISK_1:startingdatafilecopycopyingstandbycontrolfileoutputfilename=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_PROD1.ftag=TAG20190302T160404RECID=6STAMP=1001865845channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:03Finishedbackupat2019-03-0216:04:08Startingrestoreat2019-03-0216:04:08usingchannelORA_AUX_DISK_1channelORA_AUX_DISK_1:copiedcontrolfilecopyFinishedrestoreat2019-03-0216:04:09contentsofMemoryScript:{sqlclone'alterdatabasemountstandbydatabase';}executingMemoryScriptsqlstatement:alterdatabasemountstandbydatabasecontentsofMemoryScript:{setnewnamefortempfile1to"/u01/app/oracle/oradata/PROD1/temp01.dbf";switchclonetempfileall;setnewnamefordatafile1to"/u01/app/oracle/oradata/PROD1/system01.dbf";setnewnamefordatafile2to"/u01/app/oracle/oradata/PROD1/sysaux01.dbf";setnewnamefordatafile3to"/u01/app/oracle/oradata/PROD1/undotbs01.dbf";setnewnamefordatafile4to"/u01/app/oracle/oradata/PROD1/users01.dbf";setnewnamefordatafile5to"/u01/app/oracle/oradata/PROD1/example01.dbf";backupascopyreusedatafile1auxiliaryformat"/u01/app/oracle/oradata/PROD1/system01.dbf"datafile2auxiliaryformat"/u01/app/oracle/oradata/PROD1/sysaux01.dbf"datafile3auxiliaryformat"/u01/app/oracle/oradata/PROD1/undotbs01.dbf"datafile4auxiliaryformat"/u01/app/oracle/oradata/PROD1/users01.dbf"datafile5auxiliaryformat"/u01/app/oracle/oradata/PROD1/example01.dbf";sql'altersystemarchivelogcurrent';}executingMemoryScriptexecutingcommand:SETNEWNAMErenamedtempfile1to/u01/app/oracle/oradata/PROD1/temp01.dbfincontrolfileexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEStartingbackupat2019-03-0216:04:14usingchannelORA_DISK_1channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00001name=/u01/app/oracle/oradata/PROD1/system01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/system01.dbftag=TAG20190302T160414channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:25channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00002name=/u01/app/oracle/oradata/PROD1/sysaux01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/sysaux01.dbftag=TAG20190302T160414channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:15channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00005name=/u01/app/oracle/oradata/PROD1/example01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/example01.dbftag=TAG20190302T160414channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:15channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00003name=/u01/app/oracle/oradata/PROD1/undotbs01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/undotbs01.dbftag=TAG20190302T160414channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:03channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00004name=/u01/app/oracle/oradata/PROD1/users01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/users01.dbftag=TAG20190302T160414channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:01Finishedbackupat2019-03-0216:05:14sqlstatement:altersystemarchivelogcurrentcontentsofMemoryScript:{switchclonedatafileall;}executingMemoryScriptdatafile1switchedtodatafilecopyinputdatafilecopyRECID=6STAMP=1001878035filename=/u01/app/oracle/oradata/PROD1/system01.dbfdatafile2switchedtodatafilecopyinputdatafilecopyRECID=7STAMP=1001878035filename=/u01/app/oracle/oradata/PROD1/sysaux01.dbfdatafile3switchedtodatafilecopyinputdatafilecopyRECID=8STAMP=1001878035filename=/u01/app/oracle/oradata/PROD1/undotbs01.dbfdatafile4switchedtodatafilecopyinputdatafilecopyRECID=9STAMP=1001878035filename=/u01/app/oracle/oradata/PROD1/users01.dbfdatafile5switchedtodatafilecopyinputdatafilecopyRECID=10STAMP=1001878035filename=/u01/app/oracle/oradata/PROD1/example01.dbfFinishedDuplicateDbat2019-03-0216:05:21

[oracle@test1~]$rmantargetsys/oracle@prod1_1auxiliarysys/oracle@prod1_5RecoveryManager:Release11.2.0.4.0-ProductiononSatMar216:05:392019Copyright(c)1982,2011,Oracleand/oritsaffiliates.Allrightsreserved.connectedtotargetdatabase:PROD1(DBID=2223201576)connectedtoauxiliarydatabase:PROD1(notmounted)RMAN>duplicatetargetdatabaseforstandbyfromactivedatabasenofilenamecheck;StartingDuplicateDbat2019-03-0216:05:42usingtargetdatabasecontrolfileinsteadofrecoverycatalogallocatedchannel:ORA_AUX_DISK_1channelORA_AUX_DISK_1:SID=10devicetype=DISKcontentsofMemoryScript:{backupascopyreusetargetfile'/u01/app/oracle/product/11.2.0/db_1/dbs/orapwPROD1'auxiliaryformat'/u01/app/oracle/product/11.2.0/db_1/dbs/orapwPROD5';}executingMemoryScriptStartingbackupat2019-03-0216:05:42allocatedchannel:ORA_DISK_1channelORA_DISK_1:SID=125devicetype=DISKFinishedbackupat2019-03-0216:05:43contentsofMemoryScript:{backupascopycurrentcontrolfileforstandbyauxiliaryformat'/u01/app/oracle/oradata/PROD1/control01.ctl';restoreclonecontrolfileto'/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl'from'/u01/app/oracle/oradata/PROD1/control01.ctl';}executingMemoryScriptStartingbackupat2019-03-0216:05:43usingchannelORA_DISK_1channelORA_DISK_1:startingdatafilecopycopyingstandbycontrolfileoutputfilename=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_PROD1.ftag=TAG20190302T160543RECID=7STAMP=1001865944channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:01Finishedbackupat2019-03-0216:05:44Startingrestoreat2019-03-0216:05:44usingchannelORA_AUX_DISK_1channelORA_AUX_DISK_1:copiedcontrolfilecopyFinishedrestoreat2019-03-0216:05:46contentsofMemoryScript:{sqlclone'alterdatabasemountstandbydatabase';}executingMemoryScriptsqlstatement:alterdatabasemountstandbydatabasecontentsofMemoryScript:{setnewnamefortempfile1to"/u01/app/oracle/oradata/PROD1/temp01.dbf";switchclonetempfileall;setnewnamefordatafile1to"/u01/app/oracle/oradata/PROD1/system01.dbf";setnewnamefordatafile2to"/u01/app/oracle/oradata/PROD1/sysaux01.dbf";setnewnamefordatafile3to"/u01/app/oracle/oradata/PROD1/undotbs01.dbf";setnewnamefordatafile4to"/u01/app/oracle/oradata/PROD1/users01.dbf";setnewnamefordatafile5to"/u01/app/oracle/oradata/PROD1/example01.dbf";backupascopyreusedatafile1auxiliaryformat"/u01/app/oracle/oradata/PROD1/system01.dbf"datafile2auxiliaryformat"/u01/app/oracle/oradata/PROD1/sysaux01.dbf"datafile3auxiliaryformat"/u01/app/oracle/oradata/PROD1/undotbs01.dbf"datafile4auxiliaryformat"/u01/app/oracle/oradata/PROD1/users01.dbf"datafile5auxiliaryformat"/u01/app/oracle/oradata/PROD1/example01.dbf";sql'altersystemarchivelogcurrent';}executingMemoryScriptexecutingcommand:SETNEWNAMErenamedtempfile1to/u01/app/oracle/oradata/PROD1/temp01.dbfincontrolfileexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEexecutingcommand:SETNEWNAMEStartingbackupat2019-03-0216:05:51usingchannelORA_DISK_1channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00001name=/u01/app/oracle/oradata/PROD1/system01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/system01.dbftag=TAG20190302T160551channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:25channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00002name=/u01/app/oracle/oradata/PROD1/sysaux01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/sysaux01.dbftag=TAG20190302T160551channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:15channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00005name=/u01/app/oracle/oradata/PROD1/example01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/example01.dbftag=TAG20190302T160551channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:15channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00003name=/u01/app/oracle/oradata/PROD1/undotbs01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/undotbs01.dbftag=TAG20190302T160551channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:03channelORA_DISK_1:startingdatafilecopyinputdatafilefilenumber=00004name=/u01/app/oracle/oradata/PROD1/users01.dbfoutputfilename=/u01/app/oracle/oradata/PROD1/users01.dbftag=TAG20190302T160551channelORA_DISK_1:datafilecopycomplete,elapsedtime:00:00:01Finishedbackupat2019-03-0216:06:50sqlstatement:altersystemarchivelogcurrentcontentsofMemoryScript:{switchclonedatafileall;}executingMemoryScriptdatafile1switchedtodatafilecopyinputdatafilecopyRECID=7STAMP=1001878132filename=/u01/app/oracle/oradata/PROD1/system01.dbfdatafile2switchedtodatafilecopyinputdatafilecopyRECID=8STAMP=1001878132filename=/u01/app/oracle/oradata/PROD1/sysaux01.dbfdatafile3switchedtodatafilecopyinputdatafilecopyRECID=9STAMP=1001878132filename=/u01/app/oracle/oradata/PROD1/undotbs01.dbfdatafile4switchedtodatafilecopyinputdatafilecopyRECID=10STAMP=1001878132filename=/u01/app/oracle/oradata/PROD1/users01.dbfdatafile5switchedtodatafilecopyinputdatafilecopyRECID=11STAMP=1001878132filename=/u01/app/oracle/oradata/PROD1/example01.dbfFinishedDuplicateDbat2019-03-0216:06:58(五) 开启实时同步

test2&test5:SQL>alterdatabaseopen;Databasealtered.SQL>recovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Mediarecoverycomplete.(六) 备库均开启flashback

test2&test5:SQL>alterdatabaserecovermanagedstandbydatabasecancel;Databasealtered.SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown.SQL>startupmount;ORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytesDatabasemounted.SQL>alterdatabaseflashbackon;Databasealtered.SQL>alterdatabaseopen;Databasealtered.SQL>alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Databasealtered.(七) 验证DG同步

上面已经把Data Gurad搭建完,下面介绍如何验证Data Guard是否能实时同步:

1. 通过查看archive_log_dest_2、archive_log_dest_3列是否有error报错,如果有报错,则需要先根据报错内容解决问题:

test1:SQL>setlinesize150SQL>coldest_nameformata30SQL>colerrorformata20SQL>selectdest_name,errorfromv$archive_dest;DEST_NAMEERROR--------------------------------------------------LOG_ARCHIVE_DEST_1LOG_ARCHIVE_DEST_2LOG_ARCHIVE_DEST_3LOG_ARCHIVE_DEST_4LOG_ARCHIVE_DEST_5LOG_ARCHIVE_DEST_6LOG_ARCHIVE_DEST_7LOG_ARCHIVE_DEST_8LOG_ARCHIVE_DEST_9LOG_ARCHIVE_DEST_10LOG_ARCHIVE_DEST_11DEST_NAMEERROR--------------------------------------------------LOG_ARCHIVE_DEST_12LOG_ARCHIVE_DEST_13LOG_ARCHIVE_DEST_14LOG_ARCHIVE_DEST_15LOG_ARCHIVE_DEST_16LOG_ARCHIVE_DEST_17LOG_ARCHIVE_DEST_18LOG_ARCHIVE_DEST_19LOG_ARCHIVE_DEST_20LOG_ARCHIVE_DEST_21LOG_ARCHIVE_DEST_22DEST_NAMEERROR--------------------------------------------------LOG_ARCHIVE_DEST_23LOG_ARCHIVE_DEST_24LOG_ARCHIVE_DEST_25LOG_ARCHIVE_DEST_26LOG_ARCHIVE_DEST_27LOG_ARCHIVE_DEST_28LOG_ARCHIVE_DEST_29LOG_ARCHIVE_DEST_30LOG_ARCHIVE_DEST_3131rowsselected.

注意:上面显示没有报错

2. 查询主库最大归档序号,一致即归档同步成功。

test1:SQL>selectmax(sequence#)fromv$archived_log;MAX(SEQUENCE#)--------------26test2&test5:SQL>selectmax(sequence#)fromv$archived_log;MAX(SEQUENCE#)--------------26test1:SQL>altersystemarchivelogcurrent;Systemaltered.SQL>selectmax(sequence#)fromv$archived_log;MAX(SEQUENCE#)--------------27test2&test5:SQL>selectmax(sequence#)fromv$archived_log;MAX(SEQUENCE#)--------------27

3. 查看主备库状态

test1:SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-----------------------------------------------------READWRITEPRIMARYTOSTANDBYtest2&test5:SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-----------------------------------------------------------READONLYWITHAPPLYPHYSICALSTANDBYNOTALLOWED

4. 在test1上创建一个table测试

test1:SQL>createtabledg(idnumber);Tablecreated.SQL>insertintodgvalues(1);1rowcreated.SQL>commit;Commitcomplete.SQL>select*fromdg;ID----------1test2&test5:SQL>select*fromdg;ID----------1四、 DG切换与恢复

我们配置DG的目的就是为了在主库出现故障时,备库能够提供服务,保证业务的正常运行。DG的故障切换分为switchover和failover两种:

(一) switchover

switchover是用户有计划的进行停机切换,能够保证不丢失数据。以下是具体操作:

1. switchover1

SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS--------------------------------------------------------------READWRITEPRIMARYSESSIONSACTIVE

注意:上面查询结果为TO STANDBY或 SESSIONS ACTIVE表明可以进行切换

SQL>alterdatabasecommittoswitchovertophysicalstandby;Databasealtered.SQL>conn/assysdba;Connectedtoanidleinstance.SQL>startupORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize939524152bytesDatabaseBuffers268435456bytesRedoBuffers9048064bytesDatabasemounted.Databaseopened.SQL>setlinesize150SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-----------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYtest5:SQL>recovermanagedstandbydatabasecancel;Mediarecoverycomplete.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-----------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYSQL>alterdatabasecommittoswitchovertoprimary;Databasealtered.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-------------------------------------------------------------MOUNTEDPRIMARYNOTALLOWEDSQL>alterdatabaseopen;Databasealtered.SQL>insertintot1values(1);1rowcreated.SQL>commit;Commitcomplete.SQL>select*fromt1;ID----------1test1:SQL>select*fromt1;norowsselectedSQL>recovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Mediarecoverycomplete.SQL>select*fromt1;ID----------1test2:SQL>recovermanagedstandbydatabasecancel;Mediarecoverycomplete.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS-----------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYSQL>recovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Mediarecoverycomplete.SQL>select*fromt1;ID----------11.switchover1test5:SQL>alterdatabasecommittoswitchovertophysicalstandby;Databasealtered.SQL>conn/assysdba;Connectedtoanidleinstance.SQL>startupORACLEinstancestarted.TotalSystemGlobalArea1219260416bytesFixedSize2252744bytesVariableSize788529208bytesDatabaseBuffers419430400bytesRedoBuffers9048064bytesDatabasemounted.Databaseopened.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS---------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYtest2:SQL>recovermanagedstandbydatabasecancel;Mediarecoverycomplete.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS----------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYSQL>alterdatabasecommittoswitchovertoprimary;Databasealtered.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS------------------------------------------------------------MOUNTEDPRIMARYNOTALLOWEDSQL>alterdatabaseopen;Databasealtered.SQL>insertintot1values(2);1rowcreated.SQL>commit;Commitcomplete.SQL>select*fromt1;ID----------12test5:SQL>select*fromt1;ID----------1SQL>recovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Mediarecoverycomplete.SQL>select*fromt1;ID----------12SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS---------------------------------------------------------------------READONLYWITHAPPLYPHYSICALSTANDBYNOTALLOWEDtest1:SQL>recovermanagedstandbydatabasecancel;Mediarecoverycomplete.SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS----------------------------------------------------------------READONLYPHYSICALSTANDBYTOPRIMARYSQL>select*fromt1;ID----------1SQL>recovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;Mediarecoverycomplete.SQL>select*fromt1;ID----------12SQL>selectopen_mode,database_role,switchover_statusfromv$database;OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS--------------------------------------------------------------------READONLYWITHAPPLYPHYSICALSTANDBYNOTALLOWED

到此DG switover切换完成,验证方法同上。

到此DG switover切换完成,验证方法同上。

(二) failover

failover是当主库真正出现严重系统故障,如数据库宕机,软硬件故障导致主库不能支持服务,从而进行的切换动作。

注意:为了能够在failover后能够恢复DG,需要在主库上开启flashback,如果不开启flashback的话,DG就可能需要重新搭建。

由于主库已经不可访问,下面所有的操作都在备库完成:

(三) failover恢复

上面提到了failover,这种情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何再重新构建DG,这里我们利用flashback database来重构,具体方法如下:

到此,关于“Oracle Data Guard部署方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!