基于oracle dataguard滚动升级(oracle10.2.0.1

oracle-基于oracle dataguard滚动升级(oracle10g升级到oracle11g)thinking:(主要技术涉及到:1、物理备库转成逻辑备库。2、数据库软件升级从oracle10.2.0.1升级到oracle10.2.0.4升级到oracle11.2.0.4。) 1、首先从搭建物理DG开始,搭建A主机数据库的物理DG B(数据库软件从oracle 10.2.0.1升级到10.2.0.4)。2、切换物理DG, 把B主机上的数据库切换为逻辑备库。(物理备库要求主备库版本必须一致,逻辑备库允许数据库版本和主库不一致。为升级B主机上的数据库软件版本做准备。)3、升级B主机上的逻辑备库(数据库软件从oracle 10.2.0.4升级到oracle 11.2.0.3)。4、切换逻辑DG,把B主机上的数据库切换为主库。5、重新搭建物理DG,至此整个升级过程完成。1、静默升级数据库,从oracle 10.2.0.1升级到10.2.0.4过程:ORACLE 10.2.0.1->10.2.0.4软件升级全过程:(1)、首先注意/etc/sysctl.conf中net.ipv4.ip_local_port_range =1024 65000端口的范围(2)、/etc/oraInst.locinventory_loc=/home/oracle1/app/inventoryinst_group=oinstall(3)、su – oracle1 -> vi .bash_profile# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi# User specific environment and startup programs#PATH=$PATH:$HOME/bin#export PATHexport ORACLE_BASE=/home/oracle1export ORACLE_HOME=$ORACLE_BASE/products/10.2.0export ORACLE_SID=targetadexport PATH=$PATH:$ORACLE_HOME/binexport NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"(4)、开始静默安装oracle10g 10.2.0.1(修改响应文件)RESPONSEFILE_VERSION=2.2.1.0.0UNIX_GROUP_NAME="oinstall"FROM_LOCATION="../stage/products.xml"NEXT_SESSION_RESPONSE=<Value Unspecified>ORACLE_HOME="/home/oracle1/products/10.2.0"ORACLE_HOME_NAME="OraDb10g_home1"TOPLEVEL_COMPONENT={"oracle.server","10.2.0.1.0"}DEINSTALL_LIST={"oracle.server","10.2.0.1.0"}SHOW_SPLASH_SCREEN=falseSHOW_WELCOME_PAGE=falseSHOW_NODE_SELECTION_PAGE=falseSHOW_SUMMARY_PAGE=falseSHOW_INSTALL_PROGRESS_PAGE=falseSHOW_CONFIG_TOOL_PAGE=falseSHOW_XML_PREREQ_PAGE=falseSHOW_ROOTSH_CONFIRMATION=trueSHOW_END_SESSION_PAGE=falseSHOW_EXIT_CONFIRMATION=falseNEXT_SESSION=falseNEXT_SESSION_ON_FAIL=falseSHOW_DEINSTALL_CONFIRMATION=falseSHOW_DEINSTALL_PROGRESS=falseRESTART_SYSTEM=<Value Unspecified>RESTART_REMOTE_SYSTEM=<Value Unspecified>REMOVE_HOMES=<Value Unspecified>ORACLE_HOSTNAME=<Value Unspecified>SHOW_END_OF_INSTALL_MSGS=falseCLUSTER_NODES=<Value Unspecified>COMPONENT_LANGUAGES={"en"}INSTALL_TYPE="EE"s_nameForDBAGrp=dbas_nameForOPERGrp=dban_configurationOption=<Value Required>s_ASMSYSPassword=""s_ASMSYSPasswordAgain=""n_dbType=<Value Required>oracle.assistants.server:s_responseFileName=<Value Unspecified>s_globalDBName=<Value Required>s_dbSid=<Value Required>s_dbRetChar="WE8ISO8859P1"b_loadExampleSchemas=falseb_useDBControl=trueb_receiveEmailNotification=falses_dlgEMSMTPServer=<Value Unspecified>s_dlgEMEmailAddress=<Value Unspecified>s_dlgEMCentralAgentSelected=<Value Unspecified>n_dbStorageType=<Value Unspecified>s_mountPoint=<Value Unspecified>s_rawDeviceMapFileLocation=<Value Unspecified>b_enableAutoBackup=falseb_useFileSystemForRecovery=trues_dlgRBORecoveryLocation=<Value Unspecified>s_dlgRBOUsername=<Value Unspecified>s_dlgRBOPassword=<Value Unspecified>s_dlgASMCfgDiskGroupName="DATA"s_dlgASMCfgDiskDiscoveryString=<Value Unspecified>n_dlgASMCfgRedundancySelected=<Value Unspecified>sl_dlgASMCfgSelectableDisks=<Value Unspecified>sl_dlgASMCfgDiskSelections=<Value Unspecified>sl_dlgASMDskGrpSelectedGroup={" "," "," "," "}b_centrallyManageASMInstance=trueb_useSamePassword=trues_superAdminSamePasswd=<Value Unspecified>s_superAdminSamePasswdAgain=<Value Unspecified>sl_superAdminPasswds=<Value Unspecified>sl_superAdminPasswdsAgain=<Value Unspecified>n_performUpgrade=0n_upgradeDB=0s_dbOHSelectedForUpgrade=""s_dbSIDSelectedForUpgrade=""n_upgradeASM=0s_dbSelectedUsesASM="no"sl_upgradableSIDBInstances={}sl_upgradableRACDBInstances={}n_dbSelection=0b_stateOfUpgradeASMCheckbox=falseb_stateOfUpgradeDBCheckbox=falseb_oneClick=falses_dlgASMCfgRedundancyValue=""s_dlgASMCfgExistingFreeSpace="0"s_dlgASMCfgNewDisksSize=""s_dlgASMCfgAdditionalSpaceNeeded="0 MB"(5)、 开始运行响应文件进行安装:./runInstaller -silent -responseFile /home/oracle1/database/response/enterprise02.rsp(6)、/home/oracle1/products/10.2.0/root.sh(7)、开始升级(10.2.0.1->10.2.0.4)解压升级程序su – oracle1 -> unzip p6810189_10204_Linux-x86-64.zipcd Disk1 -> cd response -> 编辑响应文件 vi patchset.rspRESPONSEFILE_VERSION=2.2.1.0.0UNIX_GROUP_NAME="oinstall"FROM_LOCATION="../stage/products.xml"NEXT_SESSION_RESPONSE=<Value Unspecified>ORACLE_HOME="/home/oracle1/products/10.2.0"ORACLE_HOME_NAME="OraDb10g_home1"TOPLEVEL_COMPONENT={"oracle.patchset.db","10.2.0.4.0"}SHOW_SPLASH_SCREEN=falseSHOW_WELCOME_PAGE=falseSHOW_COMPONENT_LOCATIONS_PAGE=falseSHOW_CUSTOM_TREE_PAGE=falseSHOW_SUMMARY_PAGE=falseSHOW_INSTALL_PROGRESS_PAGE=trueSHOW_REQUIRED_CONFIG_TOOL_PAGE=falseSHOW_OPTIONAL_CONFIG_TOOL_PAGE=falseSHOW_CONFIG_TOOL_PAGE=falseSHOW_XML_PREREQ_PAGE=falseSHOW_RELEASE_NOTES=falseSHOW_END_OF_INSTALL_MSGS=trueSHOW_ROOTSH_CONFIRMATION=trueSHOW_END_SESSION_PAGE=falseSHOW_EXIT_CONFIRMATION=falseNEXT_SESSION=falseNEXT_SESSION_ON_FAIL=falseSHOW_DEINSTALL_CONFIRMATION=falseSHOW_DEINSTALL_PROGRESS=falseACCEPT_LICENSE_AGREEMENT=trueRESTART_SYSTEM=<Value Unspecified>CLUSTER_NODES=<Value Unspecified>OUI_HOSTNAME=<Value Unspecified>REMOVE_HOMES=<Value Unspecified>COMPONENT_LANGUAGES={"en"}sl_userNodeList=<Value Unspecified>b_acceptLicense=<Value Unspecified>b_useRegistration=<Value Unspecified>s_csiNumber=<Value Unspecified>s_metaLink=<Value Unspecified>s_countryName=<Value Unspecified>b_proxyused=<Value Unspecified>s_serverName=<Value Unspecified>s_portNumber=<Value Unspecified>s_userName=<Value Unspecified>s_proxyPassword=<Value Unspecified>b_authenticationused=<Value Unspecified>s_nameForDBAGrp=dbas_nameForOPERGrp=dba(8)、执行响应文件:./runInstaller -silent -responseFile /home/oracle1/Disk1/response/patchset.rsp(9)、至此软件升级完成[oracle1@xxx response]$ sqlplus /nologSQL*Plus: Release 10.2.0.4.0 – Production on Mon Sep 29 18:45:37 2014Copyright (c) 1982, 2007, Oracle. All Rights Reserved.SQL>(10)、针对numa故障处理:map size mismatch; abort: Successcol name for a40col value for a40col describ for a40set linesize 130SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describFROM SYS.x$ksppi x, SYS.x$ksppcv yWHERE x.inst_id = USERENV (‘Instance’)AND y.inst_id = USERENV (‘Instance’)AND x.indx = y.indxAND upper(x.ksppinm) like ‘%NUMA%’;alter system set "_enable_NUMA_optimization"= false scope=spfile;alter system set "_db_block_numa"=1 scope=spfile;(11)、搭建A主机数据库的物理DG B,具体过程可以参考官方联机文档。2、切换物理DG, 把B主机上的数据库切换为逻辑备库的过程:(1)、首先在备库上停掉日志应用:alter database recover managed standby database cancel;(2)、从主库上获取备库所需的数据字典信息sql> exec dbms_logstdby.build –-主库执行(3)、切换物理备库至逻辑备库Sql> alter database recover to logical standby lstydb; –其中lstydb为逻辑备库的db_name=lstydb–这个可以自己另启一个不用跟主库一样。(4)、关闭数据库Sql> shutdown immediate(5)、启动至mount状态Sql> startup mount。(6)、备库重建密码文件orapwd file=$ORACLE_HOME/dbs/orapwstydb password=oracle entries=5 ignorecase=y force=y(7)、创建备库归档目录mkdir –p /u01/app/oracle/archive/stydb(8)、修改备库参数alter system set log_archive_dest_1=’location=/u01/app/oracle/archive/stydb valid_for=(online_logfiles,all_roles) db_unique_name=stydb’;alter system set log_archive_dest_2=’location=/u01/app/oracle/archive valid_for=(standby_logfiles,standby_roles) db_unique_name=stydb’;(9)、 打开逻辑备库Sql> alter database open resetlogs; (10)、 启用sql applySql> alter database start logical standby apply immediate (11)、 备库检查Sql> SELECT db_unique_name,open_mode, database_role,switchover_status,guard_status,protection_mode from v$database; 总结逻辑备库主要用于数据库的滚动升级,可在不停机的状态下升级db,实现高可用性~~3、升级B主机上的逻辑备库(数据库软件从oracle 10.2.0.4升级到oracle 11.2.0.3)过程:参考文档:Complete Checklist for Manual Upgrades to 11gR2 [ID 837570.1]第一部分 – 安装11gR2软件这里对软件的安装就不详细说明了,可以参考相应的文档。这里需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在软件级别上打上PSU或CPU,这样就不用跑两次catbundle.sql,减少停机时间。第二部分 – 初步检查(1)、 在升级之前,确保所有的组件和对象都是valid:col comp_name format a20col status format a30col version format a10select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_name; –针对组件select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status=’INVALID’ order by owner,object_type; –针对对象如果有invalid的对象,运行utlrp.sql重新编译对象。(2)、 确保sys和system下没有重复的对象:col object_name format a20col object_type format a21select object_name, object_type from dba_objects where object_name||object_type in (select object_name||object_type from dba_objects where owner = ‘SYS’) and owner = ‘SYSTEM’;上面这条语句只能返回以下4条记录:OBJECT_NAME OBJECT_TYPE—————————————- —————DBMS_REPCAT_AUTH PACKAGE BODYDBMS_REPCAT_AUTH PACKAGEAQ$_SCHEDULES_PRIMARY INDEXAQ$_SCHEDULES TABLE如果有其它记录返回,则必须根据下面这篇文档把重复记录删除:How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6]第三部分 – 升级前工作Step 1.从11gR2的Oracle Home下拷贝以下文件至一个临时文件夹:$ORACLE_HOME/rdbms/admin/utlu112i.sqlStep 2.登陆数据库,运行:$ sqlplus ‘/ as sysdba’SQL> spool upgrade_info.logSQL> @utlu112i.sqlSQL> spool offSQL>生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。Step 3.从下面这篇文档里可以下载到脚本dbupgdiag.sql:Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID 556610.1]运行这个脚本:cd <location of the script>$ sqlplus / as sysdbasql> alter session set nls_language=’American’;sql> @dbupgdiag.sqlsql> exit如果该脚本报告有invalid对象,运行以下命令重编译无效对象:$ cd $ORACLE_HOME/rdbms/admin$ sqlplus "/ as sysdba"SQL> @utlrp.sqlStep 4.从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到11g的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。Step 5.生成重建dblink的脚本,以防万一数据库需要降级。和Step 4一样,本例是从10.2.0.4升级到11g的,因此不需要该步骤。Step 6.检查Timezone版本,主要参考:Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID 1201253.1]注意:11g的软件里已经自带了版本1-14的Timezone。先检查一下当前timezone版本:SQL> conn / as sysdbaConnected.SQL>SELECT version FROM v$timezone_file;根据当前timezone的版本,又分三种情况:1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤Step 7.检查国家字符集是否是UTF8或AL16UTF16:select value from NLS_DATABASE_PARAMETERS where parameter = ‘NLS_NCHAR_CHARACTERSET’;如果是,则什么都不用做;如果不是,那你就惨了,跟着下面长长的这篇文档一步一步做吧:The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i, 10g and 11g [ID 276914.1]Step 8.收集统计信息,以减少停机时间:$ sqlplus "/as sysdba"SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;Step 9.如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。Step 10.备份Enterprise Manager Database Control Data,因为本例并没有使用EM,所以不需要该步骤。Step 11.配置网络ACL’s,在本例中不需要配置。Step 12.使用以下语句生产分析数据字典的脚本 (as sysdba):Set verify offSet space 0Set line 120Set heading offSet feedback offSet pages 1000Spool analyze.sqlSELECT ‘Analyze cluster "’||cluster_name||’" validate structure cascade;’FROM dba_clustersWHERE owner=’SYS’UNIONSELECT ‘Analyze table "’||table_name||’" validate structure cascade;’FROM dba_tablesWHERE owner=’SYS’AND partitioned=’NO’AND (iot_type=’IOT’ OR iot_type is NULL)UNIONSELECT ‘Analyze table "’||table_name||’" validate structure cascade into invalid_rows;’FROM dba_tablesWHERE owner=’SYS’AND partitioned=’YES’;spool off生成的脚本名称是:analyze.sql现在运行该脚本:$ sqlplus "/ as sysdba"SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sqlSQL> @analyze.sqlStep 13.确保所有的snapshot都已被成功刷新,且replication已被关闭:SELECT DISTINCT(TRUNC(last_refresh))FROM dba_snapshot_refresh_times;Step 14.确保当前没有文件需要介质恢复:SELECT * FROM v$recover_file;上面语句没有返回结果才是正确的。Step 15.确保当前没有文件运行在备份模式下:SELECT * FROM v$backup WHERE status != ‘NOT ACTIVE’;上面语句没有返回结果才是正确的。Step 16.解决分布式事务。先查询是否还有分布式事务:SQL> select * from dba_2pc_pending;如果有返回结果,则:SQL> SELECT local_tran_id FROM dba_2pc_pending;SQL> EXECUTE dbms_transaction.purge_lost_db_entry(”);SQL> COMMIT;Step 17.检查是否有Standby数据库存在:SELECT SUBSTR(value,INSTR(value,’=’,INSTR(UPPER(value),’SERVICE’))+1)FROM v$parameterWHERE name LIKE ‘log_archive_dest%’ AND UPPER(value) LIKE ‘SERVICE%’;如果有返回结果,则在升级之前,要保证Standby和Primary是处于同步的状态。Step 18.禁用所有的batch和cron jobsStep 19.确保用户SYS和SYSTEM的默认表空间都是SYSTEM:SQL> SELECT username, default_tablespace FROM dba_users WHERE username in (‘SYS’,’SYSTEM’);如果不是,则要用以下语句修改为SYSTEM:SQL> ALTER user SYS default tablespace SYSTEM;SQL> ALTER user SYSTEM default tablespace SYSTEM;Step 20.确保AUD$表建在SYS用户下和SYSTEM表空间下:SQL> SELECT owner,tablespace_name FROM dba_tables WHERE table_name=’AUD$’;如果不是,则要做相应的修改。Step 21.检查是否有外部认证的SSL用户:SQL> SELECT name FROM sys.user$ WHERE ext_username IS NOT NULL AND password = ‘GLOBAL’;如果有,则在升级之后记得要做Step 34。Step 22.记下数据文件、联机日志文件和控制文件的位置:SQL> SELECT name FROM v$controlfile;SQL> SELECT file_name FROM dba_data_files;SQL> SELECT group#, member FROM v$logfile;且备份listener.ora, tnsnames.ora, sqlnet.ora等文件。Step 23.停止listener:$ lsnrctl stop停止其它可执行程序,如dbconsole, isqlplus等$ emctl stop dbconsole$ isqlplusctl stopStep 24.关闭数据库:$ sqlplus "/as sysdba"SQL> shutdown immediate;接着对全库做个冷备。Step 25.以10g的pfile为模板,并根据Step 2生成的upgrade_info.log里的建议,为11g创建一个新的pfile。Step 26.如果数据库原本是运行在archive模式下,最好先改为noarchive,这样可以减少升级停机时间,升级成功后再重新改回archive模式。Step 27.该步骤是针对Windows系统的,本例略过。第四部分 – 升级Step 28.升级前的检查步骤基本上已经完成了,在跑升级脚本之前,需要把相关参数改为指向新的11g软件:$ export ORACLE_HOME=<location of Oracle 11.2>$ export PATH=$ORACLE_HOME/bin:$PATH$ export ORACLE_BASE=<Oracle_Base set during installation>接着修改oratab中的内容,使其指向新的11g Home目录:Sample /etc/oratab#orcl:/opt/oracle/product/10.2/db_1:Norcl:/opt/oracle/product/11.2/db_1:NStep 29.前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态:$ cd $ORACLE_HOME/rdbms/admin$ sqlplus "/ as sysdba"SQL> startup UPGRADE接着开始跑升级脚本:SQL> set echo onSQL> SPOOL upgrade.logSQL> @catupgrd.sqlSQL> spool off这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态:$ sqlplus "/as sysdba"SQL> STARTUPSQL> @utlu112s.sql如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本:SQL> @catuppst.sql前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。接着重新编译一下无效对象:SQL> @utlrp.sql最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。第五部分 – 升级后工作Step 30.修改listener.ora,使listener执行新的11g Home,然后重新启动listener:lsnrctl startStep 31.再次检查Step 28中设置的环境变量确实是指向了新的11g Home。Step 32.Timezone数据库层面的升级。注意:该步骤是否执行是和Step 6中的检查结果相关的,只有当Timezone的版本小于14时,才需要执行该步骤。主要参考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]1)Timezone升级前的准备工作:先检查一下当前的timezone版本:conn / as sysdbaSELECT version FROM v$timezone_file;SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE ‘DST_%’ ORDER BY PROPERTY_NAME;一个典型的输出是:PROPERTY_NAME VALUE—————————— ——————————DST_PRIMARY_TT_VERSION 4DST_SECONDARY_TT_VERSION 0DST_UPGRADE_STATE NONE然后开始准备工作:alter session set "_with_subquery"=materialize;exec DBMS_DST.BEGIN_PREPARE(14);接着检查准备状态:SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) valueFROM DATABASE_PROPERTIESWHERE PROPERTY_NAME LIKE ‘DST_%’ORDER BY PROPERTY_NAME;一个典型的输出是:PROPERTY_NAME VALUE—————————— ——————————DST_PRIMARY_TT_VERSION 4DST_SECONDARY_TT_VERSION 14DST_UPGRADE_STATE PREPARE– truncate logging tables if they exist.TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;TRUNCATE TABLE sys.dst$affected_tables;TRUNCATE TABLE sys.dst$error_table;– log affected dataset serveroutput onBEGINDBMS_DST.FIND_AFFECTED_TABLES(affected_tables => ‘sys.dst$affected_tables’,log_errors => TRUE,log_errors_table => ‘sys.dst$error_table’);END;/下面的语句都不能有返回结果:SELECT * FROM sys.dst$affected_tables;SELECT * FROM sys.dst$error_table;SELECT * FROM sys.dst$error_table where ERROR_NUMBER= ‘1883’;SELECT * FROM sys.dst$error_table where ERROR_NUMBER= ‘1878’;SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in (‘1878′,’1883’);– end prepare window, the rows above will stay in those tables.EXEC DBMS_DST.END_PREPARE;– check if this is endedSELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) valueFROM DATABASE_PROPERTIESWHERE PROPERTY_NAME LIKE ‘DST_%’ORDER BY PROPERTY_NAME;一个典型的输出是:PROPERTY_NAME VALUE—————————— ——————————DST_PRIMARY_TT_VERSION 4DST_SECONDARY_TT_VERSION 0DST_UPGRADE_STATE NONE2)真正开始升级Timezoneconn / as sysdbashutdown immediate;startup upgrade;set serveroutput onpurge dba_recyclebin;TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;TRUNCATE TABLE sys.dst$affected_tables;TRUNCATE TABLE sys.dst$error_table;alter session set "_with_subquery"=materialize;EXEC DBMS_DST.BEGIN_UPGRADE(14);SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) valueFROM DATABASE_PROPERTIESWHERE PROPERTY_NAME LIKE ‘DST_%’ORDER BY PROPERTY_NAME;一个典型的输出是:PROPERTY_NAME VALUE—————————— ——————————DST_PRIMARY_TT_VERSION 14DST_SECONDARY_TT_VERSION 4DST_UPGRADE_STATE UPGRADE下面这条语句应该没有返回结果:SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS=’YES’;重启数据库:shutdown immediatestartup升级相关的table:alter session set "_with_subquery"=materialize;set serveroutput onVAR numfail numberBEGINDBMS_DST.UPGRADE_DATABASE(:numfail,parallel => TRUE,log_errors => TRUE,log_errors_table => ‘SYS.DST$ERROR_TABLE’,log_triggers_table => ‘SYS.DST$TRIGGER_TABLE’,error_on_overlap_time => FALSE,error_on_nonexisting_time => FALSE);DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :numfail);END;/如果没有错误,则结束升级:VAR fail numberBEGINDBMS_DST.END_UPGRADE(:fail);DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :fail);END;/最后一次检查:SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) valueFROM DATABASE_PROPERTIESWHERE PROPERTY_NAME LIKE ‘DST_%’ORDER BY PROPERTY_NAME;典型输出是:PROPERTY_NAME VALUE—————————— ——————————DST_PRIMARY_TT_VERSION 14DST_SECONDARY_TT_VERSION 0DST_UPGRADE_STATE NONESELECT * FROM v$timezone_file;FILENAME VERSION——————– ———-timezlrg_14.dat 14Step 33.该步骤可省略。Step 34.升级外部认证SSL用户。由于本例是从10.2升级到11g,所以可忽略该步骤。Step 35.如果在Step 9中,你关闭了Vault,则必须在此步骤重新启用。Note 453903.1- Enabling and Disabling Oracle Database Vault in UNIXStep 36.忽略Step 37.创建spfile:SQL> create spfile from pfile;Step 38.锁住系统用户,可忽略。Step 39.升级Oracle Text,可忽略。Step 40.升级Oracle Clusterware,可忽略。Step 41.配置EM,可忽略。最后,记得修改compatible参数:SQL> ALTER SYSTEM SET COMPATIBLE = ’11.2.0’ SCOPE=SPFILE;4、切换逻辑DG,把B主机上的数据库切换为主库过程:(1)、检查主库上SWITCHOVER_STATUS 的状态值,这里会有两种值,分别是 TO STANDBY 和 SESSIONS ACTIVE 。如果是其他的值,这里就要暂停一下,解决掉这个问题才能继续下一步。SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS——————–SESSIONS ACTIVE(2)、将主库设置为logical standby 的切换准备阶段SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;Database altered.(3)、检查主库上SWITCHOVER_STATUS 的状态值,应该是PREPARING SWITCHOVERSQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS——————–PREPARING SWITCHOVER(4)、将逻辑备库设置为主库的切换准备阶段SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;Database altered.(5)、执行结束后,V$DATABASE.SWITCHOVER_STATUS 的值应该是PREPARING SWITCHOVER 。SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS——————–PREPARING SWITCHOVER(6)、第九步,将备库切换成主库在备库上执行这个SQLA LTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;到这一步,我们已经完成了切换工作。主库变成了备库,备库变成了主库,已经是一个新的data guard 环境。但是,要使这个DATAGUARD 环境真正运行起来,主库和备库的初始化参数需要做一些修改。将原来的备库上的初始化参数修改一下, 修改为alter system set fal_client=” scope=both;alter system set fal_server=” scope=both;alter system set log_archive_dest_1=’location=+VG2/’ scope=both;alter system set log_archive_dest_2=’SERVICE=SWITCH_READER LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=XXXDB’ scope=both;将原来的主库上的初始化参数修改一下, 修改为alter system set fal_client=’SWITCH_STANDBY’ scope=both;alter system set fal_server=’SWITCH_PRIMARY’ scope=both;alter system set log_archive_dest_1=’LOCATION=+VG2/ VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=XXXdB’ scope=both;alter system set log_archive_dest_2=’LOCATION=+LOGVG/ VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=XXXDB’ scope=both;新的备库,就是原来的主库,要加上standby logfile 。ALTER DATABASE ADD STANDBY LOGFILE group 21 (‘+VG2/standby_redo21.log’) SIZE 52428800 reuse;ALTER DATABASE ADD STANDBY LOGFILE group 22 (‘+VG2/standby_redo22.log’) SIZE 52428800 reuse;ALTER DATABASE ADD STANDBY LOGFILE group 23 (‘+VG2/standby_redo23.log’) SIZE 52428800 reuse;这种转换方式,可以用于数据库的数据迁移工作。(7)、如果switch over失败,可以考虑直接激活逻辑DG 把B主机上的数据库变成主库:———–由于备库现在是11g主库是10g并且主要目标是实现滚动升级,,所以可以直接激活逻辑备库,之后再搭建一个11g的新物理备库。alter database stop logical standby apply;alter database activate logical standby database ;

5、重新搭建物理DG,至此整个升级过程完成。搭建物理DG具体可参考联机文档:

———————————-敬请期待基于oracle11g升级到oracle12c的详细讲解与笔记!!!————————————–

使你疲倦的不是前面的高山,而是你鞋里的一粒沙子。

基于oracle dataguard滚动升级(oracle10.2.0.1

相关文章:

你感兴趣的文章:

标签云: