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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

受付中

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

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

1回答

0グッド

1クリップ

444閲覧

投稿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は自分の端末のクライアントツールで行なっています。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

回答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

総合スコア2252

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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