メニュー
プロフィール
最近の記事
カテゴリ分類
記事一覧
FOR ENGINEERS
注目! テレビや雑誌でも紹介されているペン型ICレコーダー

Oralce 11g を RedHat Linux Enterprise Server で運用している。
今日、クライアント・アプリケーションから、この Oralce DB にアクセスしようとしたところ、

「ORA-28002 : パスワードの有効期限が、あと6日で切れます」

といったメッセージが表示されるようになっていた。
どうやら「Oracle 11g」では、デフォルトでパスワードの有効期限が180日に設定されてしまうらしい。

そのため、以下のように、
パスワードの有効期限を無期限と変更しておく。
# sqlplus sys/パスワード@サービス名 as sysdba
SQL> alter profile default limit password_life_time unlimited;
SQL> alter user ユーザ名 identified by パスワード;


| IT-ソフトウェア関連::Oracle | 09:55 AM | comments (x) | trackback (x) |
RedHat Enterprisze Linux 5サーバーにOracle 11g を搭載している。
このOracle DBのPL/SQLプロシージャーを使って
テキストファイルを作成する処理で、問題があったので記述しておく。

以下のような、テキストファイルを作成するためのプロシージャを作成する。
PROCEDURE DATAFILE_MAKE
(
P_FILENAME IN CHAR
) IS
V_DN VARCHAR2(128);
V_FP UTL_FILE.FILE_TYPE;
BEGIN

V_DD := '/tmp';
V_FP := UTL_FILE.FOPEN(V_DN, P_FILENAME, 'W');
/*
DATA_TBLの「DATA_ID」「DATA_01」「DATA_02」のフィールド値を
右詰・固定長のテキストファイルとして出力する
*/
FOR
REC IN
(
SELECT
DATA_ID
,NVL(DATA_01, ' ')
,NVL(DATA_02, ' ')
FROM
DATA_TBL
ORDER BY
DATA_ID
)
LOOP
UTL_FILE.PUT(V_FP, SUBSTR(' ' || REC.DATA_ID, -6));
UTL_FILE.PUT(V_FP, SUBSTR(' ' || REC.DATA_01, -8));
UTL_FILE.PUT(V_FP, SUBSTR(' ' || REC.DATA_02, -8));
UTL_FILE.NEW_LINE(V_FP, 1);
END LOOP;
UTL_FILE.FCLOSE(V_FP);

END DATAFILE_MAKE;
上記↑のようなプロシージャを作成し、
exec DATAFILE_MAKE('data_01.txt');
のように実行して、
/tmp/data_01.txt
という固定長のテキスト・ファイルを作成する。
※ちなみにORACLEのサーバー・パラメータに以下を追加しておく。
UTL_FILE_DIR='*'

この時に以下のような問題に遭遇した。

1. ファイルの書込み権限が無いので、削除できない
2. 改行コードが"LF"となってしまう。

■ファイルの書込み権限が無いので、削除できない
●内容
 作成されるファイル「/tmp/data_01.txt」のオーナーが「oracle」ユーザーで、ファイルのパーミッションが「rw-r--r--」(644)となっているため、ファイル作成後に、他のユーザーで削除できない事が判明した。

●解決策
 「~oracle/.bash_profile」を編集、
 「umask 022」⇒ 「umask 000」 に変更する。
 変更後、Oracle DBサーバーを再起動する。

●概要
 オラクルDBのサーバー・プロセスを実行しているユーザーは「oracle」である。
 この「oracle」ユーザーのログインスクリプト(ホームディレクトリ配下の「.bash_profile」)を見てみると、UMASKが0200となっている。
 そのため、oracleユーザーで作成するファイルは、デフォルトのパーミッションが0644となってしまい、他のユーザーには書き込み権限が与えられない。
 従って、デフォルトのパーミッションが「0666」となるよう
umask 000
としておく。


■改行コードが"LF"となってしまう。
●内容
 テキストファイルの改行コードが"LF"となってしまっているため、
Windowsでこのファイルを操作する時に、不整合が生じた。

●解決策
 外部コマンドを使って"LF"を"CRLF"に変更する事にした。
・nkfを使う(文字コードをSHIFT-JISとする)
# nkf -cws $org > $file

・perlを使う方法でもOK
# perl -pe 's/\n/\r\n/' $org > $file

※注意:変換前のファイルの改行コードが既に"CRLF"だった場合
 nkfの場合、変換後のファイルは"CRLF"のままなので問題ないのだが、Perlの場合には、変換後のファイルは「"CRCRLF"」となってしまう。
 もう少し複雑なスクリプトにすれば、Perlでも変換できますが・・・。

●概要
 根本的な解決策が分からなかったので、上記のような方法を使った。
 本来は「ファイルを作成する時点で"CRLF"となる」という方法が本筋とは思うのだが・・・。


| IT-ソフトウェア関連::Oracle | 08:43 PM | comments (x) | trackback (x) |
 Visual Basic で作ったアプリケーションから、Oracle データベース・サーバーに接続する。

 このアプリケーションでは、クライアント端末にインストールしている Oracle 9iR2 (9.2.0.1.0) Client を経由して、サーバーの Oracle DB 10gR2 (10.2.0.1.0) のOracle Databaseにアクセスするのだが、

クライアントからのアクセスが妙に遅くなっているので、ネットで調べた所、
 Oracle Technology Network (OTN) Japan - 掲示板 : DB接続遅い! ...
を参考にして、Oracle Client のパラメータを更新したら、格段に早くなった。

具体的には、
C:\oracle\ora92\network\ADMIN\SQLNET.ORA
の内容を以下のように編集。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
    ↓
SQLNET.AUTHENTICATION_SERVICES = (NONE)
 上記 OTN の掲示板では Oracle8i (8.1.7)について記述していましたが、Oracle9i クライアントでも有効ですね、ちなみに別のシステムで使っている Oracle10g クライアントで試した所、Oracle 10g でも有効と分かりました・・・・・・Oracle11gではどうだろう。

| IT-ソフトウェア関連::Oracle | 04:38 PM | comments (0) | trackback (1139) |
Win32 Oracle Instant Client を使って、Oracle Server に接続する。

Oracle サーバーは、Oracle 11g (11.1.0.6.0)。
Instant Client も同様に (Win32 / 11.1.0.6.0)。

ちなみに、08.08.27時点で、Win32用の Oracle 11g Instant Client (11.1.0.6.0) は「OTN Japan Instant Client」では、配布されていませんが、「OTN(本国) Instant Client Downloads」からダウンロードできます。

使い方は「SQL*Plus ユーザーズ・ガイドおよびリファレンス」を参考にする。


| IT-ソフトウェア関連::Oracle | 11:57 AM | comments (12) | trackback (689) |
【状況】
Oracle 10g (10.2.0.1.0)のデータを、
Oracle 9i (9.2.0.1.0)のマシンでエクスポートしようとしたら、以下のエラーが発生し、一部のテーブルをエクスポートできない。
EXP-00003:セグメントに対する記憶域定義がありません(8,10409)
エクスポートは正常に終了しましたが、警告が発生しました。

【経緯】
Oracle 9i で運用していたサーバーを、Oracle10g にマイグレーションする。
サーバーを新規に構築するので、Oracle 9i から Oracle10g へデータを移植する事については問題ない。

但し、今まで使っていたサーバーを、バックアップ用に流用したいため、

Oracle10g ⇒ エクスポート ⇒ Oracle 9i にインポート

というように、適時バックアップする必要がある。

【対策】
Googleで検索すると、「10g のDMPを 9i へインポートできない
といった検索結果がピックアップされるが、

結論のみ端的に言えば、
Oracleの規定により、この問題の解決法をWEBサイトに掲載してはいけません

そのため、この規定を遵守する限り
解決法をWEBサイトに期待しないで、Oracleのサポートに問い合わせましょう

という事です。従って、当サイトにもこの情報は掲載されません。

しかし、この規約に違反して?解決策を掲載しているサイトがあるのですね、
例えば以下のようなサイトです。
AnySQL.net English Oracle Bug : exp-00003 for LOB tables
DBA CORNER EXP-00003: no storage definition found for segment(#,#)
もちろん自己責任ですが、試す価値は十分にあります。
※どちらも内容は同じです、私も試してみたところヨサゲでした。

※この情報の掲載自体に問題がある場合には、お問合せよりご連絡下さい、即座に削除致します。

| IT-ソフトウェア関連::Oracle | 03:26 PM | comments (14) | trackback (3150) |
PAGE TOP ↑