1、环境准备

环境准备工作,需要在升级前完成,这里不做过多介绍。
我的环境如下:
虚拟机:rhel 7.4
升级前数据库版本:oracle 12.1.0.2
升级后数据库版本:oracle 12.2.0.1
参考文档:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/upgrd/checklists-for-oracle-database-upgrade.html#GUID-5FAA2A12-87C5-4D65-B7AE-C9D67FA4F05F

2、升级前工作

1、升级前一定要先备份数据,防止升级失败。
2、创建测试数据

SQL> create user ogg identified by ogg;
User created.
SQL> grant dba to ogg;
Grant succeeded.
SQL> create table ogg.a (
  2    dd nvarchar2(11),
  3    aa nvarchar2(11)
  4  )
  5  ;
Table created.
SQL> 
SQL> insert into ogg.a VALUES ('aa','22');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from ogg.a;
DD          AA
----------- -----------
aa          22
SQL> exit

3、安装升级

切换到oracle12.2.0.1的安装目录执行runInstaller

[oracle@test1 ~]$ cd /soft/database/
[oracle@test1 database]$ ./runInstaller 

1、取消安全更新,下一步
在这里插入图片描述
在这里插入图片描述
2、选择升级现有数据库。
在这里插入图片描述
3、下一步
在这里插入图片描述
4、指定oracle12.2软件的安装目录。
在这里插入图片描述
5、下一步
在这里插入图片描述
6、下一步
在这里插入图片描述
在这里插入图片描述
7、安装
在这里插入图片描述
8、另外一个窗口以root用户执行脚本
在这里插入图片描述

[root@test1 soft]# /u01/app/oracle/product/12.2.0/dbhome_1/root.sh 
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/12.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
The contents of "dbhome" have not changed. No need to overwrite.
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n) 
[n]: y
   Copying oraenv to /usr/local/bin ...
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Do you want to setup Oracle Trace File Analyzer (TFA) now ? yes|[no] : 
y
Installing Oracle Trace File Analyzer (TFA).
Log File: /u01/app/oracle/product/12.2.0/dbhome_1/install/root_test1_2020-06-22_13-57-40-716080198.log
Finished installing Oracle Trace File Analyzer (TFA)
[root@test1 soft]# 

9、输入原库的sys用户和密码。
在这里插入图片描述
10、下一步
在这里插入图片描述
11、默认,下一步。
在这里插入图片描述
12、如果之前有手动备份数据,选择第三项,没有备份选择第二项进行数据备份。
在这里插入图片描述
12、默认监听,下一步。
在这里插入图片描述
13、下一步。
在这里插入图片描述
14、下一步,完成
在这里插入图片描述
15、等待升级完成。
在这里插入图片描述
16、等待完成即可。
17、修改环境变量到新的ORACLE_HOME
18、验证数据是否一致。

DBUA

降级

降级前准备

1、验证所有组件和字典对象

set  pagesize500
set  linesize  100
col comp_id format a10
col comp_name format a30
col version format a10
col status format a8
select name from v$database;
select name from v$version;
select  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;  
select  owner,object_type,count(*)  from  dba_objects  where  status='INVALID'   group  by  owner,object_type  order  by owner
select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry
select owner, count(object_name) "Invalid object count" from dba_objects where status!='VALID' and owner in ('SYS','SYSTEM') group by owner;

如果有无效对象,则执行 utlrp.sql 多次,如果对象无法解析为有效状态,则不能继续降级。

$  cd  $ORACLE_HOME/rdbms/admin   
$  sqlplus  "/  as  sysdba"   
SQL>  @utlrp.sql

2、如果已在数据库上启用了 Oracle Database Vault,如果输出为TRUE,则需要禁用,输出为FALSE则进行下一步。

SQL> SELECT * FROM CDB_DV_STATUS;
禁用 Oracle Database Vault 触发器: 
SQL>CONNECT  DVSYS/DVSYS    
SQL>ALTER  TRIGGER  DV_BEFORE_DDL_TRG  DISABLE;    
SQL>ALTER  TRIGGER  DV_AFTER_DDL_TRG  DISABLE; 

3、如果设置了操作系统参数 ORA_TZFILE,请取消其设置。如果不取消设置 ORA_TZFILE 变量,连接至数据库时可能会生成以下错误:

SP2-1503: Unable to initialize Oracle call interface 
SP2-0152: ORACLE may not be functioning properly

4、如果在降级至之前的数据库版本之前,已运行 DBMS_DST 软件包将时区版本升级至新版本,那么必须将版本时区文件安装到旧的 Oracle 数据库版本上的$ORACLE_HOME/ORACORE/ZONEINFO 目录中。

查询V$TIMEZONE_FILE视图,当前使用的timezone文件

SQL> select * from V$TIMEZONE_FILE;

 

FILENAME                VERSION     CON_ID

-------------------- ---------- ----------

timezlrg_32.dat              32          0

注: 需要将19c $ORACLE_HOME/oracore/zoneinfo 下的timezlrg_32.dat 文件拷贝到 11gR2 的$ORACLE_HOME/oracore/zoneinfo 目录下

cp /u01/app/oracle/product/19.0.0/db_1/oracore/zoneinfo/timezlrg_32.dat /u01/app/oracle/product/11.2.0/db_1/oracore/zoneinfo

5、如果数据库使用了 Oracle Label Security, 则需要在19c ORACLE_HOME下执行olspredowngrade.sql 脚本

查询下面视图,查看Oracle Label Security是否使用,输出为FALSE则进行下一步。
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';
如果返回TRUE,执行 olspredowngrade.sql 脚本:
 SQL> @ORACLE_HOME/rdbms/admin/olspredowngrade.sql

6、如果数据库启用了 Unified Auditing, 建议备份和清除审计文件

a . 查看是否有unified audit 记录,输出为0则进行下一步。

SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL; 

b. 备份现有的审计数据到表格中

SQL> CREATE TABLE UA_DATA AS (SELECT * FROM UNIFIED_AUDIT_TRAIL);

c. 清除审计记录

EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => FALSE);

7、如果配置了EM,则需要删掉sysman用户 ,重建EM

DROP USER sysman CASCADE;

8、降级前数据库备份

数据库降级

1、执行降级脚本

如果是RAC数据库,设置参数CLUSTER_DATABASE=FALSE,保留一个实例,关闭其它实例,降级后,必须将该参数设置回 true
sqlplus / as sysdba
SQL> alter system set CLUSTER_DATABASE=FALSE scope=spfile sid=*;
SQL> shutdown immediate;19c ORACLE_HOME 启动数据库
export ORACLE_HOME= /u01/app/oracle/product/19.0.0/db_1
sqlplus / as sysdba
SQL> startup downgrade;
Sql> Spool downgrade.log
Sql> @$ORACLE_HOME/rdbms/admin/catdwgrd.sql
Sql> spool off
Sql> shutdown immediate
Exit SQL Plus
Sql> exit;

2、修改环境变量指向旧版本,检查oratab 文件。
3、执行catrelod.sql 重载组件版本

sqlplus / as sysdba

SQL> STARTUP UPGRADE;

SQL> @$ORACLE_HOME/rdbms/admin/catrelod.sql

4、重启数据库,执行重新编译脚本

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

如果是RAC 数据库,则设回CLUSTER_DATABASE参数为TRUE
sqlplus / as sysdba
SQL> alter system set CLUSTER_DATABASE=TRUE scope=spfile sid=*;
更新CRS中注册的数据库版本信息
$ srvctl downgrade database -d db-unique-name -o oraclehome -t to_version

降级完成后结果:
SQL> select name from v$database;
SQL> select * from v$version;

降级后报错处理


降级后 数据库alert 日志每隔5分钟就有报错:

ORA-1400 encountered when generating server alert SMG-4121

MOS 解决方案(ORA-1400 encountered when generating server alert SMG-4121 after downgrade from 12c to 11.2.0.4 (Doc ID 2169006.1))如下:
Recreate the the SYS.ALERT_QUE using the following steps:

1. Drop the alert_QT
sqlplus / as sysdba
alter system enable restricted session;
exec dbms_aqadm.drop_queue_table('ALERT_QT',true);

2. Drop tables wri$_alert_history and WRI$_ALERT_OUTSTANDING
drop table WRI$_ALERT_OUTSTANDING;
drop table WRI$_ALERT_HISTORY;

3. Recreate the alert_que and associated objects:
SQL>@$ORACLE_HOME/rdbms/admin/dbmsslrt.sql
SQL>@$ORACLE_HOME/rdbms/admin/catalrt.sql
SQL>@$ORACLE_HOME/rdbms/admin/catmwin.sql
SQL>@$ORACLE_HOME/rdbms/admin/exechae.sql
SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL>alter system disable restricted session;

经过验证,处理后alert日志不再有ORA-1400报错了。

https://www.cnblogs.com/sky2088/p/13373404.html
http://www.ludatou.com/?p=2921

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐