DataPump Oracle

超基本的な Datapump の使い方|断片化の解消にも効果的

表領域をバックアップしてもとに戻す一番簡単な方法が知りたい!

いくつか方法は考えられるが、今回は Datapump を使った方法を紹介。

断片化の解消にも効果的!

まずは、検証で使う TEST という名前の表領域を作成し、MYTABLE という名前の表をその表領域に格納しておく。

実行例

 SQL> create tablespace test datafile '/u01/app/orcl/oradata/orcl/test01.dbf' size 100M;
 表領域が作成されました。

 SQL> col file_name for a40
 SQL> set linesize 200
 SQL> set long 3000
 SQL> select tablespace_name, file_name, status, bytes/1024/1024 mbytes, autoextensible from dba_data_files;

 TABLESPACE_NAME FILE_NAME                                 STATUS     MBYTES AUT
 --------------- ----------------------------------------  --------- ------- ---
 SYSTEM          /u01/app/orcl/oradata/orcl/system0.dbf    AVAILABLE     790 YES               
 SYSAUX          /u01/app/orcl/oradata/orcl/sysaux0.dbf    AVAILABLE    1020 YES               
 UNDOTBS1        /u01/app/orcl/oradata/orcl/undotbs.dbf    AVAILABLE    4095 YES
 USERS           /u01/app/orcl/oradata/orcl/users01.dbf    AVAILABLE    5665 YES
 TEST            /u01/app/orcl/oradata/orcl/test01.dbf     AVAILABLE     100 NO

 SQL> create user scott identified by tiger default tablespace test;
 ユーザーが作成されました。

 SQL>  alter user scott quota 10M on test; 
 ユーザーが変更されました。

 SQL> grant sysdba to scott;
 権限付与が成功しました。

 SQL> conn scott/tiger
 接続されました。

 SQL> create table mytable (name char(20));
 表が作成されました。

 SQL>  insert into mytable values ('HELLOMYWORLD');
 1行が作成されました。

 SQL> select * from mytable;
 NAME
---------------
 HELLOMYWORLD

 SQL> select table_name from dba_tables where tablespace_name= 'TEST';

 TABLE_NAME
---------------
 MYTABLE

 SQL> commit;
 コミットが完了しました。

エクスポートを実行

DIRECTORY OBJECT の作成 & 読み書き権限の付与

ダンプファイルや Datapump 実行時ログを配置するディレクトリを OS 上で用意してから、Oracle からそのディレクトリを認識させる。

そしてそのディレクトリに対するアクセス権を付与しよう。

create or replace directory <ディレクトリ名> as '<パス>';
grant read, write on directory <ディレクトリ名> to <スキーマ名>;

実行例

SQL> create or replace directory dumpdir as '/u01/app/orcl/dumpdir';

ディレクトリが作成されました。

SQL> grant read, write on directory dumpdir to scott;

権限付与が成功しました。

DataPump を実行するスキーマに必要な権限を付与する

Export/Import を実行するそれぞれのスキーマに実行権を付与する。

  grant exp_full_database to <スキーマ名>;
  grant imp_full_database to <スキーマ名>;

エクスポートとインポートを実施するスキーマが異なっていてもOK!

実行例

SQL> grant exp_full_database to scott;

権限付与が成功しました。

SQL>  grant imp_full_database to scott;

権限付与が成功しました。

EXPDP を実行

バックアップしたい表領域を指定してエクスポートする。

expdp <スキーマ名>/<パスワード> directory = <ディレクトリ名> tablespaces = <表領域名>

実行例

SQL> host expdp scott/tiger directory=dumpdir tablespaces=test;

Export: Release 11.2.0.3.0 - Production on 金 6月 25 13:04:48 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
"SCOTT"."SYS_EXPORT_TABLESPACE_01"を起動しています: scott/******** directory=dumpdir dumpfile=expdp.dmp tablespaces=test 
BLOCKSメソッドを使用して見積り中です...
オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
BLOCKSメソッドを使用した見積り合計: 64 KB
オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
オブジェクト型TABLE_EXPORT/TABLE/COMMENTの処理中です
オブジェクト型TABLE_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
. . "SCOTT"."MYTABLE"                           5.031 KB       1行がエクスポートされました
マスター表"SCOTT"."SYS_EXPORT_TABLESPACE_01"は正常にロード/アンロードされました
******************************************************************************
SCOTT.SYS_EXPORT_TABLESPACE_01に設定されたダンプ・ファイルは次のとおりです:
  /home/orcl/dumpdir/expdp.dmp
ジョブ"SCOTT"."SYS_EXPORT_TABLESPACE_01"が13:04:58で正常に完了しました

DataPump は OS のコマンドだけど、OS コマンドは host や ! を前につけると sqplus からでも実行ができるよ

対象の表領域を再作成

表領域の定義を確認する

該当の表領域を削除するまえに、定義を確認しよう。

select dbms_metadata.get_ddl('TABLESPACE','<表領域名>') from dual;

実行例

SQL> select dbms_metadata.get_ddl('TABLESPACE','TEST') from dual;

DBMS_METADATA.GET_DDL('TABLESPACE','TEST')
--------------------------------------------------------------------------------

  CREATE TABLESPACE "TEST" DATAFILE
  '/u01/app/orcl/oradata/orcl/test01
.dbf' SIZE 104857600
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO

表領域を削除する

drop tablespace <表領域名> including contents and datafiles;

実行例

SQL> drop tablespace test including contents and datafiles;

表領域が削除されました。

SQL> select * From mytable;
select * From mytable
              *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。

新しい表領域を作成する

先ほど確認した表領域の定義を使って新しい表領域を作成する。

create tablespace <新しい表領域名> datafile '<パス>'

実行例

SQL> CREATE TABLESPACE "TEST" DATAFILE
'/u01/app/orcl/oradata/orcl/test01.dbf' SIZE 104857600
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;

表領域が作成されました。

インポートを実行

Expdp 実行時に生成されたダンプファイルを指定してインポートを実行する。

impdp <スキーマ名>/<パスワード> directory = <ディレクトリ名> dumpfile= <ダンプファイル名> tablespaces = <新しい表領域名>

実行例

SQL> host impdp scott/tiger directory=dumpdir dumpfile=expdp.dmp tablespaces=test;

Import: Release 11.2.0.3.0 - Production on 金 6月 25 13:15:17 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
マスター表"SCOTT"."SYS_IMPORT_TABLESPACE_01"は正常にロード/アンロードされました
"SCOTT"."SYS_IMPORT_TABLESPACE_01"を起動しています: scott/******** directory=dumpdir dumpfile=expdp.dmp tablespaces=test 
オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
. . "SCOTT"."MYTABLE"                           5.031 KB       1行がインポートされました
ジョブ"SCOTT"."SYS_IMPORT_TABLESPACE_01"が13:15:19で正常に完了しました

データがリストアされているか確認

SQL> select * From mytable;

NAME
--------------------
NEORC

SQL> select table_name from dba_tables where tablespace_name= 'TEST';

TABLE_NAME
------------------------------
MYTABLE

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

-DataPump, Oracle
-