SQL

expdpとimpdp

  • このエントリーをはてなブックマークに追加

expdpとimpdpのサンプルコマンドです。

expdpはDBからバックアップ用のダンプファイルを作成します。

impdpはダンプファイルからオブジェクトを復元します。

スキーマを指定してexpdpとimpdp

expdpコマンドサンプル

expdp TEST/TEST@localhost:1521/orclpdb SCHEMAS=TEST DIRECTORY=DUMPDIR COMPRESSION=ALL DUMPFILE=expdp_TEST_20200617.dmp LOGFILE=expdp_TEST_20200617.log
項目 説明
接続情報 スキーマ名/パスワード@ホスト名:ポート番号/pdb名
SCHEMAS スキーマ名を指定する
DIRECTORY ディレクトリオブジェクトを指定する
DUMPFILE 出力されるダンプファイル名を指定する
COMPRESSION 「ALL」の全体圧縮を指定する(ALL以外にもDATA_ONLY、METADASTA_ONLY、NONEがあります)
LOGFILE コマンド実行時のコンソールログのファイル名を指定する

impdpコマンドサンプル

impdp TEST/TEST@localhost:1521/orclpdb SCHEMAS=TEST TABLE_EXISTS_ACTION=REPLACE DIRECTORY=DUMPDIR DUMPFILE=expdp_TEST_20200617.dmp logfile=impdp_TEST_20200617.log
項目 説明
接続情報 スキーマ名/パスワード@ホスト名:ポート番号/pdb名
SCHEMAS スキーマ名を指定する
TABLE_EXISTS_ACTION 「REPLACE」のテーブルをドロップしてから再作成するを指定する(REPLACE以外にもSKIP、TRUNCATE、APPEND)
DIRECTORY expdpを行った際に使ったオブジェクトディレクトリでいいかと
DUMPFILE expdpで作成したダンプファイル名を指定する
LOGFILE コマンド実行時のコンソールログのファイル名を指定する

impdpの注意点

スキーマ単位でごっそりインポートしたい場合、プロシージャ-等のオブジェクトが残っていると、オブジェクトが既に存在するというエラーが発生して、インポートがスキップされるので、事前にオブジェクトを全て削除しておく必要があります。

スキーマ-を削除し、再作成してからimpdpを行う方法が楽ですが、スキーマに付与されていた権限なども再度作成する必要があるため、スキーマや権限を作成するコマンドを持っていないのであれば、事前にオブジェクトを削除する方法を推奨します。

オブジェクトを全部ドロップするSQL作成クエリ

主要オブジェクトをドロップするSQLを作成するクエリです。spoolされるsqlを実行すればオブジェクトを削除できます。危険なクエリなので十分に注意して使って下さい。

SET LINES 10000
SET PAGES 0
SET TERMOUT OFF
SET HEADING OFF
SET TRIMSPOOL ON
SET FEEDBACK OFF
SET ECHO OFF

SPOOL DROP.sql

SELECT
  CASE OBJECT_TYPE
    WHEN 'DATABASE LINK'  THEN 'DROP DATABASE LINK ' || OBJECT_NAME || ';'
    WHEN 'TRIGGER'        THEN 'DROP TRIGGER '       || OBJECT_NAME || ';'
    WHEN 'SYNONYM'        THEN 'DROP SYNONYM '       || OBJECT_NAME || ';'
    WHEN 'VIEW'           THEN 'DROP VIEW '          || OBJECT_NAME || ' CASCADE CONSTRAINTS;'
    WHEN 'SEQUENCE'       THEN 'DROP SEQUENCE '      || OBJECT_NAME || ';'
    WHEN 'PACKAGE BODY'   THEN 'DROP PACKAGE BODY '  || OBJECT_NAME || ';'
    WHEN 'PACKAGE'        THEN 'DROP PACKAGE '       || OBJECT_NAME || ';'
    WHEN 'FUNCTION'       THEN 'DROP FUNCTION '      || OBJECT_NAME || ';'
    WHEN 'PROCEDURE'      THEN 'DROP PROCEDURE '     || OBJECT_NAME || ';'
    WHEN 'TABLE'          THEN 'DROP TABLE '         || OBJECT_NAME || ' CASCADE CONSTRAINTS;'
  END QUERY
FROM
  DBA_OBJECTS
WHERE
    OWNER = 'TEST'
AND OBJECT_TYPE IN (
       'DATABASE LINK'
      ,'TRIGGER'
      ,'SYNONYM'
      ,'VIEW'
      ,'SEQUENCE'
      ,'PACKAGE BODY'
      ,'PACKAGE'
      ,'FUNCTION'
      ,'PROCEDURE'
      ,'TABLE'
    )
ORDER BY
  CASE OBJECT_TYPE
    WHEN 'DATABASE LINK'  THEN 1
    WHEN 'TRIGGER'        THEN 2
    WHEN 'SYNONYM'        THEN 3
    WHEN 'VIEW'           THEN 4
    WHEN 'SEQUENCE'       THEN 5
    WHEN 'PACKAGE BODY'   THEN 6
    WHEN 'PACKAGE'        THEN 7
    WHEN 'FUNCTION'       THEN 8
    WHEN 'PROCEDURE'      THEN 9
    WHEN 'TABLE'          THEN 10
  END
;

SPOOL OFF
  • このエントリーをはてなブックマークに追加

コメントを残す

*