🌟

【Oracle】ディレクトリオブジェクトを作成して、DataPumpを使用してみた

2024/01/06に公開

ORACLE MASTER Silver DBAの学習の一環で、DataPumpを実際に試してみました。

作業記録のようなもので、流れを整理しているだけの記事になります。
expdp,impdpのパラメータの解説などはしていません。予めご了承ください。

0. 環境

  • Oracle VM VirtualBox
  • Oracle Linux 7.9
  • Oracle Database 19c

1. ユーザーとディレクトリを作成

▼ DataPumpの実行用のdatapump_userユーザーを作成 ※SYSユーザーで実行

SQL> CREATE USER datapump_user
  2    IDENTIFIED BY testtest
  3    DEFAULT TABLESPACE users
  4    TEMPORARY TABLESPACE temp
  5    QUOTA 100M ON users;
  
ユーザーが作成されました。 

▼ ディレクトリオブジェクト用のディレクトリを作成

[oracle@Pen_ol79 ~]$ mkdir /u01/app/oracle/datapump_test
[oracle@Pen_ol79 ~]$ ls -ld /u01/app/oracle/datapump_test
drwxr-xr-x. 2 oracle oinstall 6 Dec  7 16:20 /u01/app/oracle/datapump_test

あくまでDataPumpを試したいだけなので、適当な場所です。

2. 必要な権限を付与する

▼ CREATE SESSION、CREATE ANY TABLE、CREATE ANY DIRECTORY権限を付与 ※SYSユーザーで実行

SQL> GRANT CREATE SESSION, CREATE ANY TABLE, CREATE ANY DIRECTORY TO datapump_user; 

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

ざっくり説明

  • CREATE SESSION: ユーザーがデータベースにログインする権限
  • CREATE ANY TABLE: ユーザーが任意のスキーマにテーブルを作成する権限
  • CREATE ANY DIRECTORY: ユーザーが任意のディレクトリ・オブジェクトを作成する権限

3. ディレクトリオブジェクトの作成

▼ ディレクトリオブジェクト「DATA_DIR」を作成 ※datapump_userユーザーで実行

SQL> CREATE DIRECTORY DATA_DIR AS '/u01/app/oracle/datapump_test';

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

作成確認

※datapump_userユーザーで実行

SQL> col directory_name for a20
SQL> col directory_path for a45
SQL> SELECT directory_name, directory_path
  2  FROM ALL_DIRECTORIES
  3  WHERE directory_name='DATA_DIR';

DIRECTORY_NAME       DIRECTORY_PATH
-------------------- ---------------------------------------------
DATA_DIR        /u01/app/oracle/datapump_test       

4. ディレクトリオブジェクトに対する権限付与

ディレクトリオブジェクトを作成しただけでは使用できません。
作成したディレクトリオブジェクトに対してのREAD権限およびWRITE権限が必要です。
(場合によっては、DATAPUMP_EXP_FULL_DATABASEロールも必要になります。)
※SYSユーザーで実行

SQL> GRANT READ, WRITE ON DIRECTORY DATA_DIR to datapump_user;

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

5. Export/Importする表の作成

※datapump_userユーザーで実行

SQL> CREATE TABLE test_table_1 (
  2      id NUMBER,           
  3      name VARCHAR2(50),   
  4      CONSTRAINT pk_test_table_1 PRIMARY KEY (id) 
  5  ) 
  6  TABLESPACE users;        
       
表が作成されました。          
       
SQL> INSERT ALL               
  2  INTO test_table_1 VALUES (1, 'Taro')            
  3  INTO test_table_1 VALUES (2, 'Ken')             
  4  SELECT * FROM DUAL;      
       
2行が作成されました。         
       
SQL> COMMIT;                  
       
コミットが完了しました。

6. Oracle Data Pump Export

[oracle@Pen_ol79 ~]$ expdp datapump_user/testtest SCHEMAS=datapump_user DIRECTORY=DATA_DIR DUMPFILE=test_export.dmp LOGFILE=expdp01.log     
       
Export: Release 19.0.0.0.0 - Production on 木 12月 7 16:22:57 2023          
Version 19.3.0.0.0            
       
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.                      
       
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production                     
"DATAPUMP_USER"."SYS_EXPORT_SCHEMA_01"を起動しています: datapump_user/******** SCHEMAS=datapump_user DIRECTORY=DATA_DIR DUMPFILE=test_export.dmp LOGFILE=expdp01.log                      
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です                    
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です                    
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です   
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です                   
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です           
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です  
オブジェクト型SCHEMA_EXPORT/TABLE/COMMENTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です                   
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です         
. . "DATAPUMP_USER"."TEST_TABLE_1"                5.5 KB       2行がエクスポートされました         
マスター表"DATAPUMP_USER"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました                
******************************************************************************                     
DATAPUMP_USER.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:                    
  /u01/app/oracle/datapump_test/test_export.dmp      
ジョブ"DATAPUMP_USER"."SYS_EXPORT_SCHEMA_01"が木 12月 7 16:24:45 2023 elapsed 0 00:01:42で正常に完了しました

▼ ログファイルとダンプファイルの作成を確認

[oracle@Pen_ol79 ~]$ ls -l /u01/app/oracle/datapump_test  
total 348   
-rw-r-----. 1 oracle oinstall   1686 Dec  7 16:24 expdp01.log           
-rw-r-----. 1 oracle oinstall 348160 Dec  7 16:24 test_export.dmp 

7. Oracle Data Pump Import

インポートする前に、あらかじめ表を削除します。インポートによって、表が復元されることを確認するためです。
※datapump_userユーザーで実行

SQL> DROP TABLE test_table_1 PURGE;
 
表が削除されました。 
 
SQL> desc test_table_1 
ERROR: 
ORA-04043: オブジェクトtest_table_1は存在しません。
[oracle@Pen_ol79 ~]$ impdp datapump_user/testtest SCHEMAS=datapump_user DIRECTORY=DATA_DIR DUMPFILE=test_export.dmp LOGFILE=impdp01.log TABLE_EXISTS_ACTION=SKIP
   
Import: Release 19.0.0.0.0 - Production on 木 12月 7 16:26:42 2023         
Version 19.3.0.0.0   
   
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.                
   
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production               
マスター表"DATAPUMP_USER"."SYS_IMPORT_SCHEMA_01"は正常にロード/アンロードされました          
"DATAPUMP_USER"."SYS_IMPORT_SCHEMA_01"を起動しています: datapump_user/******** SCHEMAS=datapump_user DIRECTORY=DATA_DIR DUMPFILE=test_export.dmp LOGFILE=impdp01.log TABLE_EXISTS_ACTION=SKIP       
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です          
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です      
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です 
. . "DATAPUMP_USER"."TEST_TABLE_1"                5.5 KB       2行がインポートされました     
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です        
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です              
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です  
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
ジョブ"DATAPUMP_USER"."SYS_IMPORT_SCHEMA_01"が木 12月 7 16:27:17 2023 elapsed 0 00:00:33で正常に完了しました

▼ ログファイルの作成を確認

[oracle@Pen_ol79 ~]$ ls -l /u01/app/oracle/datapump_test 
total 352            
-rw-r-----. 1 oracle oinstall   1686 Dec  7 16:24 expdp01.log              
-rw-r-----. 1 oracle oinstall   1341 Dec  7 16:27 impdp01.log              
-rw-r-----. 1 oracle oinstall 348160 Dec  7 16:24 test_export.dmp  

Discussion