🌟
【Oracle】ディレクトリオブジェクトを作成して、DataPumpを使用してみた
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