11: 关闭将脚本结果记录到日志文件:
SQL> SPOOL OFF
查看日志文件并验证在降级过程中无错误生成。在步骤 9 中命名日志文件,建议名称为 downgrade.log。更正在此文件中发现的所有问题并根据需要重新运行降级脚本。
12: 关闭实例:
SQL> SHUTDOWN IMMEDIATE
13: 退出 SQL*Plus.
14: 配置环境指向针对老版本的 Oracle_HOME。如果操作系统是 Linux 或 UNIX,请更改下列环境变量以指向要降级到的版本所在目录:
ORACLE_HOME
LD_LIBRARY_PATH
LIBPATH
PATH
还需要检查 oratab 文件和所有设置了 ORACLE_HOME 值的客户端脚本是否已指向降级的 Oracle 主目录。
15: 如果操作系统是 Windows,请完成以下步骤:
a: 停止所有 Oracle 服务,包括 Oracle Database 11gR2 (11.2) 数据库的 OracleServiceSID Oracle 服务,其中 SID 是实例名称。
例如,如果 SID 是 ORCL,则在命令提示符下输入以下内容:
C:\> NET STOP OracleServiceORCL
b: 通过执行 ORADIM 命令在命令提示符下删除 Oracle 服务。例如,如果 SID 是 ORCL,则输入以下命令:
C:\> ORADIM -DELETE -SID ORCL
c. 使用 ORADIM 命令创建要在命令提示符下降级的数据库的 Oracle服务。
C:\> ORADIM -NEW -SID SID -INTPWD PASSWORD -MAXUSERS USERS -STARTMODE AUTO -PFILE ORACLE_HOME\DATABASE\INITSID.ORA
16: 恢复降级所至版本的配置文件(例如,参数文件、口令文件等)。
17: 在系统提示符下,转至之前版本的 ORACLE_HOME/rdbms/admin 目录。
18: 启动 SQL*Plus.
19: 以具有 SYSDBA 权限的用户身份连接至数据库实例。
20: 启动实例:
SQL> STARTUP UPGRADE
21: 设置系统以将结果记录到日志文件,以备稍后的成功验证:
SQL> SPOOL reload.log
22: 运行 catrelod.sql:
SQL> @catrelod.sql
catrelod.sql 脚本重新加载降级数据库中所有数据库组件的相应版本。
23: 如果要降级至 Oracle Database 11g Release 1 (11.1.0.6),请运行 xsrelod.sql 脚本:
SQL> @xsrelod.sql
运行 xsrelod.sql 脚本以避免以下错误:
PLS-00306: wrong number or types of arguments in call to 'INVALIDATE_DSD_CACHE' DBMS_XS_DATA_SECURITY_EVENTS PL/SQL: Statement ignored
24: 如果要降级至 Oracle Database 10g Release 1 (10.1.0.5) 并且数据库中安装有 XDB,请在运行 catrelod.sql 之后运行以下脚本:
SQL> @dbmsxdbt.sql
25: 如果这是一个 Oracle RAC 数据库,请执行以下命令以将数据库返回 RAC 模式:
SQL> SET CLUSTER_DATABASE=TRUE
26: 关闭将脚本结果记录到日志文件:
SQL> SPOOL OFF
27: 检查日志文件并验证软件包和过程编译成功。
28: 关闭并重新启动实例以进行正常运行:
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
29: 如果该数据库针对 Oracle Label Security 进行了配置并打算降级至 Oracle Database 10g Release 1 (10.1),请执行此步骤。
a. 将 olstrig.sql 脚本从 Oracle Database 11g Release 2 (11.2) Oracle 主目录复制到将要降至数据库版本的 Oracle 主目录。
b. 运行 olstrig.sql 通过 Oracle Label Security 策略在表上重新创建 DML 触发器。
SQL> @olstrig.sql
请参阅《Oracle Label Security Administrator's Guide》了解更多信息。
30: 运行 utlrp.sql 脚本:
SQL> @utlrp.sql
utlrp.sql 脚本将重新编译所有之前处于 INVALID 状态的现有 PL/SQL 模块,如软件包、过程、类型等。
31: 一些已安装的组件可能会显示实例升级前显示的较早版本。如果要降级至已安装了修补程序集的版本,请查看并比较修补程序集 readme.txt 文件与当前组件版本。如果降级组件的版本更早,则:
在升级模式下重新启动实例。
运行 catupgrd.sql 脚本
按照修补程序集 Readme 文件重新检查组件版本。
32: 退出 SQL*Plus。
数据库现已降级。
降级后步骤
33: 恢复 Oracle Enterprise Manager 备份。
如果在升级前备份了 Oracle Enterprise Manager 数据,则可将其进行恢复。
如果未进行备份,可根据需要重新创建 Oracle Enterprise Manager。
34: 启用 Database Vault。
降级后启用 Data Vault 的步骤:
以已授予 DV_OWNER 角色的用户身份连接至 SQL*Plus 并执行以下语句:
ALTER TRIGGER DVSYS.DV_BEFORE_DDL_TRG ENABLE;
ALTER TRIGGER DVSYS.DV_AFTER_DDL_TRG ENABLE;
35: 重新加载 Oracle Application Express
转至将 apxrelod.sql 文件复制到的目录(降级步骤的第 3 步),通过运行 apxrelod.sql 文件手动重新加载 Oracle Application Express。请注意:,数据库必须以 UPGRADE 模式启动,以运行 apxrelod.sql 脚本。
36: 如果原 ORACLE_HOME 被卸载, 您需要在原 ORACLE_HOME 中停止监听,移动或重建监听在低版本的ORACLE_HOME中,并启动。这个步骤期望您做到但不是必须的。
37: 如果有patch (包括 PSU, CPU, Exadata Bundle Patches 或者 One-off Patches) 被打在原 ORACLE_HOME 中, 那么这个patch对应的 post installation 步骤 (SQL) 必须被运行. 请查看每个patch的readme。
38: 如果降级的是集群数据库,那么必须运行以下命令来降级集群数据库配置:
$ srvctl downgrade database -d db-unique-name -o oraclehome -t to_version
db-unique-name 为数据库名(不是实例名),oraclehome 是被降级数据库的原 Oracle home,to_version 为降级至的版本号。