如何将12c数据库降级到之前的版本?

本文档的目的是提供将先前升级的数据库从Oracle 12c降级到先前版本的指南和清单:11.2.0.3、11.2.0.2、11.6538。

必须注意,当数据库实例从当前版本降级到升级前的版本时,数据库不会返回到升级前完全相同的状态。根据所涉及的版本,升级过程将进行不可逆的更改。用户可以通过使用降级过程打开和访问以前版本的数据库实例。这通常就足够了。

可能需要其他纠正措施(如卸载/重新安装或升级到当前的修补程序集级别)来解决降级遗留的问题。如果目标是将实例完全恢复到升级前的状态,还应该使用其他过程,包括完全恢复到升级前的状态。

本文中讨论的过程是基于脚本的降级。本文不介绍使用导出/导入、数据泵或其他方法将数据从一个版本移动到另一个版本。

在开始降级过程之前,降级到的Oracle二进制文件版本应该在服务器上可用/已安装。如果卸载要降级的Oracle可执行文件,请将Oracle二进制文件重新安装到要降级的正确版本/补丁级别。

此过程的目的是将已成功升级到12c的数据库降级,而不是用于从失败的升级中恢复。您只能降级到升级前使用的版本和补丁级别。

可在10.2.0.5、11.1.0.7或11.2.0.2及更高版本上进行直接升级。除了10.2.0.5,这些版本都可以降级。

例如,如果应用中间补丁11.1.0.7从Oracle 11.0.6升级到Oracle 12c(12.1.0)。降级只能在直接升级的版本上执行。

例外情况:

虽然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以上。

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

卸载和回滚修补程序的步骤记录在相关修补程序的自述文件中。

未能卸载和回滚补丁可能会导致降级失败,包括未能重新验证字典对象。

数据库云服务器捆绑补丁示例,流程如下:

卸载补丁程序

例如:$ opatch auto/u 01/app/Oracle/patches/14103267-roll back。

回滚补丁应用期间应用的任何SQL:

示例:SQL & gt@ RDBMS/admin/cat bundle _ EXA _ & lt;数据库SID & gt_ROLLBACK.sql,用于回滚sql更改。

解决办法

降级前步骤

-12c中需要XML DB组件。

在升级到12c的过程中,将安装XML DB组件(如果未安装)。

从12c降级将删除已安装的XDB组件。

-企业管理器不支持降级。降级前重新配置Oracle EM控件。请参见

Oracle数据库升级指南12c版本1(12.1)e 17642-10

6将Oracle数据库降级到早期版本

6.6.5降级Oracle数据库后恢复Oracle Enterprise Manager

-在升级到12c的过程中,将删除数据库控制资料档案库。降级后,重新配置DB控制。

注870877.1如何在将单实例数据库升级到其他版本之前保存Oracle Enterprise Manager数据库控制数据?

注876353.1如何恢复Oracle企业管理器数据以将单实例数据库降级到以前的/源版本?

与兼容的参数不能更改为12.1.0。

-禁用Data Vault(如果已启用)。

注意803948.1如何在11g (UNIX)中卸载或重新安装Database Vault

注453902.1在WINDOWS中启用和禁用Oracle Database Vault

-如果数据库使用Oracle Label Security,请在新的Oracle数据库12c Oracle主目录中运行Oracle Label Security (OLS)预处理降级olspredowngrade.sql脚本(可从$Oracle _ HOME/RDBMS/admin获得)。

-时区版本应该相同。

-取消设置并指向12c主目录的ORA_TZFILE(如果已设置)。

-如果数据库中存在Oracle Application Express,您必须将apxrelod.sql文件从Oracle数据库12C$Oracle _ home/apex/目录复制到Oracle主目录以外的目录,例如系统上的临时目录,以便以后执行。

-如果对象是基于固定对象创建的,请删除它们以避免可能的ORA-00600错误。您可以在降级后重新创建这些对象。

-如果集群数据库降级,请完全关闭实例,并将CLUSTER_DATABASE的初始化参数更改为FALSE。降级后,此参数必须设置回TRUE。

满足以上先决条件后,可以继续降级。

数据库降级步骤

1)确保所有数据库组件都是有效的。降级只能从成功升级的数据库执行。若要验证数据库组件的状态,请执行以下查询。

以SYS用户身份连接到数据库。

col comp_id格式a10

col comp_name格式a30

col版本格式a10

列状态格式a8

从dba_registry中选择substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10)版本,状态

2)验证不存在属于sys/system的无效对象。

select owner,count(object_name)“无效对象计数”from dba_objects where status!='VALID '和所有者在(' SYS ',' SYSTEM ')group by owner;

如果计数为零,可以继续降级。

如果存在无效对象,则多次执行utlrp.sql。如果对象不能被解析为有效状态,则不能再降级。建立SR或在DBA社区上发帖寻求帮助。

或者,对于1和2,运行以下脚本:

注意556610.1脚本收集数据库升级/迁移诊断信息(dbupgdiag.sql)

3)关闭数据库

立即关闭

4)对12c数据库进行备份。

5)以降级模式启动数据库。

启动降级;

6)执行降级脚本。

Sql & gt假脱机降级. log

Sql & gt@ $ ORACLE _ HOME/RDBMS/admin/catdwgrd . SQL

注意:

$ORACLE_HOME应该指向12c主目录。

catdwgrd.sql脚本将数据库中的所有组件降级到受支持的主版本或补丁程序集版本(最初升级的版本)。

Sql & gt松开线轴

Sql & gt立即关闭

退出SQL Plus

Sql & gt退出;

7)如果操作系统是LINUX/UNIX:

将以下环境变量更改为要降级到的源数据库:

ORACLE_HOME

小路

编辑/etc/oratab或/var/opt/Oracle/oratab进行更改。

将数据库映射到源数据库的Oracle主目录。

如果操作系统是Windows,请完成以下步骤:

A.停止所有Oracle服务,包括Oracle数据库12c的OracleServiceSID Oracle服务,其中SID是实例名。

例如,如果SID是ORCL,请在命令提示符下输入以下内容:

c:\ & gt;网络停止OracleServiceORCL

b .在命令提示符下,通过运行ORADIM命令删除Oracle服务。如果出现提示,请输入此Windows系统上活动标准用户帐户的密码。

例如,如果SID是ORCL,请输入以下命令:

c:\ & gt;ORADIM -DELETE -SID ORCL

C.在命令提示符下,使用ORADIM命令创建要降级的数据库的Oracle服务。

c:\ & gt;ORADIM-NEW-SID SID-int pwd PASSWORD-MAXUSERS用户

-STARTMODE AUTO-PFILE ORACLE _ HOME \ DATABASE \ init sid。奥拉

8)恢复配置文件

恢复配置文件(密码文件、参数文件等。)到降级版本的ORACLE_HOME。

9)如果这是一个Oracle RAC数据库,请执行以下命令将数据库修改为单实例模式:

SET CLUSTER_DATABASE=FALSE

10)从降级版本$ORACLE_HOME/rdbms/admin目录执行catrelod脚本。

启动sqlplus,以具有sysdba权限的用户SYS的身份连接到数据库实例,然后以升级模式启动数据库:

:CD$ORACLE _ HOME/RDBMS/admin

:sqlplus

sql & gt以sysdba身份连接sys

sql & gt启动升级

sql & gtspool catrelod.log

sql & gt@?/rdbms/admin/catrelod.sql

sql & gt松开线轴

catrelod.sql脚本在降级的数据库中重新加载每个数据库组件的适当版本。

11)运行utlrp.sql脚本:

SQL & gt@utlrp.sql

Sql & gt退出;

utlrp.sql脚本重新编译先前处于无效状态的所有现有PL/SQL模块,如包、过程、类型等。

12)检查降级数据库的状态:

注意556610.1脚本收集数据库升级/迁移诊断信息(dbupgdiag.sql)

此sql脚本是一组查询语句,用于提供用户友好的输出,以诊断数据库在升级前后的状态。该脚本将创建一个名为db _ upg _ diag _的文件。日志文件。

13),无效的QT视图可以在sys users下找到。这是因为视图从基表中选择了错误的列。您需要重新创建这些视图。

请参考说明:

注1520209.1 QT_*BUFER视图从12C降级后无效

降级后的步骤:

1)如果您要降级到Oracle数据库11g版本1(11.1 . 0 . 7)并且数据库中有Oracle Application Express,请转到您复制apxrelod.sql脚本(降级前)的目录

运行apxrelod.sql脚本以手动重新加载Oracle Application Express:

SQL & gt@apxrelod.sql

运行apxrelod.sql脚本以阻止软件包APEX_030200。WWV流帮助因以下错误而无效:

PLS-00201:必须声明标识符' CTX_DDL '

2)如果数据库中启用了Oracle Label Security,请执行以下脚本。

A.将olstrig.sql脚本从Oracle数据库12c的Oracle主目录复制到要将数据库降级到的版本的Oracle主目录。

B.在降级版本的Oracle主目录中,运行olstrig.sql,使用Oracle标签安全策略在表上重新创建DML触发器:

SQL & gt@olstrig.sql

3)如果降级集群数据库,必须运行以下命令来降级Oracle Clusterware数据库配置:

$ srvctl将database-d db-unique-name-o Oracle home-t降级到_version

其中,db-unique-name是数据库名(不是实例名),oraclehome是降级数据库的旧Oracle主目录的位置,to_version是数据库降级到的数据库版本。