Win2000 Oracle10gにて、
PL/SQLのUTL_FILEパッケージを使用して、
TEXTファイルを操作しようとしています。
ところが、FOPEN時、
ORA-29280: 無効なディレクトリ・パスです。
となってしまいます。

Oracleのsysユーザにて、
ディレクトリオブジェクトを作成し、
READ,WRITE権限をPUBLICに与えました。
これで出来そうなのですが…。

なぜにできないのでしょうか?
どなたか解決方法をご存知ではないですか・

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

A 回答 (1件)

オラクルサービスを動作させているユーザにアクセスできないディレクトリなのでは?



windows2000側のアクセス権定義内容を確認してみてください。

この回答への補足

早速の回答ありがとうございます。

10gでは、推奨されていませんが、
初期ファイルにUTL_FILE_DIRを設定することにより、
そのディレクトリ、または、ファイルに
アクセスできましたので、残念ながら、
Win側のアクセス権限は、満たされているようです。

また、何かお気づきの点がありましたら、お願いします。

補足日時:2005/04/19 10:21
    • good
    • 0

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

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

この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

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

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

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',...続きを読む

Aベストアンサー

こんにちわ。

> ひょっとして、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

Qファイルへの書き込みができない

ファイルへの書き込みができない

実行時エラーは表示されないのですが、ファイルへ出力されません。
コードは以下のようにしています。
よろしくお願いします。


declare
FILE_HANDLE utl_file.file_type;
STR varchar2(1023);

begin

-- 書き込みモードでファイルオープン
FILE_HANDLE := UTL_FILE.FOPEN('c:\tmp','test.txt','W');

STR := 'test';

-- ファイルへ出力
UTL_FILE.PUT(FILE_HANDLE,STR);

-- ファイルのクローズ --
UTL_FILE.FCLOSE(FILE_HANDLE);

exception
when others then
dbms_output.put_line('その他エラー');

end;
/

Aベストアンサー

以下の点で、不備がある可能性がありますね。
・Oracleの初期化パラメータ
・ディレクトリの権限
参考URLを参考に試してみることをオススメします。

参考になれば幸いです。

参考URL:http://www.shift-the-oracle.com/plsql/utl_file/utl_file_dir.html

QStatement ignored というエラー

Oracle 9iを使ってsqlファイルを実行させたところ、タイトルにあるように、
PL/SQL: SQL Statement ignored
というエラーメッセージが出力されました。
いろいろ検索してみると、これは、私にシステム権限がないことからおこるとあったのですが、
その設定変更の仕方がいまいちよくわかりませんでした。設定変更のしかたを教えていただけないでしょうか。
また、設定変更したことによって変わるのは私自身のシステム権限だけであって、他にコンピュータ(UNIX)を共有している人たちには影響はありませんよね?
立て続けに質問ばかりすみませんが、よろしくおねがいします。

Aベストアンサー

PL/SQLで権限がないということは、EXECUTE PROCEDUREシステム権限がないということでしょうか・・・。
前後のエラーも記載していただいた方が良いとは思いますが。

システム権限の付与方法は下記で行うことが可能です。
※ここでいう"ユーザ"はOracleユーザのことでスキーマとイコールです。
1.SYSTEMまたはSYS(DBA権限を持ったユーザ)でログイン
2.grant execute procedure to [対象ユーザ];
  または
  grant resource to [対象ユーザ];

以上で一応権限付与はできますが、どのような処理を行いたいかによって、これだけで解決するかどうかわかりません。
また、他の人への影響ですが、ユーザをどのように使用しているか、どのようなポリシーのシステムかによって異なります。(「私自身」というのが、セッションのことかスキーマのことかわかりませんでした。)
同じユーザを他の人と共通で使っていれば、もちろん他の人へ影響が出ますし、一人1ユーザ(スキーマ)で割当てられていれば、影響なく使えます。
「影響が出る」という意味は、セキュリティレベルが権限付与された分落ちるということで、機能的に使用できなくなることはありません。

なお、セッション単位で権限を割当てる方法はないと思っています。
付与した権限をセッション終了次第revokeすれば、元に戻るのではないでしょうか。

PL/SQLで権限がないということは、EXECUTE PROCEDUREシステム権限がないということでしょうか・・・。
前後のエラーも記載していただいた方が良いとは思いますが。

システム権限の付与方法は下記で行うことが可能です。
※ここでいう"ユーザ"はOracleユーザのことでスキーマとイコールです。
1.SYSTEMまたはSYS(DBA権限を持ったユーザ)でログイン
2.grant execute procedure to [対象ユーザ];
  または
  grant resource to [対象ユーザ];

以上で一応権限付与はできますが、どのような処理を...続きを読む

QORACLEのUTL_FILEパッケージについて

皆さん、いつもありがとうございます。
OracleのUTL_FILEパッケージを使ったのですが
うまくいきません。
どなたか教えてください。
よろしくお願いします。
目的)
UTL_FILEパッケージを使ってファイルを作成したい
出力先はネットワークにある共有フォルダーです。
質問)
ファイルの書き込み先をネットワークドライブまたは
他の端末(\\コンピュータ名\共有フォルダー)した時
以下のエラーになります。出力先を自端末にした場合は
うまくいきます。ちなみに初期パラには「UTL_FILE_DIR = *」
と記述してOracleの再起動もしております。

エラーメッセージ : User-Defined Exception

以上です。

Aベストアンサー

記憶違いかも知れませんが、ファイル出力は自サーバにしか出せなかったと思います。
9iは出来るのかな?

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

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

Qユーザーへのディレクトリ権限付与について

WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。

create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;

次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON directory dir to username;
また、grant READ,WRITE ON directory dir to public;
とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。

何か間違っておりますでしょうか?
それとも何か手順で足らないものがあるのでしょうか?
ご教示いただければと思います。

WindowsXPのOracle9i環境にて、
まず、以下のようにしてユーザ「username」を作成しました。

create user username identified by Password default tablespace tab_space temporary tablespacetemp;
grant dba,resource,connect to username;

次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp';
ディレクトリを作成しました。
そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。
grant READ,WRITE ON di...続きを読む

Aベストアンサー

dba_usersに出てこない以上、そのユーザはデータベース上には存在しないかと思います。

そのパッケージソフトが、どのような構成をしているのかわかりませんが、パッケージ上のユーザとデータベースのユーザが別なのではないでしょうか。

パッケージ上のAというユーザが、データベース上のXというユーザにログインして動作するというのは、よくあるパターンです。

パッケージのサポートに確認するのが良いかと思います。

QPL/SQLで@ファイル名が反応しません

はじめまして、PC超初心者なのにOracleを勉強し始めました。
PL/SQLの本を買って見よう見真似でやっているのですが、SQL*PLUSから@<ファイル名>を実行しても何の反応もありません。

SQL>@sample1

としても

SQL>@sample1
SQL>

と何事もなかったようになります。

本によればエディタに保存したSQL内容が実行されるとあるのですが。。。
ちなみにサンプルエディタをダウンロードして、実行しようとしても全くの無反応です。

どこか根本的な設定がおかしいのでしょうか。。。
どなたかご回答いただけると助かります。

Aベストアンサー

sample1というファイルはどこのフォルダにありますか?
ファイル名にフォルダ名をつけたフルパスで実行してみてください。
たとえばc:\hogeというフォルダにsample1.sqlファイルがあるのであれば
SQL>@c:\hoge\sample.sql
で実行されます。

コマンドプロンプト版のsqlplusだとsqlplusを実行したフォルダにファイルがあるとフォルダ名を省略したファイル名で実行できます。
画面のsqlplusは・・・どこだったか忘れた(^^;

#なんか過去にもこんな質問があったような・・・

QSYSユーザーでログインしたい

SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
お願いします。

Aベストアンサー

>SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
特別なことする必要がないと思います。
ログインできない場合いろいろな原因が考えられます。
一番可能な原因は設定によってSYSユーザーNOMAL権限でログインできない場合あります。
この場合
sqlplus sys/パスワード@接続文字列 as sysdba
で試してください。


>SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
conn sys/パスワード@接続文字列 as sysdba

QPL/SQL PLS-00103エラーについて

PL/SQL PLS-00103エラーについて

夜分遅くに申し訳ございません。
PL/SQLのコーディングを実施し、コンパイル中にPLS-00103エラーが発生してしまったのですが、
対処方法がわからず困ってしまいました。

・メッセージ内容:”PLS-00103: 記号"="が見つかりました。”


上記メッセージで指定されていたソース内容(イメージ)↓
--------------------------------------------------------------


BEGIN
LV_STEP := '**登録処理開始'  -- 左記の:=の=部分がエラーメッセージで指定されていました。(LV_STEPはログ出力用の変数)

CURSOR AAAA IS
SELECT GG.EPLY_NO GG_EPLY_NO
,GG.R_CD GG_R_CD
,GG.S_CARD GG_S_CARD

    ・
   ・
FROM GRA_GRA_TR GG



------------------------------------------------------------------

といった感じなのですが、
このPLS-00103エラーの対処方法をどなたかご教示いただけませんでしょうか。
よろしくお願いいたします。

PL/SQL PLS-00103エラーについて

夜分遅くに申し訳ございません。
PL/SQLのコーディングを実施し、コンパイル中にPLS-00103エラーが発生してしまったのですが、
対処方法がわからず困ってしまいました。

・メッセージ内容:”PLS-00103: 記号"="が見つかりました。”


上記メッセージで指定されていたソース内容(イメージ)↓
--------------------------------------------------------------


BEGIN
LV_STEP := '**登録処理開始'  -- 左記の:=の=部分がエラーメッセージで指定されていま...続きを読む

Aベストアンサー

PLS-00103は構文解析エラーです。
指定されている行にはセミコロンがありませんが、
これが原因だとすると、
エラーメッセージは後ろに続く文で出るはずです。
エラーメッセージで示された箇所より前の部分(行)を調べてください。

# ソースの内容をイメージで示されても困ります。
# 回答者に超能力者は(おそらく)いないと思いますので
# 勘で答えるよりほか仕方がありません。


人気Q&Aランキング

おすすめ情報