CentOS 7.4系にインストールしたOracle Database 12c Release 2 (12.2.0.1.0) の設定とか

会社の方に、つまらないところで躓かず効率的に学習しないと、という駄目だしをもらい学習意欲がだだ落ちですが...効率が悪いと言われても学習しないとですね、誰も教えてくれるわけじゃないですからね。

現状を変えるには、自分で学習を始めなければならないと思うわけです。

というわけで、前回、CentOS7.4系にOracle Database 12c Release 2 (12.2.0.1.0)をインストールしたのですが、今回は、実際にDB(データベース)とかを作成していきたいと思います。

⇩  前回までの流れはこちら 

ts0818.hatenablog.com

今回もハマりにハマっているわけで、一体いつになったら効率の良い学習ができるのか...絶望的な気分のまま、レッツ、トライ~。 

想像以上に収集のつかない状態になっていますので、お時間のある方のみご照覧ください。 

 

Oracle Database 12c の特徴

DB作成の前に、Oracle Databaseって何じゃろう?

Oracle Database 12cから、構造がだいぶ変わったようで、

tech.nikkeibp.co.jp

⇧  上記サイト様の図を参考にさせていただくと、

f:id:ts0818:20180321130309p:plain

ということで、Oracle Database 12c からは、1つのOracleインスタンスで複数のDBを扱うことができるようになったようです。

 

Oracle Database 12c のDB接続のイメージ

そもそも、Oracleインスタンスって何?

Oracle Databaseに出てくる用語が何を指してるのか分からなさすぎるので調査。

Oracle SID、インスタンス、接続識別子など

blog.pepese.com

www.shift-the-oracle.com

⇧  上記サイト様でまとめてくださっています。 

で、いろいろな設定やDBの作成などが済むと、イメージ図のような感じでDBに接続できるようです。 

f:id:ts0818:20180321170755p:plain

で、ORACLE_HOMEを環境変数に追加していない状態でSQL*Plusを起動しようとすると、怒られました。

f:id:ts0818:20180321175724p:plain

 ⇧  ORACLE_HOME をセッティングする必要あり!

Oracle DatabaseにアクセスするSQL*Plusなどの特定のツールを使用する前に、オペレーティング・システム用の環境変数を構成する必要があります。これらの環境変数は、ツールの接続先となるデータベース・インスタンスを判別するときにOracle Databaseによって使用されます。

データベース管理の概要

docs.oracle.com

⇧  公式の説明に、載ってましたね。 

で、もしインストールした場所忘れたり、そもそも場所が分からないときはどうすれば?

thinkit.co.jp

⇧  上記サイト様によると、『/etc/oratab』なるファイルに環境変数の設定に必要な情報が記載されてるらしい?と。

f:id:ts0818:20180321190810p:plain

残念ながら、何の情報も得られず。

同じ疑問を持たれた先輩が!

ameblo.jp

⇧  上記サイト様を参考に、Oracle Databaseをインストールした場所にあるbinを検索すれば良さそうです。

sudo find / -name bin

f:id:ts0818:20180321192142p:plain

f:id:ts0818:20180321192607p:plain

/binの部分を除いたパスを環境変数に設定します。

export ORACLE_HOME=/opt/app/oracle/product/12.2.0.1/dbhome_1

f:id:ts0818:20180321193109p:plain

⇧  設定できました。 

SQL*Plusの起動はできましたが... 

f:id:ts0818:20180321193521p:plain

ログインできず。

f:id:ts0818:20180321194040p:plain

 『ORA-12162: TNS:net service name is incorrectly specified』というエラーは、「ORACLE_SID 」を環境変数に設定していてない場合に起こるようです。

f:id:ts0818:20180321195131p:plain

 「ORACLE_SID 」はどこで確認すれば?

db_nameは検討事項で決定したデータベース名(例では「NRT」)で、環境変数ORACLE_SIDと同一でなければなりません。

失敗しないデータベース作成方法:Oracleマイスター養成講座(5) - @IT

⇧  上記サイト様によると、パラメータファイルに記載されている、db_nameの値と一致していれば何でも良いようです。

パラメータファイルは、デフォルトでは下記の場所にあるようです。

$ORACLE_HOME/dbs/init.ora

自分でパラメータファイルを作ったりしていなければ、デフォルトのinit.ora がパラメータファイルとして利用されるのではないかと思われます。(<= 違ってました。詳細は後半で。)

f:id:ts0818:20180321201030p:plain

f:id:ts0818:20180321201145p:plain

ということで、「ORACLE_SID 」を環境変数に追加。

export ORACLE_SID=ORCL

f:id:ts0818:20180321205526p:plain

で、再度、SQL*Plus カモ~ン!

f:id:ts0818:20180321205839p:plain

駄目じゃん...今度は何よ?

www.cosol.jp

⇧  上記サイト様によると、 

のどちらかが影響してるらしいと。ちなみに、

ponkotsuengine.hatenablog.com

⇧  上記サイト様によると、

「/NOLOGを使用した接続なしのSQL*Plusセッションの開始」

そ〜ゆ〜ことかよ!!

つまり、「ログインなしのセッション」ってことね。その「no log」かよ!

sqlplus /nolog の nologって・・・ - ぽんこつエンジニアの戯言日記

「sqlplus /nolog」でログインせずに接続できるようです。

./sqlplus /nolog

f:id:ts0818:20180321211309p:plain

 OS 認証で SYSDBA に接続し、

conn / as sysdba

 インスタンスの起動!

startup

f:id:ts0818:20180321212701p:plain

駄目じゃん...今度は何すか?

「LRM-00109: could not open parameter file '/opt/app/oracle/product/12.2.0.1/dbhome_1/dbs/initORCL.ora'」って、そもそもそんなファイル作ってないでしょ...

f:id:ts0818:20180321213542p:plain

もしかして、init[ORACLE_SID].oraってファイルが存在しないとマズイとか?(そういうことみたいですね。)

作成。

f:id:ts0818:20180321214133p:plain

で、再度、SQL*Plus カモ~ン!!

f:id:ts0818:20180321214344p:plain

駄目じゃん...今度は何なんすか?

d.hatena.ne.jp

⇧  上記サイト様によると、Oracleトラブルシューティングに載っているようです。

Linuxシステムで、オペレーティング・システムの/dev/shmマウント・サイズが、Oracleのシステム・グローバル領域(SGA)およびプログラム・グローバル領域(PGA)に対して小さすぎる場合、次のエラーが発生します。

ORA-00845: MEMORY_TARGET not supported on this system

初期化パラメータMEMORY_TARGETまたはMEMORY_MAX_TARGETを設定する「メモリー・サイズ(SGAおよびPGA)」は、オペレーティング・システムの共有メモリー・ファイル・システム(/dev/shm)より大きい値にはできません。

https://docs.oracle.com/cd/E49329_01/install.121/b71312/app_ts.htm#BEIIJCDJ

⇧  メモリのサイズの問題ということらしいですね。 

stackoverflow.com

⇧  上記サイト様に解決方法が載ってそうです。

残念ながら、MEMORY_TARGETとMEMORY_MAX_TARGETの値の確認ができませんが(インスタンスが動いてないんだから、そんな気がしましたよ)、

f:id:ts0818:20180321221455p:plain

 /dev/shm の値を大きくするしかないようです。

f:id:ts0818:20180321215859p:plain

で、なんとかMEMORY_TARGETとMEMORY_MAX_TARGETの値を調べる方法がないもんかと、

Increase memory_target on Oracle DB 12c Linux ORA-00845: MEMORY_TARGET not supported on this systema70t.wordpress.com

⇧  上記サイト様によると、「alert.log」っちゅうDataBaseのlogファイルにメッセージが出てるよ、ということらしいですね。(インスタンスが起動してなくても見れるんかいな?) 

一応、ログファイル(Oracle Database関連)は、

DIAGNOSTIC_DEST

$ORACLE_BASE環境変数の値から導出される。$ORACLE_BASEが設定されていない場合は、Oracle Universal Installerの設定に従って、ORACLE_BASEから導出される。ORACLE_BASEが設定されていない場合は、$ORACLE_HOME/rdbms/logが使用される。

DIAGNOSTIC_DEST

自動診断リポジトリ(ADR)ホーム 

<diagnostic_dest>/diag/rdbms/<dbname>/<instname>

ADRホーム・ディレクトリの下に配置されるファイルは、次のとおりです。

  • トレース・ファイル - <adr-home>/traceサブディレクトリに配置されます。

  • アラート・ログ - <adr-home>/alertサブディレクトリに配置されます。また、alert.logファイルは現在XMLフォーマットであり、Oracle ARBロギング標準に従います。

  • コア・ファイル - <adr-home>/cdumdサブディレクトリに配置されます。

  • インシデント・ファイル - 各重大エラー(たとえば、ORA-600、ORA-1578、ORA-7445)が発生するとインシデントが発生します。各インシデントにはIDが割り当てられ、各インシデント(エラー・スタック、コール・スタック、ブロック・ダンプなど)のダンプは独自のファイルに保存され、プロセス・トレース・ファイルから分離されます。インシデント・ダンプ・ファイルは<adr-home>/incident/<incdir#>に配置されます。プロセス・トレース・ファイル内でインシデント・ダンプ・ファイルの場所がわかります。

DIAGNOSTIC_DEST 

ってなっているのですが、自分の場合ですと、ORACLE_BASEは設定されてないようなので、

f:id:ts0818:20180321224302p:plain

$ORACLE_HOME/rdbms/log/diag/rdbms/<dbname>/<instname>っていうADRホーム・ディレクトリが...

f:id:ts0818:20180321224216p:plain

これまた、残念ながら、存在しないようです。一応、logフォルダにあるファイルを見てみるも、インスタンスが起動していないことが分かったぐらいですかね。 

f:id:ts0818:20180321231200p:plain

 

OSのほうのログとかで何か分からんか?と思い確認。 

CentOS7系でログを確認するには、

yomon.hatenablog.com

⇧  上記サイト様によると、journalctlコマンドでいけるようです。

f:id:ts0818:20180321230114p:plain

権限がないって...rootユーザーじゃないと駄目かな?rootユーザーでいけました。

f:id:ts0818:20180321230622p:plain

特に欲しい情報がなし(涙)。Ctrl + C で終了します。

仕方がないので、公式のトラブルシューティングにあるように、オペレーティング・システムの共有メモリー・ファイル・システム(/dev/shm)を適当に大きくします。(7gっていうサイズの根拠が分からん。)

mount -t tmpfs shmfs -o size=7g /dev/shm

f:id:ts0818:20180321231934p:plain

 出た...rootユーザーしか実行できない問題。もう一つコマンドプロンプトを起ち上げ、

f:id:ts0818:20180321232210p:plain

最初に開いていたコマンドプロンプトで確認すると、/dev/shmのサイズが7.0Gに増えてますね!

f:id:ts0818:20180321232300p:plain

じゃあ、いきますか。再度、SQL*Plus カモ~ン!!!

f:id:ts0818:20180321232605p:plain

........もう駄目だ...疲れた...続きは明日。

 

ということで、翌日、 このエラーは何なのさ?ということで、

  • ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
  • ORA-01262: Stat failed on a file destination directory Linux-x86_64 Error: 2: No such file or directory

signposts2k.hatenablog.com

⇧  上記サイト様によると、「.ora」ファイルに設定されているパラメータに該当するディレクトリが存在しないらしい...「.ora」ファイルの設定重要なんすね。

 

...省略...

# Change '<ORACLE_BASE>' to point to the oracle base (the on# install time)

db_name='ORCL'
memory_target=1G
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/fast_recovery_area'
db_domain=''
db_block_size=8192
audit_trail ='db'
processes = 150
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'

f:id:ts0818:20180322000840p:plain

 むっちゃ、<ORACLE_BASE>を変更しろってなってますね...。

で、ORACLE_BASEはどこを確認すれば分かるんですかね?

http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/sidb12201-inst-linux-x64-ja-v10-3627443-ja.pdf

⇧  インストレーションガイドによると、インストールディレクトリってことで、あと、環境変数の設定の項目を見ると、 

$ORACLE_HOME = $ORACLE_BASE/product/12.2.0/dbhome_1

という構造になっているようですね。

我々は、ORACLE_HOMEは解決していたので、echo $ORACLE_HOMEで確認して、

f:id:ts0818:20180322124649p:plain

f:id:ts0818:20180322124903p:plain

 環境変数が消えてる...

qiita.com

⇧  上記サイト様によると、設定ファイルに記述しておかないと、仮想マシンのシャットダウン、ログイン、ログアウト、どれが影響しているかは分からないですが、環境変数はリセットされるってことですかね。

Oracleの公式のインストレーションガイドにも、 

Oracle Database インストール・ユーザーの環境変数を.bash_profile に設定します。
設定後、再ログインすることで環境変数が反映されます。

Oracle Database インストール・ユーザー $HOME/.bash_profile ファイル設定例

umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8

http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/sidb12201-inst-linux-x64-ja-v10-3627443-ja.pdf

と、Oracle Database インストール・ユーザー $HOME/.bash_profile に環境変数を設定しろってなってますね。

 

f:id:ts0818:20180322131516p:plain

⇧  .bash_profileがおりました。ファイルの権限がoracleユーザーになっているので、rootユーザーでなくても編集できそうです。

viエディターで編集していきます。

vi .bash_profile

f:id:ts0818:20180322132100p:plain

「i」でINSERTモード(挿入モード、つまりファイルに書き込みができる状態)になりましたら、

f:id:ts0818:20180322131648p:plain

.bash_profileの一番下に下記を追記します。(ORACLE_BASE、ORACLE_HOMEのパスは、ご自分の環境に合わせてください。)

ameblo.jp

⇧  上記サイト様で、ORACLE_HOMEの場所は分かると思います。

(※ただし、Oracle Databaseがインストール済みである場合。)

umask 022
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=/opt/app/oracle/product/12.2.0.1/dbhome_1
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8

PATH=$ORACLE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin

export PATH

f:id:ts0818:20180322161314p:plain

そしたらば、「Esc」キーを押して、「:wq」でファイルの保存をし、viエディターを閉じます。

f:id:ts0818:20180322161340p:plain

.bash_profileの設定すぐに反映させたい場合は、

qiita.com

⇧  上記サイト様によると、 

source ~/.bash_profile

でいけそうです。「.bashrc」を反映させれば「.bash_profile」も反映するのかな?今回は試す前に、「.bash_profile」を先に反映させてしまった...。

そして、誤ったパスを追加したため、環境変数が酷いことに。

f:id:ts0818:20180322161901p:plain

d.hatena.ne.jp

⇧  上記サイト様のコマンドで無事整いました。

 

f:id:ts0818:20180322133646p:plain

ということで、ORACLE_BASEが決まったんで、「.ora」ファイルの編集。

vi /opt/app/oracle/product/12.2.0.1/dbhome_1/dbs/initORCL.ora

f:id:ts0818:20180322134209p:plain

<ORACLE_BASE>を$ORACLE_BASEの値に書き換えますか。他にも、「ORA-00845: MEMORY_TARGET not supported on this system」のエラーって、『memory_target=1G > dev/shm=497M』ってことが原因だったってことですかね?

f:id:ts0818:20180322134320p:plain

ちょいと脱線しますと、

www.ujp.jp

⇧  上記サイト様によると、インスタンスが起動するときに「init[ORACLE_SID].ora」の設定が利用されるため、「init[ORACLE_SID].ora」をしっかり編集してないとマズイようです...「.ora」ファイルむっちゃ重要ですやん。

ちなみに、インスタンス起動時に利用される設定ファイルには

Oracleインスタンスを起動するときには、
テキスト形式のpfile(初期化パラメータ・ファイル)
バイナリ形式のSPFILE(サーバー・パラメータ・ファイル)
どちらかを使用するのですが、

pfileとSPFILE、どちらを使用しているのかを確認する! | 我が社を有名にするブログ

と2種類のファイルがあり、 「init[ORACLE_SID].ora」は「テキスト形式のpfile(初期化パラメータ・ファイル)」ということらしいですね。

「バイナリ形式のSPFILE(サーバー・パラメータ・ファイル)」は、またの機会に調査ということで。

ということで、「init[ORACLE_SID].ora」を編集していきたいと思います。

# Change '<ORACLE_BASE>' to point to the oracle base (the o
ne you specify at
# install time)

db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='/opt/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/app/oracle/'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on
separate physical
# devices
control_files = (ora_control1, ora_control2)
compatible ='12.2.0.1.0'
# cdb
enable_pluggable_database=true
# Oracle Managed Files
db_create_file_dest='/opt/app/oracle/oradata'

f:id:ts0818:20180322220916p:plain

ファイル編集後、ふと、インスタンス自体存在するのか?気になったので、

⇧  上記サイト様によると、「PMONプロセス」で起動してるインスタンスは確認できるようです。

f:id:ts0818:20180322150218p:plain

これだと、インスタンスが存在してるかの確認はできなさそうです。

じゃあ、起動・停止の状態に関わらずインスタンスの確認はできないものか。 

www.shift-the-oracle.com

⇧  上記サイト様でプロセスのことは詳しく説明してくださっています。

が、自分の知識では結局理解できず(涙)。

まぁ、とりあえず、再度、SQL*Plus カモ~ン!!!!

f:id:ts0818:20180322163350p:plain

はい、出ました~、新たなエラー。 

blogs.yahoo.co.jp

⇧  上記サイト様によると、「ORACLE_SID 」が環境変数に追加されてないと。設定ファイルに追加しとらんかったですね。編集。

f:id:ts0818:20180322163712p:plain

f:id:ts0818:20180322163848p:plain

f:id:ts0818:20180322163946p:plain

f:id:ts0818:20180322164022p:plain

再度、SQL*Plus カモ~ン!!!!!

f:id:ts0818:20180322164436p:plain

出た出た、「ORA-00845: MEMORY_TARGET not supported on this system」。

解決できてなかったんか~い。

あれ? /dev/shmのサイズが元に戻ってる(497M => 7.0Gの変更がなかったことにされているんですが...)...どういうこと?

f:id:ts0818:20180322165119p:plain

Linuxが稼働しているマシンのメモリー上に作成できるファイル・システムです。tmpfsを任意のディレクトリにマウントするだけで,通常のパーティションのようにファイルの読み書きなどに利用できます

ただし,tmpfsはメモリー上に作成するファイル・システムであるため,マシンの電源を落としたり,マシンを再起動したりすると書き込んだファイルは消えてしまいます。

tmpfs | 日経 xTECH(クロステック)

tech.nikkeibp.co.jp

⇧  上記サイト様によるとそういうことみたいですね。仮想マシンの再起動でリセットされとったんじゃ~!

 

ということで、/dev/shm のデフォルトのサイズを設定ファイルとかで編集できる?

www.lesstep.jp

⇧  上記サイト様によると、/etc/fstabってファイルで可能であるようです。

さっそくバックアップを作成して編集していきます。

f:id:ts0818:20180322171140p:plain

はい~、rootユーザーじゃないと権限がないですね、もう一つコマンドプロンプトを起ち上げ、

cp -p /etc/fstab /etc/fstab.bak.20180322

viエディターで、/etc/fstabを編集。

vi /etc/fstab

f:id:ts0818:20180322171400p:plain

とりあえず、一番最後の行に追記してみました。 

tmpfs                   /dev/shm                tmpfs   defaults,size=7g        0 0

f:id:ts0818:20180322172427p:plain

takuya-1st.hatenablog.jp

⇧  上記サイト様によると、 

mount -a
mount

で反映できるようです。

f:id:ts0818:20180322173308p:plain

 駄目でした~、

nullpopopo.blogcube.info

⇧  上記サイト様によると、パスを指定しないと駄目のよう。

f:id:ts0818:20180322174202p:plain

oracleユーザーでログインしてるコマンドプロンプトのほうにも反映されてます。

f:id:ts0818:20180322174240p:plain

何度目?再度、SQL*Plus カモ~ン!!!!!!

f:id:ts0818:20180322174819p:plain

しまった...「init[ORACLE_SID].ora」で設定したパスのディレクトリ作成してなかった。2つのディレクトリってことは、

audit_file_dest='/opt/app/oracle/admin/orcl/adump'
db_recovery_file_dest='/opt/app/oracle/fast_recovery_area'

⇧ この人たちですかね。

で、階層のあるディレクトリをいっぺんに作成するには、

uxmilk.jp

⇧  上記サイト様によると、mkdir -p というように-pオプションが要るようです。

mkdir -p /opt/app/oracle/admin/orcl/adump
mkdir -p /opt/app/oracle/fast_recovery_area    

f:id:ts0818:20180322180159p:plain

再度、SQL*Plus カモ~ン!!!!!!!

f:id:ts0818:20180322180439p:plain

 ⇧  インスタンスが起動しましたよ!だが、しかし、エラー!

「ORA-00205: ?????????????????????????????????????????」

 

ORA-00205: 制御ファイル識別エラー。詳細はアラート・ログをチェックしてください。
原因: システムは指定された名前およびサイズの制御ファイルを見つけることができません。
処置: すべての制御ファイルがオンラインになっていること、およびコールド・スタート時にシステムで作成された同じファイルであることを確認してください。

ORA-00000からORA-00877

⇧  公式の説明だと、アラート・ログを見れば分かると。

 

そもそも、データベースが起動するまでには3つのSTEPを経ていくようで、 

データベースの起動が完了するまでには「START」、「MOUNT」、「OPEN」の3つのステップが存在します。

Oracle Databaseが起動できない時の確認ポイント | アシスト

⇧  上記サイト様によると、 

という流れですかね。

で、いま、「MOUNT」の段階で進めなくなっていると。

んじゃあ、アラート・ログを見ていきますか。自分の場合、「init[ORACLE_SID].ora」で、

diagnostic_dest='/opt/app/oracle/'

と設定しているので、DIAGNOSTIC_DESTっちゅう値の説明より、

DIAGNOSTIC_DEST

$ORACLE_BASE環境変数の値から導出される。$ORACLE_BASEが設定されていない場合は、Oracle Universal Installerの設定に従って、ORACLE_BASEから導出される。ORACLE_BASEが設定されていない場合は、$ORACLE_HOME/rdbms/logが使用される。

DIAGNOSTIC_DEST

自動診断リポジトリ(ADR)ホーム 

<diagnostic_dest>/diag/rdbms/<dbname>/<instname>

ADRホーム・ディレクトリの下に配置されるファイルは、次のとおりです。

  • トレース・ファイル - <adr-home>/traceサブディレクトリに配置されます。

  • アラート・ログ - <adr-home>/alertサブディレクトリに配置されます。また、alert.logファイルは現在XMLフォーマットであり、Oracle ARBロギング標準に従います。

  • コア・ファイル - <adr-home>/cdumdサブディレクトリに配置されます。

  • インシデント・ファイル - 各重大エラー(たとえば、ORA-600、ORA-1578、ORA-7445)が発生するとインシデントが発生します。各インシデントにはIDが割り当てられ、各インシデント(エラー・スタック、コール・スタック、ブロック・ダンプなど)のダンプは独自のファイルに保存され、プロセス・トレース・ファイルから分離されます。インシデント・ダンプ・ファイルは<adr-home>/incident/<incdir#>に配置されます。プロセス・トレース・ファイル内でインシデント・ダンプ・ファイルの場所がわかります。

DIAGNOSTIC_DEST 

となっているから、アラート・ログは、 <diagnostic_dest>/diag/rdbms/<dbname>/<instname>/alertフォルダにあるはず。

f:id:ts0818:20180322185423p:plain

⇧  ありましたね。

 さっそく、見てみることに。

f:id:ts0818:20180323213053j:plain

ちょっと、想像以上に量が多いので、一旦、ホスト(Windows 10 Home)のほうにファイルを転送(ダウンロード)してチェックしたいと思います。

Tera Termを起動し、検索したパスを...あれ?『/opt/app/oracle/diag/rdbms/orcl/ORC
L/alert/log.xml』じゃないけど...まぁ、これしかないっぽいですしね。

表示されたパスをコピーし、

f:id:ts0818:20180322191700p:plain

「ファイル(F)」>「SSH SCP...」を選択。

f:id:ts0818:20180322192124p:plain

「Receive」のほうの「From:」のテキストエリアに、

f:id:ts0818:20180322192324p:plain

先ほどのパスを貼り付けたら、「To:」で受取先を指定します。

f:id:ts0818:20180322192547p:plain

f:id:ts0818:20180322192706p:plain

「Receive」をクリック。

f:id:ts0818:20180322192743p:plain

警告が出るけど、「OK」。

f:id:ts0818:20180322193243p:plain

デスクトップにダウンロードされてますが、中身が空という...。

f:id:ts0818:20180322193419p:plain

やり直し。findコマンドの上手い使い方が分からず。

f:id:ts0818:20180322201833p:plain

 

f:id:ts0818:20180322201924p:plain

上書きするか聞かれるので、「はい(Y)」。

f:id:ts0818:20180322201957p:plain

今度は、OKそうですね。

f:id:ts0818:20180322202052p:plain

で開いてみると、

<msg time='2018-03-22T09:03:43.951+00:00' org_id='oracle' comp_id='rdbms'
 type='UNKNOWN' level='16' host_id='xx.0.x.xx'
 host_addr='xx.0.x.xx' module='MMON_SLAVE' pid='24530'>
 <txt>Errors in file /opt/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_m000_24530.trc:
ORA-00202: control file: '/opt/app/oracle/product/12.2.0.1/dbhome_1/dbs/ora_control2'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/opt/app/oracle/product/12.2.0.1/dbhome_1/dbs/ora_control1'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
 </txt>
</msg>
<msg time='2018-03-22T09:03:44.097+00:00' org_id='oracle' comp_id='rdbms'
 msg_id='dbkh_generate_new_failure_alert:2846:3311820762' type='ERROR' group='DRA'
 level='1' host_id='xx.0.x.xx' host_addr='xx.0.x.xx'
 module='MMON_SLAVE' pid='24530'>
 <txt>Checker run found 2 new persistent data failures
 </txt>
</msg>
    

f:id:ts0818:20180323213321j:plain

どうやら、DBが無い状態で、startupするのは良くないらしい。startup nomount にすれば良いらしいです。

piro-shiki.dreamlog.jp


一旦、仮想マシンを停止。

これは SHUTDOWN 時にデータベースが MOUNT状態にないことを検知しているも のです。データベースが NOMOUNT状態の時に、ORA-1507 が出力されるのは想 定動作となり、問題ありません。エラーを無視してください。

Oracle OPEN していないデータベースを SHUTDOWN すると ORA-1109 や ORA-01507 が発生する | ORACLE専用データ復旧ソフトウェア Oracle DUL

f:id:ts0818:20180322205207p:plain

 

 

DataBaseの作成

12cから、データベースの構造が変わったようで、データベースをCDB(マルチテナント・コンテナ・データベース)で作成する場合に、

  1. Oracle Managed Filesを使用しないCDBの作成
  2. Oracle Managed Filesを使用したCDBの作成

の2つの方法があるようで、

Oracle Managed Filesを使用するには、初期化パラメータDB_CREATE_FILE_DESTを設定する必要があります。このパラメータは、CDBで作成されて自動的に名前が付けられる様々なCDBファイル用のベース・ディレクトリを定義します。

CDBの作成および構成

となっているようで、 『2.Oracle Managed Filesを使用したCDBの作成』でDBを作る場合は、「init[ORACLE_SID].ora」の中で、『db_create_file_dest='/opt/app/oracle/oradata'』のように、DB_CREATE_FILES_DESTというものを設定する必要があるようです。

 

 ログファイル、DBファイルを格納するためのディレクトリを事前に作っておく必要があるようです。一旦、ログアウトし、ディレクトリを作成。

mkdir -p /opt/app/oracle/oradata

f:id:ts0818:20180322223716p:plain

再度、sqlplusでログインしたらば、

f:id:ts0818:20180322223946p:plain

データベースの作成。 

CREATE DATABASE ORCL
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
EXTENT MANAGEMENT LOCAL
DEFAULT TABLESPACE users
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
ENABLE PLUGGABLE DATABASE
SEED
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M;

f:id:ts0818:20180322234623p:plain

しばし待つと、データベースが作成されました!

f:id:ts0818:20180322234838p:plain

必要なコンポーネントをインストールする必要があるようです。 

catcdb.sqlのSQLスクリプトを実行します。このスクリプトによって、CDBで必要なコンポーネントがすべてインストールされます。

CDBの作成および構成

catcdb.sqlのSQLスクリプトを実行します。

@?/rdbms/admin/catcdb.sql

f:id:ts0818:20180322235843p:plain

いや、何の説明もないから分からんけど、空Enterにしました。 

f:id:ts0818:20180323000148p:plain

f:id:ts0818:20180323000225p:plain

f:id:ts0818:20180323000324p:plain

⇧  むちゃくちゃエラーっぽい気がするんだが...。

上記スクリプトを実行したときに「Can't locate Term/ReadKey.pm in @INC」のエラーが出力されてしまう場合は、PATH変数に$ORACLE_HOME/perl/binを追加してみてください。

http://soldoutdb.com/gold/multi/gold2.html

⇧  上記サイト様によると、ORACLE_HOMEにインストールされてるperl環境変数に追加すれば良いみたいですね。 

まぁ、一旦、ログアウトします。

f:id:ts0818:20180323001215p:plain

ORACLE_HOMEにperlありましたね。

f:id:ts0818:20180323122209p:plain

.bash_profileに環境変数を追加してまいりますか~。

f:id:ts0818:20180323122536p:plain

f:id:ts0818:20180323122839p:plain

PATH変数に$ORACLE_HOME/perl/binを追加したら、「Esc」キーを押して、「:wq」で、ファイル保存しviエディターを閉じます。

f:id:ts0818:20180323122942p:plain

.bash_profileの変更を反映。

source ~/.bash_profile

f:id:ts0818:20180323123305p:plain

 そしたらば、もう一回、catcdb.sqlSQLスクリプトを実行してみますか。

f:id:ts0818:20180323123844p:plain

例のごとく、空Enterで...エラーが変わったけど、エラーに変わりはない。

f:id:ts0818:20180323130400j:plain

catcdb.sqlSQLスクリプトの内容はこんな感じ。 

SQL> Rem The script relies on the caller to have connected to the DB
SQL>
SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to
SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL>
SQL> Rem $ORACLE_HOME
SQL> column oracle_home new_value oracle_home noprint
SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual;

SQL>
SQL> Rem OS-dependent slash
SQL> column slash new_value slash noprint
SQL> select sys_context('userenv', 'platform_slash') as slash from dual;

SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin
SQL> column rdbms_admin new_value rdbms_admin noprint
SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual;
旧   1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual
新   1: select '/opt/app/oracle/product/12.2.0.1/dbhome_1'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual

SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint
SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual;
旧   1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual
新   1: select '/opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual

SQL>
SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
1に値を入力してください:
2に値を入力してください:
Can't locate util.pm in @INC (you may need to install the util module) (@INC contains: /opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin /opt/app/oracle/product/12.2.0.1/dbhome_1/perl/lib/site_perl/5.22.0/x86_64-linux-thread-multi /opt/app/oracle/product/12.2.0.1/dbhome_1/perl/lib/site_perl/5.22.0 /opt/app/oracle/product/12.2.0.1/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi /opt/app/oracle/product/12.2.0.1/dbhome_1/perl/lib/5.22.0 .) at /opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin/catcdb.pl line 35.
BEGIN failed--compilation aborted at /opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin/catcdb.pl line 35.

⇧  はい、issue(バグ)でした(涙)。

しかも、「1に値を入力してください:」「2に値を入力してください:」には、
「Rem $ORACLE_HOME/rdbms/admin」、
「Rem $ORACLE_HOME/rdbms/admin/catcdb.pl」

つまり、

「/opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin」、「/opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin/catcdb.pl」

をそれぞれ入力せんとマズそうですね。

で、バグの内容ですが、

BEGIN failed--compilation aborted at /opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin/catcdb.pl line 35.    

$ORACLE_HOME/rdbms/admin/catcdb.plの35行目で問題が起こっているらしく、

vi +35 /opt/app/oracle/product/12.2.0.1/dbhome_1/rdbms/admin/catcdb.pl

f:id:ts0818:20180323141430p:plain

f:id:ts0818:20180323140332p:plain

⇧  「use util qw(trim, splitToArray)」ってとこの、utilのuが小文字になってるのが問題らしいです...perlとか分からんですわ。

実際、ORACLE_HOMEの中を検索してみると、perlのモジュールでutil.pmは存在しないけど、Util.pmは5件スマッシュヒット。

f:id:ts0818:20180323135647p:plain

なので、$ORACLE_HOME/rdbms/admin/catcdb.plの35行目を、

use Util qw(trim, splitToArray);

のように修正します。

f:id:ts0818:20180323141157p:plain

で、保存したらば、もう一回 catcdb.sqlSQLスクリプトを実行していこうと思いますが、Util.pmが環境変数に追加されていない場合は、catcdb.sqlSQLスクリプトを実行するディレクトリを移動しておく必要があるようです。

移動しておくディレクトリは、

$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/

f:id:ts0818:20180323142312p:plain

ちなみに、catcdb.sqlSQLスクリプト

@?/rdbms/admin/catcdb.sql

@?がついていて、

sqlplusにおいて「?」はOracle Homeディレクトリに置換されます。つまり、「@?/sqlplus/admin/plustrce.sql」は、「@$ORACLE_HOME/sqlplus/admin/plustrce.sql」の意味となります。

しばちょう先生の試して納得!DBAへの道 第5回 SQLの実行計画からパフォーマンスの違いを読み解く

⇧  という意味らしいです。

というわけで、一旦、ログアウトし、

f:id:ts0818:20180323144140p:plain

 ディレクトリを移動しておいて、再度、ログイン。

f:id:ts0818:20180323144435p:plain

catcdb.sqlSQLスクリプトを実行。 

f:id:ts0818:20180323144557p:plain

 今度は、ちゃんと入力。新しいパスワードを自分で決めて良いみたいですね。(忘れないようにメモしておこう、独り言です。)

f:id:ts0818:20180323144807p:plain

 適当なパスワードを入力して、Enter。

f:id:ts0818:20180323150504j:plain

データベース作成のときに「DEFAULT TEMPORARY TABLESPACE temp」で指定してた名前でOKかと。

f:id:ts0818:20180323150551j:plain

で、エラー...どんだけエラー出しまくってるんだって話ですね。

f:id:ts0818:20180323145627p:plain

「database is not openUse of uninitialized value $instanceName in concatenation (.) or string at」ってエラーらしいでんすが、

d.hatena.ne.jp

⇧  上記サイト様によると、Perlで変数の初期化が行われていないと起こるようです。

で、実際エラーの起きてるとこを見てみると、

sub get_instance_status_and_name (\@$$$) {

  my ($connectString, $DoneCmd, $DoneFilePathBase, $debugOn) = @_;

  my @GetInstStatusStatements = (
    "connect ".$connectString->[0]."\n",
    "set echo off\n",
    "set heading off\n",
    "select \'C:A:T:C:O:N\' || status, instance_name from v\$instance\n/\n",
  );

  # should return exactly 1 row
  my ($out_ref, $Spool_ref) = 
    exec_DB_script(@GetInstStatusStatements, "C:A:T:C:O:N", 
                   $DoneCmd, $DoneFilePathBase, $debugOn);

  my $InstStatus;
  my $InstName;

  if (!@$out_ref || $#$out_ref != 0) {
    # instance status and name could not be obtained; if this was due to the 
    # fact that the instance was idle (ORA-01034 reported), return Idle as 
    # InstStatus; otherwise, report an error
    if (!@$out_ref) {
      for my $SpoolLine ( @$Spool_ref ) {
        if ($SpoolLine =~ /ORA-01034/) {
          return ("Idle", "N/A");
        }
      }
    }
    
    print_exec_DB_script_output("get_instance_status_and_name", $Spool_ref, 1);
  } else {
    # split the row into instance status and instance name
    ($InstStatus, $InstName) = split /\s+/, $$out_ref[0];
  }

  return ($InstStatus, $InstName);
}

...途中省略...

      # status and name of the instance (v$instance.status and 
      # v$instance.instance_name)
      my ($instanceStatus, $instanceName) = 
        get_instance_status_and_name(@connectString, $catcon_DoneCmd, 
                                     $doneFileNamePrefix, $catcon_DebugOn);

      if (!$instanceStatus) {
        log_msg("catconInit: unexpected error in ".
                "get_instance_status_and_name\n");
        return 1;
      } elsif ($instanceStatus !~ /^OPEN/) {
        log_msg("catconInit: database is not open");
        if ($EZConnect eq "") {
          # default instance
          log_msg(" on the default instance (".$instanceName.")\n");
        } else {
          log_msg(" on instance ".$instanceName." with EZConnect string = ".
                  $EZConnect."\n");
        }
        return 1;
      }

f:id:ts0818:20180323154105p:plain

my ($instanceStatus, $instanceName)のところで、$instanceNameに何も代入されなかったということですかね。

CATALOG.SQL, CATPROC.SQL and PUPBLD.SQL scripts were not executed using the catcon.pl script provided by Oracle. This means views for the data dictonary were only created in your root database (the CDB) but not in the seed database.

Oracle 12c: ORA-00942 on CREATE PLUGGABLE DATABASE – Simon Krenger

⇧  上記サイト様によると、catcon.pl(perlのファイル)のスクリプトが実行されなかったのは、PERL5LIBっていう環境変数を設定していなかったからって言ってますね(OracleのDB作成のガイドのどこにもそんな話は出てきてないという...)

まぁ、とりあえず、やってみますか。一応、ORACLEインスタンスは起動した状態(STARTUP NOMOUNTで起動してるのでDBにマウントされてない状態)にしておいて、

f:id:ts0818:20180323172859p:plain

もう一つコマンドプロンプトを起ち上げて、Oracleユーザーでログインしておきます。

したらば、PERL5LIBっていう環境変数を設定。

f:id:ts0818:20180323173202p:plain

catcdb.sqlSQLスクリプトを実行。

$ORACLE_HOMEはご自分の環境のパスに置き換えてください。

perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b catalog $ORACLE_HOME/rdbms/admin/catalog.sql;

f:id:ts0818:20180323173359p:plain

駄目じゃん...。

f:id:ts0818:20180323173504p:plain

駄目もとで、マウントした状態で、試してみる。 (一回、SHUTDOWNでORACLEインスタンスを停止してから、STARTUPしてください。)

f:id:ts0818:20180323173800p:plain

かなり時間かかりますが、

f:id:ts0818:20180323174209p:plain

completed successfully

来たー!!!DB作成した後に、ORACLEインスタンスをマウントモードで起動しなおさないといけなかったようです、分かるかい!

f:id:ts0818:20180323174459p:plain

catproc.sqlSQLスクリプトを実行。

$ORACLE_HOMEはご自分の環境のパスに置き換えてください。

perl $ORACLE_HOME/dbhome_1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b catproc $ORACLE_HOME/dbhome_1/rdbms/admin/catproc.sql;

f:id:ts0818:20180323174738p:plain

むちゃくちゃ時間かかりましたが、上手くいきました。

f:id:ts0818:20180323182716p:plain

 

pupbld.sqlSQLスクリプトを実行。

$ORACLE_HOMEはご自分の環境のパスに置き換えてください。

perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b pupbld -u SYSTEM/oracle $ORACLE_HOME/sqlplus/admin/pupbld.sql;

f:id:ts0818:20180323182838p:plain

⇧  エラー。どうやら、SYSTEMユーザーのパスワードが合ってないみたい。

f:id:ts0818:20180323194648p:plain

と思ったら、SYSTEMユーザーがロックされてたらしい。

ALTER USER [ユーザー名] IDENTIFIED BY [ユーザー名のパスワード] ACCOUNT UNLOCK;

f:id:ts0818:20180323200636j:plain

で、再度、pupbld.sqlSQLスクリプトを実行したら、エラーが...権限が足りてないそうな。SYSTEMユーザーだと権限が足りなかったようです。

f:id:ts0818:20180323200619j:plain

f:id:ts0818:20180323200202p:plain

f:id:ts0818:20180323200134p:plain

f:id:ts0818:20180323200054p:plain

pupbld.sqlSQLスクリプトに関しては、直接、SQLで試してみますか。

perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b pupbld -u SYSTEM/oracle $ORACLE_HOME/sqlplus/admin/pupbld.sql;

f:id:ts0818:20180323202001p:plain

f:id:ts0818:20180323202038p:plain

f:id:ts0818:20180323202103p:plain

う~ん、どっちにしろエラーが発生しますな。

「ORA-00942: 表またはビューが存在しません。」
「ORA-01434: 削除するプライベート・シノニムが存在しません。」

ORA-01432: 削除するパブリック・シノニムが存在しません。
ORA-00942: 表またはビューが存在しません。
ORA-01918: ユーザー' string' は存在しません
ORA-01919: ロール' string' は存在しません
ORA-04043: オブジェクトstring は存在しません。
ORA-02289: 順序が存在しません。
ORA-01434: 削除するプライベート・シノニムが存在しません
のようなエラーはcatproc.sqlなどDB作成完了後に ディクショナリ作成したり,基本のプロシーじゃなどを作るスクリプトで普通に出ます。

作る前にまず削除してから作ろうとするからです。

ですからこれらがcatproc.sqlなどでこれらが出ているのならば問題ありません。

Oracle Technology Network (OTN) Japan - 掲示板 : ORA-01034: ORACLE not availableについて。 ...

⇧  上記サイト様によると、pupbld.sqlSQLスクリプトの実行で、これらのエラーは出ても問題なさそうですね。 

 

 

 

制御ファイル

で、制御ファイルと呼ばれるファイルを「init[ORACLE_SID].ora」のcontrol_filesに指定するようです。

例によって場所が分からんという...ORCLっていうフォルダは作られたけど...

f:id:ts0818:20180323003006p:plain

データベースを作成するとできるってなってますね、どこに? 

制御ファイルは、データベースがオープンしているときに必ずOracle Databaseサーバーが書き込めるように、使用可能にしておく必要があります。制御ファイルがないと、データベースがマウントできず、リカバリが困難になります。

Oracle Databaseの制御ファイルはデータベースとともに作成されます。デフォルトでは、データベースの作成時に、制御ファイルのコピーが少なくとも1つ作成されます。デフォルトで複数のコピーが作成されるオペレーティング・システムもあります。データベース作成時に、制御ファイルのコピーを2つ以上作成することをお薦めします。その後も、制御ファイルを失ったり、制御ファイル内の設定を変更する場合には、制御ファイルを作成できます。

制御ファイルの管理

docs.oracle.com

⇧  公式の説明だと、

データベースの作成前にCONTROL_FILESに対してファイルを指定しない場合は、次のように処理されます。

  • Oracle Managed Filesを使用していない場合、データベースではデフォルトのファイル名で制御ファイルが作成されます。デフォルトのファイル名はオペレーティング・システムによって異なります。

  • Oracle Managed Filesを使用している場合は、この機能を使用可能にするために設定した初期化パラメータによって制御ファイルの名前と位置が決定されます。

  • Oracle Automatic Storage Management (Oracle ASM)を使用している場合は、不完全なOracle ASMファイル名をDB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DEST初期化パラメータに設定できます。Oracle ASMによって、制御ファイルが適切な場所に自動的に作成されます。

ってなってますね、 「init[ORACLE_SID].ora」の設定を相当しっかりやっとかないとマズかったんじゃないの?と思われますね。

 

制御ファイルの場所は、SQLで分かるみたいですね。

SELECT name FROM v$controlfile;

f:id:ts0818:20180323204635p:plain

 ⇧  「.ctl」の拡張子がついてないけど、大丈夫なんですかね?「init[ORACLE_SID].ora」の設定をしっかりしとけば...。

 

とりあえず、制御ファイルのバックアップを取ります。

docs.oracle.com

  • 制御ファイルをバイナリ・ファイル(既存の制御ファイルの複製)にバックアップを作成
  • 後で制御ファイルの再作成に使用できるSQL文を生成

の2パターンあるようです。 

まずは、『制御ファイルをバイナリ・ファイル(既存の制御ファイルの複製)にバックアップを作成』を試してみます。ディレクトリは存在してるものを指定します。ファイル名は適当で良さそうです。

ALTER DATABASE BACKUP CONTROLFILE TO [バックアップ先ディレクトリ/バックアップファイル名];

f:id:ts0818:20180323210930p:plain

作成されています。

f:id:ts0818:20180323211803p:plain

 

もう一つの、『後で制御ファイルの再作成に使用できるSQL文を生成』も試してみます。

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

f:id:ts0818:20180323211645p:plain

アラートログを確認してみると($ORACLE_BASE=/opt/app/oracleの場合)、

cat /opt/app/oracle/diag/rdbms/orcl/ORCL/alert/log.xml

f:id:ts0818:20180323213533j:plain

⇧  「/opt/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_1766.trc」 っていうトレースファイルができたようです。

 

pfile(初期化パラメータ・ファイル)で、ORACLEインスタンスの起動とDBのマウント

pfile(初期化パラメータ・ファイル)、つまり「init[ORACLE_SID].ora」を使ってORACLEインスタンスの起動とDBのマウントができれば良いようです。

とりあえず、一旦、ORACLEインスタンスとDBをSHUTDOWNしときます。

f:id:ts0818:20180323215555p:plain

pfile(初期化パラメータ・ファイル)に制御ファイルのパスを追加していくわけですが、制御ファイルの拡張子が付いてないので、「.ctl」を付けたいと思います。

f:id:ts0818:20180323220528p:plain

変更できましたので、

f:id:ts0818:20180323220807p:plain

「init[ORACLE_SID].ora」に、制御ファイルのパスを追加します。

f:id:ts0818:20180323221106p:plain

control_filesのところを、

f:id:ts0818:20180323221230p:plain

変更して保存。

f:id:ts0818:20180323221530p:plain

 そしたらば、sqlplusでログインして、pfile(初期化パラメータ・ファイル)でORACLEインスタンスの起動とDBのマウントを行います。$ORACLE_HOME、init[ORACLE_SID].oraはご自身の環境に置き換えてください。

startup pfile=$ORACLE_HOME/dbs/init[ORACLE_SID].ora

f:id:ts0818:20180323221727p:plain

 無事、起動しました。

f:id:ts0818:20180323221758p:plain

テキスト形式のpfile(初期化パラメータ・ファイル)を元に、バイナリ形式のSPFILE(サーバー・パラメータ・ファイル)を作成しておきます。

create spfile from pfile;

f:id:ts0818:20180323222223p:plain

正常にSHUTDOWN、STARTUPができればOKです。

f:id:ts0818:20180323222516p:plain

f:id:ts0818:20180323222817p:plain

長い闘いでしたが、無事、DBの起動までできましたね。

後はテーブルとかを作成していけば、ようやくJavaとかからのDB接続の練習ができますね。

今回も、無駄に時間を浪費してしまいましたが(まるまる3日ぐらい潰してしまった...)。有識者の方に聞ける環境があればもっと効率よくできるんでしょうね。

先生が欲しいですね。

今回はこのへんで。