オラクル・データベースを削除する手順 〜 UNIX 系

データベースを構築してからインスタンス名が気に入らない場合やインストールしても起動しない。なにが悪いかわからない場合、もう再インストールする場合など、データベースファイルが残っていると、その原因の切り分けが困難になることもある。
不要なファイルはディレクトリごとバッサリ削除するか、以下のような手順で不要なインスタンスの情報を削除する方が良い。

Windows 系の場合には UNIX 系と異なり、レジストリにも情報が残っている可能性があるので DBCA(Database Config Assistant)を使用して削除した方がよいと思う。(DBCA がどこまで削除するかまでは調査していません)

DROP DATABASE Oracle 10g

Oracle 10g から データベースファイルを削除する DDL が追加された。
データベースファイル、サーバーパラメータファイルが削除することができる。
実行の前提条件として DROP DATABASE を行なうには RESTRICT モードでかつ排他モードで MOUNT 状態であること。

STARTUP RESTRICT MOUNT
DROP DATABASE ;

但し、アーカイブログおよびバックアップは削除されない。
データベースがRAWディスク上に存在する場合はファイルは削除されない。
Oracle 10g でも、この後に記述されている「アーカイブログ位置の特定」 以降は、手作業で行う必要がある。と 完全な削除までには程遠いものである。

どこにインストールされているかの確認 (Oracle 8i 以後)

インストールした本人が削除する場合にはあまり関係ないが、別人がオラクルを削除する場合、どこにインストールされたのかすらわからない状況があるかもしれない…

/etc/oraInst.loc (Linux 系)
/var/opt/oraInst.loc (Solaris)
のインベントリファイルが存在すればオラクルがインストールされていることがわかり、内容を見ることででリリースやディレクトリ情報もわかる。

削除するデータファイル、テンポラリ、REDO、コントロールファイルの作成(Oracle 9i 以前)

SQLPlus にて以下を実行

SET HEAD OFF
SET FEEDBACK OFF
SET TRIM ON
SET PAGES 0

SPOOL /tmp/deletefile.txt
--
SELECT 'rm -f ' || filename
FROM (
    SELECT name filename FROM v$datafile 
    UNION SELECT member filename FROM v$tempfile 
    UNION SELECT member filename FROM v$logfile 
    UNION SELECT name filename FROM v$controlfile
)
--
SPOOL OFF

内容を確認してシェルで一気に実行する。
or 念のため、確認しながら コピー&ペーストで削除。( Oracle を停止してから削除を行う )

データベース・コンフィグレーション・アシスタントを利用していた場合

デフォルト位置は、$ORACLE_BASE/oradata/<DB_NAME>

アーカイブログ位置の特定

SQL*Plusにて以下を実行

ARCHIVE LOG LIST

他のインスタンスと被らないなら、rm -fr 〜 で削除

ダンプ位置の特定

SQL*Plusにて以下を実行 (pfileを見て手動で削除でも可)

SELECT
       value
  FROM v$parameter
 WHERE
       name in ('background_dump_dest', 'user_dump_dest', 'core_dump_dest');

トレースファイル、アラートファイルの削除

データベース・コンフィグレーション・アシスタントを利用していた場合

デフォルト位置は、$ORACLE_BASE/admin/<DB_NAME>/{bdump,udump,cdump}

監査ファイル、フラッシュリカバリ領域

SQL*Plusにて以下を実行 (pfileを見て手動で削除でも可)

SELECT
       value
  FROM v$parameter
 WHERE
       name in ('db_recovery_file_dest', 'audit_file_dest');

稼動中のインスタンスが1つの場合ならファイル全削除

データベース・コンフィグレーション・アシスタントを利用していた場合

デフォルト位置は、$ORACLE_BASE/flash_recovery_area

リスナー、TNS エントリの削除

以下のファイルの中の該当部を削除

$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
[ $TNS_ADMIN/tnsnames.ora ]

oratab エントリの削除

以下の OSファイルの中のインスタンス名が記述されている行を削除

/etc/oratab
(/var/opt/oracle/oratab)

pfile/spfile の削除

spfileは SQL*Plusにて以下を実行

SHOW PARAMETER spfile 

データベース・コンフィグレーション・アシスタントを利用していた場合

デフォルト位置は、$ORACLE_HOME/dbs/{spfile<SID>.ora | init<SID>.ora}

パスワードファイルの削除

$ORACLE_HOME/dbs/orapw<SID> を削除

データベース・コンフィグレーション・アシスタントを利用していた場合

デフォルト位置は、$ORACLE_HOME/dbs/orapw<SID>

コントロールファイルのスナップショット、ロックファイル、管理ファイルの削除

$ORACLE_HOME/dbs/sncf<SID>.ora    -- SNapshot Control File (RMAN)
$ORACLE_HOME/dbs/lk<SID>
$ORACLE_HOME/dbs/hc_<SID>.dat
$ORACLE_HOME/dbs/core_<SID>〜.log など関連ログを削除

ソフトウェアも削除する場合

$ORACLE_BASE 以下のディレクトリを削除
( /u01/app/oracle )
/tmp のゴミファイルを確認。再インストールする場合に障害になることがある(リブートできる環境ならリブートする)

関連ファイル

/etc/oratab
/etc/oraInst.loc
/usr/local/bin/coreenv
/usr/local/bin/oreenv
/usr/local/bin/dbhome 
/tmp/cpuinfo.txt 
/tmp/Ora〜


データベースの削除の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター