SchemaSpy で Oracle データベースのドキュメント(HTML)を作成する

More than 1 year has passed since last update.

前フリ

ScehmaSpy を使って、Oracle データベースのドキュメントの生成をしてみます。
頻繁にDBの定義が変わると、ドキュメント作成が後回しになりがち。
自動化できると便利なはず。

環境

Windows7
Java7
Oracle 11g

事前準備

ドキュメントを読む

SchemaSpy 公式サイト をまず読む。
jar を実行すればよいだけに見えますね。

また、先人の知恵もお借りします。

できる気がしてきた。

インストール

公式ドキュメントを読むと、Graphviz を利用しているとのこと。
Graphviz 公式サイト から Windows 用インストーラをダウンロードする。
graphviz-2.38.msi を使って、デフォルト設定のままインストールを実行する。
C:\Program Files (x86)\Graphviz2.38 フォルダにいろいろ入っていることを確認して、スタートメニューからのexe 起動ができることも試しておいた。

実装

プロジェクトの構成

プロジェクトの構成は以下のようにする。
プロジェクト名は「schemaspydemo」。
bin に コマンド実行ファイル(demo.bat)を格納する。
lib に jar ファイルを格納する。Oracle なので、ojdbc7.jar を格納しておく。
output は 実行結果を格納する場所として用意した。

txt
schemaspydemo
│      
├─bin
│      demo.bat
│      
├─lib
│      ojdbc7.jar
│      schemaSpy_5.0.0.jar
│      
└─output

demo.bat の記述

Oracle の場合は接続方法によって、 -t を変える。今回は「Oracle with Thin Driver」 で接続しているので「orathin」となる。
$始まりは各自のデータベース情報に変更する。
最小限度と思われるパラメータ設定が以下の内容となる。
(キャレットで改行している。)

txt
java^
 -jar ../lib/schemaSpy_5.0.0.jar^
 -dp ../lib/ojdbc7.jar^
 -t orathin^
 -host $IP^
 -port $PORT^
 -db $SID^
 -s $SCHEMA^
 -u $USER^
 -p $PASSWORD^
 -o ../output^
 -charset utf-8^
 -gv "C:\Program Files (x86)\Graphviz2.38"

実行

demo.bat を実行する。
正常に実行できれば、コマンドプロンプトに以下のようなログが出てくる。

txt
Using database properties:
  [../lib/schemaSpy_5.0.0.jar]/net/sourceforge/schemaspy/dbTypes/orathin.properties
Gathering schema details...........(33sec)
Writing/graphing summary.........(1sec)
Writing/diagramming details........(0sec)
Wrote relationship details of 8 tables/views to directory '..\output' in 35 seconds.
View the results by opening ..\output\index.html

ログのとおり index.html を開けば、作成結果が確認できる。

実行結果のhtml

実行結果のhtml2

実行後の感想

対象としたデータベースには1000以上のテーブルがあったため、出力に大変時間がかかった。
(途中で止めてしまったが、650テーブル2h程度かかっていた。)
最初のお試しは、狙ったテーブルだけにしたほうがよい。

demo.txt に「 -i "tableNamesRegex"」を使うと対象が絞れる。
また、view のドキュメント作成が不要であれば 「-noviews」 を使うとよい。
テーブルごとにレコード数(Rows)が出力されているが、出力しないようにするパラメータ「-norows」があるので
このパラメータを入れると、件数取得しない分だけ早くなるかもしれない。


お手軽にHTMLが出力できた。
今回を基礎編として、次回は XLS 出力か差分出力かを試してみる。