シェル(Unix/Linux)を使用してDBアクセス
上題どおりなのですが
シェルスクリプトを使用してORACLEなどDBへのアクセス・データ操作は
可能なのでしょうか?。
仮にできないとなると、業務系開発ではORACLEとシェルはどのように
組みあわせて使うのでしょうか?。。想像としては
・Oracleのコマンドでデータをテキストに出力しシェルで読みこみ
などが考えられますが・・。他にもDB関連で「こんな時にも使う」など
ノウハウがあれば是非教えて頂ければと思います。
よろしくお願いします。
回答(1件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.1ベストアンサー20pt
>シェルスクリプトを使用してORACLEなど
>DBへのアクセス・データ操作は
>可能なのでしょうか?。
は可能です。ぐだぐだ説明するより例を示した方が
分かり易いと思うので...
#!/bin/sh
sqlplus system/manager@ORACLE_SID << EOF
select table_name from user_tables;
EOF #必ず行頭に!!
要するにEOFとEOFの間にSQL*Plus上で実行したい
コマンドを入力するだけです。
ここで気をつけないといけないのは2つ目の終わり
を示すEOFは必ず行頭に記述しなくてはいけない
という点です。
if文やwhile文の中で使うときについついインデント
をつけてしまいますが閉じる意味のEOFは必ず
行頭です。
ただ、業務系開発となるとあまりシェルスクリプト
でプログラムを開発することは少ないかと思います。
理由は2つあって
1.性能が悪い
2.セキュリティ的に好ましくない
1はシェルスクリプトでDBにアクセスする場合、
SQL*Plusで接続することが多くなりますが、SQL*Plus
は管理用モジュールの意味合いが強く、あまり
アクセスの最適化は計られていません。
よって同じ命令を投げてもPro*CやOCIと比較して
性能は良くないです。
また、シェルは実行毎にコンパイルが行われるので
それもあまりよろしくありません。
2はサーバ側にviなどで簡単に開けるtext形式ファイル
として配置するためサーバにさえログインすれば
どういった処理が行われているのかが簡単に把握でき、
やろうと思えば書き換えだってできてしまいます。
Pro*Cプリコンパイル、Cコンパイルなどを行えば
ロードモジュール化されるので実行はできても
内容の閲覧や修正は不可能です。
またご存知かもしれませんがOracleには
ストアドプロシージャという昨日もあり、
事前にコンパイル済みの状態でOracleのメモリ領域に
プログラムを常駐させておくことも可能です。
シェルスクリプトによるSQL*Plus経由のOracleアクセス
は主に非定期、非定型で行われるDB管理などに
用いると思ったほうがよいかと思います。
>Oracleのコマンドでデータをテキストに出力しシェルで読みこみ
はちょっと意味がよく分からないのですが、
Oracleの出力結果をログファイルに
吐き出したいのであればSQL*Plusであれば一番最初に
spool log.txt
と入力しておけばそれ以降の出力はlog.txtに出力
されます。
先述したEOFを使う場合は
#!/bin/sh
sqlplus system/manager@ORACLE_SID << EOF > log.txt
select table_name from user_tables;
EOF #必ず行頭に!!
としても同様にlog.txtにその結果が出力されます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












