2012年11月30日金曜日

Oracle Transparent Gateway / Oracle Connectivity→ Oracle Gateway

Oracle Connectivityと呼ばれていた機能が、Oracle Transparent Gatewayと合わさり、Oracle Gatewayという名前に変えて、11gより展開されている。無償という話だが、本当か。

Oracle & MySQLで検証してみるか。

2012年11月27日火曜日

emacs org-mode memo

Emacs23から同梱されたアウトラインエディタ。
ファイルの拡張子を.orgにすることで自動的にモード変更される。

アウトライン編集、箇条書きのリスト化、表入力

[Command]
TAB
M-RET

2012年11月22日木曜日

2012年11月21日水曜日

DRIVING_SITE memo

DRIVING_SITEヒントを使用すると、問合せが実行されるサイトを指定可能。
オプティマイザを無効にする場合は、手動で実行サイトを指定。

データベースリンク間で非効率な実行計画が実行されている場合、本ヒントも有効。
もしくはジョインをどちらかのテーブルに寄せる。 これは設計が元々悪いのか!

2012年11月20日火曜日

スキーマ・オブジェクトの依存性

依存オブジェクトと参照オブジェクトについては良く言われている。
昔の時代は、依存性が正しい形であっても、実行時エラーで落ちるような時代があった認識している。(昔からオラクルを触っているメンバーは、皆そう言う人が多い。)
 しかし、今のマニュアルを参照する限り、実行時もしくは参照時に検証、再コンパイル行うの、問題がないと記述されている。但し、その影響として、以下2点があると書かれている。

1. 無効になったオブジェクトが多数ある場合は、初期実行時の待機時間が長時間になる可能性がある。 (但し、逆を言えば、依存性を見つつ、再コンパイルしているということ、と理解している。)
2. 無効になったオブジェクトを別セッションで同時に実行していた場合、以下のORAエラーが発生する。
  ORA-04061 -- stringの既存状態は無効になりました。
      原因: プロシージャが変更または削除されたため、無効になった既存状態またはストアド・プロ
              シージャと矛盾が発生した既存状態を使用して、ストアド・プロシージャの実行を再開しよ
              うとしました。
      処置: 再試行してください。このエラーでは、すべてのパッケージの既存状態に再初期化が
              必要です。
  ORA-04064 --- 実行されませんでした。stringは無効になりました  
      原因: 無効になったストアド・プロシージャを実行しようとしました。 
      処置: 再コンパイルしてください。
  ORA-04065 ---実行されませんでした。stringを変更または削除しています
     原因: 変更または削除されたストアド・プロシージャを実行しようとしたため、コール元プロシー
              ジャからのコールができません。
      処置: その依存関係を再コンパイルしてください。
  ORA-04068 ---パッケージstringstringstringの既存状態は廃棄されました。  
      原因: ストアド・プロシージャを実行しようとして、4060から4067のいずれかのエラーが発生し
      した。  
      処置: アプリケーション状態を完全に再初期化してから、プロシージャを再試行してください。

上のマニュアルを信じる場合、間違ったオブジェクトをUpせず、アプリ処理を無風状態にしておけば、どんなにInvalidが増えても、時間をかければ自動的にValidになるということで、昔の時代の認識は、もう過去のものということになる。本当かな?

あと、コンパイル系の検証、再コンパイルは、DBMS_UTILITY(11gのリンク)UTL_RECOMP(11gのリンク)が有効。

2012年11月15日木曜日

Think occasionally

本番機で稼動しているプログラムを参考にプログラムを書くことがある。コーディング規準の形に沿っているので、作業がしやすい為である。ただ、ソースをよく読んでいくと、まったく機能していないエラーハンドリングとかをよく見つける。この開発者は本当にテストを実施してきたのだろうかと疑問に思う。これでイイと思って、ロクにテストもしていないことがわかるプログラム程、いやなものはない。

2012年11月12日月曜日

DataPump 11g R2

11gR2版。TABLE_EXISTS_ACTIONのパラメータの動きに注意。

Oracle Data Pump Import(impdp) のパラメータ
http://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_import.htm#i1010670

Oracle Data Pump Export(impdp) のパラメータ
http://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_export.htm#i1006293

あと、方法としては以下の3つ。通常使うのは1番が多いけど。PL/SQL内で完結させることもできるということがわかった。
  1. コマンドライン・クライアントexpdpおよびimpdp
  2. PL/SQLパッケージDBMS_DATAPUMP
  3. PL/SQLパッケージDBMS_METADATA

2012年11月5日月曜日

SQL Plan Management

共有SQL領域から実行計画をロードすることも可能。便利だ。

DECLARE
  my plan PLS_INTEGER
BEGIN
  my plan := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id = > 'SQL_ID' );
END;
/




oracle manual

[構文]
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
   sql_id            IN  VARCHAR2,
   plan_hash_value   IN  NUMBER   := NULL,
   sql_text          IN  CLOB,
   fixed             IN  VARCHAR2 := 'NO',
   enabled           IN  VARCHAR2 := 'YES')
 RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
   sql_id            IN  VARCHAR2,
   plan_hash_value   IN  NUMBER   := NULL,
   sql_handle        IN  VARCHAR2,
   fixed             IN  VARCHAR2 := 'NO',
   enabled           IN  VARCHAR2 := 'YES')
 RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
   sql_id            IN  VARCHAR2,
   plan_hash_value   IN  NUMBER   := NULL,
   fixed             IN  VARCHAR2 := 'NO',
   enabled           IN  VARCHAR2 := 'YES')
 RETURN PLS_INTEGER;

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
   attribute_name   IN VARCHAR2,
   attribute_value  IN VARCHAR2,
   fixed            IN VARCHAR2 := 'NO',
   enabled          IN VARCHAR2 := 'YES')
  RETURN PLS_INTEGER;
 
【パラメータ】