sql >> データベース >  >> RDS >> Oracle

Oracle外部テーブル

    外部テーブルは、Oracleの重要な機能の1つです。この投稿では、例を使用してOracleの外部テーブルについて説明します。

    Oracleの外部テーブルとは何ですか?

    1)外部テーブルは、データがデータベース外のフラットファイルに保存されている読み取り専用テーブルです

    2)外部テーブル機能を使用して、データベース内のテーブルであるかのように外部ファイルにアクセスできます。

    3)外部テーブルを作成するときは、Oracleでその構造と場所を定義します。基本的には、メタデータをオラクル内に保存するだけです

    4)テーブルをクエリすると、Oracleは外部テーブルを読み取り、データがデータベースに保存されているかのように結果を返します。

    5)Oracleサーバーは、フラットファイルを読み取るための2つの主要なOracleドライバーを提供します

    1. Oracle_loader:これは、Oracleローダーテクノロジーを使用してフラットファイルを読み取るために使用されます。基本的に、SQLローダーテクノロジを使用して解釈できるファイルを読み取ることができます
    2. Oracle_datapump:これは、プラットフォームに依存しない形式を使用したデータのインポートとエクスポートの両方に使用されます

    外部テーブルデータへのアクセス

    外部テーブルにアクセスするには、いくつかの手順を実行する必要があります

    • 最初にcreatedirectoryコマンドを使用して、外部ファイルの場所を指すディレクトリオブジェクトを定義する必要があります
     sqlplus "/assysdba"ディレクトリext_dirを「/export/ home / ora/external」として作成します;
    • 外部ファイルにアクセスするユーザーは、ディレクトリに対する読み取りおよび書き込み権限を持っている必要があります。
    ディレクトリext_dirのすべてをユーザーに付与します;
    • ディレクトリの下にいくつかのファイルを作成または配置しましょう
     SQL> Conn user/userSQL>スプールcity.lstSQL>都市の選択|| ‘、’ ||状態|| ‘、’ ||国からの国;SQL>スプールオフ

    これで、ディレクトリ内のcity.lstファイルを確認できるはずです

    • 次に、以下のコマンドを使用して外部テーブルを作成する必要があります
    テーブルcity_ext(city varchar(10)、state varchar(14)、country varchar(13))Organization externalを作成します(タイプoracle_loaderDefault directory ext_dirAccess parameters(レコードは「、」(city char(10)、 state char(14)、country char(13)))Location('city.lst'))PARALLEL 5REJECT LIMIT UNLIMITED; 

    各用語の説明

    外部の組織 データがデータベースの外部に保存されていることを示します
    タイプ データベースの外部データを解釈するのはOracleドライバーまたはAPIです。何も指定しない場合は、oracle_loaderがデフォルトになります
    デフォルトディレクトリ フラットファイルを保存できるディレクトリの場所です。デフォルトディレクトリは、ログファイルや不良ファイルなど、Oracleドライバのアクセスから作成された補助ファイルを保存するためにも使用されます。複数のディレクトリを指定して、複数のドライブでの負荷分散を容易にすることができます
    アクセスパラメータ この外部テーブルの特定のアクセスドライバのパラメータの値を指定できます
    場所 外部フラットファイル名を指定できます
    拒否制限 Oracleサーバーが操作を中止してエラーを返す前に発生する可能性のある変換エラーの数を指定できます

    5)外部テーブルからのデータの選択

    SQL> select * from city_ext;

    これは、オペレーティングシステムレベルのファイルであるcity.lstから読み取られます。

    ファイルcity.lstが存在しない場合、selectステートメントはこのエラーをスローします

     SELECT ** ERROR at line 1:ORA-29913:Error in ODCIEXTTABLEOPEN calloutORA-29400:data Cartridge errorKUP-04040:file city.lst in EXT_DIR not foundORA-06512:at "SYS.ORACLE_LOADER"、line 14ORA- 06512:1行目

    外部テーブルの制限

    1. 挿入、更新、削除の操作は実行できません
    2. Oracleインデックス作成はできません
    3. 制約はありません

    オラクルの外部テーブルの利点

    1. a)アクセスごとに全表スキャンIDが必要な場合でも、外部テーブルのクエリは非常に迅速に完了します
    2. b)外部テーブルを相互に結合したり、標準のOracleテーブルに結合したりできます
    3. c)外部テーブルにビューを作成できます

    外部テーブル用の11gR2の新しいアップデート

    Oracle 11gリリース2では、外部テーブルによって読み取られる前にファイルを処理するために使用されるディレクトリオブジェクトとスクリプトを識別できる新しいPREPROCESSOR句が導入されています。この機能は11gR1(11.1.0.7)にバックポートされました。

    PREPROCESSOR句は、圧縮されたファイルを読み取る場合に特に便利です。圧縮されたファイルは、ファイルシステムで解凍する必要がなく、解凍されて外部テーブルプロセスに直接パイプされるためです。

    このパラメータをよりよく理解するために例を見てみましょう。

    city.listが圧縮されているとすると、ファイル名はcity.list.Z

    になります。
    テーブルcity_ext(city varchar(10)、state varchar(14)、country varchar(13))Organization externalを作成します(タイプoracle_loaderDefault directory ext_dirPREPROCESSOR ext_dir:uncompressAccess parameters(レコードは「、」(city char( 10)、state char(14)、country char(13)))Location('city.lst.Z'))PARALLEL 5REJECT LIMIT UNLIMITED; 

    ここで、PREPROCESSOR句は、データを検索する前に、コマンドuncompressを使用してファイルcity.lst.Zを最初に解凍します。すべてがその場で行われ、ファイルcity.lst.Zを解凍する必要はありません

    Oracle外部テーブルを使用したデータのアンロード/ロード

    オラクルは、外部テーブルでのデータポンプテクノロジーのサポートも提供しました。

    oracle_datadumpアクセスドライバを使用してテーブルをアンロードできます

     CREATE TABLEcountries_xtORGANIZATION EXTERNAL(TYPE ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION('countries.dmp'))AS SELECT * FROMcountries; 

    これにより、ディレクトリにcountries.dmpが作成されます。これで、国のテーブルが削除されても、countries_xtテーブルを使用してデータを監視できます。

    ダンプファイルを別のデータベースに移動してから、データを監視するための外部テーブルを作成することもできます

     CREATE TABLEcountries_xt(city VARCHAR2(10)、state VARCHAR2(9)、countries VARCHAR2(9))ORGANIZATION EXTERNAL(TYPE ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION('countries.dmp')); Select * fromcountries_xt;  

    12cデータベースの外部テーブルの拡張

    Oracle_loader

    Location句には、ワイルド文字を使用できます。 *は複数の文字を表し、?単一文字の場合。

    フィールドcsv句が導入されました

    Oracle_datapump

    高度な圧縮オプションを使用してデータをアンロードできます

    関連記事

    外部テーブルを使用したORA-29913
    外部テーブルに関するヒント
    外部テーブルを使用してCLOBフィールドをロードする方法
    oraclecreatetable as select


    1. PythonによるSQLインジェクション攻撃の防止

    2. sshトンネルチェーン(ダブルトンネル、企業ネットワーク内のサーバー)を介してOracle Database 11gサーバーに接続するにはどうすればよいですか?

    3. 待機統計の概要

    4. OracleでのFLASHBACKの使用