質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

1回答

3701閲覧

PL/SQLで割当てたネットワークドライブへのファイル書き出しができない

haraoji

総合スコア0

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

1クリップ

投稿2022/12/06 10:40

質問内容

タイトルの通りなのですが、PL/SQLで別サーバへのファイル書き込みが「ORA-29283: 無効なファイル操作です。」によってエラーになります。
原因や権限設定で他に確認すべきことをご教示お願いいたします。

ソース

処理が終了したことを示すファイルなので、中身は空です。

sql

1 WK_FILENAME := 'complete_' || TO_CHAR(SYSDATE, 'yyyyMMddHHmmss') || '.csv; 2 WK_FILEHANDLE := UTL_FILE.FOPEN( 'target_dir', WK_FILENAME, 'w' ); 3 UTL_FILE.NEW_LINE(WK_FILEHANDLE); 4 UTL_FILE.FCLOSE(WK_FILEHANDLE);

結果

UTL_FILE.FOPENの'target_dir'のパスによって変わります。

CREATE DIRECTORY target_dir AS 'C:/tmp';
→成功する
CREATE DIRECTORY target_dir AS 'L:/output/csv';
→ORA-29283
CREATE DIRECTORY target_dir AS '//10.90.X.XX/output/csv';';
→ORA-29283

上記のように、C直下のローカルディレクトリを指定した時は問題なく実行でき、同じディレクトリに別のパスで指定した場合に権限エラーになります。
※Grantでディレクトリに対しread, write権限を付与しております。

確認したこと

・書き出し先のサーバへエクスプローラーからアクセスできること。
・タスクマネージャーでoracleの実行ユーザを確認するとSYSTEMなので、割当したLドライブへの権限もフルコントロールを設定されていること。

確認したこと

接続元:windows server 2003
接続先:windows server 2016
接続元がDBサーバなのですが、確認はadminユーザで行いました。
PL/SQLは自分の端末のクライアントツールで行なっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2022/12/06 11:43

Windowsサーバーで動作させてるoracleはまともに触ったことがありません。経験のないことで全然見当違いなことだったらすみませんが、調べた限りではネットワークドライブの割当はユーザーごとだとかで(正式文書見つけられてません)、oracleの実行ユーザーとは違うためにドライブが見えてないのではないかと思います。UNCでそのまま記述すると実は行けるとか書いてある記事もありました。 とりあえず同じような現象の報告を載せておきます。 https://community.oracle.com/tech/developers/discussion/2423637/sys-utl-file-ora-29283-invalid-file-operation-on-windows-system
haraoji

2022/12/06 12:36

ありがとうございます。おっしゃるようにネットワークドライブの割当がユーザごとなので、私が確認に使ったユーザとoracleの起動ユーザが別なのでアクセスできていないようです。 リンクのコミュニティの内容も確認して何か手がかりがないか確認させていただきます。
Orlofsky

2022/12/06 21:31

この件はオラクル・サポートに質問したことがあります。オラクル・サポートの了解を得ない限りサポートからの回答は公開できません。 直接オラクル・サポートに問い合わせては?要サポート契約。
guest

回答1

0

まず、ネットワークドライブ(L:)に関してですが、この情報はPCではなく、ユーザが持っており、他のユーザのものを参照できません。

次に UNC でのアクセスに関してですが、SYSTEM アカウントは他のマシンのリソースにアクセスできません。
サービスを起動するアカウントを Administrator 権限を持つ他のものに変更するとアクセスできるようになるようです。

変更したアカウントでサーバーにログインし、ネットワークドライブの接続を行えば、サービスを再起動したときにネットワークドライブも使えるようになるかもしれません。

追記

共有フォルダに NULL セッション(匿名アクセス)を許可するとアクセスできるようです。
「ネットワーク セキュリティ: LocalSystem による NULL セッション フォールバックを許可する」
https://learn.microsoft.com/ja-jp/windows/security/threat-protection/security-policy-settings/network-security-allow-localsystem-null-session-fallback

投稿2022/12/06 11:57

編集2022/12/06 23:18
KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haraoji

2022/12/06 12:48 編集

ありがとうございます。 ・私が確認したAdmin権限のユーザとSystemは別ユーザなので、systemユーザは参照できるようになっていない。 ・SYSTEM アカウントは他マシンのリソースにアクセスできないので、oracleがSYSTEMユーザで起動されているので起動ユーザを変更しないとアクセスできない。 このように理解しました。oracle等サーバ管理は別の人が担当しているため、現状の起動設定だと難しいことお伝えし別手段も視野に入れて検討したいと思います。
dameo

2022/12/06 13:01

とりあえずこんな記事(ただし古い)を見つけたのですが、「SYSTEM アカウントは他のマシンのリソースにアクセスできません」は本当なのでしょうか? https://atmarkit.itmedia.co.jp/ait/articles/0905/08/news095.html マイクロソフトの資料だとやはりよくわかりません。 https://learn.microsoft.com/ja-jp/windows/security/identity-protection/access-control/local-accounts#sec-localsystem ※手元にWindowsは1台しかなく、確認できない
haraoji

2022/12/06 14:52

先ほどのコミュニティ以外にも調査いただきありがとうございます。 確かに「ネットワークリソース(ネットワークを経由して利用するリソース)にも、ローカルのコンピュータアカウントの資格情報でアクセスできる」と書かれてますね。。 SYSTEMアカウントについてはドキュメントも曖昧ですし、他のユーザのようなログインもできないため調査が難しいように感じました。コミュニティの投稿者も最終的には別の手段を探すと書いておりますので、別の手段が現実的ではと考えておりますが、明日サーバ管理者に相談してみます。
dameo

2022/12/06 23:52

この辺だとできそうな感じに書かれています。ただ自分で確かめられないので分かりません。 https://superuser.com/questions/1319097/share-folder-with-system-user-from-another-machine https://learn.microsoft.com/en-us/answers/questions/793838/system-account-can-access-shares-without-explicit.html 確認手段としてはドメイン環境でフォルダ共有して、所定のコンピュータのローカルシステムアカウントに対してアクセス権を付けたら、アクセスできるかどうか?だと思います。とりあえず質問には「タスクマネージャーでoracleの実行ユーザを確認するとSYSTEMなので、割当したLドライブへの権限もフルコントロールを設定されていること」とあったので、確認済みなのかと思ってましたが…
KOZ6.0

2022/12/07 03:37

ActiveDirectory に所属している全てのマシンの SYSTEM ユーザーがドメインに対して完全なアクセス権をもつ? これが出来たら相当悪辣なことが出来ると思うんですが・・・ RDSサーバーが AD を兼ねてたんじゃないでしょうか。
KOZ6.0

2022/12/07 03:41

あ、上のリンクを見てませんでした。 なんだか出来そうな感じですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問