引っ越しました
http://kokorona.com/wp/it/ibm_java_profiling_tool/
2013年8月27日火曜日
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設定できるとよいのでしょうが、確かにそれは難しいのかもしれませんね。
複数の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;
/
=====
そのひとつが全カラムが更新対象であることだ。
例えば、「作成日時」なんてカラムがあった場合、この値は変更したくない。
そんなときはそのままじゃ使えない。
でも、発想の転換。
ビューを作れば、すべてのカラムを更新せずとも「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 で処理を高速化するのは、いろいろな要素があって難しいものです。。
(下の例では、バルク処理単位として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') が渡る */
.....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
バッチファイルが引数を読み込むときは、 %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') が渡る */
.....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2012年2月22日水曜日
登録:
投稿 (Atom)