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

PL/SQLプロシージャを使用してOracle10gでテーブルのダンプを取得する

    10gを使用しているため、DataPumpAPIを使用してこれを行うことができます。宛先OSディレクトリにマップするディレクトリオブジェクトに対する読み取りおよび書き込みアクセス権が必要です。

    次の例では、EMPとDEPTの2つのテーブルを、DATA_PUMP_DIRで識別されるディレクトリ内のEMP.DMPというファイルにエクスポートしています。

    SQL> declare
      2      dp_handle       number;
      3  begin
      4      dp_handle := dbms_datapump.open(
      5      operation   => 'EXPORT',
      6      job_mode    => 'TABLE');
      7
      8    dbms_datapump.add_file(
      9      handle    =>  dp_handle,
     10      filename  => 'emp.dmp',
     11      directory => 'DATA_PUMP_DIR');
     12
     13    dbms_datapump.add_file(
     14      handle    => dp_handle,
     15      filename  => 'emp.log',
     16      directory => 'DATA_PUMP_DIR',
     17      filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
     18
     19    dbms_datapump.metadata_filter(
     20      handle => dp_handle,
     21      name   => 'NAME_LIST',
     22      value  => '''EMP'',''DEPT''');
     23
     24    dbms_datapump.start_job(dp_handle);
     25
     26    dbms_datapump.detach(dp_handle);
     27  end;
     28  /    
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    

    @DerekMaharは尋ねます:

    「クライアント側から実行できる同様のデータポンプツールまたはAPIはありますか?」

    PL / SQL APIとOSユーティリティの両方であるDataPumpは、Oracleディレクトリに書き込みます。 Oracleディレクトリは、データベースに表示されるOSディレクトリを表す必要があります。通常、これはサーバー上のディレクトリですが、理論的にはPCドライブをネットワークにマッピングすることは可能だと思います。これは良い考えだとネットワーク管理者を説得する必要があります。そうではないので、売り込みは難しいです...

    古いIMPおよびEXPユーティリティは、クライアントディレクトリから読み取りおよび書き込みを行うため、理論的には、ローカルダンプファイルをリモートデータベースにIMPすることが可能です。しかし、これは実際的なアプローチではないと思います。その性質上、ダンプファイルは大きくなる傾向があるため、ネットワークを介したインポートは遅く、失敗する傾向があります。ダンプファイルをzip形式で圧縮し、サーバーにコピーしてそこからインポートする方がはるかに優れたソリューションです。



    1. スレッドを使用してデータベース要求を行う

    2. Microsoft Azure:それが何であり、あなたのビジネスがどのように利益を得ることができるか

    3. 一時テーブルなしでSQLクエリを使用してグループ内の各要素のシーケンス番号を追加する方法

    4. MySQLテーブルの列のサイズを変更するにはどうすればよいですか?