探索Oracle之数据库升级八12cDowngrade11gR2(一)

2015-01-22 21:15:54 · 作者: · 浏览: 27

探索Oracle之数据库升级八
12c Downgrade 11gR2

前言:

我们前面已经完成了11gR2 upgrade to 12c 的升级,整个过程还是比较顺利的,虽然和以前版本升级有些不太一样,但是整个难度不是太大,但是由于太多的特性不同,大大的加长了升级的时间。

但是对于Oracle 12c降回到之前版本,会有些限制,只能降级到升级前所用的版本和补丁级别。

如果我们是直接从10.2.0.5、11.1.0.7或版本11.2.0.2及更高版进行升级。那么将无法降级到10.2.0.5。

如果通过应用中间补丁程序11.1.0.7 从Oracle 11.1.0.6升级到Oracle 12c(12.1.0),则不能降级到Oracle 11.1.0.6。降级只能对直接执行升级版本执行。

例外:

虽然可以对 10.2.0.5 直接升级,但降级不适用于 10.2.0.5。

这是因为在升级过程中,compatible 参数已设置为最低 11.0.0。这使得无法降级到 10.2.0.5。可以降级的版本为 11.1.0.7、11.2.0.2、11.2.0.3 或更高版本。

如果有任何补丁程序应用到了从升级后的主目录运行的源数据库,则需要先回退,然后才能开始降级过程。

卸载和回退补丁程序的步骤记录在所涉及补丁程序的自述文件中。

未能卸载和回退补丁程序可能会导致无法降级,包括无法重新验证字典对象。

Exadata 捆绑补丁程序示例,其过程为:

卸载补丁程序

示例: $ opatch auto /u01/app/oracle/patches/14103267 -rollback

回退任何在补丁程序应用过程中应用的 SQL:

示例: SQL> @rdbms/admin/catbundle_EXA_<数据库 SID>_ROLLBACK.sql,用于回退 SQL 更改。
一、开始执行降级前的检查操作
升级前确保所有组件状态正常,且没有无效组件

###检查各组件状态
SQL> select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry;

COMP_ID COMP_NAME VERSION STATUS
---------- ------------------------------ ---------- --------
DV Oracle Database Vault 12.1.0.1.0 VALID
APEX Oracle Application Express 4.2.0.00.2 VALID
OLS Oracle Label Security 12.1.0.1.0 VALID
SDO Spatial 12.1.0.1.0 VALID
ORDIM Oracle Multimedia 12.1.0.1.0 VALID
CONTEXT Oracle Text 12.1.0.1.0 VALID
OWM Oracle Workspace Manager 12.1.0.1.0 VALID
XDB Oracle XML Database 12.1.0.1.0 VALID
CATALOG Oracle Database Catalog Views 12.1.0.1.0 VALID
CATPROC Oracle Database Packages and T 12.1.0.1.0 VALID
JAVAVM JServer JAVA Virtual Machine 12.1.0.1.0 VALID

COMP_ID COMP_NAME VERSION STATUS
---------- ------------------------------ ---------- --------
XML Oracle XDK 12.1.0.1.0 VALID
CATJAVA Oracle Database Java Packages 12.1.0.1.0 VALID
APS OLAP Analytic Workspace 12.1.0.1.0 VALID
XOQ Oracle OLAP API 12.1.0.1.0 VALID
RAC Oracle Real Application Cluste 12.1.0.1.0 OPTION O
                                                     FF
16 rows selected.

#####检查无效组件
SQL> select owner, count(object_name) "Invalid object count" from dba_objects where status!='VALID' and owner in ('SYS','SYSTEM') group by owner;

no rows selected

SQL>

二、开始执行降级操作
###2.1 关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

###2.1 将数据库启动到downgrade模式
SQL> startup downgrade;
ORACLE instance started.

Total System Global Area 5027385344 bytes
Fixed Size 2298736 bytes
Variable Size 1040190608 bytes
Database Buffers 3976200192 bytes
Redo Buffers 8695808 bytes
Database mounted.
Database opened.
SQL>

###2.2 运行降级脚本
SQL> spool downgrade_12c_to_11g.log 
SQL> @$ORACLE_HOME/rdbms/admin/catdwgrd.sql
………
PL/SQL procedure successfully completed.

SQL> 
SQL> -- lrg 7259350: objects created in this script need their flags that won't fit
SQL> -- in a ub2 cleared
SQL> update obj$mig set flags=bitand(flags,65535) where flags>65535;

222 rows updated.

SQL> 
SQL> /*****************************************************************************/
SQL> /* Step 9 - Swap bootstrap$mig with bootstrap$
SQL> */
SQL> /*****************************************************************************/
SQL> /* According to JKLEIN, performing 3 count(*) will ensure there are
SQL> no dirty itl's present in bootstrap$. */
SQL> select count(*) from bootstrap$;

  COUNT(*)
----------
        60

1 row selected.

SQL> select count(*) fr