SAP DB:称えられることのないオープンソース・データベース

クローズドソースかオープンソースかを問わず、Linuxで動作するデータベースを調べていると、何年も前からあるのにオープンソースとして称えられることのなかったデータベースの存在に気付く。しかも、そのデータベースはエンタープライズ対応を謳い、大手ソフトウェア・ベンダの支援を受けている。SAP DBは、将来性豊かで便利なデータベースだ。

SAP DBは、2000年に大手ソフトウェア・ベンダのSAPからオープンソース・プロジェクトとしてリリースされた。オープンソースとして既に円熟期に入っているわけだ。Software AGのAdabas Dの流れを汲むということで、SAP DBには過去数年に及ぶ遺産がある。エンタープライズレベルの作業負荷にも耐えると評判で、SAPはそれをテコにOracleのような高価なデータベースに代わる製品として、コスト削減に強い関心を抱くクライアントをターゲットにSAP DBを売り込んでいる。

また、SAPとMySQL ABから発表された最新のアナウンス(opentechpress.jp記事)によると、今後両社はSAP DBの開発を共同で進めるという。オープンソースのエンタープライズ・データベースへとレベルアップを図るそうだ。

インストール

SAP DBのインストールは簡単であった。RPMをダウンロードしてインストールしたのだが、Linuxディストリビューションの標準パッケージをインストールするのと同じくらい楽に終えることができた。私のシステムはMandrake 9.0だが、ライブラリ関連の問題はまったく起きなかった。私はソフトウェアのインストールをコマンドラインから実行することが多く、今回のインストールでも次のようにコンソールに入力しただけだ。

rpm –install sap*rpm

コマンド1つで、SAP DBパッケージ全体が文句なくインストールされた。まさにプロの技だ。

sapdb-testdb74パッケージによって、テスト用データベースがインストールされる。このデータベースにアクセスするためのサンプルコードを試そうと思い、firststeps.tgzパッケージもダウンロードした。このパッケージには、Java、ODBC、Perl、Python、Cの埋め込みSQLのそれぞれからSAP DBにアクセスできる小さなルーチンが収められている。私は、自分が一番使いやすいCで試してみることにした。

まず、コマンドファイルを実行して環境変数をセットアップした。何事もなく無事終了。その後、Cプリコンパイラ(cpc)の場所をPATH変数に追加しなければならないことにすぐに気付いた。これも問題なし。makeを実行し、サンプルコードをコンパイルした。しかし、このときエラーが発生した。コードの中では「TST」というデータベースを探しているのだが、パッケージは「TST74」という名前でデータベースを作成していた。コードを修正し、再コンパイルすると、サンプルコードは無事実行を終了した。コマンドラインに指定したパラメータも、問題なく動作した。

それから、Pythonも試してみた。HelloSAPDB.pyルーチンとHelloSAPDB-API.pyルーチンでデータベースにアクセスするにはユーザ名としてTESTを使用し、StateSAPDB.pyルーチンでデータベース管理を実行するにはユーザ名としてDBMを使用する必要があった。そのことが分かると、すべてがうまく動作した。

単純ではないデータベース

テスト用データベースを作成したコマンドファイル(/opt/sapdb/testdb74/で見つけた)を調べ始めてすぐに、SAP DBがホームユーザ向けのデータベースとして設計されていないことが納得できた。単なるテスト用データベースを作成するのに、訳の分からないコマンドとパラメータが多数必要になるのだ。それを経てようやく、標準SQLを使ってデータを格納できる状態になる。

要するに、一晩でSAP DBの熟練管理者になれると思ってはいけないということだ。必要な情報は、SAP DBのWebサイトに揃っている。しかし、ドキュメント部分のサイト構成はまだ改善の余地があり、求める情報をすぐに引き出せるようになるにはしばらく時間がかかるかもしれない。

データベースを管理するためのコマンドがいろいろ用意されているが、その多くはdbmcliユーティリティを使って実行する。コマンドの規則は難しくないが、コマンド名からはどんな内容のコマンドなのか分かりづらいものが多い。内部コマンドのHELPを実行すればいくらかの助けになるが、パラメータの働きを理解するにはマニュアルを参照する必要がある。

手っ取り早いリファレンスは、テスト用データベースを作成するスクリプトである。データベース作成の基本的な手順の多くが詳しく記載されている。その一部を紹介しよう。

データベースの作成

データベースの作成は、データベース・ストレージを作成することから始まる。まず、データベースの物理的な入れ物を指定するわけだ。そのためには、スーパーユーザかrootになる必要がある。ここでは、MYPHONEという名前で小さなデータベースを作成してみる。

sudo dbmcli -s db_create MYPHONE dbm,dbm

ここで、データベースの初期パラメータを設定する必要がある。以下に挙げた具体的なパラメータはTST74データベースの定義をそのまま載せたものなので、自分のニーズに合わせて調整する必要がある。不要なものは省き、足りないものは追加してほしい。 基本的に、パラメータ・セッションを確立し、パラメータを設定し、変更をコミットするという流れになる。

dbmcli -d MYPHONE -u DBM,DBM
param_rmfile
param_startsession
param_init OLTP
param_put CAT_CACHE_SUPPLY 300
param_put CACHE_SIZE 3000
param_put MAXDATADEVSPACES 5
param_checkall
param_commitsession

次は、データを格納するファイルと、トランザクション・ログを記録するファイルの名前を指定する。

param_addvolume 1 DATA /home/pavlicek/newsforge/sapdb/MYP F 2560
param_addvolume 1 LOG /home/pavlicek/newsforge/sapdb/MYPlog F 1024

以上を終えたら、データベース・インスタンスを開始することができる。

db_start

次は、データベース・マネージャがユーティリティにアクセスできるようにする。また、データベース・コンフィグレーション全体を初期化し、データベース管理者のアクセス権を作成する。

util_connect dbm,dbm
util_execute init config
util_activate dba,dba
quit

一見しただけでは理解しづらいが、少なくとも手順の流れは分かるはずだ。繰り返すが、自分にとって何が重要なのか見極めるため、時間をかけてマニュアルにあたることをお勧めする。

また、設定内容にも十分注意すること。私は、ログファイルを割り当てるコマンド(param_addvolume 1 LOG…」)を発行したときに、誤って非常に小さな値を指定したことがあった(先の例で1,024としてあるが、10を指定してしまった)。このコマンド自体は問題なく実行されるが、「util_execute init config」コマンドを実行した段階でエラーが返された。

ERR
-24988,ERR_SQL: sql error
-8888,connection broken

ご覧のとおり、メッセージ本文を見てもほとんど意味不明である。エラーの本質について何のヒントも得られない。Googleでエラー番号を検索したら解決策を見つけることができたが、この種のエラーメッセージ(つまり、エラー番号に意味があり、メッセージ本文に何の価値もない)はかなり古い形式のものだ。10年以上前、DECのRDBデータベースでよく目にしたエラーメッセージは分かりやすいものだった。

次の手順は、ユーザが直接扱うのではなくデータベースが必要とする内部システムテーブルを読み込むことだ。

dbmcli -d MYPHONE -u DBM,DBM load_systab -u dba,dba -ud domain

これで、SQLを使ってデータベース定義にアクセスすれば、データベースの有効なSQLユーザを作成することができる。

dbmcli -d MYPHONE -u DBA,DBA
sql_connect dba,dba
sql_execute CREATE USER test PASSWORD test DBA NOT EXCLUSIVE
quit

dbmcliを使った最後の手順は、バックアップファイルの名前を定義し、データのバックアップを開始し、自動ログバックアップを始めることである。

dbmcli -d MYPHONE -u DBM,DBM
medium_put data /home/pavlicek/newsforge/sapdb/MYPdatasave FILE DATA 0 8 YES
medium_put auto /home/pavlicek/newsforge/sapdb/MYPautosave FILE AUTO
util_connect dbm,dbm
backup_start data
autolog_on
quit

以上で、データベースを使用するための準備作業は完了である。

次はSQLの出番

SQLを使ってデータベースを操作するための準備ができた。SQLはデータベース操作のデファクト・スタンダードなので、SQLを使い慣れているなら、SAP DB版のSQLの習得にそれほど時間はかからないだろう。しかし、SQLを使うのが初めてという場合は、事前に適当なマニュアルで学習しておくとよい。と言っても、SAP DBの対話型SQLモジュールにはヘルプ機能がない。繰り返しになるが、何年も前に使用したDECのRDBには、かなり優秀なヘルプ機能が対話型SQLインタフェースに組み込まれていた。今のデータベースには簡単なヘルプ機能さえないとは何とも残念なことだ。

xsql -d MYPHONE -u TEST,TEST
create table PHONES (name char(45), phone char(10), ptype char(20))
insert into PHONES values (‘Bobby’, ‘3015551212’, ‘Nokia’)
insert into PHONES values (‘Donna’, ‘2025551414’, ‘Nextel’)
insert into PHONES values (‘Freddy’, ‘7035553122’, ‘Uniden’)
commit
select * from PHONES
NAME | PHONE | PTYPE |
—————————————————
Bobby | 3015551212 | Nokia |
Donna | 2025551414 | Nextel |
Freddy | 7035553122 | Uniden |
* Ok
exit

残る手順は、小さなデータベースを定義し読み込むことだけだ。SQLは単純だが、非常に役に立つ。

まとめ

SAP DBは、多くの人がエンタープライズクラスのデータベースに求める機能のほとんどを備えている。かなり大規模なデータベースにも対応でき、優れたバックアップ機能があり、SQLをサポートしている。各種プログラミング言語のインタフェースを備え、Webインタフェースのオプションもある。

データベースの機能は強力と言ってよい。必要に応じてパラメータの多くをチューニングできる。巨大なマシンで膨大な数のレコードを格納してみる機会はなかったが、最新の750MHz AMD Duronを搭載したマシンできびきびと動作していた。また、インストールもかなり楽であった。

その反面、マニュアルは確かに情報満載なのだが、情報が引き出しやすいとは言えない。対話型インタフェースのヘルプ機能がないか、あってもごくわずかな情報量だ。また、データベース管理はかなり複雑な面があるので、SAP DBのDBAをしっかりとしたテンポでトレーニングする必要がある。

SAP DBのユーザ・コミュニティの規模は比較的小さい。問題に直面したとき、一緒に解決にあたってくれる人を見つけるのは容易ではない。SAP DBに関するトピックでGoogleを検索すれば、いくらかヒットするが、あきれるほどコミュニティは小さい。もちろん、SAP DBを使用する人や組織が増え、オンラインでよく話題にのぼれば、状況は自然と改善される。SAPとMySQL ABの提携を考えると、ユーザ・コミュニティの規模に関する問題は近い将来解消されるかもしれない。

Russell Pavlicek:Linuxを専門とするコンサルタント/ライター。毎週放送のWebキャスト『The Linux Show』のパネリストで、Linux関係の多数のWebサイトに寄稿。以前は雑誌『InfoWorld』でオープンソースについてのコラムを執筆。