はじめに

こんにちは!ゆうきです🤗
これまでの記事
「ひとりでできるもん」シリーズはいかがでしたでしょうか?
●Tera Termってなぁに??
●仮想Linuxサーバってなぁに??
●Linuxひとりでできるもん
関連記事になりますのであわせてご覧くださいね。

前回はデータベースの正常な起動停止をご紹介しました。

今回はデータベースの停止起動トラブルを紹介していきたいと思います🍀

 

本記事では、実機操作を通して情報処理技術の理解を深めることを目的としており、
皆様の環境での動作を保証するものではありません。👀

データベース起動の流れ

Oracleのデータベースは次のように状態が変わりながらOPEN状態になります

●NOMOUNT
●MOUNT
●OPEN

各状態では、次に示すファイルを読み込みながら
状態が遷移していきます。

●NOMOUNT → パラメータファイル
●MOUNT → 制御ファイル
●OPEN → データファイル

今回はそれぞれのファイルのうち、パラメータファイルを破壊することで
データベースが起動しなくなる様子を観察してみましょう。

せっかく作ったデータベースを破壊するのは怖いかもしれませんが、
スキルアップのためにぜひ挑戦してみてください 👀

 

データベースを停止する

最初は起動停止に使うファイルが正常に使えることを確認してバックアップの準備をするために
データベースを停止→起動→停止します。

 

[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul 16 10:40:41 2020
Version 19.3.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> select host_name, instance_name, status from v$instance;

HOST_NAME
--------------------------------------------------------------------------------
INSTANCE_NAME
------------------------------------------------
STATUS
------------------------------------
localhost.localdomain
orcl
OPEN


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  838858176 bytes
Fixed Size                  8902080 bytes
Variable Size             591396864 bytes
Database Buffers          234881024 bytes
Redo Buffers                3678208 bytes
Database mounted.
Database opened.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

 

これから破壊するファイルは、データベースの起動停止に深くかかわるファイルです。
破壊することがわかっているので、事前にコピーをしておくことで
カンタンにデータベースを元に戻すことができます。

コピーを取りたいのでデータベースが正常に起動停止できることを確認していきます。

今回のようにコピーを取得する場合は、事前に正常に動作することを、
できる範囲で確認することが大切です!

 

 

 

 

パラメータファイルを破壊する

パラメータファイルのコピーを取得する

パラメータファイルが正常に、起動に使えることが確認できたら、
破壊後速やかにデータベースを復旧できるように、コピーを取得します。

 

[oracle@localhost dbs]$ ls -l
合計 20
-rw-rw----. 1 oracle oinstall 1544 7月 15 16:37 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r-----. 1 oracle oinstall 24 6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048 6月 30 16:44 orapworcl
-rw-r-----. 1 oracle oinstall 3584 7月 15 15:27 spfileorcl.ora
[oracle@localhost dbs]$ pwd
/opt/oracle/home/dbs
[oracle@localhost dbs]$
[oracle@localhost dbs]$
[oracle@localhost dbs]$
[oracle@localhost dbs]$ ls -l ~
合計 0
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ダウンロード
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 テンプレート
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 デスクトップ
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ドキュメント
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ビデオ
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 音楽
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 画像
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 公開
[oracle@localhost dbs]$ cp -ip spfileorcl.ora ~
[oracle@localhost dbs]$ ls -l ~
合計 4
-rw-r-----. 1 oracle oinstall 3584 7月 15 15:27 spfileorcl.ora
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ダウンロード
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 テンプレート
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 デスクトップ
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ドキュメント
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ビデオ
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 音楽
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 画像
drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 公開
[oracle@localhost dbs]$

 


パラメータファイルの位置はshow parameterで確認することができます👀

 

SQL> show parameter pfile

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile string
/opt/oracle/home/dbs/spfileorc
l.ora
SQL>

 

このデータベースは サーバパラメータ ファイルで動作しているので、
ファイルのフルパスがVALUEに表示されますが、
VALUEが空欄になっている場合は 初期化パラメータ ファイルで動作しています🍀

パラメータファイルを破壊する

パラメータファイルを破壊してみましょう。
ここでは2種類の破壊の手法をご紹介します。

パラメータファイルの内容をすべて0で上書きする方法と、
パラメータファイルそのものを削除する方法です。

●パラメータファイルを0で上書きする

[oracle@localhost dbs]$ ls -l
合計 20
-rw-rw----. 1 oracle oinstall 1544  7月 15 17:02 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079  5月 14  2015 init.ora
-rw-r-----. 1 oracle oinstall   24  6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048  6月 30 16:44 orapworcl
-rw-r-----. 1 oracle oinstall 3584  7月 15 17:01 spfileorcl.ora
[oracle@localhost dbs]$ pwd
/opt/oracle/home/dbs
[oracle@localhost dbs]$ dd if=/dev/zero of=spfileorcl.ora bs=1 count=3584
3584+0 レコード入力
3584+0 レコード出力
3584 バイト (3.6 kB) コピーされました、 0.00540898 秒、 663 kB/秒
[oracle@localhost dbs]$ echo $?
0
[oracle@localhost dbs]$

 

●パラメータファイルを削除する

[oracle@localhost dbs]$ ls -l
合計 20
-rw-rw----. 1 oracle oinstall 1544 7月 17 14:42 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r-----. 1 oracle oinstall 24 6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048 6月 30 16:44 orapworcl
-rw-r-----. 1 oracle oinstall 3584 7月 16 10:56 spfileorcl.ora
[oracle@localhost dbs]$ rm -i spfileorcl.ora
rm: 通常ファイル `spfileorcl.ora' を削除しますか? y
[oracle@localhost dbs]$ ls -l
合計 16
-rw-rw----. 1 oracle oinstall 1544 7月 17 14:42 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r-----. 1 oracle oinstall 24 6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048 6月 30 16:44 orapworcl
[oracle@localhost dbs]$

/dev/zeroは
ひたすら0を出力してくれるデバイスで
ddコマンドが0を入力して
パラメータファイルにそれを出力して上書いてくれます!

 

 

 

 

データベースを起動する

破壊した状態でデータベースを起動してみましょう。

●パラメータファイルを0で上書きした場合

[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 15 17:06:53 2020
Version 19.3.0.0.0

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

Connected to an idle instance.

SQL> startup
ORA-01506: missing or illegal database name
SQL> quit
Disconnected
[oracle@localhost dbs]$

アラートログ には出力なし

●パラメータファイルを削除した場合

[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 15 17:09:02 2020
Version 19.3.0.0.0

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

Connected to an idle instance.

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/home/dbs/initorcl.ora'
SQL> quit
Disconnected
[oracle@localhost dbs]$

アラートログ には出力なし

破壊すると起動しなくなることが確認できましたね。
また、 アラートログ には何も出力されないこともわかりました。

それでは、破壊したデータベースを復旧させてみましょう❗
破壊する前に取得したコピーを利用して復旧します。

復旧のさせ方はカンタンで、コピーを取得した元の場所と同じ場所にファイルを戻すだけです。
実際に作業すると以下のようになります。

[oracle@localhost dbs]$ ls -l
合計 16
-rw-rw----. 1 oracle oinstall 1544  7月 15 17:02 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079  5月 14  2015 init.ora
-rw-r-----. 1 oracle oinstall   24  6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048  6月 30 16:44 orapworcl
[oracle@localhost dbs]$ cp -ip ~/spfileorcl.ora .
[oracle@localhost dbs]$ ls -l
合計 20
-rw-rw----. 1 oracle oinstall 1544  7月 15 17:02 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079  5月 14  2015 init.ora
-rw-r-----. 1 oracle oinstall   24  6月 30 16:10 lkORCL
-rw-r-----. 1 oracle oinstall 2048  6月 30 16:44 orapworcl
-rw-r-----. 1 oracle oinstall 3584  7月 15 15:27 spfileorcl.ora
[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 15 17:12:48 2020
Version 19.3.0.0.0

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  838858176 bytes
Fixed Size                  8902080 bytes
Variable Size             591396864 bytes
Database Buffers          234881024 bytes
Redo Buffers                3678208 bytes
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@localhost dbs]$

正常に起動しましたね。

うまくできなかった場合は、細部までデータベースとファイルの状態を確認してみてください。
きっとどこかが間違っているはずです。

おわりに

データベースの破壊と修復の作業をしてみて、いかがでしたでしょうか。

自分で破壊する場合はいつ壊れたのかがわかりますが、
実際の運用でデータが破損したときは、
いつどのようにして壊れたのかがわからない場合も多いです😣
ログや操作したときの状態から想像して
復旧手法を読み取っていかなければならない場合もあります。

次回は制御ファイルが破損したときの動作を見ていきたいと思います🍀
今回の応用になってくるので、操作方法などを復習しておいてくださいね。

 

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!