2017-11-23 6 views
0

を開くことができませんだから、私は、ファイル私はオラクルEXTERNAL TABLESにロードしたいA.txtオラクル:ログファイルのエラー

ENG,England,English 
SCO,Scotland,English 
IRE,Ireland,English 
WAL,Wales,Welsh 

を持っています。これは今まで私がやったすべてのことです。

CREATE DIRECTORY LOCAL_DIR AS 'C:/Directory/' 
GRANT ALL ON DIRECTORY LOCAL_DIR TO ruser; 

私はその後、私は次のクエリを実行C:/Directory/

A.txtを貼り付け:

CREATE TABLE countries_ext (
    country_code  VARCHAR2(5), 
    country_name  VARCHAR2(50), 
    country_language VARCHAR2(50) 
) 
ORGANIZATION EXTERNAL (
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY LOCAL_DIR 
    ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE 
    FIELDS TERMINATED BY ',' 
    MISSING FIELD VALUES ARE NULL 
    (
     country_code,country_name,country_language 
    ) 
) 
    LOCATION ('Countries1.txt') 
) 
PARALLEL 5 
REJECT LIMIT UNLIMITED; 

それはTable Created.

を示したが、私はクエリを実行しようとすると:

SELECT * FROM countries_ext;次の例外が発生します:

Unable to open file countries_ext_5244.log. The location or file does not exist. 

私がここで間違っていることを誰かに教えてもらえますか?

+0

'c:\ directory'は、データベースが稼働しているサーバ上、またはクライアントPC上にあります(違いがある場合)? –

+0

こんにちは 'C:\ directory'はサーバ上にあります。dbはオンで、リモートマシンにはありません – Edward

答えて

0

あなたはこのようなあなたのディレクトリを作成しました:

CREATE DIRECTORY LOCAL_DIR AS 'C:/Directory/' 

しかしthe Oracle documentation パスに応じては、末尾にスラッシュが含まれていません。


external tablesもリモートマシンにあるファイルを使用することができますか?」

データベースサーバーからアドレス可能な任意のOSディレクトリに対してディレクトリオブジェクトを作成できます。そのため、リモートマシンをデータベースサーバー上のドライブにマップする必要があります。

これにはいくつかの問題があります。最初の経験では、DBAはデータベースを他のサーバー、特に管理外のサーバーに依存させることを嫌っています。 2つ目はパフォーマンスです。外部テーブルはヒープテーブルのようにチューニングすることはできません。なぜなら、それらはローカルOS上のファイルなのだからです。ネットワークの待ち時間のために、リモートファイルに対するパフォーマンスは間違いなく悪化します。これは3番目の問題であるネットワーク管理者になります。ネットワーク管理者はリモートファイルに対して実行されるクエリのネットワークへの影響を懸念します。私は正直言って、私は外部テーブルがリモートファイルに対して使用されていることを見たことがない。

これはうまくいかないとは言えません。しかし、それが最良の解決策であるかどうかは、ファイルの大きさ、クエリの頻度、ネットワークの容量、データベースサーバー上でファイルをホストしない理由などによって異なります。

+0

後ろにスラッシュを付けずにチェックしましたが、問題はないようです – Edward

+0

解決に感謝します。あなたは正しかった。私の無知を許してください。しかし、リモートマシンにあるファイルに対しても '外部テーブル 'を使うことができます。あるいは、 '外部表 'が可能でない場合、他に実行可能な選択肢がありますか? – Edward