Oracle Databaseユーティリティ 11g リリース1(11.1) E05768-02 |
|
この章では、 ORACLE_DATAPUMP
アクセス・ドライバについて説明します。この章の内容は、次のとおりです。
この章で説明する情報を使用するには、外部表を作成し、その外部表に問合せを実行するためのSQLの知識が必要です。
注意:
|
外部表の作成時に、access_parameters
句内の特定のパラメータを指定できます。この句およびその個別のパラメータはオプションです。たとえば、LOGFILE
を指定し、VERSION
は指定しない、またはその逆も可能です。access_parameters
句の構文は次のとおりです。
コメントは、2つのハイフンで始まり、その後にテキストが続く行です。コメントは、次の例のように、アクセス・パラメータより前に位置する必要があります。
--This is a comment. --This is another comment. NOLOG
二重ハイフンの右側のすべてのテキストは行末まで無視されます。
デフォルト: DISABLED
ダンプ・ファイル・セットに書き込む前にデータを圧縮するかどうかを指定します。
COMPRESSION=[ENABLED | DISABLED]
ENABLED
を指定すると、アップロード操作全体でデータが圧縮されます。
DISABLED
を指定すると、アップロード操作でデータは圧縮されません。
次の例では、COMPRESSION
パラメータがENABLED
に設定されています。したがって、dept.dmp
ダンプ・ファイルに書き込まれるすべてのデータは圧縮形式になります。
CREATE TABLE table deptXTec3 ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY def_dir1 ACCESS PARAMETERS (COMPRESSION ENABLED) LOCATION ('dept.dmp'));
デフォルト: DISABLED
ダンプ・ファイル・セットに書き込む前にデータを暗号化するかどうかを指定します。
ENCRYPTION=[ENABLED | DISABLED]
ENABLED
を指定すると、すべてのデータが暗号化形式でダンプ・ファイル・セットに書き込まれます。
DISABLED
を指定すると、データは暗号化形式でダンプ・ファイル・セットに書き込まれません。
このパラメータは、エクスポート操作でのみ使用します。
次の例では、ENCRYPTION
パラメータがENABLED
に設定されています。したがって、dept.dmp
ファイルに書き込まれるすべてのデータは暗号化形式になります。
CREATE TABLE deptXTec3 ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY def_dir1 ACCESS PARAMETERS (ENCRYPTION ENABLED) LOCATION ('dept.dmp'));
デフォルト: LOGFILE
が指定されない場合、デフォルトのディレクトリにログ・ファイルが作成され、ログ・ファイルの名前は、表名および.log
の拡張子を持つプロセスIDから生成されます。ログ・ファイルがすでに同じ名前で存在する場合は、アクセス・ドライバによってそのログ・ファイルが再びオープンされ、新しいログ情報がファイルの終わりに追加されます。
LOGFILE
は、ダンプ・ファイルのアクセス中に生成されたすべてのメッセージを含むログ・ファイルの名前を指定します。NOLOGFILE
を使用してログ・ファイルの作成を回避できます。
NOLOGFILE
または
LOGFILE=[directory_object:]logfile_name
ログ・ファイル名の一部としてディレクトリ・オブジェクトを指定しない場合、DEFAULT
DIRECTORY
属性で指定されたディレクトリ・オブジェクトが使用されます。ディレクトリ・オブジェクトが指定されず、デフォルトのディレクトリも指定されない場合は、エラーが返されます。パラレル・ロードまたはパラレル・アンロード時に一意のファイル名を作成するためのワイルドカードの使用の詳細は、「LOGFILEのファイル名」を参照してください。
次の例では、ダンプ・ファイルdept_dmp
は、ディレクトリ・オブジェクトload_dir
で識別されるディレクトリ内にありますが、ログ・ファイルdeptxt
.log
は、ディレクトリ・オブジェクトlog_dir
で識別されるディレクトリ内にあります。
CREATE TABLE dept_xt (dept_no INT, dept_name CHAR(20), location CHAR(20)) ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY load_dir ACCESS PARAMETERS (LOGFILE log_dir:deptxt) LOCATION ('dept_dmp'));
パラレル・ロードでファイル名を一意にするには、アクセス・ドライバで記号置換を行います。サポートされている記号置換は次のとおりです。
%p
は、現行のプロセスのプロセスIDに置換されます。たとえば、アクセス・ドライバのプロセスIDが12345の場合、exttab_%p
.log
は、exttab_12345.log
となります。
%a
は、現行のプロセスのエージェント番号に置換されます。エージェント番号は、外部表にアクセスしている各パラレル・プロセスに割り当てられた一意の番号です。この番号には、3文字になるように、左側に0が埋められます。たとえば、3番目のパラレル・エージェントがファイルを作成する際に、exttab_%a
.log
がファイル名として指定されている場合、エージェントはexttab_003.log
というファイルを作成します。
%%
は、'%
'に置換されます。ファイル名にパーセント符号が必要な場合、この記号置換を使用する必要があります。
%
文字に前述のリスト内の文字以外の文字が続く場合、エラーが返されます。
%p
または%a
を使用しないで出力ファイルに対して一意のファイル名を作成し、外部表にパラレルでアクセス中の場合、出力ファイルが破損するか、エージェントがファイルに書込みをできないという問題が発生する場合があります。
ファイルに対して拡張子が指定されていない場合は、デフォルトの拡張子である.log
が使用されます。生成された名前が有効なファイル名ではない場合、エラーが返され、データのロードまたはアンロードは行われません。
VERSION
句は、ダンプ・ファイルを読み込むOracle Databaseの最小バージョンを指定するために使用します。バージョン10.2を指定すると、10.2と11.1の両方のデータベースでダンプ・ファイルを読み込むことができます。バージョン11.1を指定すると、11.1のデータベースのみでダンプ・ファイルを読み込むことができます。
デフォルト値はCOMPATIBLE
です。
外部表の作成時にSQL ENCRYPT
句を指定する場合は、次の点に注意してください。
ENCRYPT
句を指定した列は、暗号化されてからダンプ・ファイルに書き込まれます。
ORACLE_DATAPUMP
アクセス・ドライバを使用してファイルにデータを移入できます。ファイル内のデータは、バイナリ形式で記述され、ORACLE_DATAPUMP
アクセス・ドライバによってのみ読取りが可能です。ファイルにデータが移入された後は、同じデータベースまたは異なるデータベース内の別の外部表のダンプ・ファイルとしてファイルを使用できます。
次の手順ではサンプル・スキーマoe
を使用して、ORACLE_DATAPUMP
アクセス・ドライバを使用したデータのアンロード方法およびロード方法の例を示します。(例では、ディレクトリ・オブジェクトdef_dir1
がすでに存在し、ユーザーoe
にはそれに対する読取りおよび書込み権限が付与されているとします。)
AS
SELECT
句を使用した外部表の作成の一環としてのみファイルにデータを移入します。次の例では、inventories_xt
という名前の外部表を作成し、外部表のダンプ・ファイルにoe
スキーマ内のinventories
表のデータを移入します。
SQL> CREATE TABLE inventories_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_xt.dmp') 7 ) 8 AS SELECT * FROM inventories; Table created.
inventories
および新しい外部表の両方を、次のとおり記述します。その両方は一致している必要があります。
SQL> DESCRIBE inventories Name Null? Type ---------------------------------------- --------- ---------------- PRODUCT_ID NOT NULL NUMBER(6) WAREHOUSE_ID NOT NULL NUMBER(3) QUANTITY_ON_HAND NOT NULL NUMBER(8) SQL> DESCRIBE inventories_xt Name Null? Type ----------------------------------------- -------- ----------------- PRODUCT_ID NOT NULL NUMBER(6) WAREHOUSE_ID NOT NULL NUMBER(3) QUANTITY_ON_HAND NOT NULL NUMBER(8)
SQL> SELECT COUNT(*) FROM inventories_xt; COUNT(*) ---------- 1112
inventories
のデータと比較します。違いがないことを確認します。
SQL> SELECT * FROM inventories MINUS SELECT * FROM inventories_xt; no rows selected
CREATE
TABLE
AS
SELECT
文によりダンプ・ファイルが移入された後では、外部表に対する行の追加、更新または削除は実行できません。外部表のデータの変更を試みると、エラーが発生します。次の例では、既存の外部表へのデータ操作言語(DML)の使用を試みます。次のエラーが返されます。
SQL> DELETE FROM inventories_xt WHERE warehouse_id = 5; DELETE FROM inventories_xt WHERE warehouse_id = 5 * ERROR at line 1: ORA-30657: operation not supported on external organized table
CREATE
TABLE
文のAS
SELECT
句は存在しません。
SQL> CREATE TABLE inventories_xt2 2 ( 3 product_id NUMBER(6), 4 warehouse_id NUMBER(3), 5 quantity_on_hand NUMBER(8) 6 ) 7 ORGANIZATION EXTERNAL 8 ( 9 TYPE ORACLE_DATAPUMP 10 DEFAULT DIRECTORY def_dir1 11 LOCATION ('inv_xt.dmp') 12 ); Table created.
inventories
表のデータと比較します。比較する前に、product_id
フィールドは互換性のあるデータ型に変換されます。違いがないことを確認します。
SQL> SELECT * FROM inventories MINUS SELECT * FROM inventories_xt2; no rows selected
SQL> CREATE TABLE inventories_xt3 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_xt1.dmp', 'inv_xt2.dmp', 'inv_xt3.dmp') 7 ) 8 PARALLEL 3 9 AS SELECT * FROM inventories; Table created.
inventories
を比較します。違いがないことを確認します。
SQL> SELECT * FROM inventories MINUS SELECT * FROM inventories_xt3; no rows selected
inventories
表の数行を含む外部表を作成します。
SQL> CREATE TABLE inv_part_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_p1_xt.dmp') 7 ) 8 AS SELECT * FROM inventories WHERE warehouse_id < 5; Table created.
inventories
の残りの行を含む別の外部表を作成します。
SQL> drop table inv_part_xt; Table dropped. SQL> SQL> CREATE TABLE inv_part_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_p2_xt.dmp') 7 ) 8 AS SELECT * FROM inventories WHERE warehouse_id >= 5; Table created.
SQL> CREATE TABLE inv_part_all_xt 2 ( 3 product_id NUMBER(6), 4 warehouse_id NUMBER(3), 5 quantity_on_hand NUMBER(8) 6 ) 7 ORGANIZATION EXTERNAL 8 ( 9 TYPE ORACLE_DATAPUMP 10 DEFAULT DIRECTORY def_dir1 11 LOCATION ('inv_p1_xt.dmp','inv_p2_xt.dmp') 12 ); Table created.
inventories
を比較します。違いがないことを確認します。これは、外部表の作成で使用された2つのダンプ・ファイルに同じメタデータ(同じ表名inv_part_xt
、同じ列情報など)があるためです。
SQL> SELECT * FROM inventories MINUS SELECT * FROM inv_part_all_xt; no rows selected
ダンプ・ファイルは、記述されるすべてのデータを保持できるサイズのディスクに格納する必要があります。すべてのデータを保持できない容量の場合、CREATE
TABLE
AS
SELECT
文に対してエラーが返されます。この問題を軽減するには、CREATE
TABLE
AS
SELECT
文の実行時に、複数のディレクトリ・オブジェクトを作成する方法があります。ただし、これらのディレクトリは、異なるディスクに存在する必要があります。LOCATION
句でdirectory:file
形式を使用して複数の位置を指定し、PARALLEL
句を指定することで複数のファイルを作成できます。外部表を移入するために作成された各パラレルI/Oサーバー・プロセスでは、固有のファイルに書込みを実行します。各I/Oサーバー・プロセスには固有のファイルが必要であるため、LOCATION
句のファイル数と並列度が一致している必要があります。余分なファイルを指定した場合は、すべて無視されます。指定された並列度に対して必要数のファイルが存在しない場合、LOCATION
句のファイル数と一致するよう並列度が下げられます。
inventories
表の3つのファイルへのアンロードの例を次に示します。
SQL> CREATE TABLE inventories_XT_3 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_xt1.dmp', 'inv_xt2.dmp', 'inv_xt3.dmp') 7 ) 8 PARALLEL 3 9 AS SELECT * FROM oe.inventories; Table created.
ORACLE_DATAPUMP
外部表から読み込む場合、並列度はLOCATION
句のファイル数に関連付けられません。ダンプ・ファイル内に情報が存在するため、複数のパラレルI/Oサーバー・プロセスで、同じファイル内の異なる部分を読み取ることができます。そのため、存在するダンプ・ファイルが1つのみの場合でも、並列度を上げてファイルの読取り速度を上げることができます。
異なる外部表から移入されたすべてのダンプ・ファイルは、別の外部表のLOCATION
句で指定できます。たとえば、異なる本番データベースのデータを個別のファイルにアンロードし、次にそれらのファイルをデータ・ウェアハウスで定義された外部表に含めることができます。これにより、複数のソースから容易にデータを集計できます。唯一の制限は、すべての外部表のメタデータが完全に同じでなければいけない必要がある点です。つまり、キャラクタ・セット、タイムゾーン、スキーマ名、表名および列名がすべて一致する必要があります。また、列は同じ順序で定義され、そのデータ型も完全に同一である必要があります。1つ目の外部表を作成した後で、2つ目の外部表に同じ表名を使用できるようにするには、1つ目の外部表を削除する必要があります。こうすることで、2つのダンプ・ファイルにリストされたメタデータは同じ状態になり、これらのダンプ・ファイルを同時に使用して同じ外部表を作成できます。
SQL> CREATE TABLE inv_part_1_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_p1_xt.dmp') 7 ) 8 AS SELECT * FROM oe.inventories WHERE warehouse_id < 5; Table created. SQL> DROP TABLE inv_part_1_xt; SQL> CREATE TABLE inv_part_1_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT directory def_dir1 6 LOCATION ('inv_p2_xt.dmp') 7 ) 8 AS SELECT * FROM oe.inventories WHERE warehouse_id >= 5; Table created. SQL> CREATE TABLE inv_part_all_xt 2 ( 3 PRODUCT_ID NUMBER(6), 4 WAREHOUSE_ID NUMBER(3), 5 QUANTITY_ON_HAND NUMBER(8) 6 ) 7 ORGANIZATION EXTERNAL 8 ( 9 TYPE ORACLE_DATAPUMP 10 DEFAULT DIRECTORY def_dir1 11 LOCATION ('inv_p1_xt.dmp','inv_p2_xt.dmp') 12 ); Table created. SQL> SELECT * FROM inv_part_all_xt MINUS SELECT * FROM oe.inventories; no rows selected
外部表を使用してデータベース間でデータを移動する際には、次のような問題があります。
ORACLE_DATAPUMP
アクセス・ドライバは、これらの状況の一部を自動的に解消します。
次のデータ型は、ロード時およびアンロード時に自動的に変換されます。
外部表でサポートされていないデータ型を使用するとエラーが返されます。サポートされていないデータ型であるLONG
を使用した例を次に示します。
SQL> CREATE TABLE bad_datatype_xt 2 ( 3 product_id NUMBER(6), 4 language_id VARCHAR2(3), 5 translated_name NVARCHAR2(50), 6 translated_description LONG 7 ) 8 ORGANIZATION EXTERNAL 9 ( 10 TYPE ORACLE_DATAPUMP 11 DEFAULT DIRECTORY def_dir1 12 LOCATION ('proddesc.dmp') 13 ); translated_description LONG * ERROR at line 6: ORA-30656: column type not supported on external organized table
外部表は、列に対して有効なすべてのデータ型のサブセットをサポートしています。文字データ型(LONG
以外)、RAW
データ型、すべての数値データ型、すべての日付、タイムスタンプおよび期間データ型をサポートしています。
この項では、ORACLE_DATAPUMP
アクセス・ドライバを使用して、サポートされていないデータ型のデータをアンロードおよび再ロードする方法を説明します。サポートされないデータ型の一部を次に示します。
BFILE
データ型には、ファイルのディレクトリ・オブジェクトとディレクトリ・オブジェクト内のファイル名という2つ情報が格納されます。
ORACLE_DATAPUMP
アクセス・ドライバを使用して、ディレクトリ・オブジェクト名およびファイル名を外部表の2つの列に格納することにより、BFILE
列をアンロードできます。DBMS_LOB
.FILEGETNAME
プロシージャは両方の名前を返します。ただし、これはプロシージャであるため、SELECT
文では使用できません。かわりに、2つのファンクションを使用します。最初のファンクションは、ディレクトリ・オブジェクト名を返し、2つ目のファンクションはファイル名を返します。
次の手順では、BFILE
データ型のアンロードおよびロードの例を示します。
BFILE
列のディレクトリ・オブジェクトを抽出するファンクションを作成します。列がNULL
の場合は、NULL
が返されます。
SQL> CREATE FUNCTION get_dir_name (bf BFILE) RETURN VARCHAR2 IS 2 DIR_ALIAS VARCHAR2(255); 3 FILE_NAME VARCHAR2(255); 4 BEGIN 5 IF bf is NULL 6 THEN 7 RETURN NULL; 8 ELSE 9 DBMS_LOB.FILEGETNAME (bf, dir_alias, file_name); 10 RETURN dir_alias; 11 END IF; 12 END; 13 / Function created.
BFILE
列のファイル名を抽出するファンクションを作成します。
SQL> CREATE FUNCTION get_file_name (bf BFILE) RETURN VARCHAR2 is 2 dir_alias VARCHAR2(255); 3 file_name VARCHAR2(255); 4 BEGIN 5 IF bf is NULL 6 THEN 7 RETURN NULL; 8 ELSE 9 DBMS_LOB.FILEGETNAME (bf, dir_alias, file_name); 10 RETURN file_name; 11 END IF; 12 END; 13 / Function created.
BFILE
列にNULL
値を持つ行を追加できます。
SQL> INSERT INTO PRINT_MEDIA (product_id, ad_id, ad_graphic) 2 VALUES (3515, 12001, NULL); 1 row created.
新しく作成したファンクションを使用して外部表を移入できます。BFILE
列がNULL
の場合、ファンクションはad_graphic_dir
列およびad_graphic_file
列をNULL
に設定します。
print_media
表からのデータを含める外部表を作成します。get_dir_name
およびget_file_name
ファンクションを使用して、BFILE
列の構成要素を取得します。
SQL> CREATE TABLE print_media_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE oracle_datapump 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('pm_xt.dmp') 7 ) AS 8 SELECT product_id, ad_id, 9 get_dir_name (ad_graphic) ad_graphic_dir, 10 get_file_name(ad_graphic) ad_graphic_file 11 FROM print_media; Table created.
BFILE
列をロードするファンクションを作成します。外部表のad_graphic_dir
列がNULL
の場合、ファンクションはNULL
を返します。
SQL> CREATE FUNCTION get_bfile (dir VARCHAR2, file VARCHAR2) RETURN BFILE is 2 bf BFILE; 3 BEGIN 4 IF dir IS NULL 5 THEN 6 RETURN NULL; 7 ELSE 8 RETURN BFILENAME(dir,file); 9 END IF; 10 END; 11 / Function created.
get_bfile
ファンクションを使用してBFILE
列を含む新しい表を移入できます。
SQL> CREATE TABLE print_media_int AS 2 SELECT product_id, ad_id, 3 get_bfile (ad_graphic_dir, ad_graphic_file) ad_graphic 4 FROM print_media_xt; Table created.
print_media
表の列のデータは一致している必要があります。
SQL> SELECT product_id, ad_id, 2 get_dir_name(ad_graphic), 3 get_file_name(ad_graphic) 4 FROM print_media_int 5 MINUS 6 SELECT product_id, ad_id, 7 get_dir_name(ad_graphic), 8 get_file_name(ad_graphic) 9 FROM print_media; no rows selected
ORACLE_DATAPUMP
アクセス・ドライバは、LONG
列およびLONG
RAW
列のアンロードに使用できますが、データはLOBフィールドにのみ再ロードできます。次の手順は、LONG
およびLONG
RAW
データ型のアンロードの例を示します。
LONG
列またはLONG
RAW
列が含まれる場合、外部表の対応する列を、LONG
列に対してはCLOB
を、LONG
RAW
列に対してはBLOB
を定義します。
SQL> CREATE TABLE long_tab 2 ( 3 key SMALLINT, 4 description LONG 5 ); Table created. SQL> INSERT INTO long_tab VALUES (1, 'Description Text'); 1 row created.
LONG
列からのデータを含めたCLOB
列を含む外部表を作成できます。外部表をロードするときには、LONG
列をCLOB
に変換するためにTO_LOB
演算子が使用されます。
SQL> CREATE TABLE long_tab_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('long_tab_xt.dmp') 7 ) 8 AS SELECT key, TO_LOB(description) description FROM long_tab; Table created.
LONG
列のかわりにLOB列が含まれます。
SQL> CREATE TABLE lob_tab 2 AS SELECT * from long_tab_xt; Table created.
SQL> SELECT * FROM lob_tab; KEY DESCRIPTION ---------------------------------------------------------------------------- 1 Description Text
FINAL型の列のオブジェクトは、オブジェクト型の各属性を外部表の列に移動することで移入されます。また、外部表には、列オブジェクトがアトミックNULLであるかどうかを追跡するための、新規の列が必要です。次の手順では、FINALオブジェクト型を含む列のアンロードおよびロードの方法を示します。
warehouse
列がアトミックNULL
であるかを追跡するために外部表のwarehouse
列を使用します。
SQL> CREATE TABLE inventories_obj_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('inv_obj_xt.dmp') 7 ) 8 AS 9 SELECT oi.product_id, 10 DECODE (oi.warehouse, NULL, 0, 1) warehouse, 11 oi.warehouse.location_id location_id, 12 oi.warehouse.warehouse_id warehouse_id, 13 oi.warehouse.warehouse_name warehouse_name, 14 oi.quantity_on_hand 15 FROM oc_inventories oi; Table created.
これで、オブジェクト型の属性を含む外部表の列を、その型の列をロードする際の型コンストラクタのファンクションの引数として使用できます。外部表のwarehouse
列は、オブジェクトのコンストラクタ・ファンクションをコールするか、列をNULL
に設定するかを判断するために使用されます。
oc_inventories
ビューと同様の新規の内部表をロードします。(WHERE
1=0
句を使用すると、古い表と同様の表を作成しますが、データは古い表から新しい表にはコピーされません。)
SQL> CREATE TABLE oc_inventories_2 AS SELECT * FROM oc_inventories WHERE 1 = 0; Table created. SQL> INSERT INTO oc_inventories_2 2 SELECT product_id, 3 DECODE (warehouse, 0, NULL, 4 warehouse_typ(warehouse_id, warehouse_name, 5 location_id)), quantity_on_hand 6 FROM inventories_obj_xt; 1112 rows created.
オブジェクト表には、表のすべての行を一意に識別するオブジェクト識別子があります。そのため次のような問題があります。
次の手順は、前述の最後の状況の例を示します。
SQL> CREATE TYPE person AS OBJECT (name varchar2(20)) NOT FINAL 2 / Type created. SQL> CREATE TABLE people OF person; Table created. SQL> INSERT INTO people VALUES ('Euclid'); 1 row created.
OID
列を使用する外部表を作成します。
SQL> CREATE TABLE people_xt 2 ORGANIZATION EXTERNAL 3 ( 4 TYPE ORACLE_DATAPUMP 5 DEFAULT DIRECTORY def_dir1 6 LOCATION ('people.dmp') 7 ) 8 AS SELECT SYS_NC_OID$ oid, name FROM people; Table created.
INSERT
文を実行して、新しい表に古い表からアンロードされたデータをロードします。
SQL> CREATE TABLE people2 OF person; Table created. SQL> SQL> INSERT INTO people2 (SYS_NC_OID$, SYS_NC_ROWINFO$) 2 SELECT oid, person(name) FROM people_xt; 1 row created. SQL> SQL> SELECT SYS_NC_OID$, name FROM people 2 MINUS 3 SELECT SYS_NC_OID$, name FROM people2; no rows selected
外部表アクセス・パラメータで、列名や表名などの識別子が指定された場合、特定の値はアクセス・パラメータ・パーサーにより予約語とみなされます。予約語を識別子として使用する場合、二重引用符で囲む必要があります。ORACLE_DATAPUMP
アクセス・ドライバの予約語は、次のとおりです。
BADFILE
COMPATIBLE
COMPRESSION
DATAPUMP
DEBUG
ENCRYPTION
INTERNAL
JOB
LATEST
LOGFILE
NOBADFILE
NOLOGFILE
PARALLEL
TABLE
VERSION
WORKERID
|
![]() Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|