sqlplusでOracleデータベースの接続回数を減らす

Pocket

株式会社ナレッジベースの杉山です。

先日、Oracle 11gから19cへバージョンアップ後、サーバでのsqlplusの接続時間が遅くなったとのことで、調査したのですが、残念ながら解決には至ってません。


その際、接続が遅くなったことで、大幅にパフォーマンスが落ちたバッチ処理のソースを見せていただきました。

至る所でsqlplusでsqlスクリプトを実行しておりました。
sqlplusでデータベースの接続を毎回実行しているため、接続にかかる時間の影響をモロに受けています。

バッチファイルのイメージとしては下記のような状態です。

sqlplus user/password@servicename @c:\sql\setp1.sql
sqlplus user/password@servicename @c:\sql\setp2.sql
sqlplus user/password@servicename @c:\sql\setp3.sql

バッチファイルを下記のような記述にすることで、標準出力としてsqlplusに実行するsqlファイルのパスを渡すことができますので、Oracleデータベースとの接続回数を減らすことができます。

しかし、SQLの実行結果をもとに、次に実行するSQファイルを切り替えるのは難しいと思います。

(
	echo @c:\sql\setp1.sql
	echo @c:\sql\setp2.sql
	echo @c:\sql\setp3.sql
) | sqlplus user/password@servicename

Windows Powewrshellの場合、下記のような書き方になると思います。
Write-Outputのエイリアスでechoコマンドも使えます。

&{
	Write-Output "@c:\sql\setp1.sql"
	Write-Output "@c:\sql\setp2.sql"
	Write-Output "@c:\sql\setp3.sql"
} | sqlplus user/password@servicename

あかんやろなと思いつつ、下記ようなシェルを実行してみましたが、もちろん定期的に実行されることはありませんでした。

&{
	$cmd = "select " + $i + ", to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') as now from dual;"
	for ($i = 0; $i -lt 5; $++) {
		Write-Output $cmd
		Start-Sleep 1
	}
} | sqlplus user/password@servicename
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA