この記事は、 JPOUG Advent Calendar 2019 の22日目の記事です。 21日目はryota_hnkさんの 11gしか知らないオッサンが19cを触る でした。そして、なんと5年ぶりにJPOUG Advent Calendarで書くのですが(そもそも、このブログで何か書くのも5年ぶり...)、最近ちょっと考えてみた誰もが知っていて日常的に使っている「COMMIT」について書いてみたいと思います。 COMMITにおけるREDOログへの同期I/Oがパフォーマンス上問題になっている際によく観測される待機イベントは皆さんがご存知の"log file sync"になるのですが、ここでは深く触れません。"log file sync"について知りたい方は、以下、かなり昔にCOMMITにまつわるLog Writerの仕組みを書いたので参考にしてもらえると良いと思います。(ブラウザで見ると文字化けする部分があるのですが、ダウンロードするときれいに見えるとフィードバックをもらっています) Dbts2013 特濃jpoug log_file_sync from Koji Shinkubo COMMITの仕組みのおさらい 今回は、普段あまり気にしない(と思われる)COMMITの「失敗」や「成功」、さらにCOMMITの結果が「不明」といった状況について考えてみたいと思います。知っている人も多いと思いますが、念の為COMMITを実行した時の動き(若干デフォルメされ複数存在するlog writer workerはlg00と記載してます)を確認しておきます。 18c(12c以降)でのコミット時のシーケンス図 sqlplusなどクライアントは"COMMIT"という文字列をwrite(2)でServer Processのソケットに書き込みます "COMMIT"を受け取ったServer Processはsemctl(2)でlog writer(lgwr)を起床させます 起床したlog writer worker(lg00)はpwrite64(2)でオンラインREDOログにlog bufferの内容およびCOMMIT自体のchange vecto
Oracle 18c(18.3)のDBCAでRACを構築する際にエラーが発生していたので備忘録です。 Oracle 18cのDBCAでRACを構築中に以下のようなエラーに遭遇された方はいませんか?世の中に情報がなかったので、もしかしたら私の環境だけ発生しているのかも知れません。 DBCAの"Completing Database Creation"フェーズで発生していて、RACの2ノード目が起動しないというエラーですが原因はタイトルの通り"ORA-29707: inconsistent value 254 for initialization parameter 4955 with other instances"で、日本語にすると"他のインスタンスの初期化パラメータ 4955 の一貫性のない値 254 によりORA-29707が発生している"ということのようです。 初期化パラメータ 4955 では意味不明ですが、きっとパラメータの番号は4955だろうと忖度しつつ、起動している1ノード目のv$parameterの値を確認してみます。 SQL> select name,value from v$parameter where num=4955; NAME VALUE ---------- -------------------- max_pdbs 5 なるほど、理由はともかくパラメータ番号4955のmax_pdbsの値がノード間で異なっているのが問題なのだろうと想像できます。 そこで、DBCAでRACを構築する際に以下のような感じでmax_pdbsの値を明示的に指定してみます。 左下のAll Initialization Parameters...ボタンをクリックします。 右上のShow advanced parametersにチェックを入れて、max_pdbsパラメータに値を指定し、spfileにも含めるようチェックを入れます。 今回は、エラー発生時に1ノード目で確認したmax_pdbsの値 (5)を設定しました。 このまま、RAC構築を進めると先ほどはエラーとなっていた箇所を見事通過し無事にRAC構築ができました。