Category Archives: Oracle

ORA-29280: 無効なディレクトリ・パスです。

  Oracleでディレクトリオブジェクトを作成し、 create directory batch_log_dir as ‘/opt/app/batch/log’; grant read on directory batch_log_dir to hoge_user; grant write on directory batch_log_dir to hoge_user; PL/SQLからファイルを出力してみる。 SQL> declare 2 lfp_log UTL_FILE.FILE_TYPE; 3 v_file_name VARCHAR2(250); 4 begin 5 v_file_name := ‘test.log’; 6 lfp_log := UTL_FILE.FOPEN(‘batch_log_dir’, v_file_name, ‘a’); 7 UTL_FILE.PUT_LINE(lfp_log, ‘hogehoge’); 8 UTL_FILE.FCLOSE(lfp_log); 9 end; 10 / declare * 行1でエラーが発生しました。: ORA-29280: 無効なディレクトリ・パスです。 ORA-06512: “SYS.UTL_FILE”, 行41 ORA-06512: “SYS.UTL_FILE”, 行478 ORA-06512: 行6 ぬう、なぜだ。と思ったが、ディレクトリオブジェクト名が小文字だったのが問題。 ディレクトリオブジェクト名を大文字にしたら動いた。 [amazon_enhanced asin=”4797359242″ /] declare lfp_log UTL_FILE.FILE_TYPE; v_file_name VARCHAR2(250); begin v_file_name := ‘test.log’; lfp_log := UTL_FILE.FOPEN(‘BATCH_LOG_DIR’, v_file_name, ‘a’); –ディレクトリオブジェクト名は大文字 UTL_FILE.PUT_LINE(lfp_log, ‘hogehoge’); UTL_FILE.FCLOSE(lfp_log); end; /

Posted in Oracle | Comments closed

PL/SQLのソースをSQLで確認する

  コンパイル済みのPL/SQLのソースコードを確認するには。パッケージ名が”PKG_01″の場合。 SQL> set pagesize 200 SQL> select text from user_source where name = ‘PKG_01’; [amazon_enhanced asin=”4798116165″ /]

Posted in Oracle | Comments closed

VPN経由でOracle DBに接続できない/クエリがすごく遅い

  Oracle社のパッケージを利用したSI案件では、ライセンスの関係上、オフショアサイト側にOracleデータベースとパッケージ(Oracle EBSとか)を配置できないケースが多い(高いから)。そんな時は、日本側のオフィス(またはクライアントのDC)とオフショア側のオフィス間で拠点間VPNを張り、オフショア側から接続させる。 で、大体どのプロジェクトでも、オフショア側から「Oracleにつながらない」「検索が重くて結果が返ってこない。開発にならない」「PL/SQLのコンパイルができない」などとクレームを受けることになる。ネットワーク系の問題だと大体わたしのところにお鉢が回ってくるので、少し切り分けをしてみた。 結論から言うと、Oracle 11g Clientになってからクライアントの仕様が変わったことで、問題が起きるようだ。 10gの場合、SDU(セッションデータユニット)のデフォルトは2048 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/performance.htm 11gの場合、SDUのデフォルトは8192 http://download.oracle.com/docs/cd/E16338_01/network.112/b56288/performance.htm SDUとは http://docs.oracle.com/cd/E16338_01/network.112/b56288/performance.htm#i1006332 11gになってSDUのサイズが大きくなったため、10gまでのクライアントでは問題なかったのに、11gクライアントからはVPN通信中にパケットロス等の問題が起きるようになった模様。 オフショア側のクライアント側で、SDUのサイズを小さくする(2048とか)ことで、問題は解決した。 SDUのサイズはクライアント側のsqlnet.oraファイルや、tnsnames.oraファイルの設定で調整できる。 参考: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19209-01/tnsnames.htm#i477833 なお、オフショア側でSQL Developerを使っている場合は、先ずOracle Clientをオフショア側の端末にインストールすること。そして、クライアント側のtnsnames.oraファイルでSDUのサイズを指定し、以下のサイトを参考に、SQL Developerでtnsnames.oraファイルの場所を指定する。 http://theitbros.com/sql-developer-use-tnsnames-ora-file

Posted in Oracle | Comments closed