2010年12月17日金曜日

Oracle Text でハマッタ...

Oracle Text を利用して中間一致検索の高速化をはかろうしてハマッてしまった。
ます、DBのバージョンが 9i であったためデータを追加・更新・削除しても Oracle Text で作成した索引に即反映させることができない。(10g以降ならデータの追加・変更時に同期可能なのだが...)
↓↓↓↓↓
よって、DBMS_JOB で定期的に更新を行うことになる。
そこでハマッタ。(T_T)

Oracle Textの利用方法(手順)の説明も兼ねて設定方法から説明します。
  1. OracleTextを利用するユーザーを作成します。
  2. ユーザー作成方法はみなさんご存知のとおりです。
    CREATE USER myuser IDENTIFIED BY myuser_password;
  3. 利用するユーザーに権限を与えます。
    (ユーザーにロールを付与します。)
    GRANT RESOURCE, CONNECT, CTXAPP TO MYUSER;
    (CTX PL/SQLパッケージでのEXECUTE権限の付与)
    すべてのOracle Textパッケージの実行権限を付与する場合。
    GRANT EXECUTE ON CTXSYS.CTX_CLS TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_DDL TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_DOC TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_QUERY TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_REPORT TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_THES TO myuser;
    GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO myuser;
  4. プリファレンス(全文検索対象のデータがどんなものかを示す指定)を作成します。
  5. connect <ユーザ名>/<パスワード>

    begin
    ctx_ddl.create_preference('<プリファレンス名>',
                                     'JAPANESE_VGRAM_LEXER');
    end;
    /
  6. 全文検索用の索引を作成します。
  7. CREATE INDEX <索引名> ON <表名> ( <項目名> )
          INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER <プリファレンス名>')
    /
  8. 索引の手動更新
  9. Oracle Text索引は、情報が挿入または更新されるたびに動的に更新されません。  Oracle Textのストアド・プロシージャであるctx_ddl.sync_indexを使用して、索引を定期的にリフレッシュ(同期化)する必要があります。

    BEGIN
    -- 引数にINDEX名を指定
    CTX_DDL.SYNC_INDEX('<索引名>');
    END;
    /

    しかし、上記だといちいち自分で実行して更新しなければならない。
  10. そこでDBMS_JOBで定期実行して索引をリフレッシュ(同期化)する。・・・ここでハマる。
  11. //■DBM_JOB
    VARIABLE jobno NUMBER;
    BEGIN
    DBMS_JOB.SUBMIT(:jobno
         , 'BEGIN CTX_DDL.SYNC_INDEX(''<索引名>''); END;'
         , SYSDATE, 'SYSDATE+10/1440');
         COMMIT;
    END;
    /

    上記で問題(エラー発生)もなく DBMS_JOB に登録できた。
    しかし、ジョブの実行時間後に内容を確認しても追加・変更されたデータが反映されていない。

    下記のように索引で保留中の内容を確認すると更新されてないことを確認。
    SELECT pnd_index_name,
     pnd_rowid,
     to_char(pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp  FROM ctx_user_pending;


    更新されないので、手動でジョブを実行するとエラーになる。
    begin    dbms_job.run(<ジョブ番号>);    end;
    *
    行1でエラーが発生しまた.
    ORA-12011:1ジョブの実行に失敗しました
    ORA-06512:"SYS.DBMS_IJOB" . 行406
    ORA-06512:"SYS.DBMS_JOB" . 行272
    ORA-06512:行1

    アラートを調べ、トレースファイルを参照してググッてみたがなかなか解決策が見つからなかった、
  12. 解決策を見つけてみると...
  13. なんと、何度か試行錯誤した中にあったのは?と思う内容であった。わずかにどこか違っていたようだ。

    解答はこれダ!

    define idxname = "<索引名>"
    define interval = "10"

    set serveroutput on
    declare
        job number;
    begin
        dbms_job.submit(job, 'ctx_ddl.sync_index(''&idxname'');',
        interval=>'SYSDATE+&interval/1440');

        dbms_output.put_line('job '||job||' has been submitted.');
    end;
    /
毎度のことながら、些細な事でかなりの時間(今回は丸一日)を費やしてしまうものだ。 やはり、知識は正確により多く貯える必要がある。(泣)

2010年12月5日日曜日

「イノベーションと企業家精神」

今週末もドラッカーの「イノベーションと企業家精神」を読んだ。 先々週読んだ「プロフェッショナルの条件―いかに成果をあげ、成長するか (はじめて読むドラッカー (自己実現編))」が、マネジメントやこの本(イノベーション)などを抜粋したような内容であったので、かなり重複している部分はあったが改めてドラッカーの過去の分析・現実を見る目と未来への予測のすばらしさを実感した。

人によって作られたものは、永遠に続くことはない。人によって作られたものは、いすれ歳をとり陳腐化しているくので再構築が必要になる。 これは、あらゆる事業(営利・公共など)に当てはまり、また人にも当てはまる。

下記の内容が書かれています。
  • イノベーション
  • イノベーションの機会を、どこでいかに見出すべきかを提示している。また、現実の事業として発展させていく際に「行うべきこと」と「行ってはならないこと」について述べています。

  • 企業家精神
  • 企業家精神を発揮するには、いかに人を組織し、配置するべきか、その場合の障害、陥穽(かんせい:落とし穴・わな)、誤解は何か?  企業かの役割と意思決定について。

  • 企業戦略
  • 現実の市場においていかにイノベーションを成功させるか!

皆さんも是非ご一読を!

「イノベーションと企業家精神」(ドラッカー)

先週から引き続きドラッカーを読む。
 イノベーションについて重要性と原理・原則について説かれており、いつ・どこで・何に指定をおき・どのように行動すべきで、また行動すべきでないことはどのような内容か等が具体例を用いながら説明されている。

 ドラッカーが提示している内容は、私企業だけではなく、あらゆる組織について共通する原則を提示している。

イノベーションは機会であり、機会が発生するタイミングをいかに逃さないか、またイノベーションの機会は求めるだけではなく自身から起こさなければ事業や貢献の機会は失われてゆく。

そのまま当てはまる訳ではないが、相田みつをの言葉を思いだしました。
『とにかく具体的に動いてごらん具体的に動けば 具体的な答が出るから』
なんか通じるところがあるなあ...

「イノベーションと企業家精神」

2010年11月28日日曜日

話題の「もしドラ」を読んで

今日、「もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら 」を読んだ。
 うわさの「もしドラ」を読んだ。思っていた以上よくて感動し、最後は涙した。(T_T)(泣)

 私自身も小学校から高校まで野球をやっており、高校もそこそこの進学校であったのでとても共感する部分が多く、最後は予想して結末ではあったが自然と涙が流れてきた。

 ドラッカーのマネジメントを野球で応用したらどうかという試みはとても面白く、私の高校も私が卒業してから10年後に甲子園に出場したこともあり、なにかと共感されられた。

確かにドラッカーのマネジメントは企業だけでなく、あらゆる組織に通用する哲学的にも感じる実践論なの学生スポーツという分野で展開はあまり具体化しすぎずに話を展開することで誰にでも読みやすい話になっていた。

 このような事からでも、たくさんの若い人にもドラッカーに興味と持ってもらえると良いなあと思った。
私自身も、ドラッカーやドラッカーの書籍によく登場する企業が行っているOGSM等を若いうち(学生)から実践すべきだと実感しているので、この本を機会に若い人がその方向で向かってくれればと思う。

「もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら 」

2010年11月24日水曜日

久しぶりにドラッカーを読んだ。

昨日より久しぶりにドラッカーを読んだ。昨日の読み残しと先ほど読み終えた。
 昔(17~18年前)、「マネジメント」を読んだがすっかり忘れてしまっている。今年、「もしドラ」が大ヒットしているので事前ドラッカーを再読しておこうと思い「プロフェッショナルの条件―いかに成果をあげ、成長するか (はじめて読むドラッカー (自己実現編))」を読んだ。

ドラッカーを読むとつくづくすばらしさを感じた。
今も昔も何事にも原理・原則が存在し、「すべきこと」「すべきでないこと」について明確に実証(過去の歴史と過去の事例)されているだけでなく、現在でも通用することに偉大さを感じる。
今回の本は、ドラッカーを読み始める(再読)にはピッタリであった。

「プロフェッショナルの条件―いかに成果をあげ、成長するか (はじめて読むドラッカー (自己実現編))」

2010年11月23日火曜日

「黒岩の法則」を読んで

「黒岩の法則」を読む。ラジオのくにまるジャパンで元フジテレビの黒岩祐治さんの話を聞いて早速「黒岩の法則」を購入して読んだ。
 他人の話や講義、また自分のメッセージも「要するに」を突き詰めて何を言いたい(発信)のかを明確にシンプルに短く伝えることの重要性を説いている。

「黒岩の法則」

2010年11月21日日曜日

CakePHPディレクト構成の変更

When the archive is extracted, it becomes a composition of the following directories.

  1. Method of arranging directory that needs manager authority.
  2. ├var

    ├www
    │ │ ├cake ← When the archive is extracted,
    │ │ │ ├app
    │ │ │ │ ├config
    │ │ │ │ ├controllers
    │ │ │ │ ├models
    │ │ │ │ ├plugins
    │ │ │ │ ├tmp
    │ │ │ │ ├vendors
    │ │ │ │ ├views
    │ │ │ │ ├webroot ← It is set to the document route.
    │ │ │ │ ├.htaccess
    │ │ │ │ └index.php
    │ │ │ ├cake
    │ │ │ ├vendors
    │ │ │ ├.htaccess
    │ │ │ └index.php

  3. Method of arranging directory that doesn't need manager authority.
  4. ├cake
    │ ├app ・・・(1)
    │ │ ├config
    │ │ ├controllers
    │ │ ├models
    │ │ ├plugins
    │ │ ├tmp
    │ │ ├vendors
    │ │ ├views
    │ │ ├webroot ・・・(3)
    │ │ ├.htaccess
    │ │ └index.php
    │ ├cake ・・・(2)
    │ ├vendors
    │ ├.htaccess
    │ └index.php

    It becomes the following if it arranges it according to the custom of the Linux system.


    ├ home
    │ └ user
    │   └ app ← Directory (1) is moved here.
    ├ usr
    │ └ lib
    │   └ cake ← Directory (2) is moved here.
    ├ var
    │ └ www
    │   └ *** ← Contents of the directory that name is (3) are moved here.


    The procedure summary.
    unzip ./cakephp-cakephp-1.3.5-0-ga16f4c5.zip
    $ mv ./cakephp-cakephp-fd82f1b/app /home/user/app
    $ mv ./cakephp-cakephp-fd82f1b/cake /usr/lib/cake
    $ mv ./cakephp-cakephp-fd82f1b/app/webroot/* /var/www
    $ mv ./cakephp-cakephp-fd82f1b/app/webroot/.htaccess /var/www
    $ chmod -R 0777 /home/user/app/tmp
    When the movement of the file is completed, three places of the following of the content of index.php are edited.

    • ROOT定数にappを含むディレクトリへのパスを設定する。

    • 今回の例では、"/home/user"
    • APP_DIR定数にappディレクトリの名前を設定する。

    • 今回の例では、"app"
    • CAKE_CORE_INCLUDE_PATH定数にcakeディレクトリを含むディレクトリへのパスを設定する。

    • 今回の例では、"/usr/lib"

    Concretely, it edits it as follows.

    if (!defined('ROOT')) {
       define('ROOT', DS . "home" . DS . "user");
    }
    if (!defined('APP_DIR')) {
       define('APP_DIR', "app");
    }
    if (!defined('CAKE_CORE_INCLUDE_PATH')) {
       define('CAKE_CORE_INCLUDE_PATH', DS . "usr" . DS . "lib");
    }