ラベル oracle の投稿を表示しています。 すべての投稿を表示
ラベル oracle の投稿を表示しています。 すべての投稿を表示

2013年8月27日火曜日

IBM Javaでプロファイリングツールを使うには

引っ越しました

http://kokorona.com/wp/it/ibm_java_profiling_tool/

2012年5月28日月曜日

複数のODPをインストールした環境において、特定のバージョンのODPを使用したいときの設定

VB.netを使用して、Oracleにアクセスする場合、ODPを使用することが多いと思われます。
複数のODPをインストールした環境において、特定のバージョンのODPを使用したいときの設定について記載します。


ODP.NET
(Oracle Data Provider for .NET   Microsoft .NET環境からOracleデータベースへネイティブに接続可能なミドルウェア)


結論から書くと、以下の2点を対処すれば解決します。
 ①パスの設定を目的のバージョンのODPに修正して、
 ②VB.netで参照するライブラリの参照設定を①と同じにする。


具体的には、
②は文字通りなので、割愛。
①については、少々手作業が発生するので説明。



パスの現在の設定を以下の方法で確認します。
Pathを設定する
http://blog.cnu.jp/2009/11/06/windows-7-path/


【確認結果の例】
C:\app\username\product\11.2.0\client_1\bin;C:\app\username\product\11.1.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\W~(以下略)


上記の場合、以下の2つのバージョンのODPがインストールされていることになります。
「C:\app\username\product\11.2.0\client_1\bin;」
「C:\app\username\product\11.1.0\client_1\bin;」

そして、パスの設定は、前が優先なので、常に11.2.0を使用することになります。
(よくあるパターンとしては、VB.netでは11.1.0のライブラリを参照しているのに、実行時はエラーが出る!という事象)

もし、 11.1.0のODPを使用したいのであれば、
「C:\app\username\product\11.1.0\client_1\bin;」を前に持ってくるか、
「C:\app\username\product\11.2.0\client_1\bin;」を削除すれば解決です。


Windows7くらいになると、Pathの設定もわかりやすくGUI設定できるとよいのでしょうが、確かにそれは難しいのかもしれませんね。

2012年3月8日木曜日

Oracle 「行更新」を使って、特定カラムのみ更新する

「update ~ set row = ~」の書式は、カラムが大量にあるテーブルに対する更新を行うときのパフォーマンスアップには効果がある場合がありそうだが、いろいろ制約がある。

そのひとつが全カラムが更新対象であることだ。

例えば、「作成日時」なんてカラムがあった場合、この値は変更したくない。
そんなときはそのままじゃ使えない。

でも、発想の転換。
ビューを作れば、すべてのカラムを更新せずとも「update ~ set row = ~」の書式が使用できる。
もちろん、ビューの対象カラム以外の値は変更されない。

以下がそのサンプル。

=====
【テーブル・ビューの状態】
testtab(テスト用テーブル)
    key
    col1
    col2
    col3

testview(testtabのview)
    key
    col1
    col2

=====
【PL/SQLプログラム】
create or replace function  funcname
return number
is
 vdata testview%rowtype;
begin
 vdata.key  := 'keyvalue';
 vdata.col1 := 'after value1';
 vdata.col2 := 'after value2';
 update testview set row = vdata where key = vdata.key;
 return 0;
end;
/
=====

2012年2月28日火曜日

Oracle PL/SQL 読み込みデータのバルク処理 サンプル(修正前と修正後)

Oracle PL/SQLにおける、読み込みデータのバルク処理サンプルです。これまで、insert/updateのような書き込み系でバルクを主に行っていたのですが、読み込み情報のバルクを今回実装したので、サンプルをメモしておきます。
(下の例では、バルク処理単位として2000)


(※バルク処理を実装していない場合の例)

cursor cur is select  【カーソルで処理したい条件など】 ;
tab  【テーブル名】%rowtype

begin
        open cur;
        loop
       
                fetch cur  into tab;
                exit when cur%notfound;
                
                【tabを使った処理を行う】

        end loop;
       
end;
/


(※バルク処理を実装した場合の例 赤字が追加箇所

cursor cur is select  【カーソルで処理したい条件など】 ;
tab  【テーブル名】%rowtype
type tabArrType is table of 【テーブル名】%rowtype
tabArr tabArrType;


begin
        open cur;
        loop
       
                fetch cur bulk collect into tabArr limit 2000;
                exit when cur%notfound and tabArr.count=0;
               
                for i in tabArr.first..tabArr.last loop
                        tab := tabArr(i);
                       
                        【tabを使った処理を行う】
                       
                end loop;
        end loop;
       
end;
/




今回のバルク処理による
メリット(ねらい)は処理の高速化。
デメリットは、バルク処理件数単位での処理となるため、細かな例外制御が難しくなることや、場合によってはメモリ・CPUなどのリソースを圧迫することなどです。

ちなみに、今回私が上記処理を実装した結果、処理の高速化はほとんどありませんでした。
普通にカーソルで1件ずつ処理を行うのが十分に高速でできたため、、というのが原因の予想です。

Oracle で処理を高速化するのは、いろいろな要素があって難しいものです。。

コマンドプロンプトから引数つきでバッチを起動し、Oracleに値を渡すには

コマンドプロンプトから引数つきでバッチを起動し、Oracleに値を渡すときのメモ。
バッチファイルが引数を読み込むときは、 %0, %1 ... %n で、
SQLファイルが引数を読み込むときは、 &0, &1 ... &n であるのがわかれば楽勝。


【コマンドプロンプトで実行】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\ test.bat aaa bbb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


【test.bat (バッチファイルの例)】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo %0  ( test.bat が表示される )
echo %1  ( aaa が表示される )
echo %2  ( bbb が表示される )
sqlplus  表領域/ユーザ@パスワード  @xyz.sql %0 %1 %2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



【xyz.sql (Oracle 処理の例)】
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.....
ret := func( &0, &1, &2 ); /* 引数として、('test.bat', 'aaa' ,'bbb') が渡る  */
.....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~