5-4. デ−タベ−スの基礎とソフト '99/12〜 -------------------------------------------------------------------------------- 先ず用語の取り決めをしておく。 リレ−ショナル・デ−タベ−スソフトは RDBMS と呼ぶ。 単に RDBと言った場合は、ソフトとしてでなくリレ−ショナルなデ−タベ−スを意味する。 その実際的に生成されたものは 'デ−タベ−ス' と呼ぶことにする。OODBMS は簡単にODB、 ORDBMS は簡単に ORDB とも呼ぶことにする。ODBはオブジェクト指向デ−タベ−ス。ORDB はリレ−ショナル・デ−タベ−スソフトにオブジェクト指向の機能を付加したものである。 -------------------------------------------------------------------------------- (1) デ−タベ−スの基礎知識 `02/12〜`21/01 * 標準 SQL( Structured Query Language ) コマンド RDBMS ヘの標準問い合わせ言語が SQL である。SQL クエリ−という言い方もする。 どの RDBMS でも、ほとんど使い方は同じである。弱干異なる場合もあるようだが。SQL の規格 は ANSI で定められていて現在の RDBMS は、 1992年に制定された SQL/92 をベ−ス にしている。SQL/92 はSQL2 とも呼ばれる。それに1992以降検討されてきた次の SQL 規格、SQL3 を先取りして一部サポ−トしている RDBMS もある。SQL コマンドにはSELECT, CREATE,VIEW と言ったコマンドが当初からある。 関数も SUM/MAX/COUNT といった基本的 なものから、C言語にあるような数学、文字列、日付関数などたくさん用意されている。 SELECT: 何を検索するか 定義: CREATE TABLE/VIEW FROM : どのテ−ブルから 操作: 追加、更新、削除 INSERT/UPDATE/DELETE WHERE : どういう条件で 検索: SELECT SQL の中で一番基本となるコマンドは SELECT だろう。雑誌にもよくこの SELECT コマン ドの使い方が載っている。簡単に説明しておこう。早い話がどうやってテ−ブルの中を検 索して、どういうように結果を表示するのか。それだけのことである。WHERE の条件指定 のオ−ソドックスなのは、比較演算子の =,<,>,!。そして LIKE はパタ−ンマッチングで LIKE '%川' とすれば '何たら川' がマッチする。BETWEEN は範囲の指定、ORDER BY は並 べかえ、GROUP BY はグル−プ化、SELECT の中で再度 SELECT を使うサブクエリ−(副問 い合わせ)、AND と OR に、HAVING とか IN というのもある。 これらをうまく使って効 果的に検索するのである。さらにユ−ザのアクセス権限を設定する GRANT/REVOKE という コマンドもある。 SQL は全然難しくはない。学習の多くは対話型の SQL で、 体験的に理解することができ るだろう。とりあえず SQLで何ができるか適当な入門書を1冊読んでみるといい。「一晩 で学SQL デ−タベ−スの必須要素をかんたんにマスタ−」インプレス発刊、`02/08/11、 1,900円+税。辺りはどうだろうか。トランザクションの話なんかも書いてあった。 * RDBMS の一般知識 テ−ブルの要素 > 1つの'デ−タベ−ス'の中には、複数のテ−ブル(表,Table)を作ることができる。テ− ブルはフィ−ルドとレコ−ドで構成される。検索はレコ−ドを最小単位として行われる。 NID が 3 のデ−タを見つけたいとすると 3,Kato,42 というレコ−ドが検索される。検 索を RDBMS として、きちんと行いたいとする場合。 RDBMS では当り前のことなのだが、 主キ−(プライマリキ−/PRIMARY KEY)というのをテ−ブルに定義する。 下左のテ− ブルでは NID が主キ−となる。 主キ−の値はそのテ−ブルの中で一意であること、重 複してはいけない。もう1つの住所テ−ブルの方はどうなるか。棟や号だけでは一意に Name を決定できない。この場合は両方とも主キ−として定義することになる。RDBMSで は主キ−は、通常テ−ブルの設計時に定義するが、後からも定義できるし消去もできる。 フィ−ルド(列,Column) ↓ ↓ ↓ 住所テ−ブル -------------- ここでは NID が主キ−となる。 ------------ |NID|Name|Age| NID, Name, Age を属性という。 |棟|号|Name| |---|----|---| |--|--|----| | 3 |Kato|42 | ← レコ−ド(行,Row) | 3| 4|Kato| | 1 |Haru|22 | ← | 1| 3|Haru| -------------- ------------ 外部キ− > 下記のように Table1 に車の ID と車種名、 Table2 に車のその id と売れた台数を定 義するとしよう。 RDBMS はリレ−ショナル・デ−タベ−ス(RDB)とかいっているがその ままでは全然リレ−ショナルでもなんでもない。 Table1 の ID と Table2 の id は対 応することがここでは期待されている。 Table2 での車種の id は Table1 に定義され たものでないと困るのである。しかし RDB そのままでは、 好きなように番号を付ける ことができてしまう。人がたまたま ID と id を矛盾なく付けた場合にのみ、ちゃんと RDB として機能するというのが、今日の RDBMS なのである。 RDB なんてのはおこがま しい。本来なら番号対応付けデ−タベ−スとでもいうべきである。それじゃいかんとい うことで出来た機能が、この外部キ−である。これでやっとリレ−ショナル・デ−タベ −スらしくなる。普通に用いて構わないと思う。 Table1 Table2 Table2 の id に FOREIGN KEY/REFERENCE 定義している。 ----------- ---------- |ID|車種 | |id|台数 | Table2 の id に、Table1 に無い ID を付けようとすると |--|------| |--|-----| はねる。参照整合性とか参照整合性制約という。 |1 |Jugar | |1 | 100 | |3 |Volvo | |3 | 300 | Table1 の ID を消すと、Table2 の該当レコ−ドも関連し |2 |Wagen | |2 | 250 | て消去するか、台数をヌルまたはデフォルト値にする。 ----------- ---------- インデックス > たいがいの場合、主キ−とした属性にはインデックスを作成する。テ−ブルで PRIMARY KEY と定義すると自動的にインデックスが作成されたり、後から定義したりする場合も ある。また後から削除することもできる。インデックスは必ず付ける必要はない、複数 付けることもできる。インデックスを付けると検索が速くなる。インデックス用のハッ シュや B-tree といったデ−タを作成し、これにより検索を高速に行う。インデックス を付けた方がいいところは、検索条件の WHERE でよく指定する列、 関数でよく使う列、 外部キ−や結合で使う列などである。 ばらつきが少ない属性デ−タには、インデックスを付けても効果はない。極端な場合が 0と1しかないようなデ−タは、インデックスを作る意味がないということである。検 索条件の指定によっても、インデックスが効かない場合がある。 OR 検索とか部分一致 検索の LIKE '%へのもへ' といった条件の場合である。インデックスは、レコ−ドの変 更がある度にインデックス用デ−タの作り直し/修正が発生することになる。見るだけ のテ−ブルなら、インデックスの修正は発生しないわけで、参照系と更新系デ−タはテ −ブルを分けるよい。デ−タベ−ス設計のポイントである。 ジョイン(結合) > 複数のテ−ブルを1つにくっつけたようにみせかけるテクニックである。一時的なテ− ブルを作る。少なくともテ−ブルの間で1つの共通の列がないといけない。テ−ブル1 のレコ−ド数x テ−ブル2のレコ−ド数分のマッチング操作が内部で起こる。レコ−ド 数が多いと負荷はかなり大きいものになる。普通、結合というと内部結合のことを言う。 複数のテ−ブルの AND をとることになる。外部結合というのもあって、こちらは OR操 作をとる。外部結合には更に2つのテ−ブルで、どちらから結合するか LEFT と RIGHT の指定がある。通常は LEFT 指定である。 ビュ− > 仮想テ−ブルともいう。1つまたは複数の既存のテ−ブルから仮想的にテ−ブルを作り 名前を付けて使う。若干の制約はあるが、通常のテ−ブルとしてアクセスでき、元のテ −ブルにも反映される。テ−ブル全部でなく一部のデ−タを見せるビュ−を作成すると か、係数をかけて表示するとか、特定のユ−ザ用に見せるところを制限するとかできる。 ビュ−は便利な機能といえる。また、複数のテ−ブルから1つのビュ−を作る(コンプ レクッスビュ−)こともできる。ただしコンプレクッスビュ−の作成は、内部的には結 合操作をしているわけであって、ビュ−作成の負荷には注意しなければならない。 トランザクション > 1つの'デ−タベ−ス'の中で、2つ以上のテ−ブルの操作を行う場合。よく話に銀行A から1万円引き出し、銀行Bに入れる操作がある。途中で操作が失敗したら、このお金 は宙に浮いてしまう。そうならないように、操作は完結するか、初めからしなかったこ とにするか2つに1つである。RDBMS ではこれを Atomic 性と言っている。このように デ−タベ−スをちゃんと維持したい場合に、トランザクションの記述をする。SQL では トランザクション開始の宣言をし、デ−タベ−スの更新処理などを記述し、コミット宣 言をする。ここで本当に処理が行われる。それまでは仮に処理が行われていることにな る。何か問題があって、ロ−ルバック宣言に来ると仮の処理はパ−にし、トランザクシ ョン開始宣言前の状態に戻す。 begin transaction; 記述はこんな感じである。 Java だと try, catch 構文で try { コミット/ロ−ルバックをうまく記述できる。 commit と 銀行Aテ−ブルから引出 いうのは委託するとか引き渡すという意味である。このよ 銀行Bテ−ブルへ預ける うに1つの'デ−タベ−ス'の中で、2つ以上のテ−ブルの commit; 操作を行う場合、日常的に使っていいのでないか。われわ catch { れUNIX系では、トランザクションという言葉はなじみ rollback; が薄かったが、そう難しい話ではない。 } 分散トランザクション > 2つ以上の'デ−タベ−ス'がある場合のトランザクション処理のことである。RDBMS が 例えば2つあって、1つで銀行Aテ−ブルから引出、もう1つで銀行Bテ−ブルへ預け るといったような場合、両者がうまく連動しなければデ−タがおかしいことになってし まう。それぞれの RDBMS で行うトランザクション処理を連動させることを、 2フェ− ズ・コミットという。連動させるには、各 RDBMS サ−バと通信を行い、 トランザクシ ョンを一元的に管理するトランザクションサ−バとかTPモニタというソフトが必要に なる。この分散トランザクション機能を備えた RDBMS が、 分散デ−タベ−スと言われ る。元祖は Empress で、select * from "Directory/Database":Table;、こうした SQL を発行する。Directory 部が、NFS のマウントポイントになって、他のマシンで稼働し ている RDBMS にアクセスができる。下の絵は 1989 年当時の Empress の資料による。 --- node1 ---- --- node2 ---- db1 | -- db1 --- | | -- db2 --- | / \ | | table1 | | | | table2 | | --node1 -- --node2 -- | ---------- | | ---------- | | table1 | | table2 | -------------- -------------- ---------- ---------- 'デ−タベ−ス'単位の分散 テ−ブル単位の分散 ロック > 複数ユ−ザから同時にアクセスがある場合の処理。誰かデ−タを見ている間に、他の人 がデ−タを変更してしまったら。あるいはデ−タを変更している最中に、他の人も変更 しようとしたら。いろいろやっかいなことが起きる。つまりデ−タを変更しようとする 場合は、他の人はそのデ−タに触ることができないようにする必要がある。これがロッ クである。この際全く見ることもできないようにする(排他ロック)。あるいはそう固 いこと言わず見るぐらいのことはいいじゃないか(共有ロック)、これは多少デ−タの 値が変わってもそう問題ないような時である。ロックの範囲というのがある。最小はレ コ−ド単位であり(行ロック)、大きくはグル−プそしてテ−ブルになる。グル−プは WHERE で指定された範囲をいう。ロックはうまく働かないと三すくみのような状態(デ ッド・ロック)が発生してしまう。結構難しい処理である。 一番簡単なのはテ−ブル・ロックで、誰かがテ−ブルにアクセスしたら、他の人は全く アクセスできないというものである。テ−ブル全体のレコ−ドをバッチ的に処理したい 場合などにテ−ブル・ロックは使われる。一般的にロックが発生すると、他のアクセス は一定時間後に何度か再アクセスするといったアプロ−チをとる。できるだけ多くの人 が同時アクセスできるようにするには、レコ−ド・ロックを使うことになる。しかし多 くのロックが発生することになり、負荷が大きくなる場合がある。またユ−ザの同時ア クセスだけでなく、複数のレコ−ドを一括処理する場合も、その数分だけのロックが発 生する。そうなるとレコ−ド・ロックでなく、グル−プ・ロックあるいはテ−ブル・ロ ックにした方が効率がよくなる場合が出て来る。 このロック処理は、SQL でレコ−ドだとかテ−ブルだとか明示的に記述ができる。だい たいの RDBMS ではデフォルトでは、レコ−ド・ロックになっているようである。 昔の 資料だが、Empress ではレコ−ド、レコ−ドグル−プ、テ−ブルのロックがあり、バ− ジョン4でのデフォルトはレコ−ドとある。 Oracle はバ−ジョン6でレコ−ド・ロッ クをサポ−トしたとか。Microsoft SQL Server のロック・レベルはレコ−ド、 ペ−ジ、 テ−ブルとなっている。ペ−ジ・ロックはOSのペ−ジングの単位で、2 Kbyte 分とか のレコ−ドである。Microsoft はこの SQL Server のロック機構を、ダイナミック・ロ ッキングと称している。ロックの負荷に応じて、レコ−ドからペ−ジ、テ−ブルへとロ ックのレベルを変更する優れた機能だと言っている。しかし Oracle はただのロック・ エスカレ−ションに過ぎないと言っているが。 ストアドプロシ−ジャ > 標準 SQL コマンドにはない、IF THEN や WHILE といった記述ができる言語で RDBMSサ −バ側にスクリプトを置いて実行するという機能である。スクリプトはコンパイルのよ うな処理をされて、実行が速くなされるとのこと。RDBMS はサ−バ/クライアント型の 処理で、クライアントから SQL コマンドをサ−バに送る。定形的な処理の場合、 その 一連のスクリプトをサ−バ側に何か名前を付けて覚えさせておき、一発で呼び出し実行 できれば便利である。 通信的にも SQL コマンドをたくさん送らなくても済むことにな る。このストアドプロシ−ジャを用いた応用にトリガ機能というのがある。テ−ブルの レコ−ドの追加、更新、削除の際に、自動的にあらかじめ定めた処理をさせるというも のである。Oracle には PL/SQL、Microsoft には Transact-SQL というのがある。 デ−タベ−ス設計 > 最近「DB Magazine」と言うデ−タベ−スの雑誌をたまに買って読んでいる。 デ−タベ −スを設計する話が毎度載っている。E-R モデル( Entity-Relationship )、 E-R ダイ アグラム。正規化とモデル化など。ん−、こんなこと勉強せないかんのかしゃん。それ こそ3次元CADのデ−タベ−スの設計とかいうレベルなら必要になるだろう。あるい は EDP 室での COBOL 実務プログラムのレベルとか。 今日Webと RDB 連携のちょっ としたものなら、E-R モデルによる分析までは必要ない。適当に丸を描いたりしてデ− タ構造を表わして構わないと思う。今日いう RDBMS の本質は、 現実の作業をテ−ブル で表現すること。そして変化する可能性のあるデ−タを抽象化し、別のテ−ブルにして 管理することである。そんなことである。 インポ−ト/エクスポ−ト > たいがいの RDBMS には、 デ−タベ−スの内容を吐き出したり読み込んだりする機能が 入っている。読み込むのがインポ−ト、吐き出すのがエクスポ−トである。概ね CSV形 式ファイル(別名カンマファイル)でエクスポ−トすれば、 他の RDBMS でインポ−ト してデ−タを移し替えることができる。でも、何と Oracle のエクスポ−ト機能は、バ イナリデ−タを出して来るとか。このままでは他の RDBMS にもっていけない。 デ−タ を移し替える、幾つかフリ−ソフトやまた別の市販ソフトが出ているようである。普通 の企業ユ−ザは RDBMS を変更するような場合、 だいたい業者に依頼するのが通常のよ うである。しかし作業賃は何ぼが百やら分からない話で、それでたんまり儲けさせても らったという人の話を聞いたことがある。 その他いろいろ > ODBC( Open Database Connectivity ) に JDBC( Java Database Connectivity )。ODBC は Microsoft が定めた RDBMS 共通の外部インタ−フェ−スの仕様である。あまり評判 はよろしくない模様、Excel や Access と SQL Server など RDBMS と接続する。 JDBC は Java のプログラムから RDBMS にアクセスする仕様であり、 そのモジュ−ルである。 他、めぼしい用語はセ−ブポイントとかカ−ソル。セ−ブポイントはトランザクション で全く最初に戻るのでなく、特定のポイントまで戻す機能である。これが一般的なもの なのかどうかは分からない。カ−ソルは順にたくさんのレコ−ドを処理する際、どこま でやったか場所を覚えておく機能である。 (2) PostgreSQL を試してみる '99/12〜 * PostgreSQL の概要 代表的なフリ−の RDBMS である。もう一つフリ−で有名なのに MySQL というのもあるが、 ここでは PostgreSQL をとりあげることにした。MySQL より情報があるみたいだし、こな れているような気がしたから。それにオブジェクト・デ−タベ−スの機能も入っていると か。すなわち単なる RDBMS ではないのだ。ORDBMS というわけである。実際どんなことが できるのか、非常に興味をそそられる。ObjectStore ライクなことができるのかな。ちょ っと怪しい気がせんでもないが。PostgreSQL はアメリカの大学で開発され、 結構歴史は 古い。商用の ORDBMS デ−タベ−スソフト Illustra は、この枝分かれしたものというこ とでもある。まあ細かいことは雑誌や本を読んで頂きたい。 [ 参考 ] 日本の PostgreSQL のオ−ソリティである SRA の石井氏のサイトを先ず覗こう。 小生が 見た時の最新版は、バ−ジョン 6.5.3 で約6MB、'99/11/06 リリ−ス。 ダウンロ−ド したら、"6.5 インスト−ルの手引き(基礎編)" も見てみよう。 インスト−ルはそんな に難しいものではないと思う。もしできない人は、SRA はサポ−ト事業も始めているので 利用してはいかが。雑誌記事としては「Software Design」'98/01 に、 Apache + PHP/FI + PostgreSQL の簡単な例がある。 「UNIX MAGAZINE」'97/12 にも同様な話が載っている。 ほんのちょっと記載されているだけだが、最初に PostgreSQL を知った記事ということで 紹介しておいた。 http://www.sra.co.jp/people/t-ishii/PostgreSQL/ Mr.Ici 氏 http://www.jp/postgresql.org/ 日本 PostgreSQL ユ−ザ会 http://member.nifty.ne.jp/fujino-ta/blue/flow.html 3っつ目のとこは素晴しい。2000/01/19 発見。 お−、素晴しいところがみつかったと思 わず声が出た。Web通販デモシステム、 Apache + PHP3 + PostgreSQL 連動環境構築例 である。去年の10月頃掲載されたようだ。 PHP3 のプログラムを全部見ることができる。 Linux West の資料ということで。小生は Linux 関係の雑誌は見てないのですでに紹介さ れていたかも知れないが。とてもや Linux の雑誌まで買えんぞ、正直言って。 * PostgreSQL のインスト−ル [ 入手とコンパイル ] INDY IRXI 5.3 に入れる % ftp ftp.sra.co.jp ftp> cd /pub/cmd/postgres/6.5.3/patches ftp> binary ftp> get postgresql-6.5.3-patched.tar.gz パッチをあてたソ−スを取ってくる。postgresql-6.5.3-patched.tar.gz は 2000/01 /16 では、次のファイルにリンクされていた。128Kbps 専用線で5分程でダウンロ− ドできた。6908169 byte Jan 7 06:32 postgresql-6.5.3-patched-20000107.tar.gz。 コンパイルはできるだけ root では作業しないでくれと PostgreSQL のドキュメント に書いてあった。ここでは katou で作業することにした。 % cd /usr/local/source % zcat postgresql-6.5.3-patched.tar.gz | tar xvf - % cd postgresql-6.5.3; ls -F postgresql-6.5.3/ postgresql-6.5.3-patched.tar.gz % chown katou postgresql-6.5.3 % chgrp user postgresql-6.5.3 ↑ root で作業。 % cd postgresql-6.5.3; ls ↓ katou で作業。 /usr/local/source/postgresql-6.5.3 COPYRIGHT INSTALL contrib/ register.txt HISTORY README doc/ src/ % cd src とりあえずこんなオプションでコンパイルは成功した。 % ./configure --with-mb=EUC_JP --with-template=irix5 --with-CC=cc --without-CXX % gmake 5分位で終わったぞ。INDY のメインメモリは 96MB。 | ving directory `/usr/local/source/postgresql-6.5.3/src/pl/plpgsql/src' gmake[2]: Leaving directory `/usr/local/source/postgresql-6.5.3/src/pl/plpgsql' gmake[1]: Leaving directory `/usr/local/source/postgresql-6.5.3/src/pl' All of PostgreSQL is successfully made. Ready to install. [ インスト−ル ] % cd /usr/local ここも注意すること。pgsql のオ−ナにグル−プ。 % mkdir pgsql % chown katou pgsql % chgrp user pgsql % cd /usr/local/source/postgresql-6.5.3/src % gmake install [ /usr/local/pgsql ] | |--[bin]-- cleardbdir* destroylang* ipcclean* pg_passwd* psql* | createdb* destroyuser* pg_dump* pg_upgrade* vacuumdb* | createlang* ecpg* pg_dumpall* pg_version* | createuser* initdb* pg_encoding* postgres* | destroydb* initlocation* pg_id* postmaster@ | |--[lib]-- global1.bki.source libpq.a pg_hba.conf.sample | global1.description libpq.so.2@ plpgsql.so | libecpg.a libpq.so.2.0 libpq.so@ | libecpg.so@ local1_template1.bki.source | libecpg.so.3@ local1_template1.description | libecpg.so.3.0.0 pg_geqo.sample | |--[include]-- access/ ecpglib.h libpq/ postgres.h c.h ecpgtype.h libpq-fe.h postgres_ext.h commands/ executor/ libpq-int.h sqlca.h ecpgerrno.h config.h fmgr.h os.h utils/ port/ lib/ * PostgreSQL デ−タベ−ス・システムの初期化とDBの作成 注.ここの操作もユ−ザ katou でやってます。 % initdb We are initializing the database system with username katou (uid=101). This user will own all the files and must also own the server process. Creating Postgres database system directory /usr/local/pgsql/data Creating Postgres database system directory /usr/local/pgsql/data/base Creating template database in /usr/local/pgsql/data/base/template1 Creating global classes in /usr/local/pgsql/data/base Adding template1 database to pg_database... Vacuuming template1 Creating public pg_user view Creating view pg_rules Creating view pg_views Creating view pg_tables Creating view pg_indexes Loading pg_description ユ−ザ katou の環境変数を設定する ~/.cshrc ------------------------------------------ |setenv PATH "$PATH":/usr/local/pgsql/bin |setenv POSTGRES_HOME /usr/local/pgsql |setenv PGLIB $POSTGRES_HOME/lib |setenv PGDATA $POSTGRES_HOME/data |setenv LD_LIBRARY_PATH $PGLIB % postmaster -S -i << PostgreSQL のクライアントです。 ??? % createdb postg << 作成するデ−タベ−スの名前です。 % createuser katou << アクセスできるユ−ザ名前は katou です。 createuser: user "katou" already exists << /etc/passwd にあるのでこんな風。 % psql postg << デ−タベ−ス postg にアクセスしてみる。 Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL [PostgreSQL 6.5.3 on mips-sgi-irix5.3, compiled by cc ] type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: postg postg=> \q << バックスラッシュの q で抜ける。 % * デ−タベ−スのディレクトリ % cd /usr/local/pgsql/data; ls -F PG_VERSION pg_geqo.sample pg_log pg_variable base/ pg_group pg_pwd pg_database pg_hba.conf pg_shadow % ls -F base postg/ は上で作ったやつ。 regression/ はテス postg/ regression/ template1/ トコマンドをやったらできた。 template1/ は勝 手にできていた。これらがデ−タベ−スの中身。 PostgreSQL のアクセス制御ファイルが pg_hba.conf である。デフォルトでは、インスト −ルしたマシンからしか PostgreSQL にアクセスできないようになっている。PostgreSQL の Windows 用クライアントから、 EWSの PostgreSQL サ−バにアクセスしたいとか言 う時には pg_hba.conf をいじる必要がある。 WWWクライアントから Apache サ−バの PHP3 経由で PostgreSQL にアクセスする場合はデフォルトのままでもいい。PHP3 スクリ プトは Apache サ−バのホストで実行されるわけで、 PostgreSQL も同じホストにおいて おけば localhost からのアクセスになるからである。 * PostgreSQL の対話型 SQL を使う オペレ−ションが成功したら create なら CREATE、 insert なら INSERT 123882 1 とか いうように出る。失敗したら ERROR: parser: parse error at or near "vlaues" という ように出る。ここでは先ずユ−ザ katou で、% postmaster -S -i とやり PostgreSQL サ −バを稼働させ、そして % createdb test とやる。これで/usr/local/pgsql/data/base/ に test というディレクトリができ、中を覗くと'デ−タベ−ス'用のファイルが一杯でき ているのが分かる。 /usr/local/pgsql/data/base % initdb で'デ−タベ−ス'管理領域が ../data/base --------------------------- にできる。このディレクトリの中に'デ−タベ−ス'が | -- test -- -- db1 ---- | ディレクトリとしてできる。この例では test と db1 | | ppp | | tb1 tb2 | | ディレクトリである。そしてさらにこの中に RDBMSと | | □ | | □ □ | | してのテ−ブルがファイルとしてできる。 'デ−タベ | ---------- ----------- | −ス' db1 にはテ−ブル tb1 と tb2 ができている。 --------------------------- % createdb test << 'デ−タベ−ス' test を作成する。 次にその中にテ− test=> create table ppp ( ブルを ppp と言う名前で作成する。 test-> nid int primary key, test-> name char(8)); NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'ppp_pkey' for CREATE table 'ppp' test=> \d ppp Table = ppp +-----------------------+------------------+-------+ | Field | Type | Length| +-----------------------+------------------+-------+ | nid | int4 not null | 4 | | name | char() | 8 | +-----------------------+------------------+-------+ Index: ppp_pkey << primary key の指定をすると、 自動的にインデックスが作 成されて、このように表示される。 test=> \d Database = test +------------+--------------------------+----------+ | Owner | Relation | Type | +------------+--------------------------+----------+ | katou | ppp | table | | katou | ppp_pkey | index | << インデックス用のファイル。 +------------+--------------------------+----------+ test=> insert into ppp values(3,'mika'); test=> insert into ppp values(2,'haru'); test=> select * from ppp where name='haru'; nid|name << select * from ppp; で全部リストする。 ---+-------- 2|haru << 'haru' を 'HARUO' にして消す。 test=> update ppp set name='HARU' where name='haru'; test=> delete from ppp where name='HARUO'; test=> drop table ppp; << テ−ブル ppp を消去する。 test=> \? << ここで使えるコマンドの一覧を表示する。 test=> \i xxx.sql << SQL のコマンドを書いたファイルを読み込み実行する。 test=> \q % % destroydb test << 'デ−タベ−ス' test を消去する。 % psql -l << 全部の'デ−タベ−ス'をリストする。 [ インデックスを後から付けて消してみる ] テ−ブルを定義する際 primary key test=> create table ttt (id int,name char(8)); と宣言すれば、自動的にインデック CREATE スとなる。このように後から定義す test=> create index idx on ttt(id); ることもできる。基本的にはテ−ブ CREATE ル1つにつきインデックスは1つだ test=> \d ttt が、複数でも定義は可能である。 Table = ttt +-----------------------+------------------+-------+ | Field | Type | Length| +-----------------------+------------------+-------+ | id | int4 | 4 | | name | char() | 8 | +-----------------------+------------------+-------+ Index: idx test=> drop index idx; << インデックス idx を消す。テ−ブル名を指定してないとこ DROP ろに注意。複数テ−ブルがあっても、 インデックス名は独 立していることになる。 test=> \h drop index << コマンドの説明やフォ−マットがでてくる。 (3) デ−タベ−スソフトいろいろ `02/12〜`21/01 * いろいろある どうも市販のデ−タベ−スソフトは、その扱う規模によって3種類ぐらい揃えているよう である。同時ユ−ザ数や CPU の数でのライセンスとかややこしい。 概ね一番下のもので も行レベルロック、ストアドプロシ−ジャ、トリガ、トランザクションといった機能は入 っている。PHP, ODBC, JDBC のドライバも入っている。テキストなどの可変長デ−タのサ ポ−ト。画像デ−タなどを蓄える BLOB( Binary Large Objects ) も、今ではたいがいの RDBMS にも入っている。フリ−ソフトの PostgreSQL や MySQL では、 ごく最近サポ−ト を始めた機能やまだベ−タ版という機能もあるようである。小生感触として、ちょっとし たWeb&デ−タベ−ス連携のアプリケ−ションでは、 フリ−ソフトの RDBMS でも十分 使えると思う。昨今のともかく何でも Oracle でないと、そういうことはないと思う。 市販ソフトがフリ−ソフトを上回っている機能は、大規模デ−タベ−スや信頼性、高速処 理への対応などである。大規模と信頼性はクラスタリングやレプリケ−ションの機能。ク ラスタリングは複数の RDBMS をバックアップ機能を有しながら稼働させる。 レプリケ− ションは簡単にいえばデ−タベ−スのコピ−機能である。 高速処理は SMP などの並列処 理への対応である。他にもある。 Java の実行環境を含めて、ストアドプロシ−ジャやト リガを Java で記述できるようにする。XML パ−サも入れているのもある。さらにごく最 近言われているのが、デ−タマイニング。これは多分市販品の最上位になると思うが、デ −タベ−スの情報を分析し、デ−タの関連性を引出し、戦略を練るのに役立てるという話 がある。デ−タウェアハウスという用語もあるな、よう分からんな。 Empress > 1989 年 Empress 日本語版が出ている。当時のカタログによれば、ネットワ−ク分散型 リレ−ショナルデ−タベ−スがうたい文句で、行レベルロック、参照整合性制約、2フ ェ−ズコミット、ビュ−、 Bulk デ−タをサポ−トし音声や画像などのバイナリデ−タ も扱え、可変長テキストもOKだった。当時は(株)MKCが扱っていた。今は、ぷらっ とホ−ムのホ−ムペ−ジでもオンライン販売している、Ver 8.20、7.5 万円。同時アク セス数4、クライアント数は無制限。日本の総代理店は名古屋にあるとのこと。URL は http://www.empress.com/japanese/ ここ。 Sybase Adaptive Server Enterprise for Linux( Sybase ASE for Linux ) > http://linux.sybase.co.jp/。Ver.11.0.3 は '98/09/28 から無償ダウンロ−ドができ る。ほとんどの基本的な機能は入っている。分散トランザクションなんかの高度な機能 は入っていない。最新バ−ジョンは 11.9.2、`21/01/06 調べ。SQL Server は ASE for Linux に含まれている。Sybase は金融系に強いとか言われていた。市販 RDBMS の中で はお安くなっている。 最近はモバイル用の軽いタイプの SQL Anywhereが人気のようで ある。参考:「詳解 Sybase SQL Server on Linux」オ−ム社、6,500円、'99/03/10 刊。 Microsoft SQL Server 7.0 > 99年前半に発表。Microsoft が2年かけて 6.5 からバ−ジョンアップした。 かなり 力を入れている感じがする。例に漏れず Windows OSでしか動かない。 GUI でテ−ブ ルの設計ができたりして、簡単に使えるとのふれこみである。全文検索もできる。この バ−ジョンでやっと行レベルロックをサポ−トした。Microsoft はダイナミック・ロッ キングと称しているが、対抗する Oracle はまやかしだと言っている。 SQL Server の 元は Sybase で、Sybase との共同開発は94年で終わっている。 MySQL > http://www.softagency.co.jp/mysql/ ここが日本のサイトになっている。 日本語ドキ ュメントの作成プロジェクトがある。http://www.mysql.gr.jp/ ここは英語サイトであ る。バ−ジョン 3.23.19 ベ−タ以上は、ライセンスは GPL になった。高速検索重視の RDBMS で、ビュ−や外部キ−はサポ−トしない。トランザクションは最新バ−ジョンで はサポ−トを始めているとのこと。単純なWeb連携程度では、トランザクション機能 はなくてもいい、MySQL はスレッドによるアトミックな処理をするため問題ないとして いた。参考:「MySQL 徹底入門」翔泳社、`21/01/01 発行、3,200 円+税。 PostgreSQL 7.0 > `02/05 に出たバ−ジョンで、外部キ−にも対応した。 トランザクションは以前から対 応していた。psql は SQL コマンドインタプリタ、埋め込み型 SQL ともいう。 Oracle の SQL*Plus に相当する。pgaccess は GUIによる管理ソフト、 Tcl/Tk がインスト −ルされていること。PL/pgSQL はストアドプロシ−ジャ言語。 他C、C++、Tcl/Tk、 Perl 用の言語インタ−フェ−スがある。6.5.3の次が 7.0、かなり安定してきたという。 'デ−タベ−ス'が異なるとデ−タの関連は付けられない。 他 RDBMS > INFORMIX-SE for Linux、軽い、開発ライセンス無料、 行レベルロック/トリガ/スト アドプロシ−ジャもサポ−ト。 元 Borland、今は Inprise のフリ−ソフト InterBase for Linux 最初だけタダだったのかな、いやそんなことない。2000/10 ソ−スコ−ドも 公開されている、Solaris や Windows 用のバイナリも無償配布されている。 * オブジェクト指向へのアプロ−チ RDB から ODB へのアプロ−チ、ORDB という。SQL の拡張として、オブジェクト指向的な 機能も含めていこうというアプロ−チである。テ−ブルに入れ子構造または継承の構造を もたせる。これにより RDB で負荷の大きい "結合操作" をなくすことができる。 入れ子 とはC言語の struct 構造と同じようなこと、継承はC++のクラス継承と同じようなこ とである。それとオブジェクトのメソッド的な機能として、そのテ−ブルの中で有効な関 数を定義する。しかしこんなことでオブジェクト指向と言えるのか、いささか小生は腑に 落ちない。RDB での "結合操作" が負荷がかかるのは、 今の RDBMS のソフト的な問題だ と思う。ORDB の入れ子/継承構造まで持ち出さなくても、何とかならないのか。 ORDB の SQL は、SQL3 とか SQL/99 とかいう。 1999年の12月に一応規格は定めら れたらしいが、まだ標準化が固まっていない所もあるようだ。SQL3 は通称 ObjectSQL と 呼ばれたり、OQL( Object Query Language ) と呼ばれたりしているようでもある。 また SQL3 には JDBC も含められている。市販ソフトにはSybase Adaptive Server 11, UniSQL, Oracle R8.1, Illustra などがある。 Illustra は PostgreSQL の初期のプロジェクトか ら生まれたもので、その後 Informix 社に買収され、Informix Universal Server という 製品に統合されている。オブジェクト指向のデ−タベ−ス、 市販の ODB には著名なとこ ろで ObjectStore がある。他 Ontos, O2 という製品もある。 ODB からRDBへのアプロ−チ。ODB は RDB のテ−ブル表現もできる。ODB ではどのような 形式にでもデ−タベ−スを作ることができる。本当に配列の表形式でもいい。ポインタ型 の表形式でも構わない、これだとレコ−ドをじゅじゅ繋ぎにしていイメ−ジである。そし て個々のオブジェクトをテ−ブルの各要素にしてしまえばいい。個々の要素はオブジェク トとしてメソッドをもってもいい、あるいはテ−ブル全体としてのメソッドがあったって いいだろう。しかし ODB、オブジェクト指向デ−タベ−スというのは、複雑な関係を持っ たオブジェクトを、メモリとディスクの間でシ−ムレスに格納する。これがオブジェクト 指向デ−タベ−スの役割そのものであり、 根本的に RDBMS とは性格が異なるものだとい うことを忘れてはならない。 UniSQL ORDB 製品 > NTTデ−タ通信(株)扱い。http://unisql.www.nttdata.co.jp/。`21/01/06 確認した ところ中身がなかった。確か95年の幕張の展示会で知った。テ−ブルの入れ子/継承 構造をサポ−ト、クラスを定義できると称している。 Linux 用の Infrover/UniSQL と Infrover/InterServ を '98/12/24〜'99/06/30 の間、無償配布していた。UniSQL はア メリカで '92/03 に発表された。InterServ は DBMS 統合型WWWサ−バである。 ObjectStore ODB 製品 > 1992年頃、オブジェクト指向CADの設計をしていた時に知った。当時このソフト は 500 万円ぐらいしたように思う。その後フリ−ソフトで ObjectStore PSE というの が出ている。ごく最近では eXcelon の内部デ−タベ−スとしても使われている。 参考 に「C MAGAZINE」'97/09, P.22〜59,"特集:最新DBシステム技術概論、オブジェクト デ−タベ−ス管理システム"。'97/11 と 12 月号にも ODB の記事あり。 * 参考資料など 1992年当時の ObjectStore の資料、Empress の資料など。 他「アスキ−NT」98 年頃のデ−タベ−スの記事もずっと読んで見た。「デ−タベ−ス読本」というのもちょっ と見てみた、2000 年に出た。3分の1はデ−タベ−スソフトの紹介だが。 名古屋の丸善 の前にできた、でっかい本屋で 2000 年の暮れ見たら、デ−タベ−スの勘所的な本が2冊 程あった。こんなんも一度は目を通しておきたい。Access なんかを GUI で触っていると、 何も勉強しなくてもデ−タベ−スが使えてしまう。その手で PostgreSQL なんかを触ろう とすると痛い目に会うかも。ソフトがただとはいえ、 中身は本格的な RDBMS である。一 度はちゃんと RDBMS の勉強することをお勧めする。 ・「Software Design」'99/01 "オ−プンソ−ス時代のデ−タベ−ス活用法" > Linu 用 PostgreSQL, MySQLInterBase, INFORMIX-SE, Sybase SQL Server, Oracle8 ・「Software Design」'02/06 "フリ−DBMSの決定版 PostgreSQL 大全、7.0 登場!" > 外部キ−の説明、ORDB としての新しいデ−タ型、日本語版 ODBC の使い方。 ・石井達夫ら著の「PHP4徹底攻略」`02/09/30、3,500円+税、ソフトバンク。「改訂版 PC UNIXユ−ザのための PostgreSQL完全攻略ガイド」 技術評論社 3200+税 11/12/05 (4) Oracle8i について `02/05 * 先ずは Oracle のデ−タベ−スソフトについて 2000年も5月になっても iFS( internet File System ) はまだ入ってない。 iFS な しで Oracle8i というのは変だぞ。2000年6月以降になるらしいが、本当に出るのか。 98年11月にオラクルは Raw Iron 構想、OS不要のデ−タベ−スサ−バ、 JavaVM 環 境、XML を全面対応すると表明。これが Oracle8i 次世代デ−タベ−スサ−バだったのだ。 99年5月末に Oracle8i R8.1.5 が最初の 8i として出た。JavaVM はサポ−ト、XML も パ−サが入った。SQL による全文検索もできるようだ。肝心の iFS はどうなった。iFSは 8i の中に Windows の SMB プロトコル他 HTTP, IMAP4, FTP, NFS をサポ−トするという ものである。Word などのデ−タを 8i にいれる時に、8i でいろいろ処理したり、プラグ インのパ−サで Word デ−タの属性を引き出すとかするはずだった。 しかしオラクルの製品というのは、たくさん次から次に出てきて、よう分からん。 それにカタログも非常に分かりにくい。いかにも既にサポ−トしているかのよう に書いてあるのが、よくよく見ると次のバ−ジョンからで、リリ−スは未定と来 る。これらの製品の使い分けができることも、オラクルマスタ−の資格要件なん だろうな−。このオラクルマスタ−、11もの資格がある。受験料は数万円いっ て Silver, Gold, Platinum の3種類がある。有料の講習に試験で、こりゃいい 商売だ。ややこしいのがもう一つ、保守も同様3種類あるのだ。 さて何を買えばいいのか。新規に購入するのなら Oracle8 でなく Oracle8i でいい。 オ ラクルは Oracle8i を Oracle8 の後継と位置付けている。従来の SQL によるクライアン ト/サ−バのデ−タベ−ス・アクセスに加えWWWクライアントからもアクセスできるよ うになっている。よい子のレベルでは小中規模用の Workgroup Server、Linux 版 R8.1.6 がいいだろう。このバ−ジョンから EJB などの Java の環境をサポ−トした JServer が 入る。つまり Oracle8i だけで、アプリケ−ション−バの役目もそこそこできるようにな る。EJB などの開発は別売りの Oracle JDeveloper を使う。 後ごちゃごちゃいろいろソ フトがあるが、あると便利というようなものだ。また考えればいい。 さて Oracle8i R8.1.6 と Oracle Application Server との関係はどうなっているのか?。 はっきり言ってよく分からん。デ−タベ−スのソフトである Oracle8i がアプリケ−ショ ンサ−バの機能を持ってしまうわけだから。一説によると、単純にデ−タベ−スだアプリ ケ−ションサ−バだと分けるのでなく、柔軟な組み合わせが可能になるからいいでないか という話もある。オラクルに電話でどう違うのか聞いてみたが、何やら機能がアプリケ− ションサ−バに追加されていて、大規模なシステムに向くとか。 まあ、Oracle8i でいろ いろ試して、機能が不足だなと感じたところで Application Server を考えてもいいか。 * Oracle8i Workgroup Server R8.1.5 Linux 用は5同時ユ−ザ/10クライアントで 37 万円。`02/05/31 までのキャンペ−ン 価格は 19.6 万円である。25同時ユ−ザ/50クライアントだと 110 万円、 保守料金 が年 25〜35 万円かかる。Windows NT 用はこの Linux と同じ価格である。Solaris など UNIXマシンだとぐっと高くなる。内容は Enterprise Edition とほとんど同じで、ス ケ−ルの差と考えていいだろう。 その内容は SSL, X.509, LDAP, PKI, Net8, ORDB, XML 対応。Oracle WebDB を含む。iFS はまだない。Oracle JServer は R8.1.6 から入ってい るが、Linux 版はまだ R8.1.6 が出てないので、この時点では Linux 版には JServer は 入ってない。 モバイル 個人ユ−ス 小中規模 大規模 Lite < Peronal Edition < Workgroup Server < Enterprise Edition R8.1.6 は Enterprise Edition が `02/04/28 に出荷が始まったばかりである。 EJB 1.0 対応、Web サ−バなし。R8.1.7 で EJB 1.1、Web サ−バを入れる予定とのこと。JServer には EJB, CORBA, JDBC, JavaVM が入っている。 Application Server 4.0.8 と IIOP 接 続はできないともあった。これはどういう意味だ?。柔軟な構成が取れるという割には中 途半端な話だ。ここら辺りの話って、`02/04/13 のオラクルのセミナ−であったかな。名 古屋のちょっとしたホ−ルが満員、500人以上来たのでないか。何かショ−を見ている ようで、肝心なとこ聞き漏らしたかな。しかしすごい人気、たまげた−。 * Oracle Application Server 4.0.8 Oracle のアプリケ−ション−バである。デ−タベ−スソフトは入ってないので Oracle8i を別途購入することになる。WWWサ−バは HTTP 1.1 のが入っている。他のWWWサ− バでもいいということ。ただしマシンが限られるようである。各種UNIX、Windows NT、 Linux 版がある。実稼働用として Standard Edition が 80 万円で Java2, Servlet 2.1a, EJB 1.0 Session Bean に対応。JSP はまだ入ってない。Enterprise Edition は250 万円 で、Standard に加えて CORBA 2.0、JTS( Java Transaction Services )、LDAP、 フェイ ルリカバリが入っている。ただしこのソフトだけで済むのでなく、次のようなソフトが開 発には必要である。 Webサイトの構築ツ−ルとして Oracle WebDB 2.1。Windows NT, Solaris, Linux 版が ある。WWW画面とデ−タベ−スとの連携といったことが簡単にできるとある。5同時ユ −ザの Workgroup Server 適用の場合 15 万円からである。もう一つ、 Java アプリケ− ションの統合開発環境の JDeveloper Suite 2.0。 これは Windows NT 用しかないみたい。 1人分の開発者ライセンス 35 万円。Borland の JBuilder のソ−スライセンスを受けて 作っているので画面は JBuilder にそっくりとのこと。Suite 製品故 Oracle JDeveloper と Oracle Application Server Enterprise Edition と Oracle8i Enterprise Editionの 開発版が入っている。紛らわしいやつ Oracle Application R11i は ERP 用のソフト。 * その他 Oracle メモ Oracle8i は出てから見てみる。`02/10 やっと出たか?。 `02/12 に価格を改訂して値上 げした。独占に近くなってきたから鼻息が荒いのかな。 Oracle のマニュアルを全部揃え ると30万円ぐらいなるのでないか。 品物を購入すると来るのはライセンスだけとか。 Oracle8i の interMedia。中身は Text, Image, Audio, Video, Locator がある。'99/11 時点では Text だけサポ−トされていた。interMedia は iFS とは別もんである。ところ で Oracle8i の i は何?。internet の i と言っていたと思うが。 PL/SQL(Procedual Language SQL)は Oracle 独自のストアドプロシ−ジャである。Oracle の標準言語みたいなもので、バ−ジョン7ぐらいから基本は変わっていない。またOracle の小規模から大規模までのシリ−ズ、どれでも共通に使うことができる。 SQL*Plus。Oracle の独自対話型 SQL のこと。 標準の SQL コマンドに PL/SQL も使える。 SQL*Net というのは HTTP などと同じく通信プロトコルである。バ−ジョン1は1525/tcp を、2は 1521/tcp を使う。Net8 は Oracle8 からの SQL*NetSQL に代わるプロトコル。 参考URL。日本オラクル http://db.oracle.co.jp/。"WEB DEVELOPER ONLINE"ここ見た ら、おおよそのことは分かる。http://www.oracle.co.jp/webdev/ もお勧め。 最後に泣く子も黙る Oracle かな。インタ−ネットのユ−ザ管理なんかで使うとライセン ス数の使用料が莫大になる。なんて、おいしい商売!。皆が Oracle というから、Oracle かなという判断はやめよう。何ができれば十分かそれを先ず考えよう。 (5) 再び登場の PostgreSQL `28/10 * PostgreSQL 7.4.23 ソ−スをコンパイル http://www.sun.com/software/solaris/freeware。 ここには OpenSolaris と Solaris10 のしかなかった。本家の http://www.postgresql.jp/ から 7.4.23 をダウンロ−ド (7.4 シリ−ズの最新版) 12 Mbytes。Solaris 9 にてコンパイル。 # gzip -d postgresql-7.4.23.tar.gz # tar xf postgresql-7.4.23.tar # cd postgresql-7.4.23; ls -F COPYRIGHT Makefile configure* src/ GNUmakefile.in README configure.in INSTALL HISTORY aclocal.m4 contrib/ config/ doc/ INSTALL -------------------------------------------------------------------------- | PostgreSQL Installation Instructions | |This document describes the installation of PostgreSQL from the source |code distribution. | Short Version |./configure |gmake |su |gmake install |adduser postgres |mkdir /usr/local/pgsql/data |chown postgres /usr/local/pgsql/data |su - postgres |/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data |/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & |/usr/local/pgsql/bin/createdb test |/usr/local/pgsql/bin/psql test 以下続く # /bin/csh とやって gcc があるディレクトリなどのパスを通した、このマシンの環境で。 # configure --without-readline << ただの configure だと readline library not | found とエラ−になった。 checking build system type... sparc-sun-solaris2.9 checking host system type... sparc-sun-solaris2.9 checking which template to use... solaris checking whether to build with 64-bit integer date/time support... no checking whether NLS is wanted... no checking for default port number... 5432 以下続く * Solaris 9 の PostgreSQL 8.3.3 バイナリ http://ftp.kddlabs.co.jp/Sun/sunfreeware/sparc/9/ に PostgreSQL 8.3.3、12 Mbytes があった。例えば /usr/local/source にダウンロ−ドしてくる。 # gzip -d postgresql-8.3.3-sol9-sparc-local.gz # ls -l -rw-r--r-- ... 41729024 11月 25日 12:47 postgresql-8.3.3-sol9-sparc-local # pkgadd -d postgresql-8.3.3-sol9-sparc-local 次のパッケージを利用できます: 1 SMCpgsql postgresql (sparc) 8.3.3 | のインストールに成功しました。 # ls -F /usr/local/pgsql bin/ doc/ include/ lib/ man/ share/ # ls /usr/local/pgsql/bin clusterdb droplang pg_config pg_resetxlog reindexdb createdb dropuser pg_controldata pg_restore vacuumdb createlang ecpg pg_ctl postgres createuser initdb pg_dump postmaster dropdb ipcclean pg_dumpall psql # ls /usr/local/pgsql/data PG_VERSION pg_hba.conf pg_tblspc postmaster.opts base pg_ident.conf pg_twophase postmaster.pid global pg_multixact pg_xlog pg_clog pg_subtrans postgresql.conf # pkginfo | egrep -i postgresql << 入ったかどうかこれで確認する。 application SMCpgsql postgresql * InterScan7 をインスト−ルする検討にて PostgreSQL をインスト−ルするのに、SUNWzlib が必要と InterScan7 のマニュアルに書 いてあった。pkginfo で確認したところ入っていた。 # pkginfo | egrep -i SUNWzlib system SUNWzlib The Zip compression library system SUNWzlibx The Zip compression library (64-bit) InterScan7 のインスト−ルプロシ−ジャ isinst.sh をやると、スワップ領域が足りない とでるが無視してもいい。現在は約2GB、推奨は4GBである。スワップ領域はマシン が稼働中でも追加することができる。isinst.sh で、その前にセマフォと共有メモリが足 りないと出た。これはそのまま進めると、インスト−ルはできずに抜けてしまった。マニ ュアルにも出ているが、set shmsys:shminfo_shmmax=0x2000000 以下を /etc/system に エディタで書き込んでマシンをいったんリブ−トすること。これは PostgreSQL がリソ− スをたくさん食うための設定である。InterScan7 は PostgreSQL を内部で用いている。 # ls ../InterScan7/imss70_sol_b7153 InterScan7の本体をインスト−ルす IMSS_Solaris_readme_sjis.txt ipfilterinst.sh ると PostgreSQL も入る。すでにマ foxnrs.tar imss.tar isinst.sh シンに PostgreSQL が動いていれば それを指定し利用することもできる。 # isinst.sh Unpacking the package ..... デ−タベ−スの名前はデフォルトで | imss になっている。下の psqlコマ -- Database Config Menu -- ンドで確認できる。 You chose to install a new database server on the current computer. Default database name:"imss"(without quotation marks) Default username:"sa"(without quotation marks) Enter your password for the username"sa": << あらかじめ、マシンに "sa"というユ Confirm the password: −ザ名を登録し、 パスワ−ドも設定 | しておくこと。 # ls /opt/trend/imss/PostgreSQL/bin clusterdb droplang pg_config pg_resetxlog reindexdb createdb dropuser pg_controldata pg_restore vacuumdb createlang ecpg pg_ctl postgres createuser initdb pg_dump postmaster これら全部実行モジ dropdb ipcclean pg_dumpall psql ュ−ル。 # psql -l << root で作業していて、そのままコマ psql: FATAL: role "root" does not exist マンドを打ってみたくなるがだめ。 # su - sa << ユ−ザ sa になって。root ユ−ザを $ /opt/trend/imss/PostgreSQL/bin/psql -l PostgreSQL に登録すればできるよう List of databases にすることはできるが、 InterScan7 Name | Owner | Encoding が制御していることなのでやらない。 -----------+-------+----------- imss | sa | UTF8 # su - sa postgres | imss | SQL_ASCII # createuser root 登録するには。 template0 | imss | SQL_ASCII template1 | imss | SQL_ASCII (4 rows) # /opt/trend/imss/script/dbctl.sh stop << InterScan7 の制御で PostgreSQL を postmaster stopped 止めてみる。 $ psql -l psql: could not connect to server: ファイルもディレクトリもありません。 Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? # /opt/trend/imss/script/dbctl.sh start << InterScan7 の制御で PostgreSQL を postmaster started 開始してみる。 * InterScan7 の CPU 負荷 InterScan7 を入れたマシン Mail-Store で vmstatコマンドでメモリや CPUの様子をみて いた。FireWall-1 のマシンでも vmstat 値はほとんど動きがない、CPUの値はだいたい0 に近い。それが Mail-Store で、10とか20とかかなり変動している。結論からいうと InterScan7で隔離メ−ルを50件とか100件ずつ出して、スクロ−ルしながら誤検知を チェックしていると vmstat の cpu の us値が10前後、最大25ぐらいまでなっていた。 隔離メ−ルのログをチェックしてない時は cpu の us 値は 1〜4 ぐらいである。CPUを使 っているのは java と postmaster、それに imssmgr デ−モンが1つ。 java は Tomocat で使用しているのか?。postmaster はデ−タベ−スアクセスの PostgreSQLで幾つもデ− モンができていた。隔離メ−ルは RDBMS の PostgreSQL を利用している由縁である。 java 4.6 /home/trend/imss/UI/javaJRE/bin/java -Djava.endorsed.dirs=... postmaster 0.9 /opt/trend/imss/PostgreSQL/bin/postmaster -D /var/imss/pgdata -i imssmgr 0.5 /home/trend/imss/bin/imssmgr Mail-Store で # vmstat 10 で10秒間隔で表示。# /usr/dt/bin/sdtprocess &、別画面 が開いてプロセス名ごとに CPUなど値が出る、10秒間隔で値を出すようにする。vmstat でざくっと CPU の使用状況が分かる。値が大きい時に sdtprocessの画面を見ると、何が CPU を食っているのか分かる。上は CPU 負荷が大きい時の sdtprocess の様子で、4.6と かが CPU% 値である。 InterScan7 で迷惑メ−ルやウィルスメ−ルのチェックをしている のは imssd デ−モンで今、処理をしている数だけある。メ−ルの配送は2つの sendmail デ−モンが行なっている。imssd と sendmail の処理にはほとんど負荷はかかってなかっ た。以上 InterScan7 がほぼ普通のメ−ルを捌いている時の状態である。CPU 値がこれ以 上だと要注意、一気に多くのメ−ルかサイズの大きなメ−ルが来た場合だと思う。 ------------------------------------------------------------------------------------ [ 付録 ] InterScan バ−ジョン7のデ−タベ−スソフト `28/11 * InterScan7 での PostgreSQL デ−タベ−スの実行 isinst.sh で InterScan7 は、/usr/local/trend/ ディレクトリにインスト−ルするよう 指示した。しかし PostgreSQL は /opt/trend/imss/PostgreSQL に入った。デフォルトで ここに入るようにあらかじめ決められているらしい。 # cd /opt/trend/imss; ls -F PostgreSQL/ temp/ # cd PostgreSQL;ls -F bin/ doc/ include/ lib/ man/ share/ # cd /etc/rc2.d InterScan7 で PostgreSQL を起動するスクリプト。 # ls -l ↓ lrwxrwxrwx ... S98dbctl -> /usr/local/trend/imss/script/dbctl.sh dbctl.sh ---------------------------------------------- | | |PG_BASE=/opt/trend/imss/PostgreSQL |PG_BIN_DIR=$PG_BASE/bin |PG_LIB_DIR=$PG_BASE/lib |PGDATA=/var/imss/pgdata |PG_LOG_FILE=/var/imss/pglog | |PATH=$PG_BIN_DIR:$PATH |LD_LIBRARY_PATH=$PG_LIB_DIR:$LD_LIBRARY_PATH |export PATH LD_LIBRARY_PATH |export PGDATA | |case $1 in ※ su - imss はユ−ザ名 imss で実行せよという指示。 | start) | su - imss -c "$PG_BIN_DIR/pg_ctl -D '$PGDATA' -w -o \"-i\" -l 続く | $PG_LOG_FILE start" /usr/local/trend/imss/script/dbctl.sh lrwxrwxrwx ... S99CMAGENT -> /usr/local/trend/imss/script/S99CMAGENT lrwxrwxrwx ... S99IMSSUI -> /usr/local/trend/imss/UI/adminUI/bin/Tomcat.sh lrwxrwxrwx ... S99MONITOR -> /usr/local/trend/imss/script/S99MONITOR # cd /etc/rc2.d # S98dbctl start postmaster デ−モン4個がこの時点で稼働。 # S99CMAGENT start postmaster 4個のまま。Web管理画面にはアクセスできない。 # S99IMSSUI start postmaster 5個。画面OK。管理下のサ−バ設定で3つ共停止。 # S99MONITOR start postmaster 19個になった。管理下のサ−バ設定、3つ共稼働。 どうも dbctl.sh は PostgreSQL の postmaster デ−モンを4個だけ作って開始、停 止させるスクリプトのようである。S99IMSSUI と S99MONITOR でも postmaster を加 えて稼働させているようである。 それ故 dbctl.sh だけやっただけでは InterScan7 の画面操作はちゃんとしてないようである。 # ./S98dbctl start 実際に実行した際の表示。 Sun Microsystems Inc. SunOS 5.9 Generic May 2002 waiting for postmaster to start.... done postmaster started # ./S99CMAGENT start /usr/local/trend/imss/bin/imsscmagent has started. # ./S99IMSSUI start Central Controller has started. # ./S99MONITOR start imssmgrmon has started. # ls -l /etc/rc0.d 参考、これらマシンの停止時に実行するスクリプト。 lrwxrwxrwx ... K96MANAGER -> /usr/local/trend/imss/script/S99MANAGER lrwxrwxrwx ... K96MONITOR -> /usr/local/trend/imss/script/S99MONITOR lrwxrwxrwx ... K97CMAGENT -> /usr/local/trend/imss/script/S99CMAGENT lrwxrwxrwx ... K97IMSS -> /usr/local/trend/imss/script/S99IMSS lrwxrwxrwx ... K97IMSSUI -> /usr/local/trend/imss/UI/adminUI/bin/Tomcat.sh lrwxrwxrwx ... K97POLICY -> /usr/local/trend/imss/script/S99POLICY lrwxrwxrwx ... K97SCHEDULED -> /usr/local/trend/imss/script/S99SCHEDULED lrwxrwxrwx ... K98dbctl -> /usr/local/trend/imss/script/dbctl.sh lrwxrwxrwx ... K99IMSSSTOP -> /usr/local/trend/imss/script/imssstop.sh * クライアント認証の pg_hba.conf ファイル # cd /var/imss/; ls -F pgdata/ pglog # ls -l drwx------ 10 imss other 512 1月 15日 18:08 pgdata -rw------- 1 imss imss 10377476 1月 16日 09:35 pglog # cd pgdata; ls -F PG_VERSION pg_hba.conf pg_tblspc/ postmaster.opts base/ pg_ident.conf pg_twophase/ postmaster.pid global/ pg_multixact/ pg_xlog/ pg_clog/ pg_subtrans/ postgresql.conf /var/imss/pgdata/pg_hba.conf ----------------------------------------------------------------------------- | | |# TYPE DATABASE USER CIDR-ADDRESS METHOD | |# "local" is for Unix domain socket connections only |local all all trust |# IPv4 local connections: |host all all 127.0.0.1/32 trust |# IPv6 local connections: |host all all ::1/128 trust |host all all 192.168.100.100 255.255.255.0 password ↑ このIPアドレスのマシンで InterScan7 をインスト−ル していたということ。このエントリは IPv6 用みたいであ るため、IPv4 ネットワ−クでは見ないということ。