Oracle Data Guard Feature 12cR2系列(二)
上一篇文章介绍了Data Guard 12cR2中3个特性,本篇文章将继续介绍部分新特性。
|Using DBCA to Create a Data Guard Standby
在12c之前创建物理备库的方法有:
1.使用RMAN备份恢复方法;
2.在11g时可以选择duplicate方式创建物理备库;通过这种方式直接在线从主库搭建起物理备库。
到12cR2后,Oracle又提供更简单的方式来创建物理备库,就是本篇文章介绍的方式:即使用DBCA方式直接建立物理备库。这个功能再次简化了创建备库的复杂度。
通过DBCA提供的参数createDuplicateDB,我们可以很容易的搭建一个物理备库。其具体语法如下:
dbca-createDuplicateDB-gdbNameglobal_database_name-primaryDBConnectionStringeasy_connect_string_to_primary-siddatabase_system_identifier[-createAsStandby[-dbUniqueNamedb_unique_name_for_standby]][-customScriptsscripts_list][-datafileDestinationdata_files_directory][-initParamsinitialization_parameters[-initParamsEscapeCharinitialization_parameters_escape_character]][-useWalletForDBCredentials{true|false}-dbCredentialsWalletPasswordwallet_account_password-dbCredentialsWalletLocationwallet_files_directory]
虽然通过DBCA能非常简单的创建一个物理备库,但是要使用这个功能,必须满足以下条件:
主库必须是单机环境,非RAC数据库;
主库必须是非CDB环境;
在12c里非常重要的新特性之一就是多租户环境,但是该特性不支持CDB环境的数据库,同时主库也不能是RAC环境。如果不满足以上条件,在使用DBCA创建备库的时候,会提示如下错误:
主库是CDB环境,错误如下:[FATAL][DBT-16057]Specifiedprimarydatabaseisacontainerdatabase(CDB).CAUSE:Duplicatedatabaseoperationissupportedonlyfornoncontainerdatabases.主库是RAC数据库,错误如下:[FATAL][DBT-16056]SpecifiedprimarydatabaseisnotaSingleInstance(SI)database.CAUSE:DuplicatedatabaseoperationissupportedonlyforSIdatabases.
也就说通过DBCA搭建出来的备库也是一个单机非CDB的备库,如果你想要搭建一个为RAC的备库,则需要手动转换或者使用Oracle Enterprise Manager Cloud Control来将备库转换为RAC数据库。
接下来将演示如何使用DBCA来创建一个物理备库。假定主备环境如下:
同时假设主备库已经具备如下环境:
1.主库是单机并且使用ASM;
2.主库已经开启了归档模式;
3.密码文件和SPFILE都存储在ASM中;
4.备库同样使用ASM存储数据,且备库端环境已经具备;
创建步骤如下:
1.在主库开启Force Logging
[oracle@dbpri]$sqlplus/assysdbaSQL>alterdatabaseforcelogging;Databasealtered.SQL>
2.主库创建Standby Redo logs
查看Redo log的大小:
[oracle@dbpri]$sqlplus/assysdbaSQL>selectthread#,group#,bytes/1024/1024SIZE_MB,statusfromv$log;THREAD#GROUP#SIZE_MBSTATUS--------------------------------------------------11100CURRENT12100INACTIVE13100INACTIVE14100INACTIVE15100INACTIVE16100INACTIVE
创建Standby redo logs:
[oracle@dbpri]$sqlplus/assysdbaSQL>alterdatabaseaddstandbylogfilethread1group7('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group8('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group9('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group10('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group11('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group12('+DATADG')size100M;Databasealtered.SQL>alterdatabaseaddstandbylogfilethread1group13('+DATADG')size100M;Databasealtered.SQL>
当在主库创建好Standby redo logs后,备库也会自动创建。
3.创建网络服务名
主库tnsnames.ora
ordbpri=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbpri)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ordbpri)))ordbstd=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbstd)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ordbstd)))ordbpri_local_listener=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbpri)(PORT=1521))))
备库tnsnames.ora
ordbpri=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbpri)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ordbpri)))ordbstd=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbstd)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ordbstd)))ordbstd_local_listener=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbstd)(PORT=1521))))
4.在备库执行DBCA
[oracle@dbstd~]$dbca-silent-createDuplicateDB-gdbNameordbpri-sidordbstd-sysPasswordoracle-primaryDBConnectionStringdbpri:1521/ordbpri-createAsStandby-dbUniqueNameordbstd–initParamsdb_create_file_dest=+DATADG,db_create_online_log_dest_1=+DATADG,local_listener=”ordbstd_local_listener”输出如下:EnterSYSuserpassword:Listenerconfigstep33%completeAuxiliaryinstancecreation66%completeRMANduplicate100%completeLookatthelogfile"/u01/app/oracle/product/12.2.0/dbhome_1/cfgtoollogs/dbca/ordbpri/ordbpri.log"forfurtherdetails.
注:也可以使用自定义脚本,当备库完成创建后,执行定制脚本。
5.在备库完成环境配置
SQL>altersystemsetLOG_ARCHIVE_DEST_1='LOCATION=+DATADGVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ordbstd'scope=spfile;SQL>altersystemsetdb_file_name_convert='+DATADG/ordbpri','+DATADG/ordbstd'scope=spfile;SQL>altersystemsetlog_file_name_convert='+DATADG/ordbpri','+DATADG/ordbstd'scope=spfile;SQL>altersystemsetstandby_file_management=autoscope=spfile;SQL>altersystemsetremote_listener='dbstd:1521'scope=spfile;SQL>shutdownimmediateSQL>startupSQL>altersystemregister;
注:在12c,可以尝试使用DG Broker来进行Data Guard的管理和维护。
6.备库创建密码文件和SPFILE到ASM
[grid@dbstd~]$exportORACLE_SID=+ASM1[grid@dbstd~]$exportORACLE_HOME=/u01/app/12.2.0.1/grid[grid@dbstd~]$exportPATH=$ORACLE_HOME/bin:$PATH[grid@dbstd]$asmcmd–pASMCMD[+]>mkdirDATADG/ORDBSTD/PASSWORDASMCMD[+]>pwcopy/u01/app/oracle/product/12.2.0.1/dbhome_1/dbs/orapwordbstd+DATADG/ORDBSTD/PASSWORD/pwordbstd[oracle@dbstd]$rm/u01/app/oracle/product/12.2.0.1/dbhome_1/dbs/orapwordbstd[oracle@dbstd~]$exportORACLE_HOME=/u01/app/12.2.0.1/dbhome_1[oracle@dbstd~]$exportORACLE_SID=ordbstd[oracle@dbstd~]$exportPATH=$ORACLE_HOME/bin:$PATH[oracle@dbstd]$sqlplus/assysdbaSQL>createpfile='/tmp/pfilestd.ora'fromspfile;SQL>createspfile='+DATADG/ORDBSTD/spfileordbstd.ora'frompfile='/tmp/pfilestd.ora';[oracle@dbstd]$rm/u01/app/oracle/product/12.2.0.1/dbhome_1/dbs/spfileordbstd.ora
7.备库创建PFILE并且关闭备库。
[oracle@dbstd]$echo“spfile='+DATADG/ORDBSTD/spfileordbstd.ora'”>/u01/app/oracle/product/12.2.0.1/dbhome_1/dbs/initordbstd.ora[oracle@dbstd]sqlplus/assysdbaSQL>shutdownimmediateSQL>exit
8.将备库注册到Oracle Restart及启动备库。
[oracle@dbstd]$srvctladddatabase-dbordbstd-oraclehome/u01/app/oracle/product/12.2.0.1/dbhome_1-dbtypeSingle-instanceordbstd-nodedbstd-dbnameordbpri-diskgroupDATADG-rolephysical_standby-spfile'+DATADG/ORDBSTD/spfileordbstd.ora'-pwfile'+DATADG/ORDBSTD/PASSWORD/pwordbstd'[oracle@dbstd]$srvctlstartdatabase-dbordbstd
至此,完成了DBCA从单实例主库到创建单实例备库。
| 作者简介
杨波,沃趣科技数据库技术专家
主要参与公司产品实施、测试、维护以及优化。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。