2010年07月30日

Firebird 2.5 Release Candidate 3 リリース

 Firebird 2.5 Release Candidate 3が7/29付でリリースされた。バグの報告状況から予想出来たことながら、リリース候補で刻んで来た訳だ。

 R3での変更点はFirebird 2.5 Release Candidate 3 を見てくと判るが、70以上のBUG FIXEDがなされた様だ。

 従って、今回も正式用途への利用は公式には推奨されないが、何らかの形で使ってバグ出ししない限りこの状態が長く続いてしまうのがオープンソースのお決まりである。他のオープン系DBに比べると過去、1つの取り消された正式リリースのバージョンを除いては、リリース候補であっても、結構安定しているのも事実なので、危険負担を負える範囲の用途でどしどし活用して頂きたいなというのが、ユーザの本音である。

 そういう、当方は、未だサービス公開したサーバを持たないので偉そうなことは言えないのではあるが、開発用途で使っている限りにおいては、問題は起きていない。

 今後はR3がリリース候補なので、早速、今度の土日にでもR3に切替えで試ようと思う。皆様も良かったら、インストールテストを宜しくお願いします。
タグ:FIREBIRD
posted by Mire at 13:07 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年05月02日

【Firebird】System Tables解析例 INDEX

 この前、ちょいと口が滑って書いてしまったので、取敢えずお茶を濁す程度で、FirebirdのSystem Tablesの解析と活用について、ここに書いておこうと思う。

 これを活用することで、この稿の末尾に掲載した様な管理ツール的なものを作成することも出来るし、ユーザ定義のTableの構造も掴むことが出来るので、例えばデータ型を自動的に掴み加味する汎用のエディタツール位なら簡単に作成出来てしまう。当方ではそれを作ってマスターテーブルの編集用に使ったりして重宝していた。

「RDB$FIELDS」には各列のデータ型やデータ長等の構造が、「RDB$TYPES」にはその型、「RDB$CHARACTER_SETS」にはCHARACTER SETが、「RDB$INDICES」と「RDB$INDEX_SEGMENTS」には、プライマリキーとINDEX情報が、「RDB$RELATION_CONSTRAINTS」にはNOT NULL等の制約条件と所属テーブル名が、「RDB$CHECK_CONSTRAINTS」には、内部列名と定義列名の対応が普通のテーブルと同じ様に記録され管理されている。

 これらのテーブルとリレーションを組めば、どのテーブルの列のデータ型が何なのか、プライマリーキーがどれなのか等を調べることが出来るので、クエリー文と各列の表示名さえ与えてあげれば、後は自動で決めるとこが可能なのである。

 例えば、 SELECT P.ID, E.NAME, P.PAY, P.REMARK FROM PAYMENT P LEFT OUTER JOIN EMPLOYEE E ON P.ID=E.ID; の様なクエリを指定して、PAYMENT側のPAYとREMARKを編集する入力フォームを自動作成させるといった汎用ツールもきちんと仕様策定さえすれば可能なはずだ。

 そこ迄作るのは経験上大変だし、対象を狭めた方が判り易いので、ここでは、「RDB$INDICES」と「RDB$INDEX_SEGMENTS」のみから得られるINDEX定義情報を基にして、その作成時のSQL文を生成させて試た。この作業を全てのSystem Tablesで行なうと、phpMyAdminの様なDB管理ツールが出来てしまう。

http://192.168.0.220/pyFBadmin/sys_tbl.py の実行例

indexes='IDX_BY_KANA'と指定場合それのみを表示。indexはDATABASE内共通の為tableの指定は不要



  1. CREATE INDEX IDX_BY_KANA ON ZIPCODE_JP (PREF_KANA, CITY_KANA, TOWN_KANA);

titles=['TEST', 'ZIPCODE_JP']とだけ指定の場合。設定があればそのprimary keyも含めて表示される


  1. CREATE UNIQUE INDEX RDB$PRIMARY1 ON TEST (A, B);
  2. CREATE INDEX IDX_BY_KANA ON ZIPCODE_JP (PREF_KANA, CITY_KANA, TOWN_KANA);
  3. CREATE INDEX IDX_CITY_KANA ON ZIPCODE_JP (CITY_KANA);
  4. CREATE INDEX IDX_CITY_NAME ON ZIPCODE_JP (CITY_NAME);
  5. CREATE INDEX IDX_PREF_KANA ON ZIPCODE_JP (PREF_KANA);
  6. CREATE INDEX IDX_PREF_NAME ON ZIPCODE_JP (PREF_NAME);

  7. CREATE INDEX IDX_TOWN_KANA ON ZIPCODE_JP (TOWN_KANA);
  8. CREATE INDEX IDX_TOWN_NAME ON ZIPCODE_JP (TOWN_NAME);
  9. CREATE INDEX IDX_ZIP_CODE ON ZIPCODE_JP (ZIP_CODE);

何も指定していしない場合は、システムテーブル分も含み全INDEXが表示される


  1. CREATE UNIQUE INDEX RDB$INDEX_44 ON RDB$BACKUP_HISTORY (RDB$BACKUP_LEVEL, RDB$BACKUP_ID);
  2. CREATE UNIQUE INDEX RDB$INDEX_19 ON RDB$CHARACTER_SETS (RDB$CHARACTER_SET_NAME);
  3. CREATE UNIQUE INDEX RDB$INDEX_25 ON RDB$CHARACTER_SETS (RDB$CHARACTER_SET_ID);
  4. CREATE INDEX RDB$INDEX_14 ON RDB$CHECK_CONSTRAINTS (RDB$CONSTRAINT_NAME);

  5. CREATE INDEX RDB$INDEX_40 ON RDB$CHECK_CONSTRAINTS (RDB$TRIGGER_NAME);
  6. CREATE UNIQUE INDEX RDB$INDEX_20 ON RDB$COLLATIONS (RDB$COLLATION_NAME);
  7. CREATE UNIQUE INDEX RDB$INDEX_26 ON RDB$COLLATIONS (RDB$COLLATION_ID, RDB$CHARACTER_SET_ID);
  8. CREATE INDEX RDB$INDEX_27 ON RDB$DEPENDENCIES (RDB$DEPENDENT_NAME);
  9. CREATE INDEX RDB$INDEX_28 ON RDB$DEPENDENCIES (RDB$DEPENDED_ON_NAME);
  10. CREATE UNIQUE INDEX RDB$INDEX_23 ON RDB$EXCEPTIONS (RDB$EXCEPTION_NAME);
  11. CREATE UNIQUE INDEX RDB$INDEX_24 ON RDB$EXCEPTIONS (RDB$EXCEPTION_NUMBER);
  12. CREATE UNIQUE INDEX RDB$INDEX_2 ON RDB$FIELDS (RDB$FIELD_NAME);
  13. CREATE INDEX RDB$INDEX_36 ON RDB$FIELD_DIMENSIONS (RDB$FIELD_NAME);

  14. CREATE UNIQUE INDEX RDB$INDEX_17 ON RDB$FILTERS (RDB$INPUT_SUB_TYPE, RDB$OUTPUT_SUB_TYPE);
  15. CREATE UNIQUE INDEX RDB$INDEX_45 ON RDB$FILTERS (RDB$FUNCTION_NAME);
  16. CREATE INDEX RDB$INDEX_16 ON RDB$FORMATS (RDB$RELATION_ID, RDB$FORMAT);
  17. CREATE UNIQUE INDEX RDB$INDEX_9 ON RDB$FUNCTIONS (RDB$FUNCTION_NAME);
  18. CREATE INDEX RDB$INDEX_10 ON RDB$FUNCTION_ARGUMENTS (RDB$FUNCTION_NAME);
  19. CREATE UNIQUE INDEX RDB$INDEX_11 ON RDB$GENERATORS (RDB$GENERATOR_NAME);
  20. CREATE UNIQUE INDEX RDB$INDEX_46 ON RDB$GENERATORS (RDB$GENERATOR_ID);
  21. CREATE INDEX RDB$INDEX_6 ON RDB$INDEX_SEGMENTS (RDB$INDEX_NAME);
  22. CREATE INDEX RDB$INDEX_31 ON RDB$INDICES (RDB$RELATION_NAME);

  23. CREATE INDEX RDB$INDEX_41 ON RDB$INDICES (RDB$FOREIGN_KEY);
  24. CREATE UNIQUE INDEX RDB$INDEX_5 ON RDB$INDICES (RDB$INDEX_NAME);
  25. CREATE UNIQUE INDEX RDB$INDEX_21 ON RDB$PROCEDURES (RDB$PROCEDURE_NAME);
  26. CREATE UNIQUE INDEX RDB$INDEX_22 ON RDB$PROCEDURES (RDB$PROCEDURE_ID);
  27. CREATE UNIQUE INDEX RDB$INDEX_18 ON RDB$PROCEDURE_PARAMETERS (RDB$PROCEDURE_NAME, RDB$PARAMETER_NAME);
  28. CREATE UNIQUE INDEX RDB$INDEX_13 ON RDB$REF_CONSTRAINTS (RDB$CONSTRAINT_NAME);
  29. CREATE UNIQUE INDEX RDB$INDEX_0 ON RDB$RELATIONS (RDB$RELATION_NAME);
  30. CREATE INDEX RDB$INDEX_1 ON RDB$RELATIONS (RDB$RELATION_ID);
  31. CREATE UNIQUE INDEX RDB$INDEX_12 ON RDB$RELATION_CONSTRAINTS (RDB$CONSTRAINT_NAME);

  32. CREATE INDEX RDB$INDEX_42 ON RDB$RELATION_CONSTRAINTS (RDB$RELATION_NAME, RDB$CONSTRAINT_TYPE);
  33. CREATE INDEX RDB$INDEX_43 ON RDB$RELATION_CONSTRAINTS (RDB$INDEX_NAME);
  34. CREATE UNIQUE INDEX RDB$INDEX_15 ON RDB$RELATION_FIELDS (RDB$FIELD_NAME, RDB$RELATION_NAME);
  35. CREATE INDEX RDB$INDEX_3 ON RDB$RELATION_FIELDS (RDB$FIELD_SOURCE);
  36. CREATE INDEX RDB$INDEX_4 ON RDB$RELATION_FIELDS (RDB$RELATION_NAME);
  37. CREATE UNIQUE INDEX RDB$INDEX_39 ON RDB$ROLES (RDB$ROLE_NAME);
  38. CREATE UNIQUE INDEX RDB$INDEX_7 ON RDB$SECURITY_CLASSES (RDB$SECURITY_CLASS);
  39. CREATE UNIQUE INDEX RDB$INDEX_32 ON RDB$TRANSACTIONS (RDB$TRANSACTION_ID);
  40. CREATE INDEX RDB$INDEX_38 ON RDB$TRIGGERS (RDB$RELATION_NAME);

  41. CREATE UNIQUE INDEX RDB$INDEX_8 ON RDB$TRIGGERS (RDB$TRIGGER_NAME);
  42. CREATE INDEX RDB$INDEX_35 ON RDB$TRIGGER_MESSAGES (RDB$TRIGGER_NAME);
  43. CREATE INDEX RDB$INDEX_37 ON RDB$TYPES (RDB$TYPE_NAME);
  44. CREATE INDEX RDB$INDEX_29 ON RDB$USER_PRIVILEGES (RDB$RELATION_NAME);
  45. CREATE INDEX RDB$INDEX_30 ON RDB$USER_PRIVILEGES (RDB$USER);
  46. CREATE INDEX RDB$INDEX_33 ON RDB$VIEW_RELATIONS (RDB$VIEW_NAME);
  47. CREATE INDEX RDB$INDEX_34 ON RDB$VIEW_RELATIONS (RDB$RELATION_NAME);
  48. CREATE UNIQUE INDEX RDB$PRIMARY1 ON TEST (A, B);
  49. CREATE INDEX IDX_BY_KANA ON ZIPCODE_JP (PREF_KANA, CITY_KANA, TOWN_KANA);

  50. CREATE INDEX IDX_CITY_KANA ON ZIPCODE_JP (CITY_KANA);
  51. CREATE INDEX IDX_CITY_NAME ON ZIPCODE_JP (CITY_NAME);
  52. CREATE INDEX IDX_PREF_KANA ON ZIPCODE_JP (PREF_KANA);
  53. CREATE INDEX IDX_PREF_NAME ON ZIPCODE_JP (PREF_NAME);
  54. CREATE INDEX IDX_TOWN_KANA ON ZIPCODE_JP (TOWN_KANA);
  55. CREATE INDEX IDX_TOWN_NAME ON ZIPCODE_JP (TOWN_NAME);
  56. CREATE INDEX IDX_ZIP_CODE ON ZIPCODE_JP (ZIP_CODE);

システムテーブル分に当る'RDB$'で始まるものを除外し、その他の全INDEXを表示。



  1. CREATE UNIQUE INDEX RDB$PRIMARY1 ON TEST (A, B);
  2. CREATE INDEX IDX_BY_KANA ON ZIPCODE_JP (PREF_KANA, CITY_KANA, TOWN_KANA);
  3. CREATE INDEX IDX_CITY_KANA ON ZIPCODE_JP (CITY_KANA);
  4. CREATE INDEX IDX_CITY_NAME ON ZIPCODE_JP (CITY_NAME);
  5. CREATE INDEX IDX_PREF_KANA ON ZIPCODE_JP (PREF_KANA);
  6. CREATE INDEX IDX_PREF_NAME ON ZIPCODE_JP (PREF_NAME);
  7. CREATE INDEX IDX_TOWN_KANA ON ZIPCODE_JP (TOWN_KANA);
  8. CREATE INDEX IDX_TOWN_NAME ON ZIPCODE_JP (TOWN_NAME);
  9. CREATE INDEX IDX_ZIP_CODE ON ZIPCODE_JP (ZIP_CODE);


システム生成分に当る'RDB$'で始まるものを除外し、その他の全INDEXを表示。mode=1でもほぼ同じ解となる


  1. CREATE INDEX IDX_BY_KANA ON ZIPCODE_JP (PREF_KANA, CITY_KANA, TOWN_KANA);
  2. CREATE INDEX IDX_CITY_KANA ON ZIPCODE_JP (CITY_KANA);
  3. CREATE INDEX IDX_CITY_NAME ON ZIPCODE_JP (CITY_NAME);
  4. CREATE INDEX IDX_PREF_KANA ON ZIPCODE_JP (PREF_KANA);
  5. CREATE INDEX IDX_PREF_NAME ON ZIPCODE_JP (PREF_NAME);
  6. CREATE INDEX IDX_TOWN_KANA ON ZIPCODE_JP (TOWN_KANA);
  7. CREATE INDEX IDX_TOWN_NAME ON ZIPCODE_JP (TOWN_NAME);

  8. CREATE INDEX IDX_ZIP_CODE ON ZIPCODE_JP (ZIP_CODE);

 ※ System Tableとprimary keyのINDEXは「RDB$」で始まる名前となる。
※ システムテーブルやプライマリーキーの分も含めて書き出していることをご確認頂きたい。プライマリキーもIndexも情報保持の場所は同じという訳だ。

 ソースコードは以下の通り、今回は、説明用なので、値の入力フォームは作らなかったので、ソースへの直打ちで書き換えてのチェックとなる。続きを読む
タグ:FIREBIRD Python
posted by Mire at 06:37 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年04月29日

【Firebird】郵便番号簿DBの作成(4) 検索フォームで確認

 初めにお断り申上げるが、この頁には入力フォームを表示させているが、あくまで説明の為のもので一切機能しない。使いたい方は、CentOS5.4、Firebird2.5RC2以降、Python2.6.5、Apache2.2以降、kinterbasdb等を導入した上で、必要な前稿迄のDB用スクリプトを整備し、実行してから、この稿の末尾にあるソースコードをWebサーバのCGI利用を許可したディレクトリに入れて実行して欲しい。また、ここに掲載する検索フォーム自体は運用向けに作成した訳でなく、あくまで、DBが正常に利用出来ていることを確認する為のものなので、見栄えや細かいユーザインタフェイスの配慮は端折らせて頂いている。

 さて、本論として、今回作った検索フォームの書記画面は、以下の様にボタンとテキスト入力フォームをフォーム2組並べたものだ。住所の欄には、漢字または半角カタカナで住所の一部の地名を入力し、その横のボタンをクリックすることで、その入力文字列が含まれるデータをDBに問合せ、該当データの全てを表示、郵便番号の欄には半角数字で入力し横のボタンをクリックすることで、その前方一致の全データを表示するといった程度のものである。
部分一致、1つの地名のみを指定
前方一致、半角数字のみで入力


 以下は、住所欄に「ムサシ」と半角文字で入力し横のボタンをクリックした場合の結果だ。横の住所ボタンをクリックしたので下の郵便番号の入力値は利用されない。おまけ程度だかpython文字列のreplaceメソッドでs.replace(<検索文字列変数>, '<span style="background-color:#FFFFE0;">%s</span>' % (<検索文字列変数>))として、薄黄色の背景を付けて試た。当方の個人的利用に不足はない。
前方一致、半角数字のみで入力

ムサシ
4801121 愛知県 愛知郡長久手町 武蔵塚 アイチケン アイチグンナガクテチョウ ムサシヅカ
9200855 石川県 金沢市 武蔵町 イシカワケン カナザワシ ムサシマチ
8730405 大分県 国東市 武蔵町麻田 オオイタケン クニサキシ ムサシマチアサダ
8730401 大分県 国東市 武蔵町池ノ内 オオイタケン クニサキシ ムサシマチイケノウチ
8730421 大分県 国東市 武蔵町糸原 オオイタケン クニサキシ ムサシマチイトハル
8730402 大分県 国東市 武蔵町内田 オオイタケン クニサキシ ムサシマチウチダ
8730422 大分県 国東市 武蔵町小城 オオイタケン クニサキシ ムサシマチオギ
8730432 大分県 国東市 武蔵町向陽台 オオイタケン クニサキシ ムサシマチコウヨウダイ
8730424 大分県 国東市 武蔵町志和利 オオイタケン クニサキシ ムサシマチシワリ
8730414 大分県 国東市 武蔵町手野 オオイタケン クニサキシ ムサシマチテノ
8730404 大分県 国東市 武蔵町成吉 オオイタケン クニサキシ ムサシマチナリヨシ
8730407 大分県 国東市 武蔵町狭間 オオイタケン クニサキシ ムサシマチハサマ
8730412 大分県 国東市 武蔵町古市 オオイタケン クニサキシ ムサシマチフルイチ
8730406 大分県 国東市 武蔵町丸小野 オオイタケン クニサキシ ムサシマチマルオノ
8730423 大分県 国東市 武蔵町三井寺 オオイタケン クニサキシ ムサシマチミイデラ
8730415 大分県 国東市 武蔵町吉広 オオイタケン クニサキシ ムサシマチヨシヒロ
6168464 京都府 京都市右京区 嵯峨水尾武蔵嶋町 キョウトフ キョウトシウキョウク サガミズオムサシジマチョウ
6128033 京都府 京都市伏見区 桃山町松平武蔵 キョウトフ キョウトシフシミク モモヤマチョウマツダイラムサシ
6148052 京都府 八幡市 八幡武蔵芝 キョウトフ ヤワタシ ヤワタムサシシバ
8691111 熊本県 菊池郡菊陽町 武蔵ヶ丘 クマモトケン キクチグンキクヨウマチ ムサシガオカ
8691112 熊本県 菊池郡菊陽町 武蔵ヶ丘北 クマモトケン キクチグンキクヨウマチ ムサシガオカキタ
8618001 熊本県 熊本市 武蔵ケ丘 クマモトケン クマモトシ ムサシガオカ
3700418 群馬県 太田市 武蔵島町 グンマケン オオタシ ムサシジマチョウ
3501170 埼玉県 川越市 むさし野 サイタマケン カワゴエシ ムサシ
3550216 埼玉県 比企郡嵐山町 むさし台 サイタマケン ヒキグンランザンマチ ムサシダイ
3501255 埼玉県 日高市 武蔵台 サイタマケン ヒダカシ ムサシダイ
3691241 埼玉県 深谷市 武蔵野 サイタマケン フカヤシ ムサシ
3560054 埼玉県 ふじみ野市 大井武蔵野 サイタマケン フジミノシ オオイムサシ
3560037 埼玉県 ふじみ野市 福岡武蔵野 サイタマケン フジミノシ フクオカムサシ
1960021 東京都 昭島市 武蔵野 トウキョウト アキシマシ ムサシ
1901213 東京都 西多摩郡瑞穂町 武蔵 トウキョウト ニシタマグンミズホマチ ムサシ
1901214 東京都 西多摩郡瑞穂町 むさし野 トウキョウト ニシタマグンミズホマチ ムサシ
1970013 東京都 福生市 武蔵野台 トウキョウト フッサシ ムサシノダイ
1830042 東京都 府中市 武蔵台 トウキョウト フチュウシ ムサシダイ
1800000 東京都 武蔵野市 以下に掲載がない場合 トウキョウト ムサシノシ イカニケイサイガナイバアイ
1800023 東京都 武蔵野市 境南町 トウキョウト ムサシノシ キョウナンチョウ
1800001 東京都 武蔵野市 吉祥寺北町 トウキョウト ムサシノシ キチジョウジキタマチ
1800002 東京都 武蔵野市 吉祥寺東町 トウキョウト ムサシノシ キチジョウジヒガシチョウ
1800004 東京都 武蔵野市 吉祥寺本町 トウキョウト ムサシノシ キチジョウジホンチョウ
1800003 東京都 武蔵野市 吉祥寺南町 トウキョウト ムサシノシ キチジョウジミナミチョウ
1800005 東京都 武蔵野市 御殿山 トウキョウト ムサシノシ ゴテンヤマ
1800022 東京都 武蔵野市 境 トウキョウト ムサシノシ サカイ
1800021 東京都 武蔵野市 桜堤 トウキョウト ムサシノシ サクラヅツミ
1800014 東京都 武蔵野市 関前 トウキョウト ムサシノシ セキマエ
1800006 東京都 武蔵野市 中町 トウキョウト ムサシノシ ナカチョウ
1800013 東京都 武蔵野市 西久保 トウキョウト ムサシノシ ニシクボ
1800012 東京都 武蔵野市 緑町 トウキョウト ムサシノシ ミドリチョウ
1800011 東京都 武蔵野市 八幡町 トウキョウト ムサシノシ ヤハタチョウ
2080000 東京都 武蔵村山市 以下に掲載がない場合 トウキョウト ムサシムラヤマシ イカニケイサイガナイバアイ
2080023 東京都 武蔵村山市 伊奈平 トウキョウト ムサシムラヤマシ イナダイラ
2080022 東京都 武蔵村山市 榎 トウキョウト ムサシムラヤマシ エノキ
2080013 東京都 武蔵村山市 大南 トウキョウト ムサシムラヤマシ オオミナミ
2080011 東京都 武蔵村山市 学園 トウキョウト ムサシムラヤマシ ガクエン
2080031 東京都 武蔵村山市 岸 トウキョウト ムサシムラヤマシ キシ
2080034 東京都 武蔵村山市 残堀 トウキョウト ムサシムラヤマシ ザンボリ
2080002 東京都 武蔵村山市 神明 トウキョウト ムサシムラヤマシ シンメイ
2080003 東京都 武蔵村山市 中央 トウキョウト ムサシムラヤマシ チュウオウ
2080001 東京都 武蔵村山市 中藤 トウキョウト ムサシムラヤマシ ナカトウ
2080035 東京都 武蔵村山市 中原 トウキョウト ムサシムラヤマシ ナカハラ
2080004 東京都 武蔵村山市 本町 トウキョウト ムサシムラヤマシ ホンマチ
2080032 東京都 武蔵村山市 三ツ木(1?5丁目) トウキョウト ムサシムラヤマシ ミツギ(1-5チョウメ)
2080033 東京都 武蔵村山市 三ツ木(大字) トウキョウト ムサシムラヤマシ ミツギ(オオアザ)
2080021 東京都 武蔵村山市 三ツ藤 トウキョウト ムサシムラヤマシ ミツフジ
2080012 東京都 武蔵村山市 緑が丘 トウキョウト ムサシムラヤマシ ミドリガオカ
6320065 奈良県 天理市 武蔵町 ナラケン テンリシ ムサシチョウ
6371332 奈良県 吉野郡十津川村 武蔵 ナラケン ヨシノグントツカワムラ ムサシ
8180052 福岡県 筑紫野市 武藏 フクオカケン チクシノシ ムサシ
8180043 福岡県 筑紫野市 むさしケ丘 フクオカケン チクシノシ ムサシガオカ


 これで、Shift_JISの元データだった郵便番号をUTF8に変換しDB化したものから、無事文字化けすることなくデータ利用出来たので、目的は達成出来た。少なくとも、東は東京西は福岡、北は石川、南は熊本迄ならこの検索システムも大丈夫そうだ(笑)。


 さて、続いて、今回作成した末尾掲載のソースコードの説明に話を移す。続きを読む
タグ:FIREBIRD Python
posted by Mire at 23:25 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年04月28日

【Firebird】郵便番号簿DBの作成(3) conf_section_items in mire.std

 郵便番号簿DBの作成を行なう「./dl_ZipCodeJp.py」では14行目で「from mire.std import conf_section_items」として、次の様な関数をimportしている。本稿では、この関数を先ずは説明しよう。

 使い方は、__doc__ 部分Sample付で書いているので、そちらをご覧頂きたい。この関数自体はPythonの標準モジュール「ConfigParser」を単純にラップしただけのもので、過去Windows等でよく用いられていた「〜.ini」形式のファイルを読み、その指定セクションの値を辞書形式で渡す働きをする代物である。気持的には、httpd.confやxml形式、あるいは純粋にDBで対処したい気持もあるが、取敢えず手っとり早く設定値とスクリプトを分離出来るので今回は採用した。




## INI系設定ファイルの指定セクション内の設定内容を辞書で返す ##
def conf_section_items(file_name, section, debug=0):
"""
##########################################################################################
#INI系設定ファイルの指定セクション内の設定内容を辞書で返す #
#2010-04-20 #
# #
#USAGE: #
# #
#/usr/local/etc/configure.ini: #
# [SECTION NAME1] #
# item1 = value1 #
# item2 = valie2 #
# [SECTION NAME2] #
# item1 = value3 #
# item2 = valie4 #
# #
#Sample.py: #
# from mire.std import conf_section_items #
# file_name = '/usr/local/etc/configure.ini' #
# section = 'SECTION NAME' #
# items = conf_sections(file_name=file_name, section=section) #
# print items #
# #
#$ python Sample.py #
# {"item1":"value1", "items2":"value2"} #
#$ #
##########################################################################################
"""
import ConfigParser
conf = ConfigParser.SafeConfigParser()
conf.read(file_name)
try:
items = conf.items(section)
item_dic = {}
if len(items)>0: #要素があったら、それを辞書に
for item in items:
item_dic[item[0]] = item[1]
return item_dic #要素がないなら、{}を返すことになる
except:
if debug>0:
display_err(locals(),title='Error! conf_section_items()')
print conf
else:
print 'Please, Contact Your System Administrator.'
raise


 以下に、現時点でのmire.stdのソースを掲載しておく。続きを読む
posted by Mire at 17:00 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

【Firebird】郵便番号簿DBの作成(2) 共用モジュール mire.fb

 既に一部の関数はいずれかの稿で紹介済みのモジュール群だが、今回の郵便番号簿DBの取組みで、単一SQL文の実行用関数「exec_sql()」や「query()」を新たに追加したので改めて最新版を掲載しておく。

 何分、必要に応じて成行で作成しているので、統一性を確保する為にときどき互換性のない仕様変更も今後行なうこともあるし、何よりまだ生き生きとしており枯れる迄は結構変更が入ると思うので、その辺、勘弁願いたい。

 さて今回の大きな追加は、exec_sql()とquery()関数である。

 共にデータベース作成時同様、文字列はUTF8でデータ格納することを既定としているが、現在のところ不具合は起きていない。また、connectやcursorを関数にに引き継ぐことで、関数実行時のconnectオブジェクトの生成、commitそしてそのcloseによる負荷を無くし、連続処理時のチューニングが可能にした。前稿の郵便番号簿程度でもconnとcurに引継いでいないと数倍以上処理に時間がかかってしまう。

 詳細の説明に代えて、hlpy mire.fb として出したhelp()関数の出力をそして、末尾にソースを掲載しておく。尚、前稿のスクリプトでは、これ以外にmire.stdに登録しているINI系設定ファイルの解析関数「conf_section_items(conf_file, section, debug=debug)」を使っている。これは次稿でmire.stdと共に掲載する。

 雑感ながら、これでDB関係オブジェクトの1.存否確認、2.作成、3.名前抽出に実際のSQL処理が加わったことで一通りのRDBMS処理の流れが完成した訳だ。
 これで後、思いつく拡張としては、テキストインポート等の関数を標準化すること、SQL文とデータ取込みを同じテキストに記入し実行させるスクリプト用の関数でもあると便利かと思っている。この独自拡張スクリプトは以前C++Builderで作成したことがあるので何時かはPythonで復活させようと思う。また、独立アプリにはなるが、管理ツールやクエリーやテーブル編集を容易に行なうことが出来るWebフォームで作れるといいなとは思っている。テーブルの編集フォームは一度作っているので1年後位には出せるかもです。時間があれば。
続きを読む
posted by Mire at 16:13 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年04月15日

【Firebird】DB/TABLE作成用Pythonモジュール2

 当方においては未だ開発用ではあるがFirebird2.5RC2を使っていて特に不具合に見舞われることなく済んでいるので、そろそろ、Firebird2.5の正式リリースがあっても良いころと待っているが、なかなかされない。どうも今回の待ちの原因は品質ではない様で、Firebird10周年イベントと連動してリリースするつもりの様だ。
 日本のユーザ会のMLから追って試ると、本家では、10周年ロゴの投票や知名度アップと2.5の発進支援を目的とする「Mind The Bird!」キャンペーンに忙しい様である。
 本題の前置きが長くなるので、興味のある方は「Firebird 2.5 リリース間近!」等から追って欲しい。ただ、林さんが和訳なさっているプレゼン資料の一部が、当方のPC環境では表示出来なかったので、本家を追って、結局稚拙な和訳分を作ったので、添付して置く。尚、当方は、特にプレゼンするつもりもないし、林さんの様に濃くもないのでこれが更新されることはないが、改変は自由みたいなのでPython廻りを補足させて頂いた。1_Firebird_general_ppt_ja.ppt OpenofficeOrg3.2で作成)

 さて、首記の本論に移るが、今回、当方の標準化モジュール「mire.fb」において、create_db()やcreate_tbl()関数内に、exists_db()やexists_tbl()関数を組込む等の変更を行なったので以下に掲載して置く。
続きを読む
タグ:RDBMS FIREBIRD SQL
posted by Mire at 01:43 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年02月25日

【Firebird】DB/TABLE作成用Pythonモジュール

 業務系のシステムを開発する上で、データベースの活用は避けて通れないものと思う。でも、これは試作段階では、各DB別の管理系ツールで手っ取り早く作り、必要となるデータベース構造を固めて行くことが一般的ではないだろうか。そして、そのシステム供給も、そうやって作ったDBファイルそのものを配布する形とすることも多いとは思う。
 しかし、この場合、システム記述が、データベースファイル上とプログラム言語上に分散してしまい、仕様書きなしには全体が掴み辛くなる他、データベースシステム自体の変更またはその関連モジュールのメジャーバージョンアップやシステム基盤の仕様変更時にネックを感じることになってしまうのではないかと思う。

 そこで、今回は、以前よりこのBlog上のPythonのソースコード内で公開して来たFirebird用の関数等をまとめたモジュールを作成し標準化し、システム配布時以外にもプロジェクトやユーザ別のデータベースの新規作成を臨機応変にPythpnコード上で行なうことが可能な様にして行こうと思う。

 今回まとめたのは次の関数である。
  • exists_db() : データベースの存在を確認する関数
  • exists_tbl(): テーブルの存在を確認する関数
  • exists_seq(): 通し番号に使う指定した名称のSEQUENCEの存在を確認する関数
  • tbl_name() : SQL文からテーブル名を抽出する関数
  • seq_name() : SQL文からSEQUENCE名を抽出する関数
  • create_db() : データベースを作成する関数
  • create_tbl(): 指定SQL文によるテーブル作成を行なう関数
  • exec_sqls() : 複数のSQL文のリストを連続実行する関数


 技術的には余り特殊なものはないが、DB作成自体は、データベースの実装次第で手法が異なるのであくまでFirebirdの仕様に基づいている。
 データベースサーバに登録されている有効なUSER名とパスワードを使い、dsnという、ネットワーク上の位置とファイルシステム上のファイルを「:」コロンでつなげたものを指定して行なう仕組みだ。

 そして、SQL文からテーブル名等の名称を抽出する為には、Pythpnの正規表現のreモジュールで、SQL文のパターン照合で実現した。
 その上で、テーブルやSEQUENCE作成では、その抽出した名称に相当するものが、データベース自身のシステムテーブル(例えば、RDB$RELATION_ID)に登録されているかどうかを確認する仕組みとしている。これは、以前説明した手法である。

 今回は、このSQL文上の名称のテーブルやSEQUENCEが存在しない場合に、それらを作成するSQL文を実行する関数を実行させることを可能とする様にしたのである。このことは、SQL単体実行でなく、複数のSQL文をリストとして渡し実行するexec_sqls()関数のコードで確認頂けるかと思う。

 詳細は、以下に掲載しているソースコードで確認頂いた上で、コピペで、UTF-8で改行符号がLFのみのファイル「fb.py」として、お使いのPythpnインスタンス内の「lib/site-packages/」以下にmireフォルダを作成し、その中に放り込んで頂きたい。
 利用は、「from mire.fb import create_db」の様にimportして行なって頂けれはよい。

 尚、現時点での利用制約として、PythpnでのFirebird利用で必須のkinterbasdbモジュールは、Pythpn3系には対応していない。その為、推奨するPythpnは2.6.4である。ただ、開発アプリによっては、2.3〜2.5迄の対応しか提供されていないモジュールを利用しているかもしれない。その場合には、そちらにkinterbasdbモジュールと共にインストール頂ければ、動作するとは思う。

 また、蛇足ながら、何れgettextを使ったi18n国際化にも対応して試たいとの願望から、普通なら単純にprint文で記載するところを、わざわざ、英語表記とし、その日本語をコメントとして掲載したりしている。今はまだ機能しないので、英語表記にご不満の方は、「u''」内の文字列にして置換えて頂いて構わない。
 さらに、ソースコード内には積極的にコメントを追加しているが、こちらは日本語としている。英語だと、当方の頭が停止するのと、当方のBroken Englishではコード本体以上の情報が伝わらないと思うからだ。その為、少なくともWindows環境への導入では、モジュールのヘルプ参照に便利な「import <モジュール名>; help(<モジュール名>)」のコンソール実行表示で全日本語が文字化けする。これはhelp()がASCII文字限定の仕様となっている為の様なので、素のPythpn2系では取敢えず諦めて頂きたい。文字列が全てUnocode化されたPythpn3系では解決されている。どんなに遅くとも間もなく出るであろう2.7の正式リリース後5年以内にはkinterbasdbやその他の主要モジュールもPythpn3に移行している筈だ。
続きを読む
posted by Mire at 20:37 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年02月14日

【CentOS】Firebird-2.5.0.RC2 をSuperclassic起動に

 前稿の「Firebird-2.5.0.RC2 をInstall」でやったインストールでは、Firebird2.5は単純にClassicサーバとして起動し動作する。Unix系でのClassicサーバとしての起動は、そのxinetdの様なスーパーサーバー経由で、クライアントからのクエリ要求別にfirebirdのプロセスを立上げて動作する。仕組みとしては、グロパールに実績のあるxinetd等のスーパーサーバーの動作に依存するのでクエリー起動動作自体ーの信頼は高く好きなので、このままでの運用でなんら構わないし、過去の経験から旧バージョン下ではその利用をお勧めする。  ただ、今回のFirebird2.5からは、首記の「Superclassic」サーバとしての起動動作が追加されているので、当方の用途環境での必要性は感じないが試してみることにした。  Linux系のOSにFirebird-2.5.0.RC2を前稿の通りインストールすると基本的にClassicサーバ立上げとなっているが、これは/opt/firebird/bin内のシェルスクリプト「changeMultiConnectMode.sh」で切替えることが可能である。必須の入力箇所は太字にした箇所のみ。
     
 
 
[root@l22dm ~]# cd /opt/firebird/bin/
[root@l22dm bin]# ls
changeDBAPassword.sh               changeRunUser.sh  fb_inet_server  fbguard     gbak  gpre    gstat    qli
changeGdsLibraryCompatibleLink.sh  createAliasDB.sh  fb_lock_print   fbsvcmgr    gdef  gsec    isql     restoreRootRunUser.sh
changeMultiConnectMode.sh          fb_config         fb_smp_server   fbtracemgr  gfix  gsplit  nbackup
[root@l22dm bin]# ./changeMultiConnectMode.sh
For classic server there are two ways to support multiple connections:
multiprocess (traditional for FB classic server) and multithread (new for FB 2.5).

multiprocess mode is specially reliable cause error in one process does not affect others.
multithread minimizes OS load and should provide better scalability under high loads.

Which option would you like to choose: multi-(process|thread) [process] thread
Stopping currently running engine...
Starting firebird in multithread mode...
Starting Firebird server [default]                         [  OK  ]

Fixing firebird's shell to /bin/sh

Starting Firebird server [default]                         [  OK  ]
Done.
[root@l22dm bin]#
 只これだけで済んでしまう。当方の環境は、古いPentium4なのでMulti-Core下でのthread処理の衝突といった不具合は2.0系でも起きないので、Superサーバでインストールした場合との不具合比較は出来ないので残念だが、「Superclassic」の場合、見た目はSuperサーバに近い。もし、thread free廻りの障害で、プロセスがロックし応答しなくなる様な自体になれば、多分、手動で再起動するしかなくなるので、その辺りだけは頭に置い置こうと思う。  さて、切替え後は、Superサーバの仕組みに似た体制で、 /opt/firebird/bin/fbguard -pidfile /var/run/firebird/default.pid -daemon -forever で、 /opt/firebird/bin/fb_smp_server のプロセスを監視し、落ちたら再起動させる。万一「fb_smp_server」が落ちずに固まり、クライアントからのクエリ要求に対しthread起動が出来なくなる様なことが起きれば駄目になることは念頭に置いた上での利用となるが、2.5はthread freeの筈なので多分なにも置きないだろうし、当方の過去の経験(2.0当時)でも実運用でしか発生しなかったものなので心配する程のものではない。
     
 
 
[root@l22dm bin]# ps aux | grep fb
koyoshi   2702  0.0  0.1  18632  1456 ?        S    Jan08   4:47 Xvnc :2 -desktop l22dm.mire:2 (koyoshi) -auth /home/koyoshi/.Xauthority -geometry 1280x768 -depth 16 -rfbwait 30000 -rfbauth /home/koyoshi/.vnc/passwd -rfbport 5902 -pn
root      2751  4.9  2.1  40280 21524 ?        S    Jan08 2656:39 Xvnc :3 -desktop l22dm.mire:3 (root) -auth /root/.Xauthority -geometry 1272x720 -depth 16 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5903 -pn
root      3760  0.0  1.9  43480 20008 ?        S    Feb12   0:02 kedit -caption KEdit -icon kedit -miniicon kedit /opt/firebird/intl/fbintl.conf
root      8632  0.0  0.0   4988   756 pts/15   R+   13:57   0:00 grep fb
firebird  9286  0.0  0.0   4284   728 ?        S    02:39   0:00 /opt/firebird/bin/fbguard -pidfile /var/run/firebird/default.pid -daemon -forever
firebird  9287  0.0  0.4  34464  4920 ?        Sl   02:39   0:00 /opt/firebird/bin/fb_smp_server
[root@l22dm bin]# 
 尚、このSuperclassic起動についての情報は、手っ取り早く、「Firebird 徹底入門」より頂いた。この情報以外にも、例えば、具体的なDB設計で必要なindex文字数上限等の制約等もちゃんと日本語でまとめて頂いているし、この稿では省かせて頂いたが、「Super」「Superclassic」「classic」の3つのサーバ動作スタイルについては、そちらで見て頂きたい。入門書というよりリファレンス的利用も可能なのでお勧めして置きます。  是非、本屋さんでご覧になった上で、即購入または以下のAMAZON辺りでクレジット購入して下さい。今後の当方の投稿は、この参照を前提の記述とします。この稿の内容なら、50頁、Winな環境なら42頁、サーバ動作スタイルについては、9〜13頁辺りを拾読みして頂いたら良いだろう。少なくとも当方にとり、2.5を使う限り手元にないと厳しい書籍である。
続きを読む
posted by Mire at 14:55 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2010年02月13日

Firebird-2.5.0.RC2 をInstall

 久しぶりに、Firebird本家を覗いてみると、Firebird-2.5.0.RC2が2/8付で出ていることが判った。で、当然、以前入れて試したRC1をUpdateすることにした。ところが、不思議なことに、「rpm -Uvh 〜」で実行すると肝心のSYSDBA.passwordファイルがなくなってしまった。しかも、3050ポートでの接続自体すら拒否される。bugかも知れないので、取り敢えずここに記録しておく。
 解決策としては、既存のfirebirdをUninstallし、/opt内に生成されているRC1等のアーカイブファイルを移動または削除してから、再度Installすることで、/opt.firebird直下にSYSDBA.passwordが現れる。Firebirdの場合、InstallのときにSYSDBA.passwordで新たな管理Passwordが支給される仕組みであるし、ユーザセキュリティ管理の旧security2.fdbは、/tmpにコピーされる上に、/opt直下にアーカイブとしても残っているので必要ならそちらを使い移行することになる。移行しなくても新たなSYSDBA.passwordで過去のDBにも全てアクセス出来るだろうから、今回のことは大した障害ではない。このことが判っていたらなので、念のため、以下にその作業記録を掲載しておく。

 さて、今回のRC2は、どうも最終のリリース候補のつもりの様なので、恐らく大した障害はないと思うので、当方の様にテストや新規開発用途であれば、充分に使えるものと思われる。よかったら、そろそろ使ってみましょう。

 只、経験上、古いバージョンのDBを移植して運用に使うのは、テスト機で逆のバージョンダウンのテスト済ませてからが無難だ。時事刻々変わるDBの場合、運転を止めて、 gbakでバックアップをとって、旧DB上でリストアして、戻すことになるが、安定していない時期にはその当たりがうまく行かないこともあるからだ。2.0当たりで、Multi-thread障害に見舞われだか戻せず善後対策に苦労しました。まあ、DB記録日時の問題がなければ、新規データ分をテキスト書出しでさせて、旧DBにかぶせるとこも可能だが、更新処理を含めると事案により難しいこともある。

     Firebird2.5RC2にUpdate「rpm -Uvh 〜」を実行したが...


[root@l22dm DownloadFiles]# wget https://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm/download
--2010-02-12 20:01:00-- https://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm/download
sourceforge.net をDNSに問いあわせています... 216.34.181.60
sourceforge.net|216.34.181.60|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm/download [続く]
--2010-02-12 20:01:01-- http://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm/download
sourceforge.net|216.34.181.60|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://downloads.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm?use_mirror=cdnetworks-kr-1 [続く]
--2010-02-12 20:01:01-- http://downloads.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm?use_mirror=cdnetworks-kr-1
downloads.sourceforge.net をDNSに問いあわせています... 216.34.181.59
downloads.sourceforge.net|216.34.181.59|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://cdnetworks-kr-1.dl.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm [続く]
--2010-02-12 20:01:02-- http://cdnetworks-kr-1.dl.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC2/FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
cdnetworks-kr-1.dl.sourceforge.net をDNSに問いあわせています... 211.39.135.162
cdnetworks-kr-1.dl.sourceforge.net|211.39.135.162|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 7400671 (7.1M) [application/x-rpm]
`FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm' に保存中

100%[==============================================================================================================================>] 7,400,671 41.3K/s 時間 3m 4s

2010-02-12 20:04:07 (39.2 KB/s) - `FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm' へ保存完了 [7400671/7400671]

[root@l22dm DownloadFiles]# ls -la Firebird*
-rw-r--r-- 1 root root 7400671 2月 9 01:06 FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm

Firebird:
合計 27704
drwxr-xr-x 2 root root 4096 12月 16 23:12 .
drwxr-xr-x 6 root root 4096 2月 12 20:01 ..
-rw-r--r-- 1 root root 13684905 12月 11 02:36 Firebird-2.5.0.25784-ReleaseCandidate1.tar.bz2
-rw-r--r-- 1 root root 7366121 12月 11 03:38 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
-rw-r--r-- 1 root root 7254655 12月 11 03:39 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.tar.gz
[root@l22dm DownloadFiles]# ls -la Firebir*
-rw-r--r-- 1 root root 7400671 2月 9 01:06 FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm

Firebird:
合計 27704
drwxr-xr-x 2 root root 4096 12月 16 23:12 .
drwxr-xr-x 6 root root 4096 2月 12 20:01 ..
-rw-r--r-- 1 root root 13684905 12月 11 02:36 Firebird-2.5.0.25784-ReleaseCandidate1.tar.bz2
-rw-r--r-- 1 root root 7366121 12月 11 03:38 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
-rw-r--r-- 1 root root 7254655 12月 11 03:39 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.tar.gz
[root@l22dm DownloadFiles]# ls
Firebird MeCab Python-2.6.4.tgz Python-3.1.1.tgz typescript
FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm Python-2.6.4 Python-3.1.1 ZWiki-2.0b1.tgz webmin-1.490-1.noarch.rpm
[root@l22dm DownloadFiles]# ls -la Firebir*
-rw-r--r-- 1 root root 7400671 2月 9 01:06 FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm

Firebird:
合計 27704
drwxr-xr-x 2 root root 4096 12月 16 23:12 .
drwxr-xr-x 6 root root 4096 2月 12 20:01 ..
-rw-r--r-- 1 root root 13684905 12月 11 02:36 Firebird-2.5.0.25784-ReleaseCandidate1.tar.bz2
-rw-r--r-- 1 root root 7366121 12月 11 03:38 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
-rw-r--r-- 1 root root 7254655 12月 11 03:39 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.tar.gz
[root@l22dm DownloadFiles]# ls -la FirebirdCS-2.5.0.259*
-rw-r--r-- 1 root root 7400671 2月 9 01:06 FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
[root@l22dm DownloadFiles]# rpm -uvh FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
-uvh: unknown option
[root@l22dm DownloadFiles]# rpm -Uvh FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
準備中... ########################################### [100%]



--- Warning ----------------------------------------------
The installation target directory /opt/firebird already exists.
This and other related files found will be
archived in the file : /opt/firebird_20100212_2007.tar.gz

tar: メンバ名から先頭の `/' を取り除きます
/opt/firebird/
/opt/firebird/bin/
/opt/firebird/bin/changeGdsLibraryCompatibleLink.sh
/opt/firebird/bin/changeDBAPassword.sh
/opt/firebird/bin/gsplit
/opt/firebird/bin/gstat
/opt/firebird/bin/fbsvcmgr
/opt/firebird/bin/fbguard
/opt/firebird/bin/fbtracemgr
/opt/firebird/bin/fb_inet_server
/opt/firebird/bin/gpre
/opt/firebird/bin/restoreRootRunUser.sh
/opt/firebird/bin/nbackup
/opt/firebird/bin/gfix
/opt/firebird/bin/isql
/opt/firebird/bin/changeRunUser.sh
/opt/firebird/bin/createAliasDB.sh
/opt/firebird/bin/fb_smp_server
/opt/firebird/bin/changeMultiConnectMode.sh
/opt/firebird/bin/qli
/opt/firebird/bin/fb_config
/opt/firebird/bin/gsec
/opt/firebird/bin/gdef
/opt/firebird/bin/gbak
/opt/firebird/bin/fb_lock_print
/opt/firebird/aliases.conf
/opt/firebird/include/
/opt/firebird/include/perf.h
/opt/firebird/include/ibase.h
/opt/firebird/include/ib_util.h
/opt/firebird/include/iberror.h
/opt/firebird/misc/
/opt/firebird/misc/rc.config.firebird
/opt/firebird/misc/firebird.init.d.mandrake
/opt/firebird/misc/upgrade/
/opt/firebird/misc/upgrade/metadata/
/opt/firebird/misc/upgrade/metadata/metadata_charset_drop.sql
/opt/firebird/misc/upgrade/metadata/metadata_charset_create.sql
/opt/firebird/misc/upgrade/metadata/metadata_charset.txt
/opt/firebird/misc/upgrade/security/
/opt/firebird/misc/upgrade/security/security_database.sql
/opt/firebird/misc/upgrade/security/security_database.txt
/opt/firebird/misc/upgrade/ib_udf/
/opt/firebird/misc/upgrade/ib_udf/ib_udf_upgrade.sql
/opt/firebird/misc/upgrade/ib_udf/ib_udf_params.txt
/opt/firebird/misc/upgrade/ib_udf/ib_udf2_params.txt
/opt/firebird/misc/firebird.init.d.gentoo
/opt/firebird/misc/firebird.xinetd
/opt/firebird/misc/intl.sql
/opt/firebird/misc/firebird.init.d.generic
/opt/firebird/misc/firebird.init.d.slackware
/opt/firebird/misc/firebird.init.d.suse
/opt/firebird/misc/firebird.init.d.debian
/opt/firebird/intl/
/opt/firebird/intl/fbintl
/opt/firebird/intl/fbintl.conf
/opt/firebird/plugins/
/opt/firebird/plugins/libfbtrace.so
/opt/firebird/WhatsNew
/opt/firebird/de_DE.msg
/opt/firebird/fb_guard
/opt/firebird/fr_FR.msg
/opt/firebird/security2.fdb
/opt/firebird/README
/opt/firebird/firebird.log
/opt/firebird/UDF/
/opt/firebird/UDF/ib_udf.sql
/opt/firebird/UDF/ib_udf2.sql
/opt/firebird/UDF/ib_udf.so
/opt/firebird/UDF/fbudf.sql
/opt/firebird/UDF/fbudf.so
/opt/firebird/firebird.msg
/opt/firebird/help/
/opt/firebird/help/help.fdb
/opt/firebird/examples/
/opt/firebird/examples/include/
/opt/firebird/examples/include/align.h
/opt/firebird/examples/include/example.h
/opt/firebird/examples/dyn/
/opt/firebird/examples/dyn/dyn1.e
/opt/firebird/examples/dyn/dynfull.e
/opt/firebird/examples/dyn/dyn3.e
/opt/firebird/examples/dyn/dyn5.e
/opt/firebird/examples/dyn/dyn4.e
/opt/firebird/examples/dyn/dyn2.e
/opt/firebird/examples/empbuild/
/opt/firebird/examples/empbuild/employee.fdb
/opt/firebird/examples/README
/opt/firebird/examples/udf/
/opt/firebird/examples/udf/udf.sql
/opt/firebird/examples/udf/udflib.c
/opt/firebird/examples/udf/udflib.def
/opt/firebird/examples/functions.c
/opt/firebird/examples/api/
/opt/firebird/examples/api/winevent.def
/opt/firebird/examples/api/api3.c
/opt/firebird/examples/api/api11.c
/opt/firebird/examples/api/api16t.c
/opt/firebird/examples/api/api12.c
/opt/firebird/examples/api/api14.e
/opt/firebird/examples/api/api4.c
/opt/firebird/examples/api/api1.c
/opt/firebird/examples/api/api5.c
/opt/firebird/examples/api/apifull.c
/opt/firebird/examples/api/api2.c
/opt/firebird/examples/api/api10.c
/opt/firebird/examples/api/api9f.sql
/opt/firebird/examples/api/winevent.rc
/opt/firebird/examples/api/api9f.c
/opt/firebird/examples/api/winevent.c
/opt/firebird/examples/api/api8.c
/opt/firebird/examples/api/api6.c
/opt/firebird/examples/api/api13.c
/opt/firebird/examples/api/api7.c
/opt/firebird/examples/api/example.def
/opt/firebird/examples/api/api15.c
/opt/firebird/examples/api/api9f.def
/opt/firebird/examples/api/api9.c
/opt/firebird/examples/api/api16.c
/opt/firebird/examples/stat/
/opt/firebird/examples/stat/stat10.e
/opt/firebird/examples/stat/stat5.e
/opt/firebird/examples/stat/stat2.e
/opt/firebird/examples/stat/stat7.e
/opt/firebird/examples/stat/stat4.e
/opt/firebird/examples/stat/stat1.e
/opt/firebird/examples/stat/stat11.e
/opt/firebird/examples/stat/stat12t.e
/opt/firebird/examples/stat/stat8.e
/opt/firebird/examples/stat/stat6.e
/opt/firebird/examples/stat/stat9.e
/opt/firebird/examples/stat/stat12.e
/opt/firebird/examples/stat/stat3.e
/opt/firebird/lib/
/opt/firebird/lib/libfbembed.so
/opt/firebird/lib/libfbclient.so
/opt/firebird/lib/libicudata.so.30.0
/opt/firebird/lib/libicuuc.so
/opt/firebird/lib/libfbclient.so.2
/opt/firebird/lib/libicudata.so.30
/opt/firebird/lib/libicuuc.so.30
/opt/firebird/lib/libfbembed.so.2.5
/opt/firebird/lib/libicui18n.so.30.0
/opt/firebird/lib/libicuuc.so.30.0
/opt/firebird/lib/libicudata.so
/opt/firebird/lib/libib_util.so
/opt/firebird/lib/libfbclient.so.2.5.0
/opt/firebird/lib/libicui18n.so
/opt/firebird/lib/libicui18n.so.30
/opt/firebird/lib/libfbembed.so.2.5.0
/opt/firebird/firebird.conf
/opt/firebird/SYSDBA.password
/opt/firebird/doc/
/opt/firebird/doc/README.coding.style
/opt/firebird/doc/README.build.mingw.html
/opt/firebird/doc/README.intl
/opt/firebird/doc/README.fbsvcmgr
/opt/firebird/doc/README.incompatibilities.txt
/opt/firebird/doc/README.user.embedded
/opt/firebird/doc/README.garbage_collector
/opt/firebird/doc/README.makefiles
/opt/firebird/doc/README.performance_monitoring
/opt/firebird/doc/README.fb_cancel_operation
/opt/firebird/doc/README.read_password_from_file
/opt/firebird/doc/README.connection_string_charset.txt
/opt/firebird/doc/README.superclassic
/opt/firebird/doc/README.NTSecurity
/opt/firebird/doc/README.fb_shutdown
/opt/firebird/doc/README.monitoring_tables
/opt/firebird/doc/Firebird-2-QuickStart.pdf
/opt/firebird/doc/README.services_extension
/opt/firebird/doc/README.build.posix.html
/opt/firebird/doc/README.trusted_authentication
/opt/firebird/doc/README.Win9X_NT_embedding
/opt/firebird/doc/README.user
/opt/firebird/doc/README.sha1
/opt/firebird/doc/README.xnet
/opt/firebird/doc/ReleaseNotes.pdf
/opt/firebird/doc/README.trace_services
/opt/firebird/doc/README.Win32LibraryInstallation.txt
/opt/firebird/doc/README.raw_devices
/opt/firebird/doc/README.user.troubleshooting
/opt/firebird/doc/README.DiskSpaceAllocation
/opt/firebird/doc/README.Optimizer.txt
/opt/firebird/doc/README.build.msvc.html
/opt/firebird/doc/sql.extensions/
/opt/firebird/doc/sql.extensions/README.PSQL_stack_trace.txt
/opt/firebird/doc/sql.extensions/README.hex_literals.txt
/opt/firebird/doc/sql.extensions/README.trim
/opt/firebird/doc/sql.extensions/README.savepoints
/opt/firebird/doc/sql.extensions/README.merge.txt
/opt/firebird/doc/sql.extensions/README.nullif
/opt/firebird/doc/sql.extensions/README.cursors
/opt/firebird/doc/sql.extensions/README.execute_statement
/opt/firebird/doc/sql.extensions/README.default_parameters
/opt/firebird/doc/sql.extensions/README.global_temporary_tables
/opt/firebird/doc/sql.extensions/README.keywords
/opt/firebird/doc/sql.extensions/README.db_triggers.txt
/opt/firebird/doc/sql.extensions/README.returning
/opt/firebird/doc/sql.extensions/README.context_variables2
/opt/firebird/doc/sql.extensions/README.similar_to.txt
/opt/firebird/doc/sql.extensions/README.iif
/opt/firebird/doc/sql.extensions/README.ddl.txt
/opt/firebird/doc/sql.extensions/README.aggregate_tracking
/opt/firebird/doc/sql.extensions/README.universal_triggers
/opt/firebird/doc/sql.extensions/README.exception_handling
/opt/firebird/doc/sql.extensions/README.execute_statement2
/opt/firebird/doc/sql.extensions/README.execute_block
/opt/firebird/doc/sql.extensions/README.sequence_generators
/opt/firebird/doc/sql.extensions/README.common_table_expressions
/opt/firebird/doc/sql.extensions/README.data_type_results_of_aggregations.txt
/opt/firebird/doc/sql.extensions/README.coalesce
/opt/firebird/doc/sql.extensions/README.rows
/opt/firebird/doc/sql.extensions/README.builtin_functions.txt
/opt/firebird/doc/sql.extensions/README.context_variables
/opt/firebird/doc/sql.extensions/README.derived_tables.txt
/opt/firebird/doc/sql.extensions/README.case
/opt/firebird/doc/sql.extensions/README.domains_psql.txt
/opt/firebird/doc/sql.extensions/README.distinct
/opt/firebird/doc/sql.extensions/README.view_updates
/opt/firebird/doc/sql.extensions/README.explicit_locks
/opt/firebird/doc/sql.extensions/README.plan
/opt/firebird/doc/sql.extensions/README.leave_labels
/opt/firebird/doc/sql.extensions/README.autonomous_transactions.txt
/opt/firebird/doc/sql.extensions/README.data_types
/opt/firebird/doc/sql.extensions/README.joins.txt
/opt/firebird/doc/sql.extensions/README.select_expressions
/opt/firebird/doc/sql.extensions/README.column_type_psql.txt
/opt/firebird/doc/sql.extensions/README.update_or_insert
/opt/firebird/doc/sql.extensions/README.user_management
/opt/firebird/doc/sql.extensions/README.expression_indices
/opt/firebird/doc/sql.extensions/README.order_by_expressions_nulls
/opt/firebird/doc/sql.extensions/README.current_time
/opt/firebird/doc/sql.extensions/README.list
/opt/firebird/doc/sql.extensions/README.set_transaction.txt
/opt/firebird/doc/sql.extensions/README.isc_info_xxx
/opt/firebird/doc/sql.extensions/README.null_value
/opt/firebird/doc/sql.extensions/README.length
/opt/firebird/doc/README.UserSql
/opt/firebird/doc/README.isql_enhancements.txt
/opt/firebird/doc/README.instsvc
usr/include/ibase.h
usr/include/ib_util.h
usr/lib/libib_util.so
usr/lib/libfbclient.so
usr/lib/libfbclient.so.2
usr/lib/libfbclient.so.2.5.0
1:FirebirdCS ########################################### [100%]
Saved a copy of SecurityDatabase (security2.fdb) in /tmp
[root@l22dm DownloadFiles]# cat /opt/firebird/SYSDBA
cat: /opt/firebird/SYSDBA: そのようなファイルやディレクトリはありません
[root@l22dm DownloadFiles]# /opt/firebird/bin/changeDBAPassword.sh
This script is deprecated and should be removed in newer FB versions.
Please use gsec utility directly to change SYSDBA password.
Please enter current password for SYSDBA user: ^[[A[root@l22dm DownloadFiles]#
[root@l22dm DownloadFiles]# cat /opt/firebird/SYSDBA.password
cat: /opt/firebird/SYSDBA.password: そのようなファイルやディレクトリはありません
[root@l22dm DownloadFiles]# ls -la /opt/firebird
合計 1372
drwxr-xr-x 12 root root 4096 2月 12 20:08 .
drwxr-xr-x 3 root root 4096 2月 12 20:08 ..
-rw-r--r-- 1 root root 687 2月 3 19:27 README
drwxr-xr-x 2 root root 4096 2月 12 20:08 UDF
-rw-r--r-- 1 root root 88240 2月 3 19:27 WhatsNew
-rw-r--r-- 1 root root 263 2月 3 19:27 aliases.conf
drwxr-xr-x 2 root root 4096 2月 12 20:08 bin
-r--r--r-- 1 root root 159348 2月 3 19:27 de_DE.msg
drwxr-xr-x 3 root root 4096 2月 12 20:08 doc
dr-xr-xr-x 8 root root 4096 2月 12 20:08 examples
-rw-r--r-- 1 root root 4914 2月 3 19:27 fbtrace.conf
-rw-r--r-- 1 root root 26648 2月 3 19:27 firebird.conf
-r--r--r-- 1 root root 148556 2月 3 19:27 firebird.msg
-r--r--r-- 1 root root 159920 2月 3 19:27 fr_FR.msg
drwxr-xr-x 2 root root 4096 2月 12 20:08 help
drwxr-xr-x 2 root root 4096 2月 12 20:08 include
drwxr-xr-x 2 root root 4096 2月 12 20:08 intl
drwxr-xr-x 2 root root 4096 2月 12 20:08 lib
drwx------ 3 root root 4096 2月 12 20:08 misc
drwxr-xr-x 2 root root 4096 2月 12 20:08 plugins
-rw-rw---- 1 firebird firebird 720896 2月 12 20:08 security2.fdb
[root@l22dm DownloadFiles]#

     旧security2.fdbに置き換えてからなら「changeDBAPassword.sh」は実行出来るが、3050通信接続不可は直らなかった。


[root@l22dm bin]# ./changeDBAPassword.sh
This script is deprecated and should be removed in newer FB versions.
Please use gsec utility directly to change SYSDBA password.
Please enter current password for SYSDBA user: CwaKQIWt
Please enter new password for SYSDBA user: NaishoDeSu!
[root@l22dm bin]#


     アーカイブを削除しないと以下の様にInstall出来ないぞ。


[root@l22dm bin]# cd ~
[root@l22dm ~]# cd DownloadFiles/
[root@l22dm DownloadFiles]# rpm -ivh FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
準備中... ########################################### [100%]



--- Warning ----------------------------------------------
The installation target directory /opt/firebird already exists.
This and other related files found will be
archived in the file : /opt/firebird_20100213_0106.tar.gz

tar: メンバ名から先頭の `/' を取り除きます
/opt/firebird/
1:FirebirdCS ########################################### [100%]
[root@l22dm DownloadFiles]# rpm -ivh FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686.rpm
準備中... ########################################### [100%]
パッケージ FirebirdCS-2.5.0.25920-ReleaseCandidate2.i686 は既にインストールされています。
続きを読む
posted by Mire at 02:53 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2009年12月17日

SQL RDBMS FIREBIRDを2.5で始めよう +接続障害切分け

 ちょいと、ぼぉ〜〜としていた。Firebird2.5RC1 が、12/11にリリースされていることに先程気付いた。で、早速Linux側にインストールをして試た。インストールは結構久しぶりなので、ネット設定等の手順も含めここにメモっておくことにする。

 Firebird2.5では、恐らく最近のサーバ系アプリ共通の悩みかと思うが、Thread Free に対応している点が一番大きな変更点だ。世はMulti Core CPU全盛の時代に入り、OS自体もその対応が必須となり、当方も2年程前のFirebird2SSでその洗礼を受けた。その時は、試行錯誤の上、SuperServerでなく、ClassicServerに変更し、threadが衝突しプロセスが死んでも、次のプロセスが起こせる様にし、後は、Webアプリ側で小手先の例外対策で逃げた。今回の2.5は多分その対処がなくても大丈夫である可能性が高い。
 元々、当方がFirebirdを利用している理由は、サーバとしての安定、壊れない強固なDBで日常保守が楽な上、異機種間のDB移植が容易、(普通なら)Virsion間の上方移植はバックアップとりストア作業程度で済む、そしておまけにチューニングなしでCPUリソースを占有しないという、管理手間の要らないお手軽な本格DBサーバであるからだ。だから、これはとても大きなことでなのである。機能拡張も結構しているようだが、当方にとってはどうでもいい程度だ(笑)。

 最初に断って置くが今回リリースの2.5RC1と言うのは、正式リリース候補の第1版であり、決して安定版としてのテスト段階のリリースだということだ。β版同様にテスト用の利用は大いに歓迎するが、実際の業務利用は推奨されていない。まあもこの辺は有償ソフトを使っても事故は自己責任扱いなので、どうでも良いと言うつわものは、どしどし使って試て本家にレポートして頂ければ世の為人の為になるので宜しくお願いしたい。無論、危険負担に見合うだけのbackup体制は必須であるし、不特定多数に対するリアルタイム等、障害による影響の波及が読めないものや直接人の命にかかわるシステム等への適用は絶対にすべきではないとは思う。まあ、少ししつこかったとは思うが、正式リリースでないものを使う時の心得を踏まえた上で一言言わせてもらうが、Firebirdのリリース体制は非常に堅いものがあるのでRC1といっても、そんなに気にならないというのが当方の印象でもある。特殊なことにトライしない限りβ版でも動くと言えば動くので、その辺は安心してインストールした次第だ。Firebird2.5の予定では最低もう一回のRCが出た後で問題なければ、それが正式リリース版となる。


 Firebirdのインストールは、「1.本家より各種バイナリ版をダウンロード」し、「2.それを実行」して頂くことが簡単だ。その後、インストール先のフォルダ内のファイルから、自動発行されている管理者パスワードを使っての「3.接続テスト」や外部端末からのアクセスの為に「4.Firewallの穴あけ(port3050)」を行なうと言う手順になる。

1. バイナリ版ダウンロード & インストール


 Firebirdは、Windows,Linux,MacOS-X,その他Unix系列OS別にバイナリ版が供給されているので、それを落として来る。当方は、古めのPrntium4の32bit版のLinuxで且つ、CentOS5.4というRPM系Linuxなので、RPMをDLした。実際の手順は次の通り。これだけでDBサーバの起動設定や起動自体迄済んでしまう。尚、ダウンロード方法につていは手順管理上wgetを使っているが、普通にブラウザからとしたり、インストールも手慣れたGUIツールでやって頂いて構わない。尚、この手順ではClassicタイプがインストールされるので、xinetd上に導入されることになる。
  Firebird2.5RC1 Download & Install 


[root@l22dm ~]# cd DownloadFiles/
[root@l22dm DownloadFiles]# mkdir Firebird
[root@l22dm DownloadFiles]# cd Firebird/
[root@l22dm Firebird]# wget https://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm/download
--2009-12-16 23:11:55-- https://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm/download

sourceforge.net ?DNS??????????... 216.34.181.60
sourceforge.net|216.34.181.60|:443 ????????... ???????
HTTP ????????????????????????... 302 Found
??: http://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm/download [??]
--2009-12-16 23:11:57-- http://sourceforge.net/projects/firebird/files/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm/download
sourceforge.net|216.34.181.60|:80 ????????... ???????
HTTP ????????????????????????... 302 Found
??: http://downloads.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm?use_mirror=jaist [??]
--2009-12-16 23:11:57-- http://downloads.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm?use_mirror=jaist
downloads.sourceforge.net ?DNS??????????... 216.34.181.59
downloads.sourceforge.net|216.34.181.59|:80 ????????... ???????
HTTP ????????????????????????... 302 Found
??: http://jaist.dl.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm [??]
--2009-12-16 23:11:58-- http://jaist.dl.sourceforge.net/project/firebird/firebird-linux-i386/2.5-RC1/FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
jaist.dl.sourceforge.net ?DNS??????????... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 ????????... ???????
HTTP ????????????????????????... 200 OK
??: 7366121 (7.0M) [application/x-redhat-package-manager]
`FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm' ????

100%[=================================================>] 7,366,121 581K/s ?? 13s

2009-12-16 23:12:11 (572 KB/s) - `FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm' ????? [7366121/7366121]

[root@l22dm Firebird]# ls -la
?? 27704
drwxr-xr-x 2 root root 4096 12? 16 23:12 .
drwxr-xr-x 5 root root 4096 12? 16 23:07 ..
-rw-r--r-- 1 root root 13684905 12? 11 02:36 Firebird-2.5.0.25784-ReleaseCandidate1.tar.bz2
-rw-r--r-- 1 root root 7366121 12? 11 03:38 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
-rw-r--r-- 1 root root 7254655 12? 11 03:39 FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.tar.gz

[root@l22dm Firebird]# rpm -ivh FirebirdCS-2.5.0.25784-ReleaseCandidate1.i686.rpm
???... ########################################### [100%]
1:FirebirdCS ########################################### [100%]
Updated /etc/services
[root@l22dm Firebird]#


2. Firebirdサーバへのローカル接続テスト

 サーバ接続には当然なことながら、そのアカウントIDとパスワードが必要だが、Linux系でのInstallでは、自動で初期パスワードを生成し/opt/firebird/SYSDBA.password に書出してくれているので、それをcatコマンド等で覗いて頂ければよい。必要なら/opt/firebird/bin以下にパスワード変更用のツールもあるので、必要ならそれで変更して頂ける。また、以下の通り、root(スーパーユーザ)での作業であれば、パスワードなしでもisqlで接続出来る。ここでは、サンプルDBファイルのテーブル情報を表示させDBサーバが機能していることのみを確認した次第だ。必要なら、select * from EMPLOYEE;等のクエリ等SQLをお好きなだけ実行して試て頂けるが、isqlの終了はexit;となる。
  Geting Initial Password & Local Connecting Test


[root@l22dm Firebird]# cat /opt/firebird/SYSDBA.password
# Firebird generated password for user SYSDBA is:

ISC_USER=sysdba
ISC_PASSWD=CwaKQIWt

# generated on l22dm.mire at time 2009,年 12月 16日 水曜日 23:14:39 JST

# Your password can be changed to a more suitable one using the
# /opt/firebird/bin/gsec utility.
[root@l22dm Firebird]# /opt/firebird/bin/
changeDBAPassword.sh gbak
changeGdsLibraryCompatibleLink.sh gdef
changeMultiConnectMode.sh gfix
changeRunUser.sh gpre
createAliasDB.sh gsec
fb_config gsplit
fb_inet_server gstat
fb_lock_print isql
fb_smp_server nbackup
fbguard qli
fbsvcmgr restoreRootRunUser.sh
fbtracemgr
[root@l22dm Firebird]# /opt/firebird/bin/isql /opt/firebird/examples/empbuild/employee.fdb
Database: /opt/firebird/examples/empbuild/employee.fdb
SQL> show table;
COUNTRY CUSTOMER
DEPARTMENT EMPLOYEE
EMPLOYEE_PROJECT JOB
PROJECT PROJ_DEPT_BUDGET
SALARY_HISTORY SALES

SQL> exit;
[root@l22dm Firebird]#


3. Fire Wallの穴開け

 Firebirdの通信接続は既定で3050を使っているので、今頃のLinuxやWindows等のOS自体やセキュリティ対策ツール上でそれを解放する必要がある。当方のはCentOS5.4なので、GUI内のスタートメニューから「セキュリティレベルとファイヤーウォールの設定」を使い、その下方右側にある追加ボタンをクリックし、ポートを3050、プロトコルをTCPとしてOK、適用ボタンのクリックで済んでしまう。尚、DBの場合WAN越え利用はセキュリティ上しないと思うがお好みならルータ設定が必要な人もいるかもしれないな。いないとは思うけど、世の中広いから一応書いておく。

4. 接続テスト

 最近のFirbirdのMLで、久しぶりに接続しようとしたら繋げなくなったと慌てる人もいる。というか結構自分もあるので、接続テスト手順の標準化は、サーバ構築時に済ませて置くことを置くことをお勧めする。当方の場合は、手持ちのPython関数を使い例外情報を見ながら行なうことが多いが、一般に判易いGUIものとして「IBOConsole」の利用をお勧めする。これなら、データベース接続の前座テストとして、ローカル、ポート経由での接続テスト画面を分けているし、設定で日本語表示も可能だ。
 例えば、サーバ側のポートを閉じた状態で、手元PCからTCP/IP通信経由で接続を試みると次のメッセージが出るが、

L22DM gds_db





L22DM サーバーへ接続中
接続用ソケットを取得しました。

ホスト(L22DM)への接続に失敗しました
ポート gds_db 上でのエラー:Socket Error # 10060
Connection timed out..

TCP/IP 接続テスト 失敗

サーバ側でportを前述の通り解放してからテストすると、DBサーバとの通信が可能になったことを教えてくれる。

L22DM gds_db





L22DM サーバーへ接続中
接続用ソケットを取得しました。

ホスト(L22DM)への接続が確立しました
ポート gds_db 上

TCP/IP 接続テスト 成功


 サーバインストールに成功して、ローカル動作が確認出来ても通信が確率出来ない限り遠隔利用は出来ない。このIBOConsoleの通信診断では、上記のfirebird接続を直接試すだけでなく、ping, ftp についても右上のリストで選択してテスト出来るので、コマンド実行が苦手な方にも通信の切り分けには取付きがいいだろう。

 切り分けのポイントとしては、概ね次の通り、
  1. DBサーバのIPアドレスを確認する。結構このIPアドレスでは引っかかる。DBサーバなので固定IPで設定運用していることが普通だがDHCPでIP取得させていたりで、途中で変わって慌てることがあるし、LAN自体が物理的につながっていないとか、有線LAN経由のつもりが無線LAN経由となりIPアドレスが変わっている、LANが途絶している等、原因は色々だ。
    • Windowsなら「ipconfig」をコマンドプロンプトで実行
    • Linux等Unix系なら「ifconfig」コンソールで実行
  2. DBサーバに対し調べたIPに対しping等でIP通信自体が確率出来ているかどうかを確認する。出来ないときには手元端末のIP確認もして試よう。尚、サーバ管理者のポリシー次第ではping応答を閉じていることがあるので、その時には、サーバ管理者にも相談しよう。
  3. IP通信が確率出来ていたら、次は所用ポート3050の通信が<出来るかどうかだ。これは前述のIBOConsoleでの方法で、それのみのテストで切り分けが出来る。ポート解放はOSやFire wallツールで行なうことになる。Fire wallによっては、ポート全体でなく対称IPやサブネットを設定可能なものもあるので、IPが途中で変わっている時にはそこ辺りもチェックをしよう。
  4. 以上がクリア出来れば後は、DBサーバへの接続認証のテストとなる。これもIBOConsole本体で(未登録ならサーバ登録後に)、SYSDBAでサーバ・ログインして試ると良いだろう。パスワードは上記の通りインストール時に(当然UPDATE時も)初期値が決まるし、自分で変更した場合にはそれが必要だ。
  5. ここ迄来れば後は1つ。DBサーバが指定のDB(ファイル)へアクセス出来ているかどうかだ。DBの指定には、直接ファイルシステム上のPATHでする場合もあるが、別名化する場合もある。それぞれ、DBファイルの実体が指定PATHに存在するかどうかとアクセス権があるのかをチェックして頂くことで、DBファイルがまともならば、接続出来る様になる。
  6. 最後の最後だが、DBファイル自体が壊れていたり、バージョンが異なるDBファイルを使っていたりすると正常に利用出来ないことがある。切り分けとしては、新規DBを作成しそれと接続可能かを見ればDBファイルの問題かそれ以外かが判る筈だ。他方古くから使っているDBファイルならば、そのバージョンのFirebird上のgbakでbackupファイルを作り、現行のFirebird上でりストアして接続すればほとんどの場合大丈夫かと思う。
続きを読む
posted by Mire at 09:56 | Comment(0) | TrackBack(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2009年09月05日

SQL RDBMS FIREBIRDとデート 下駄履き編

 先日は、日頃無口なFIREBIRD君のメッセージを紹介した。その時はこれで、これから始める人も楽にトラブルシューティングが出来ると考えていたが、よくよく考えてみると、一人歩きが出来るひよこからの説明になっていたことに気付いた。前回のメッセージに出会うには先ずは次の2つをしてからになる。

1. データベースが作成出来る
2. それに接続しテーブルを作成出来る

 一般的に、これらは付属のISQLか、IBOconsoleFrameRobinというFIREBIRDの定番管理ツールで行なっている場合が多いことだろう。FIREBIRDとのツーショットに臨もうという人に、「その前にFrameRobinに会って話しを通してね」と言う様なもの。それを言っちゃあ、一気に興冷め、このDB出会い系サイト(笑)の価値はなくなる。それで、今回は、卵から孵ったばかりのひよこに蛇柄(Python)の鼻緒のついた下駄をお履き頂こうと思う。

 さあ、先ずは右足分のデータベース作成だ。Python経由でも、前々から出来ることは判っていたが、改めて見て試ると以下の様に簡単なものだ。
from kinterbasdb import create_database
sql ="CREATE DATABASE 'D:\\MY_DB.FDB' USER 'SYSDBA' PASSWORD 'masterkey'"
conn=create_database(sql)
conn.close()
つまり、create_database()で「CREATE DATABASE ...」というSQL文を実行するだけなのだ。

 左足のテーブル作成は、そのサラピンのデータベースに接続し「CREATE TABLE ...」というSQL文の実行。それだけだ。
from kinterbasdb import create_database
sql ="""
CREATE TABLE MY_TABLE
(
FIELD_A VARCHAR(1) DEFAULT '' NOT NULL,
FIELD_B VARCHAR(4) DEFAULT '' NOT NULL,
FIELD_C VARCHAR(20) DEFAULT '' NOT NULL,
PRIMARY KEY(FIELD_A,FIELD_B)
);
"""
conn=connect(sql)
conn.commit()
conn.close()

 さて、これを整理した関数を次に書いておくので、下駄として活用頂き、一歩でも歩いて頂ければFIREBIRD使いの一人としてとても有難い。
SQL文ほ書くことに慣れている方ならば、sqlにそれを代入して、判らない方は、必要な個別要素項目を変数に代入しても使える。事前準備としては、@Python2.6とFIREBIRDの接続モジュールであるA「kinterbasdb」のインストールのみだ。


#!c:/Python26/python.exe
# -*- coding: Shift_JIS -*-
# ※ Windows の場合1行目はdummyです。

# 【create_db()の設定値】
# dsn : 「FIREBIRDサーバのIPまたは名前解決が可能なサーバ名」と
# 「フルパス付きのデータベースファイル名」を「:」でつないだもの
# user : 「FIREBIRDサーバに登録されたユーザID」
# password : 「userのバスワード」
# sql : default charset等も含めて細かく設定したデータベースを
# 作成したいときに、そのSQL文を指定します。
# sqlがあると、そちらの設定が他に優先され他は無視されます。

# 【create_tbl()の設定値】
# dsn : 「FIREBIRDサーバのIPまたは名前解決が可能なサーバ名」と
# 「フルパス付きのデータベースファイル名」を「:」でつないだもの
# user : 「FIREBIRDサーバに登録されたユーザID」
# password : 「userのバスワード」
# fields : 列定義のリストのリストです。['列名','型',既定値,NULLの可否(0|1)]を
# 列の数分をまとめたリストで指定
# table : テーブル名の文字列
# primary_key : プライマリキーとする列名のリストです。['列名1','列名2'...]の形のリストです。
# sql : default charset等も含めて細かく設定したTABLEを作成したいときに、
# そのSQL文を指定します。
# sqlがあると、そちらの設定が他に優先され他は無視されます。

#
# 出来たての為、まだテストが充分ではありません。何か不具合がありましたら、
# http://pythonlife.seesaa.net/ にレスをお願いします。
# 修正版が出来た場合には、ここの分をそのまま置換えます。
#

def exists_db(dsn='', user='SYSDBA', password='masterkey'):
"""
#### 接続して試て、DBの存在を確認 ####
存在したら 1を返し、でなければ、0を返す
"""
from kinterbasdb import connect
try:
conn=connect(dsn=dsn,user=user,password=password)
conn.close()
print 'EXISTS_DB'
return 1
except:
print 'NOT EXISTS_DB'
return 0


def create_db(dsn='', user='SYSDBA', password='masterkey', sql=''):
"""
CREATE DATABASE FUNCTION by MIRE ( http://pythonlife.seesaa.net/ ) 2009-09-05
最低必要な要素は「データベースファイル名」「USER」「PASSWORD」の3つ。
これらをSQL文で与える場合はその中のものが、そうでない場合には
「データベースファイル名」「USER」「PASSWORD」の
3つの引数を基にデータベースが作成される。
"""
from kinterbasdb import create_database

try:
if exists_db(dsn=dsn,user=user,password=password)==1:
print "既に'%s'が存在、DATABASE作成を中止しました。" % (dsn)
return 0
else:
if sql=='': #sqlが無いなら、次の行で作成
sql ="CREATE DATABASE '%s' USER '%s' PASSWORD '%s'" % (db_file,user,password)
else: #sqlが有るなら
s_s =sql.upper().find('DATABASE')
s_e =sql.upper().find('USER')
if s_s >0 and s_e >0: #既にファイルが存在するならば、0を返す
st=sql[s_s:s_e].strip()
if s[0]=="'" and s[-1]=="'":
db_file=s[1:-1]
if exists(db_file):
print "既に、'%s'が存在、DATABASE作成を中止しました。" % (db_file)
return 0 #既にファイルが存在するならば、0を返す

conn=create_database(sql) #データベースを作成します。
conn.close()

return 1 #作成に成功したら 1を返す。
except:
return -1 #例外エラーが発生した場合は、-1を返す。SQL文不適正



def create_tbl(fields=[], table='', primary_key=[], sql='', dsn='', user='', password=''):
"""
CREATE TABLE FUNCTION by MIRE ( http://pythonlife.seesaa.net/ ) 2009-09-05
最低限指定が必要な要素は列情報リスト、テーブル名、それにDB接続情報である。
これらをSQL文で与える場合はその中のものが、そうでない場合には
列情報リスト、テーブル名、プライマリキーリストから
TABLE 作成用のSQL文を作成実行する。
"""
from kinterbasdb import connect
from types import StringType,UnicodeType
if sql=='': #### sql文がなければ、列情報リスト、テーブル名、プライマリキーリストから生成 ####
if fields==[] or table=='': # 情報不足なら、何もせずに、0を返し戻る。
print 'sql文を指定するか、テーブル名と列定義のリストを指定して再度実行して下さい。'
return 0
else:
flds=[]
for f in fields:
t='%s %s' % tuple(f[:2])
if f[2] is None:
d=''
elif type(f[2]) is StringType or type(f[2]) is UnicodeType:
d="DEFAULT '%s'" % (f[2])
else:
d='DEFAULT %s'
if f[3]==1:
n='NOT NULL'
else:
n=''
flds.append('\t%s %s %s' % (t,d,n))
fs=',\n'.join(flds)
body='CREATE TABLE %s\n(\n%s' % (table,fs)
if not primary_key==[]:

sql=',\n\t'.join([body,'PRIMARY KEY(%s)' % (', '.join(primary_key))])
sql=sql+'\n);'
else:
table=sql.upper().split('TABLE')[1].strip().split('(').strip()
print table
print sql
conn=connect(dsn=dsn,user=user,password=password)
cur=conn.cursor()

#### システムテーブル「RDB$RELATIONS」に接続し作成予定のテーブル名が既存テーブルとダブってないか調査 ####
sql_exists="""SELECT RDB$RELATION_ID
FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME='%s';""" % (table)
cur.execute(sql_exists)
if len(cur.fetchall())==0: # 存在しなかったら
cur.execute(sql) # CREATE TABLE を実行し
conn.commit() # commitで確定する

else:
print "'%s'は既存の同名のTABLEがあるので作成しません。" % (table)

conn.close() # 接続を閉じる。



create_db(dsn='192.168.0.25:C:\\DUMMY3.FDB', user='SYSDBA', password='masterkey', sql='')
create_tbl(fields=[['A','VARCHAR(10)','',1],['B','VARCHAR(30)','',1]], table='TEST2'
, primary_key=['A'], sql='', dsn='192.168.0.25:C:\\DUMMY3.FDB', user='SYSDBA', password='masterkey')
続きを読む
タグ:FIREBIRD Python
posted by Mire at 06:42 | Comment(0) | FireBird SQL | このブログの読者になる | 更新情報をチェックする

2009年09月04日

SQL RDBMS FIREBIRD会話 初級編 (笑)

 オープンソース系DB御三家の一つの FIREBIRD は、日本では影が薄い様だ。最近のMLに国内書籍販売が殆ど無くなっていることが話題になっていた。先日、地元最大の全国展開の書店に行ってみたら確かに! 当方の持っているFIREBIRD本が一つも見当たらない。辛うじて、林務さんがUDFとSQLについて書いている本が小さく2冊立っているだけ、全滅でなかっただけって感じで確かに寂しい。
 DBとしての安定度、保守性の良さ、そして本格的にサーバサイドプログラミングが出来る等、MySQLやPostgreと比較して優位性を感じることは多い。世界的にはこんなもんじゃない様だし、本家の活動も活発に見えるので、今後もDBサーバとして活用して問題はない様に思う。  それで、わしが書籍を書いて出そうと言いたいが、そこ迄の知識や能力もないので、FIREBIRDとの会話について、ここに書いて試ることにする。尚、今回紹介するものはFirebird2.1系のものだ。殆どが英語表記である点は、いずれ国際化対応で解決されることだ。

 尚、当方の活用の幅がPython経由なので、他の開発環境の方はそれぞれ置き換えて見て欲しい。

 まあ、当り前だが、FIREBIRDとの会話と言っても決してFIREBIRDが積極的に話しかけてくれたり、教えてくれたりと言ったことはない。言葉少なに、変なことをするとポツリと英語でメッセージを出してくれるだけだ。これって、新しく使い始めると殆どの人が必ず目にするものであるにも関わらず、利用に慣れると目にすることがなくなってしまうのであまり文書化されていないのではないかと思う。

 幸い、当方とFIREBIRDとの付合いはかなり長いが暫くシステム作成から遠ざかっていたので、久しぶりに一からソースコードを書いて試ることで、沢山の会話を交わすことに成功した。改めて見ると新鮮さすら感じ貴重な情報に感じたので、その時のFIREBIRD君の朴訥なメッセージを紹介しておく。これだけ判れば、私くらいケアレスミスが多い方でも使い始めるのには充分だろう。
続きを読む
タグ:FIREBIRD Python
posted by Mire at 13:49 | Comment(4) | FireBird SQL | このブログの読者になる | 更新情報をチェックする
月額見放題1,000円開始キャンペーンバナー(画像ありver)
紺碧の艦隊 ルパン三世 GREAT CHASE クリックプロモーション
<< 2013年01月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
カテゴリ
タグクラウド
ファン
利用中のオープンソース
最近のコメント
最近の記事
過去ログ
QRコード
レガシーなアプリはいかが?
Dell 法人のお客様ページ
  • 【法人様向け】デル、お得なキャンペーン情報
  • 法人のお客様向け ストレージソリューション
  • 法人のお客様向け ネットワークソリューション
  • 【SOHO法人様向け】デル・オンライン広告限定ページ
  • デル-個人のお客様ページ
  • 【個人のお客様向け】デル・オンライン広告限定ページ
  • オンライン広告限定キャンペーンページ
  • ソフトウェア&周辺機器 パソコン工房
    ツートップインターネットショップ(twotop.co.jp) マウスコンピューター/G-Tune
  • ×

    この広告は1年以上新しい記事の投稿がないブログに表示されております。