0
0

More than 5 years have passed since last update.

Oracleで特定スキーマの全データをコピー

Posted at

用途

Oracleで特定スキーマのデータだけをコピーしたい場合に使用。
本番機から開発機へのデータコピー用です。

素直にExport/Importなど、システム管理者用のコマンドを使う方がおすすめです。
ですが、アプリケーションエンジニアだとシステム権限を持ってなくて
できいという方も多いと思うので、そういった方には使えます。

DECLARE
   x_schema_name   VARCHAR2(40) := 'targetSchema';
   x_db_link_name  VARCHAR2(40) := 'sourceDB';
BEGIN
  FOR rec IN(
    SELECT A.OWNER, A.TABLE_NAME FROM ALL_TABLES A
    WHERE A.OWNER IN(x_schema_name)
    ORDER BY A.OWNER , A.TABLE_NAME
  ) LOOP
   BEGIN
     EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || rec.OWNER || '.' || rec.TABLE_NAME; 
     EXECUTE IMMEDIATE 'INSERT /*+ APPEND */  INTO ' || rec.OWNER || '.' || rec.TABLE_NAME || ' SELECT * FROM ' || rec.OWNER || '.' || rec.TABLE_NAME || '@' || x_db_link_name; 
     COMMIT;
   EXCEPTION
     WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE(rec.OWNER || '.' || rec.TABLE_NAME);
   END;
 END LOOP;
END;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0