最近做了一个安装11.2.0.4.180116补丁的实验,突然想起之前和同事讨论的一个问题:如何检查数据库安装补丁的版本,之前搜到的是去查dba_registry_history,有的说在操作系统中执行./opatch lspatches查看。就做了一个实验:

前提:本系统曾前后安装了 171017和180116版本补丁,但180116补丁已回退!!

1.1 首先检查opatch工具版本:

以oracle用户登录,验证opatch 工具版本。安装补丁11.2.0.4.180116所需最低opatch版本为11.2.0.3.6。

 [root@localhost ~]# su - oracle

[oracle@localhost ~]$ cd $ORACLE_HOME/OPatch

[oracle@localhost OPatch]$ ./opatch version

OPatch Version: 11.2.0.3.18

OPatch succeeded.

如果检查结果不满足,则需要升级opatch工具。若OPatch Version大于等于11.2.0.3.6则略过1.2节步骤 opatch工具版本升级。

1.2  升级opatch工具版本

以oracle用户登录,将opatch备份:

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ cd $ORACLE_HOME

[oracle@localhost dbhome_1]$ pwd

/oracle/app/oracle/product/11.2.0/dbhome_1

[oracle@localhost dbhome_1]$ mv OPatch OPatch.bak

将下载的OPatch工具包p6880880_112000_Linux-x86-64.zip上传至/home/oracle目录,进行解压缩。

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ unzip p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME/

重新验证OPatch工具包版本:

[oracle@localhost ~]$ cd $ORACLE_HOME

[oracle@localhost dbhome_1]$ cd OPatch

[oracle@localhost OPatch]$ ./opatch version

OPatch Version: 11.2.0.3.18

OPatch succeeded.

1.3   安装11.2.0.4.180116补丁包

1.3.1  上传并解压缩补丁包p26925576_112040_Linux-x86-64.zip

将下载的psu补丁p26925576_112040_Linux-x86-64.zip上传至/soft目录,进行解压缩。

[root@localhost ~]# su – oracle

[oracle@localhost ~]$ mkdir soft/  -- 若已存在该目录,则忽略该步骤

[oracle@localhost ~]$ cd soft/

 [oracle@localhost soft]$ unzip p26925576_112040_Linux-x86-64.zip

1.3.2  停止EM

[root@localhost ~]# su - oracle

[oracle@whf ~]$ emctl status dbconsole

Oracle Enterprise Manager 11g Database Control Release 11.2.0.4.0

Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.

https://rac1.localdomain:1158/em/console/aboutApplication

Oracle Enterprise Manager 11g is running.

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

Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/rac1.localdomain_orcl/sysman/log

[oracle@rac1 ~]$ emctl stop dbconsole

Oracle Enterprise Manager 11g Database Control Release 11.2.0.4.0

Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.

https://rac1.localdomain:1158/em/console/aboutApplication

Stopping Oracle Enterprise Manager 11g Database Control ...

 ...  Stopped.

1.3.3  停数据库、监听

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ sqlplus / as sysdba

SQL> shutdown immediate

SQL> exit

[oracle@localhost ~]$ lsnrctl stop

1.3.4  opatch apply安装

opatch apply命令需要使用oracle用户,进入补丁包所在目录后执行。

[root@localhost ~]# su – oracle

[oracle@localhost ~]$ cd soft/26925576/

[oracle@localhost 26925576]$ $ORACLE_HOME/OPatch/opatch apply

Oracle Interim Patch Installer version 11.2.0.3.18

Copyright (c) 2018, Oracle Corporation.  All rights reserved.

Oracle Home       : /oracle/app/oracle/product/11.2.0/dbhome_1

Central Inventory : /oracle/app/oraInventory

   from           : /oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc

OPatch version    : 11.2.0.3.18

OUI version       : 11.2.0.4.0

Log file location : /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2018-02-20_20-42-25PM_1.log

Verifying environment and performing prerequisite checks...

OPatch continues with these patches:   26925576

Do you want to proceed? [y|n]

y

User Responded with: Y

All checks passed.

Provide your email address to be informed of security issues, install and

initiate Oracle Configuration Manager. Easier for you if you use your My

Oracle Support Email address/User Name.

Visit http://www.oracle.com/support/policies.html for details.

Email address/User Name:

You have not provided an email address for notification of security issues.

Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]:  y

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.

(Oracle Home = '/oracle/app/oracle/product/11.2.0/dbhome_1')

Is the local system ready for patching? [y|n]

y

User Responded with: Y

Backing up files...

Applying sub-patch '' to OH '/oracle/app/oracle/product/11.2.0/dbhome_1'

Patching component oracle.rdbms, 11.2.0.4.0...

Patching component oracle.rdbms.dbscripts, 11.2.0.4.0...

Patching component oracle.rdbms.rman, 11.2.0.4.0...

Patching component oracle.rdbms.rsf, 11.2.0.4.0...

Composite patch 26925576 successfully applied.

Log file location: /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2018-02-20_20-42-25PM_1.log

OPatch succeeded.

1.3.5  起数据库、监听、EM

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 20 20:46:18 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

SQL> exit

[oracle@localhost ~]$ lsnrctl start

[oracle@localhost ~]$ emctl start dbconsole

1.3.6 将升级信息写入数据库

为了验证数据库补丁如何查看,暂时先不写入数据库,依次查看dba_registry_history和opatch lspatches版本

本系统曾前后安装了 171017和180116版本补丁,但180116补丁已回退):

SQL> col action_time for a32
SQL> col action for a10
SQL> col namespace for a10
SQL> col version for a10
SQL> col BUNDLE_SERIES for a10
SQL> col comments for a30
SQL> set lin 200
SQL>
SQL> select * from dba_registry_history; ACTION_TIME ACTION NAMESPACE VERSION ID BUNDLE_SER COMMENTS
-------------------------------- ---------- ---------- ---------- ---------- ---------- ------------------------------
24-AUG-13 12.03.45.119862 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
15-NOV-17 03.36.44.541274 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
20-FEB-18 07.17.09.603021 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017
20-FEB-18 08.48.39.212321 PM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.06.56.276322 PM ROLLBACK SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.07.15.512282 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017 6 rows selected.

查看opatch lapatches版本:

[oracle@localhost ~]$ cd $ORACLE_HOME/OPatch
[oracle@localhost OPatch]$ ./opatch lspatches
26925576;Database Patch Set Update : 11.2.0.4.180116 (26925576) OPatch succeeded.

故说明使用./opatch lspatches只能查看系统安装补丁版本,但不意味着数据库应用的版本信息,数据库应用的版本需使用dba_registry_history查看。

为验证说明,进行将升级信息写入数据库:

[oracle@localhost ~]$ sqlplus / as sysdba
SQL> @?/rdbms/admin/catbundle.sql psu apply 修复无效对象
SQL> @?/rdbms/admin/utlrp.sql

再次查看dba_registry_history和opatch lspatches版本:

SQL> col action_time for a32
SQL> col action for a10
SQL> col namespace for a10
SQL> col version for a10
SQL> col BUNDLE_SERIES for a10
SQL> col comments for a30
SQL> set lin 200
SQL>
SQL> select * from dba_registry_history; ACTION_TIME ACTION NAMESPACE VERSION ID BUNDLE_SER COMMENTS
-------------------------------- ---------- ---------- ---------- ---------- ---------- ------------------------------
24-AUG-13 12.03.45.119862 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
15-NOV-17 03.36.44.541274 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
20-FEB-18 07.17.09.603021 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017
20-FEB-18 08.48.39.212321 PM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.06.56.276322 PM ROLLBACK SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.07.15.512282 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017
22-FEB-18 01.09.06.899587 AM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116 7 rows selected.
SQL> !
[oracle@localhost ~]$ cd $ORACLE_HOME/OPatch
[oracle@localhost OPatch]$ ./opatch lspatches
26925576;Database Patch Set Update : 11.2.0.4.180116 (26925576) OPatch succeeded.

验证无误。就此补丁也已安装完毕。

2.1   补丁回退

2.1.1  关闭数据库

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 20 20:53:00 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

关闭监听:

[oracle@localhost ~]$ lsnrctl stop

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 20-FEB-2018 20:54:52

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))

The command completed successfully

2.1.2  回退操作

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ $ORACLE_HOME/OPatch/opatch rollback -id 26925576

Oracle Interim Patch Installer version 11.2.0.3.18

Copyright (c) 2018, Oracle Corporation.  All rights reserved.

Oracle Home       : /oracle/app/oracle/product/11.2.0/dbhome_1

Central Inventory : /oracle/app/oraInventory

   from           : /oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc

OPatch version    : 11.2.0.3.18

OUI version       : 11.2.0.4.0

Log file location : /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2018-02-20_20-56-38PM_1.log

Patches will be rolled back in the following order:

   26925576

The following patch(es) will be rolled back: 26925576

Sub-patches of a composite series are being rolled back. The system will be returned to a state where 17478514,18031668,18522509,19121551,19769489,20299013,20760982,21352635,21948347,22502456,23054359,24006111,24732075,25869727,26609445,26392168 and all its fixes will still remain, because the patch(es) were installed before patch(es) 26925576 were applied.

The following bug fixes will be removed: 26910644,21641760,24570598,22809871,22465352,21142837,16756406,27053456,21174504,23003979,20513399,25897615,21795111,26569225,21354456,25764020,20671094,20717359,21629064,18090142,24835538,21380789,21422580,19475971,24717859,18948177,20860659,20598042,21172913,20031873,20324049,23007241,25165496,19174430

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.

(Oracle Home = '/oracle/app/oracle/product/11.2.0/dbhome_1')

Is the local system ready for patching? [y|n]

y

User Responded with: Y

Rolling back patch 26925576...

RollbackSession rolling back interim patch '' from OH '/oracle/app/oracle/product/11.2.0/dbhome_1'

Patching component oracle.rdbms, 11.2.0.4.0...

Patching component oracle.rdbms.dbscripts, 11.2.0.4.0...

Patching component oracle.rdbms.rman, 11.2.0.4.0...

Patching component oracle.rdbms.rsf, 11.2.0.4.0...

RollbackSession removing interim patch '' from inventory

Log file location: /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2018-02-20_20-56-38PM_1.log

OPatch succeeded. 

若执行了1.3.6将升级信息写入数据库操作,则还需执行以下操作:

[oracle@localhost ~]$ [oracle@localhost admin]$ ls|grep catbundle_PSU_

catbundle_PSU_MYDB_APPLY.sql    -- <连接数据库后需运行该脚本!>

catbundle_PSU_MYDB_ROLLBACK.sql

[oracle@localhost admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 20 21:01:07 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area  830930944 bytes

Fixed Size                  2257800 bytes

Variable Size             503319672 bytes

Database Buffers          318767104 bytes

Redo Buffers                6586368 bytes

Database mounted.

Database opened.

SQL> @catbundle_PSU_MYDB_ROLLBACK.sql

SQL> exit

[oracle@localhost admin]$ lsnrctl start

2.1.3  回退检验

[root@localhost ~]# su - oracle

[oracle@localhost ~]$ $ORACLE_HOME/OPatch/opatch lspatches

26392168;Database Patch Set Update : 11.2.0.4.171017 (26392168)

OPatch succeeded.

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 20 21:10:57 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@whf admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 16 21:15:00 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> col action_time for a32

SQL> col action for a10

SQL> col namespace for a10

SQL> col version for a10

SQL> col BUNDLE_SERIES for a10

SQL> col comments for a30

SQL> set lin 220

SQL> select * from dba_registry_history;

ACTION_TIME ACTION NAMESPACE VERSION ID BUNDLE_SER COMMENTS
-------------------------------- ---------- ---------- ---------- ---------- ---------- ------------------------------
24-AUG-13 12.03.45.119862 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
15-NOV-17 03.36.44.541274 PM APPLY SERVER 11.2.0.4 0 PSU Patchset 11.2.0.2.0
20-FEB-18 07.17.09.603021 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017
20-FEB-18 08.48.39.212321 PM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.06.56.276322 PM ROLLBACK SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
20-FEB-18 09.07.15.512282 PM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017
22-FEB-18 01.09.06.899587 AM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
22-FEB-18 01.31.12.966611 AM APPLY SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
22-FEB-18 01.41.03.225433 AM ROLLBACK SERVER 11.2.0.4 180116 PSU PSU 11.2.0.4.180116
22-FEB-18 01.41.23.227214 AM APPLY SERVER 11.2.0.4 171017 PSU PSU 11.2.0.4.171017

05-04 07:14