2016/12/18

CUIでOracle Databaseリファレンスマニュアルを参照する(2016冬12.1,12.2対応版)

本記事は JPOUG Advent Calendar 2016 の18日目です。17日目は discus_hamburg さんの Mac De Oracle: スタースキーマを扱う実行計画の特徴 でした。

ここでは自作のリファレンスマニュアル参照ツールをちょっと改修したよという宣伝をさせてください。オマケもあります。

CUIで参照するとは?

HTML で公開されている Oracle Database のリファレンスマニュアルをあらかじめダウンロードして加工しておき、それをコマンドラインで参照するツールを以前作りました。

ほぼ毎日端末を使用していますので、ふとディクショナリの定義などを確認したいときに重宝しています。

各章を単一のテキストファイルに出力しますのでリリース間での差分を確認することも(頑張れば)できます。

本記事ではこのツールの改修点と、使用方法として docker コンテナでの実行例、リファレンスマニュアル 12.1 と 12.2 の変更点についてまとめます。

ツールの改修点

12.1のファイル名変更対応

今回の記事のネタになるかなとスクリプトの動作を確認してみると、12.1 のマニュアルのファイル名の体系ががらっと変わっていることに気づきました。

手元にあるタイムスタンプが 2015年4月の部品番号 B71292-08 では次のようなファイル名だったのですが、

<li><a href="refrn00101.htm#CJAJHDED">基本的な初期化パラメータ</a></li>
2016年12月の部品番号 B71292-11 では GUID 形式のファイル名に変わっていました。
<li><a href="GUID-D75F1A77-47E2-4F35-B145-44B3A10ED85C.htm">基本的な初期化パラメータ</a></li>
このツールは一度ファイルをダウンロードしてしまえば後はそれを参照するだけですので気づきませんでした。 このファイル名の形式は英語版も同様でしたので、これらを対象とするように変更しました。

初期表示を12.1に変更

Oracle Database 11.2 は 2015年1月で Premire Support 期間が終了していますので、初期表示に使用するバージョンを 12.1 に変更しました。

ヘッダ、フッタの微修正(英語版)

オンラインマニュアルが Alta UI 対応したタイミングで英語版のヘッダとフッタは JavaScript で出力されるように変わっています。

本ツールでもそれらから出力していたのですが、現在のファイルを確認すると微妙な変更が入っていました。

  • http://docs.oracle.com/database/121/nav/breadcrumbs.json
    旧 "product":"Oracle Database Online Documentation 12c Release 1 (12.1)",
    
    現 "product":"Oracle Database Online Documentation 12<i>c</i> Release 1 (12.1)",
  • https://docs.oracle.com/database/121/dcommon/js/headfoot.js
    旧 cpyrSpan.appendChild(document.createTextNode("Copyright \u00A9 2015, Oracle and/or its affiliates. All rights reserved. "));
    
    現 cpyrSpan.appendChild(document.createTextNode("Copyright \u00A9 " + d.getFullYear() + ", Oracle and/or its affiliates. All rights reserved. "));
些末なところですが、テキストとして処理していますのでタグが邪魔だったりコピーライトが正しく出力されていませんでしたので、タグは除去して年はスクリプト実行時の年を表示するようにしました。

12.2対応(英語版)

Oracle Database 12c Release 2 はダウンロード版に先行して Oracle Cloud でリリースされ、英語版のマニュアルも公開されています。

ツールで対応しようと確認してみると、12.1 で GUID 形式のファイル名に変わったばかりなのに、SEO 対策を考えてか内容を意味するファイル名に変更されていました。
<li><a href="GUID-D75F1A77-47E2-4F35-B145-44B3A10ED85C.htm"><span class="secnum">1.2</span> Basic Initialization Parameters</a></li>
<li><a href="basic-initialization-parameters.htm#GUID-D75F1A77-47E2-4F35-B145-44B3A10ED85C"><span class="secnum">1.2</span> Basic Initialization Parameters</a></li>
スクリプトを書く上では謎の GUID よりは見通しが良くなったと思います。

ツールの使用方法

使用方法については過去の JPOUG Advent Calendar の記事で紹介させて頂きましたので本記事では省略します。

このツール自体はシェルスクリプトですが、ファイルの取得に wget、HTML のレンダリングに w3m、テキストの整形に perlsed など外部コマンドにかなり依存しています。

ツールを動かしているメインの環境は CentOS 5 と macOS の homebrew だったので気づかなかったのですが、CentOS 7 だと w3m コマンドが標準で含まれませんし、Debian 系ディストリビューションだと w3m コマンドに指定していたオプションが使用できませんでした。

これらのコマンドが必要なのはファイルの取得とテキストを加工する時だけです。より多くの環境で試していただけるよう、その処理を docker コンテナで実行する方法をご紹介します。

ツールによるファイルの取得と加工をdockerコンテナで実行する方法

まずツールをダウンロードします。

wget --no-check-certificate https://raw.githubusercontent.com/yoshikaw/oracle-cui-reference/master/oracle-cui-reference.sh

つぎに出力ディレクトリを作成します。ここではツールがデフォルトで使用するディレクトリです。
mkdir $HOME/.odoc_cache

そしてツールと出力ディレクトリをバインドマウントした CentOS 6 コンテナで /bin/bash を起動します。

docker run -it -v $HOME/.odoc_cache:/root/.odoc_cache -v $PWD/oracle-cui-reference.sh:/oracle-cui-reference.sh --rm centos:6 /bin/bash

あとはコンテナ内で必要なコマンドをインストールしてツールを実行します。ここでは日本語版と英語版の 10.2 以上の全てのバージョンを対象としていますので完了までには少し時間がかかります。omkdata all の所を omkdata 121omkdata 112 121 などとすれば対象を必要なバージョンに絞れます。

yum install w3m wget -y

source ./oracle-cui-reference.sh

omkdata all

ODOC_LANG=en omkdata all

exit

コンテナでの実行が終わると最初に作成したディレクトリにファイルが生成されています。あとは表示のためにツールを読み込んでシェル関数を実行するだけです。

source ./oracle-cui-reference.sh

# 12.1 の動的パフォーマンス・ビューを参照する場合
odyn

# 英語版 12.2 の初期化パラメータを参照する場合
ODOC_LANG=en oinit 122

オマケ: Database Reference 12.1(E41527-25)と12.2(E49629-12)を比較

せっかく 12.2 対応しましたので 12.1 と比較してみました。

Changes を見れば変更点は記載されていますが、とりあえずざっと眺めて気づいたものをピックアップしました。 ここでは公開されているマニュアルを比較したものですので、12.2 にて改廃があった項目のすべてを反映しているとは限りません。参考情報としてご覧下さい。
追加された初期化パラメータ

PDBで変更可能になった初期化パラメータ

PDBで変更不可になった初期化パラメータ

デフォルト値が変わった初期化パラメータ

追加された静的データ・ディクショナリ・ビュー

DBA_*USER_* は除いています。 Oracle Big Data SQL の Apache Hive 関連のビューがリファレンスに追加されていますね。

追加された動的パフォーマンス・ビュー

GV$ は除いています。

C 追加された待機イベント

  • enq: TX - index contention
  • enq: TX - row lock contention
  • latch: redo copy
  • latch: row cache objects
  • library cache: mutex X
  • recovery active instance mapping setup
  • recovery apply pending
  • recovery cancel
  • recovery checkpoint
  • recovery file header update for checkpoint
  • recovery file header update for fuzziness
  • recovery marker apply
  • recovery merge pending
  • recovery metadata latch
  • recovery move influx buffers
  • recovery receive buffer free
  • recovery remote file verification
  • recovery send buffer free
  • recovery shutdown
  • resmgr: I/O rate limit

E 追加された統計情報

  • IM default area resized
  • IM populate bytes in-memory EU data
  • IM populate bytes uncompressed EU data
  • IM populate EUs
  • IM populate EUs accumulated time (ms)
  • IM populate EUs columns
  • IM populate EUs memcompress for capacity high
  • IM populate EUs memcompress for capacity low
  • IM populate EUs memcompress for dml
  • IM populate EUs memcompress for query high
  • IM populate EUs memcompress for query low
  • IM populate EUs no memcompress
  • IM populate EUs requested
  • IM populate (faststart) CUs read
  • IM populate no contiguous inmemory space
  • IM populate segments wall clock time (ms)
  • IM prepopulate bytes in-memory EU data
  • IM prepopulate bytes uncompressed EU data
  • IM prepopulate EUs
  • IM prepopulate EUs accumulated time (ms)
  • IM prepopulate EUs columns
  • IM prepopulate EUs memcompress for capacity high
  • IM prepopulate EUs memcompress for capacity low
  • IM prepopulate EUs memcompress for dml
  • IM prepopulate EUs memcompress for query high
  • IM prepopulate EUs memcompress for query low
  • IM prepopulate EUs no memcompress
  • IM prepopulate EUs requested
  • IM repopulate bytes in-memory EU data
  • IM repopulate (doublebuffering) CUs
  • IM repopulate (doublebuffering) CUs requested
  • IM repopulate EUs
  • IM repopulate EUs accumulated time (ms)
  • IM repopulate EUs columns
  • IM repopulate EUs memcompress for capacity high
  • IM repopulate EUs memcompress for capacity low
  • IM repopulate EUs memcompress for dml
  • IM repopulate EUs memcompress for query high
  • IM repopulate EUs memcompress for query low
  • IM repopulate EUs no memcompress
  • IM repopulate EUs requested
  • IM repopulate (incremental) CUs
  • IM repopulate (incremental) CUs requested
  • IM repopulate (incremental) EUs
  • IM repopulate (incremental) EUs requested
  • IM repopulate no contiguous inmemory space
  • IM repopulate (scan) EUs
  • IM repopulate (scan) EUs requested
  • IM repopulate (trickle) bytes in-memory EU data
  • IM repopulate (trickle) bytes uncompressed EU data
  • IM repopulate (trickle) EUs
  • IM repopulate (trickle) EUs accumulated time (ms)
  • IM repopulate (trickle) EUs columns
  • IM repopulate (trickle) EUs memcompress for capacity high
  • IM repopulate (trickle) EUs memcompress for capacity low
  • IM repopulate (trickle) EUs memcompress for dml
  • IM repopulate (trickle) EUs memcompress for query high
  • IM repopulate (trickle) EUs memcompress for query low
  • IM repopulate (trickle) EUs no memcompress
  • IM repopulate (trickle) EUs requested
  • IM scan EU bytes in-memory
  • IM scan EU bytes uncompressed
  • IM scan EU rows
  • IM scan EUs columns accessed
  • IM scan EUs columns decompressed
  • IM scan EUs columns theoretical max
  • IM scan EUs memcompress for capacity high
  • IM scan EUs memcompress for capacity low
  • IM scan EUs memcompress for dml
  • IM scan EUs memcompress for query high
  • IM scan EUs memcompress for query low
  • IM scan EUs no memcompress
  • IM scan EUs split pieces
  • index cmph cu, uncomp sentinels
  • index cmph dm, cu lock expand
  • index cmph dm, cu migrate row
  • index cmph dm, insert unpurge CU row
  • index cmph dm, purge dummy CU
  • index cmph dm, split for cu lock expand
  • index cmph dm, split for cu migrate row
  • index cmph ld, CU fit
  • index cmph ld, CU fit, add rows
  • index cmph ld, CU negative comp
  • index cmph ld, CU over-est
  • index cmph ld, CU under-est
  • index cmph ld, infinite loop
  • index cmph ld, lf blks flushed
  • index cmph ld, lf blks w/ und CU
  • index cmph ld, lf blks w/o CU
  • index cmph ld, lf blks w/o unc r
  • index cmph ld, retry in over-est
  • index cmph ld, rows compressed
  • index cmph ld, rows uncompressed
  • index cmph sc, ffs decomp buffers
  • index cmph sc, ffs decomp buffers released and found valid
  • index cmph sc, ffs decomp buffers rows avail
  • index cmph sc, ffs decomp buffers rows used
  • index cmph sc, ffs decomp failures
  • index cmph sp, leaf norecomp limit
  • index cmph sp, leaf norecomp negcomp
  • index cmph sp, leaf norecomp nospace
  • index cmph sp, leaf norecomp notry
  • index cmph sp, leaf norecomp oversize
  • index cmph sp, leaf norecomp zerocur
  • index cmph sp, leaf recomp fewer ucs
  • index cmph sp, leaf recomp zero ucs
  • index cmph sp, leaf recompress
  • index cmpl co, prefix mismatch
  • index cmpl ro, blocks not compressed
  • index cmpl ro, prefix change at block
  • index cmpl ro, prefix no change at block
  • index cmpl ro, reorg avoid load new block
  • index cmpl ro, reorg avoid split

F 追加されたバックグラウンドプロセス

  • CLnn (Cleanup Slave Process)
  • CLMN (Cleanup Main Process)
  • IMR0 (Instance Membership Recovery Slave Process)
  • JPn (Java Patching Slave Process)
  • LMFC (Lock Manager Flash Cache Process)
  • NFSn (Direct NFS Dispatcher IO Slave Process)
  • OFSD (Oracle File Server Background Process)
  • OFnn (Oracle File Server Background Process Thread)
  • PMAN (Process Manager)
  • PSP0 (Process Spawner Process)
  • RLnn (ResetLogs Process)
  • Snnn (Shared Server Process)
  • SCM0 (DLM Statistics Collection and Management Slave)
  • SVCB (Service Background Process)

おわりに

ネタに行き詰まって以前の記事の焼き直しの俺俺ツールの宣伝記事となってしまい申し訳ありません。個人的には、担当しているシステムが先日 12.1 になりましたので、Advent Calendar 駆動でこのツールを改修できて良かったです。あと 12.2 のリファレンスマニュアルの追加項目から新機能がなんとなく知れた気になりました。

そういえば数日前に 12.2 日本語版のマニュアルについて速報がありました。

さっそく見てみるとリファレンスマニュアルの中身はまだ英語版のようです。 手元で 12.2 が試せるようになる頃には更新されていると思いますので、その頃にまたツールの動作を確認してみようと思います。

明日は Masashi Matsushita さんです。楽しみですね!

0 件のコメント:

コメントを投稿