接着对全库做个冷备。
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=
$ export ORACLE_BASE=
接着修改oratab中的内容,使其指向新的11g Home目录: Sample /etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:N orcl:/opt/oracle/product/11.2/db_1:N
Step 29.
前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态: $ cd $ORACLE_HOME/rdbms/admin $ sqlplus \SQL> startup UPGRADE 接着开始跑升级脚本: SQL> set echo on SQL> SPOOL upgrade.log SQL> @catupgrd.sql SQL> spool off
这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态: $ sqlplus \SQL> STARTUP SQL> @utlu112s.sql
如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本: SQL> @catuppst.sql
前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。
接着重新编译一下无效对象: SQL> @utlrp.sql
最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。
第五部分 - 升级后工作
Step 30.
修改listener.ora,使listener执行新的11g Home,然后重新启动listener: lsnrctl start
Step 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 sysdba
SELECT 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 4 DST_SECONDARY_TT_VERSION 0 DST_UPGRADE_STATE NONE 然后开始准备工作:
alter session set \exec DBMS_DST.BEGIN_PREPARE(14); 接着检查准备状态:
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 4 DST_SECONDARY_TT_VERSION 14 DST_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 data set serveroutput on BEGIN
DBMS_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 ended
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 4 DST_SECONDARY_TT_VERSION 0 DST_UPGRADE_STATE NONE
2)真正开始升级Timezone conn / as sysdba shutdown immediate; startup upgrade; set serveroutput on purge dba_recyclebin;
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables; TRUNCATE TABLE sys.dst$error_table;
alter session set \EXEC DBMS_DST.BEGIN_UPGRADE(14);
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 14 DST_SECONDARY_TT_VERSION 4 DST_UPGRADE_STATE UPGRADE 下面这条语句应该没有返回结果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES'; 重启数据库:
shutdown immediate startup
升级相关的table:
alter session set \set serveroutput on VAR numfail number BEGIN
DBMS_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 number BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail); END; /
最后一次检查:
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 14 DST_SECONDARY_TT_VERSION 0 DST_UPGRADE_STATE NONE SELECT * FROM v$timezone_file; FILENAME VERSION -------------------- ---------- timezlrg_14.dat 14
Step 33. 该步骤可省略。
Step 34.
升级外部认证SSL用户。
由于本例是从10.2升级到11g,所以可忽略该步骤。
Step 35.
如果在Step 9中,你关闭了Vault,则必须在此步骤重新启用。
Note 453903.1- Enabling and Disabling Oracle Database Vault in UNIX
Step 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;