Oracle 11g Oracle適用パッチ一覧の表示コマンド(OPatch)

はじめに
===

Linuxサーバ上に構築したOracle 11gサーバ(11.1.0.7.2)において、OPatchコマンドにより、Oracleデータベースに適用している個別パッチ一覧を表示する簡単なスクリプトです。

Oracleデータベースに適用しているパッチ情報を確認する時に利用しております。

スクリプトを実行している環境
===
・Oracle 11g (11.1.0.7.2)

OPatch参考サイト
===

OPatch自体の詳細については、以下のサイトをご参照下さい。
http://docs.oracle.com/cd/E16338_01/rac.112/b56291/softpatch2.htm#BABBDEJC
https://docs.oracle.com/cd/E15817_01/server.111/e05707/oui7_opatch.htm#CEGIAAAF

Oracleデータベース適用済みパッチ一覧の表示スクリプト
===

今回の例では、Oracle 11gサーバの以下ディレクトリにOPatch(optachコマンド)を配置し、ORACLE_HOME等の環境変数も設定済みという前提で記載させて頂きます。

```
/oracle_example_production/opt/oracle/Opatch_11.1.0.6.9/OPatch/opatch
```

Oracle 11gサーバの任意のディレクトリに、以下のような簡単なスクリプトを作成します。

```
[oracle@example-oracle-11g-active ~]$ vi show_oracle_patch.sh
```

```shell-session:show_oracle_patch.sh
#!/bin/sh

OPATCH_COMMAND="/oracle_example_production/opt/oracle/Opatch_11.1.0.6.9/OPatch/opatch"

if [ -f ${OPATCH_COMMAND} ] ; then

	${OPATCH_COMMAND} lsinventory -detail
	echo ""

	echo "${OPATCH_COMMAND} lsinventory -detail | grep applied | awk '{print $2}' | sort"
	${OPATCH_COMMAND} lsinventory -detail | grep applied | awk '{print $2}' | sort
	echo ""

	echo "${OPATCH_COMMAND} lsinventory -detail | grep applied | awk '{print $2}' | sort | wc -l"
	${OPATCH_COMMAND} -detail | grep applied | awk '{print $2}' | sort | wc -l

else

	echo "${OPATCH_COMMAND} not found"

fi
```

スクリプトに実行権限を設定します。

```
[oracle@example-oracle-11g-active ~]$ chmod 754 show_oracle_patch.sh
```

スクリプト実行例
===

先ほど作成したスクリプトを実行すると、Oracle 11gデータベースに適用しているパッチ一覧が表示されます。なお、以下の実行結果の一部はサンプル用に修正しております。

```
[oracle@example-oracle-11g-active ~]$ ./show_oracle_patch.sh
Invoking OPatch 11.1.0.6.9

Oracle Interim Patch Installerバージョン11.1.0.6.9
Copyright (c) 2009, Oracle Corporation.  All rights reserved。


Oracleホーム       : /oracle_example_production/opt/oracle/app/oracle/product/11.1.0/db_1
中央インベントリ : /oracle_example_production/opt/oracle/app/oraInventory
   元           : /etc/oraInst.loc
OPatchのバージョン    : 11.1.0.6.9
OUIのバージョン       : 11.1.0.X.X
OUIの場所      : /oracle_example_production/opt/oracle/app/oracle/product/11.1.0/db_1/oui
ログ・ファイルの場所 : /oracle_example_production/opt/oracle/app/oracle/product/11.1.0/db_1/cfgtoollogs/opatch/opatch2015-01-XX_XX-XX-XXXX.log

Patch history file: /oracle_example_production/opt/oracle/app/oracle/product/11.1.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Lsinventory Output file location : /oracle_example_production/opt/oracle/app/oracle/product/11.1.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2015-01-XX_XX-XX-XXXX.txt

--------------------------------------------------------------------------------
インストールされた最上位製品(2):

Oracle Database 11g                                                  11.1.0.X.X
Oracle Database 11g Patch Set 1                                      11.1.0.X.X
　　(途中省略)
仮パッチ(2) :

Patch  920XXXX      : applied on XXX XXX XX XX:XX:XX JST 2010
Unique Patch ID:  120XXXXX
   Created on 7 Jan 2010, XX:XX:XX hrs PST8PDT
   Bugs fixed:
     737XXXX, 834XXXX, 685XXXX, 720XXXX, 749XXXX, 897XXXX, 733XXXX, 825XXXX
　　(途中省略)
OPatch succeeded.

/oracle_example_production/opt/oracle/Opatch_11.1.0.6.9/OPatch/opatch lsinventory -detail | grep applied | awk '{print }' | sort
727XXXX
920XXXX

/oracle_example_production/opt/oracle/Opatch_11.1.0.6.9/OPatch/opatch lsinventory -detail | grep applied | awk '{print }' | sort | wc -l
2
[oracle@example-oracle-11g-active ~]$
```

以上になります。