Oracle初心者です。
機器更新によるシステム移行を行っているのですが、
Oracleより、抽出データをCSVに出力する、プロシージャにて、

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

のエラーが出て対処法が分からずに困っています。

以下、プロシージャ部分抜粋
--------------------------------------------------------------------------------
fno1 utl_file.file_type := utl_file.fopen('EXPORT_DIR','TEST1.csv', 'W');
fno2 utl_file.file_type := utl_file.fopen('EXPORT_DIR','TEST2.csv', 'W');
--------------------------------------------------------------------------------

上記の、「EXPORT_DIR」とは、どこで定義されている変数(?)なのでしょうか?

なんとなく、EXPORT_DIRが正しくないためのエラーと考えているのですが…

処理の流れとしては、TEST.bat → TEST.sql → プロシージャ  で、
TEST.batには試しに、SET EXPORT_DIR = D:\TEST
としてみたのですが、エラーのままでした。

ひょっとして、Oracleに設定すべきもの?

すみませんが、どこでどのように定義するか教えてください。

環境:
Oracle11g
WindowsServer2008R2

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちわ。



> ひょっとして、Oracleに設定すべきもの?
そうです。
ディレクトリオブジェクトです。

こんな感じで設定して下さい。
sqlplus "/ as sysdba"
SQL> Create directory EXPORT_DIR as 'D:\TEST';
SQL> grant read on directory EXPORT_DIR to ユーザ名;
SQL> grant write on directory EXPORT_DIR to ユーザ名;
SQL> exit
    • good
    • 0
この回答へのお礼

なるほど!
現行の設定を確認後、登録してみたいと思います。
ありがとうございました。

お礼日時:2013/05/23 09:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUTL_FILEエラー?

Oracle10g(リンクをはっています)
Winxp


http://oshiete1.goo.ne.jp/kotaeru.php3?q=995849
を参考にして以下のようなプロシージャを作成しました。

CREATE OR REPLACE PROCEDURE test.Test_Convrt IS
BEGIN
DECLARE
c1 number;
c2 number;
data1 varchar2(100) := null;
data2 varchar2(100) := null;
File_Handle UTL_FILE.FILE_TYPE;
Read_Line VARCHAR2(1023);
BEGIN
File_Handle := utl_file.fopen('C:\temp', 'test.csv', 'r');
LOOP
BEGIN
UTL_FILE.GET_LINE(File_Handle, Read_line);
-- カンマ位置
c1 := instr(Read_line,',',1,1);
c2 := instr(Read_line,',',1,2);
-- 列データ
data1 := ltrim(substr(Read_line,1 ,c1-1));
data2 := ltrim(substr(Read_line,c1+1,c2-c1-1));
-- update
update test.tbl1 set col1= data2
where col1= data1;
commit;
exception
when no_data_found then exit;
END;
END LOOP;
UTL_FILE.FCLOSE(File_Handle);
END;
END ;


コンパイルは通るのですが、いざ実行しようとすると、

行1でエラーが発生しました。 :
ORA-29280:invalid directory path
ORA-06512 at "SYS.UTL_FILE", line 33
ORA-06512 at "SYS.UTL_FILE", line 436
ORA-06512 at "test.TEST_CONVRT", line 11
ORA-06512 at line 1

と表示されました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1338675
も見てみたのですが、初心者なので、いまひとつ理解できません。
SYS.UTL_FILEを参照できていないということはなんとなく、わかりました。

どのようにすれば解決できるでしょうか?
また、開発初心者なので、参考になるサイトが知りたいです。
どなたか、よろしくお願いします。

Oracle10g(リンクをはっています)
Winxp


http://oshiete1.goo.ne.jp/kotaeru.php3?q=995849
を参考にして以下のようなプロシージャを作成しました。

CREATE OR REPLACE PROCEDURE test.Test_Convrt IS
BEGIN
DECLARE
c1 number;
c2 number;
data1 varchar2(100) := null;
data2 varchar2(100) := null;
File_Handle UTL_FILE.FILE_TYPE;
Read_Line VARCHAR2(1023);
BEGIN
File_Handle := utl_file.fopen('C:\temp', 'test.csv', 'r');
LOOP
BEGIN
UTL_FILE.GET_LINE(File_Handle, Re...続きを読む

Aベストアンサー

10g なら絶対パスでのファイルアクセスは止めた方がよいですよ
参考のサイトにディレクトリと絶対パスの両方のファイルアクセスのサンプルがあります。

UTL_FILE パッケージにアクセスできていますので
ORA-29280:invalid directory path
が直接の原因です。サーバ初期化パラメータ(SPFILE)の未設定によるものでしょう

参考URL:http://biz.rivus.jp/technote507106.html

QUTL_FILEパッケージについて

UTL_FILEパッケージを使用してPL/SQLよりテキスト出力したいのですが上手くいきません。
まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。
次に以下のようにプロシージャを作成しました。
create procedure kan_exp(
fir IN varchar2, filename IN varchar2) is
file UTL_FILE.FILE_TYPE;
CURSOR tk01_kan_c IS
select aaa,bbb
from tableCCC
begin
file := UTL_FILE.FOPEN(dir, filename, 'w');
UTL_FILE.PUT_LINE(file, 'TEST');
UTL_FILE.NEW_LINE(file);
for kanrec in tk01_kan_c loop
UTL_FILE.PUT_LINE(file, 'TEST');
end loop;
END kan_exp;
/
それを以下のように呼び出しましたが、
execute kan_exp('UTL_FILE_DIR', 'aaa.csv');
「ORA-29280:無効なディレクトリパスです。」エラーが発生します。
色々と調べてユーザに権限が必要かと思い、「grant read on directory to User」としましたが、ユーザーまたはロール'User'は存在しませんと出てきます。※もちろんUserは存在します。
なにか足りないものがあるのでしょうか?
ご教示いただけますでしょうか?宜しくお願いします。

UTL_FILEパッケージを使用してPL/SQLよりテキスト出力したいのですが上手くいきません。
まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。
次に以下のようにプロシージャを作成しました。
create procedure kan_exp(
fir IN varchar2, filename IN varchar2) is
file UTL_FILE.FILE_TYPE;
CURSOR tk01_kan_c IS
select aaa,bbb
from tableCCC
begin
file := UTL_FILE.FOPEN(dir, filename, 'w');
UTL_FILE.PUT_LINE(file, 'TEST...続きを読む

Aベストアンサー

本当にそういうコードなのか、転記ミスなのか良くわからないので
勝手に判断することを許してください。

>まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。

「sysdbaで」を「sysユーザで」と解釈します。
sysでディレクトリオブジェクトを作って、他のユーザが
そのディレクトリオブジェクトを使ってファイルに書き出す場合、
そのユーザに対しwrite権限が必要になります。

>create procedure kan_exp(
>fir IN varchar2, filename IN varchar2) is
kan_expの第一パラメータ名は「dir」?だとすると
>execute kan_exp('UTL_FILE_DIR', 'aaa.csv');
この第一パラメータの値は'aaa'だと思います。

>「grant read on directory to User」としましたが
オブジェクト名が抜けているようですよ。
grant write on directory aaa to User;
のようになります。

本当にそういうコードなのか、転記ミスなのか良くわからないので
勝手に判断することを許してください。

>まずsysdbaにて「create directory aaa as 'd:\'」にてディレクトリを作成しました。

「sysdbaで」を「sysユーザで」と解釈します。
sysでディレクトリオブジェクトを作って、他のユーザが
そのディレクトリオブジェクトを使ってファイルに書き出す場合、
そのユーザに対しwrite権限が必要になります。

>create procedure kan_exp(
>fir IN varchar2, filename IN varchar2) is
kan_expの第...続きを読む

QトリガーにてUTL_FILEパッケージを使用しログ作成を行いたい

いつもお世話になっております。
Oracle9i+WindowsXPの環境で、以下のようなトリガーをテーブル更新or挿入タイミングで起動させ、更新対象行をログのような形でUTL_FILEパッケージを使用してCSVファイルを作成しようとしておりますが、テーブルを更新してもエラーが発生します。

create or replace procedure kan_proc(aaa in number)
is
PRAGMA AUTONOMOUS_TRANSACTION;
file UTL_FILE.FILE_TYPE;
filename varchar2(10);
BEGIN
filename := 'aaa.csv';
file := UTL_FILE.FOPEN('FILE_PATH', filename, 'w');
UTL_FILE.PUT_LINE(file, aaa);


END kan_exp;
/

create or replace trigger kan_trg
after update or insert on t_kan
each row
aaa number
begin
if updating then
select colA into aaa from t_kan where :new.colA = colA;
kan_proc(aaa);
else if inserting then
???
end;
/

エラーNo.はちょっと今はわかりませんが、必要であれば提示させていただきます。
全く自信がないのですが更新時上記のようなSQL文で更新対象行がとれるものなのでしょうか?
また、ちょっと別問題ですが、挿入時のコードが思いつきませんが、何か良い方法はありますでしょうか?
申し訳ありませんがどなたかご教授いただけませんでしょうか?
宜しくお願い致します。

いつもお世話になっております。
Oracle9i+WindowsXPの環境で、以下のようなトリガーをテーブル更新or挿入タイミングで起動させ、更新対象行をログのような形でUTL_FILEパッケージを使用してCSVファイルを作成しようとしておりますが、テーブルを更新してもエラーが発生します。

create or replace procedure kan_proc(aaa in number)
is
PRAGMA AUTONOMOUS_TRANSACTION;
file UTL_FILE.FILE_TYPE;
filename varchar2(10);
BEGIN
filename := 'aaa.csv';
file := UTL_FILE.FOPEN('FILE_PATH', filename...続きを読む

Aベストアンサー

ログへの出力は、トランザクション不成立の場合でも記録して良いんですか?
当初、自律型トランザクションを書いているくらいなので、トランザクションの成否にかかわらず、
挿入/更新の行為があった場合、記録するのが目的のような気がしますけど、AFTERトリガだし・・

極端なケースですが、トランザクションがなんらかのエラーでロールバックの場合でもUTL_FILEで出力した分はそのまま、
但し、エラーを引き起こす場所が、AFTERトリガの前だと、エラー該当レコードに関する記録はされずに終わる。
という微妙なログのような気がします。

QOracleプロファイル設定(PASSWORD_GRACE_TIME)

Oracleのプロファイル設定で「PASSWORD_GRACE_TIME」パラメータでの質問です。本で調べたら、「パスワード失効後の最初のログインが成功してからのパスワードを変更するまでの猶予日数」とあります。
その「パスワード失効後」とは「FAILED_LOGIN_ATTEMPTS」で設定した回数でログイン失敗した後及び「PASSWORD_LIFE_TIME」を過ぎた後のことを言っているのでしょうか?
又、後者の場合、有効日数が過ぎて何日が経っても最初のログインを成功させることが出来てしまうのでしょうか?
よろしくお願い致します。

Aベストアンサー

PASSWORD_LIFE_TIMEで指定した期限をすぎても
ログインはでき、その後そのユーザがログインしたときからPASSWORD_GRACE_TIMEで指定した期限を過ぎると初めてユーザーのアカウントはロックされるようです。
--------前回パスワード変更
|
|
(PASSWORD_LIFE_TIME)
|
|
--------
|
|
--------PASSWORD_LIFE_TIME経過後初ログイン
|
(PASSWORD_GRACE_TIME)
|
--------パスワード変更しないとユーザアカウントロック

PASSWORD_LIFE_TIME経過後はログインごとに警告が出るようです。


「オラクルデータベースセキュリティガイド10g」の
「7セキュリティポリシー」の
 「パスワード・エイジングおよび期限切れ」にばっちり載っています。

以下URL参照してください。

参考URL:http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v5/network.101/B13508-01.pdf

PASSWORD_LIFE_TIMEで指定した期限をすぎても
ログインはでき、その後そのユーザがログインしたときからPASSWORD_GRACE_TIMEで指定した期限を過ぎると初めてユーザーのアカウントはロックされるようです。
--------前回パスワード変更
|
|
(PASSWORD_LIFE_TIME)
|
|
--------
|
|
--------PASSWORD_LIFE_TIME経過後初ログイン
|
(PASSWORD_GRACE_TIME)
|
--------パスワード変更しないとユーザアカウントロック

PASSWORD_LIFE_TIME経過後はログインごとに警告が出るようです。


...続きを読む

Qoracleでexpdpを使いデータをexport

こんにちは

現在oracleでexpdpを使い、目的のテーブルをexportしたいと思っていますが、エラーが出て出来ません。

oracleのバージョンは10.2です

行った作業は下記です
1sqlplusにログイン
>sqlplus ユーザ名/パスワード@データベース別名
2.ディレクトリオブジェクトの作成
>create directory ディレクトリオブジェクト名 as 'ディレクトリのフルパス';
3.使用ユーザにディレクトリに対する読み込み書き込み権限を付ける
>grant read,write on directory ディレクトリオブジェクト名 to ユーザ名;
4.sqlplusからログオフし、ディレクトリを作成。rootで入り、chmodで777にディレクトリの権限を変更

expdpを実行 この時のユーザーはgrant権限で読み込み書き込みを与えたユーザー

>expdp ユーザ名/パスワード@データベース別名 DIRECTORY=ディレクトリオブジェクト名 DUMPFILE=ダンプファイル名 LOGFILE=ログファイル名



==ここからエラーが出ます==

ORA-39001: 引数値が無効です
ORA-39000: ダンプ・ファイル指定が無効です
ORA-31641: ダンプ・ファイル"/xxxx/xxxx.dmp"を作成できません
ORA-27040: ファイルの作成エラー、ファイルを作成できません
SVR4 Error: 13: Permission denied

ご存知の方いらっしゃいましたらエラー退避方法教えていただけないでしょうか?
どうぞよろしくお願いいたします

こんにちは

現在oracleでexpdpを使い、目的のテーブルをexportしたいと思っていますが、エラーが出て出来ません。

oracleのバージョンは10.2です

行った作業は下記です
1sqlplusにログイン
>sqlplus ユーザ名/パスワード@データベース別名
2.ディレクトリオブジェクトの作成
>create directory ディレクトリオブジェクト名 as 'ディレクトリのフルパス';
3.使用ユーザにディレクトリに対する読み込み書き込み権限を付ける
>grant read,write on directory ディレクトリオブジェクト名 to ユー...続きを読む

Aベストアンサー

今度は、ディレクトリ名を英字にしてみてやってみるとか、
「ttp://unkar.jp/read/pc11.2ch.net/db/1163907455」
みたいに、DBインストールユーザーに権限がなかったりとか
のような気も。
やってみるのが一番かと。


このQ&Aを見た人がよく見るQ&A

おすすめ情報