LoginSignup
2
0

Autonomous Databaseでdata pumpを試す

Last updated at Posted at 2023-10-28

はじめに

Oracle DBのdata pumpを急に勉強しないといけなくなったため、OCI Free TierにAutonomous DB を立てて、data pump のexport/importするまでを試す。

Autonomous DBと、接続用のlinuxインスタンスの作成手順は以下。
ここでは、autonomous DBにADMINで初めてアクセスしたところから出発する。

専用に

  • 表領域 autonomous DBでは作成できない?
  • ユーザ・スキーマ
  • ディレクトリオブジェクト

を作成したうえでデータをexpdp/impdpすることが目標。

Oracle DB自体ずぶの初心者のため、都度メモを書きながらになる点ご了承ください。

以下、明示的に記載していない場合はADMINでログインしています。

PS C:\Users\xxx\OneDrive\sandbox\OCI> ssh -i .\ssh-key.key opc@xxx.xxx.xxx.xxx -o ServerAliveInterval=60
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Oct 28 09:56:47 2023 from 106.131.228.9
[opc@my-instance ~]$ sqlplus ADMIN/"XXX"@myautonomousdb_medium

SQL*Plus: Release 19.0.0.0.0 - Production on 土 10月 28 09:59:59 2023
Version 19.20.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 土 10月 28 2023 09:33:41 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
に接続されました。
SQL>

表領域の作成(できず)

結論から言うとautonomous DBではADMIN権限であっても表領域を作成することはできないらしい。
この章は試行錯誤したメモです。

ASMディスクの容量を確認

SQL> SELECT group_number, name, state, total_mb, free_mb, free_mb/total_mb*100 as free_pct FROM v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE         TOTAL_MB    FREE_MB   FREE_PCT
------------ ------------------------------ ----------- ---------- ---------- ----------
           1 DATA                           CONNECTED    269033472  260329236 96.7646271
           2 RECO                           CONNECTED     67239936   65434188  97.314471
  • FREE_PCT を見ると、余力は十分あることがわかる

  • DATA領域

    • oracle データベースの実際のデータファイルを格納する領域。
    • ユーザーデータ・テーブル・インデックスなどがDATA領域に格納される。
  • RECO領域

    • recovery領域の略。リカバリ・バックアップ・フラッシュバックに関連するファイルが格納される領域。

既存のデータファイルの一覧を確認

SQL> select * from dba_data_files;

FILE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_ LOST_WR
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- ------- -------
+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/system.3244.1149741681
      5033 SYSTEM                         1227882496     149888 AVAILABLE         1024 YES 3.5184E+13 4294967293         1280 1226833920      149760 SYSTEM  OFF

+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/sysaux.3653.1149741681
      5034 SYSAUX                         3657891840     446520 AVAILABLE         1024 YES 3.5184E+13 4294967293         1280 3651567616      445748 ONLINE  OFF

+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/undotbs1.5314.1149741681
      5035 UNDOTBS1                       1101004800     134400 AVAILABLE         1024 YES 1101004800     134400       262144 1099956224      134272 ONLINE  OFF

+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/data.5881.1149741681
      5036 DATA                           1178599424     143872 AVAILABLE         1024 YES 3.5184E+13 4294967293       262144 1172275200      143100 ONLINE  OFF

+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/dbfs_data.5364.1149741681
      5037 DBFS_DATA                       104857600      12800 AVAILABLE         1024 YES 3.5184E+13 4294967293       262144   98533376       12028 ONLINE  OFF

+DATA/sampleschema_dbf
      5038 SAMPLESCHEMA                   2.1475E+11   26214400 AVAILABLE         1024 YES 3.5184E+13 4294967293      1310720 2.1468E+11    26205708 ONLINE  OFF

+DATA/FEPP1POD/07416308B33C6B60E0630618000AFF4D/DATAFILE/undo_8.5223.1150175949
      5217 UNDO_8                          100007936      12208 AVAILABLE         1024 YES 1101004800     134400       262144   98959360       12080 ONLINE  OFF


7 rows selected.

  • oracleがデフォルトで使用するSYSTEM表領域、SUSAUX表領域のデータファイルがあることがわかる。
  • 加えて、SAMPLESHEMA なる表領域も用意されていることがわかる。
  • data_fileの読み方だが、
    • +DATA:ASMディスクグループの名前。
# SAMPLESCHEMA表領域が持つデータファイルの一覧を取得する
SQL>  select * from dba_data_files where tablespace_name = 'SAMPLESCHEMA';

FILE_NAME                         FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_ LOST_WR
------------------------------ ---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- ------- -------
+DATA/sampleschema_dbf               5038 SAMPLESCHEMA                   2.1475E+11   26214400 AVAILABLE         1024 YES 3.5184E+13 4294967293      1310720 2.1468E+11    26205708 ONLINE  OFF

  • USER_BITESが、ユーザが利用可能な領域。2E+11 = 18GBぐらい。
  • AUT : AUTOEXTENSIBLE が自動拡張有効化がなされているか、の意味。YESなので自動拡張される。

既存の表領域の一覧を確認

  • データベースの中身(テーブルなど)が格納される場所。論理的な管理単位。

  • 一つの表領域(論理単位)に対して、一つ以上のデータファイル(物理データ)が対応する。

    • 対応は前節の通り。
  • バックアップ/リストア時の最小単位になるため、大きすぎないサイズで設計しておくとよい

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
DATA
DBFS_DATA
SAMPLESCHEMA
TEMP
UNDO_8

8 rows selected.

  • 表領域単位にいくつかオプションを設定可能。
    • ブロックサイズ
    • クオータ
    • オンライン/オフライン:ユーザに利用させるかどうかを制御できる
# 詳細を表示
SQL>   select tablespace_name,block_size,initial_extent,next_extent,min_extents,max_extents,max_size,pct_increase,min_extlen,status,contents from dba_tablespaces;

TABLESPACE_NAME      BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS   MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS                      CONTENTS
-------------------- ---------- -------------- ----------- ----------- ----------- ---------- ------------ ---------- --------------------------- ---------------------------------------------------------------
SYSTEM                     8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      PERMANENT
SYSAUX                     8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      PERMANENT
UNDOTBS1                   8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      UNDO
DATA                       8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      PERMANENT
DBFS_DATA                  8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      PERMANENT
SAMPLESCHEMA               8192          65536                       1  2147483645 2147483645                   65536 READ ONLY                   PERMANENT
TEMP                       8192        1048576     1048576           1             2147483645            0    1048576 ONLINE                      TEMPORARY
UNDO_8                     8192          65536                       1  2147483645 2147483645                   65536 ONLINE                      UNDO

8行が選択されました。

表領域を作成

SQL> create tablespace NEW_TABLESPACE datafile '+DATA' size 100m autoextend ON maxsize 500m logging extent management local segment space management auto;
create tablespace NEW_TABLESPACE datafile '+DATA' size 100m autoextend ON maxsize 500m logging extent management local segment space management auto
*
1でエラーが発生しました。:
ORA-01031: 権限が不足しています
  • どうもautonomoous DBでは表領域の作成ができないらしい。
    • SELECT * FROM DBA_TAB_PRIVS WHERE PRIVILEGE = 'SELECT' AND TABLE_NAME = 'V$ASM_DISK';しても何も表示されない。admin権限であってもなおasmディスクグループへの権限は渡されていない模様。

下記にも記載がある。

一応、意図した設定を記載。

  • LOGGING or NOLOGING
    • LOGGINGの場合、REDOログ(INSERT,DELETE, UPDATEなど)を保存するようになる。せっかくRECO領域があるなら使う。
    • NOLOGGINGの場合、REDOログを保存しない。動作は早くなる可能性があるものの・・・普通は指定しない。
  • EXTENT MANAGEMENT
    • LOCAL
      • 表領域の各セグメント(テーブル・インデックスなど)ごとに拡張を管理。各セグメントが競合しづらい。
    • DICTIONARY
      • 各セグメントの拡張情報はデータディクショナリで一括管理される。
  • SEGMENT SPACE MANAGEMENT
    • AUTO
      • セグメントの空きスペースを自動で管理。ガベージコレクション的な感じか。
    • MANUAL
      • を手でやる。むずそう。
    • ちなみに・・・
      • EXTENT MANAGEMENTDICTIONARYの場合は、SEGMENT SPACE MANAGEMENTAUTO は選択できない。
    • そもそも・・・
      • データブロック:データベース内の基本的なI/O単位。2KB-32KBで最初に選択できる。
      • エクステント:データベースのストレージ管理の単位。データブロックの定数倍で選択する。

スキーマの作成

スキーマの作成

表領域はあきらめてスキーマの作成に移る。

create user alphajinsei identified by xxx default tablespace DATA temporary tablespace TEMP;
  • デフォルト表領域はもとから存在するDATAを選択。本当は別個に作りたかったところだが・・・
  • 一時表領域ももとから存在するTEMPを選択。こちらは違和感なし。
SQL> select username from dba_users where username = 'ALPHAJINSEI';

USERNAME
--------------------------------------------------------------------------------
ALPHAJINSEI

ちゃんと作成されている。

権限の付与

create userしただけでは以下のようにログインすらできない。

[opc@my-instance ~]$ sqlplus alphajinsei/xxx@myautonomousdb_medium

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 18:46:59 2023
Version 19.20.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

ERROR:
ORA-01045: user ALPHAJINSEI lacks CREATE SESSION privilege; logon denied

権限を付与する。

SQL> grant connect to alphajinsei;

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

SQL> grant resource to alphajinsei;

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

これで接続できる。

[opc@my-instance ~]$ sqlplus alphajinsei/xxx@myautonomousdb_medium

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 18:52:52 2023
Version 19.20.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0

SQL> select * from user_tables;

no rows selected

表の作成

以下を参考にさせていただいた。

先ほど作成したユーザーalphajiseni で接続する。

[opc@my-instance ~]$ sqlplus alphajinsei/xxx@myautonomousdb_medium

SQL*Plus: Release 19.0.0.0.0 - Production on  10 28 10:24:28 2023
Version 19.20.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間:  10 28 2023 09:33:27 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
に接続されました。
SQL>

最初に表が存在しないことを確認。

select table_name from user_tables; 

テーブルの作成

create table emp
(
emp_id number(3) primary key, 
name varchar2(10 char) not null, 
hire_date date not null,
salary number(10) not null, 
dept_id number(2)
);

以下の通り作成できた。

SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
EMP

describe emp でサマリが表示される

SQL> desc emp
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMP_ID                                    NOT NULL NUMBER(3)
 NAME                                      NOT NULL VARCHAR2(10 CHAR)
 HIRE_DATE                                 NOT NULL DATE
 SALARY                                    NOT NULL NUMBER(10)
 DEPT_ID                                            NUMBER(2)
 

データの流しこみ

事前にデータが存在しないことを確認。

SQL> select * from emp;

no rows selected

いくつか事前準備が必要。

1.権限追加

 ・ADMINでログインしてEMP表へのinsertと、tablespcaeの権限を付与する。

SQL> grant insert on alphajinsei.EMP to alphajinsei;

Grant succeeded.

SQL> grant unlimited tablespace to alphajinsei ;

Grant succeeded.

2.日付の形式を変更

デフォルトだと以下の設定になっているので、

SQL> select * from v$nls_parameters where parameter='NLS_DATE_FORMAT';

PARAMETER
----------------------------------------------------------------
VALUE                                                                CON_ID
---------------------------------------------------------------- ----------
NLS_DATE_FORMAT
DD-MON-RR                                                                92

使いやすい形式に変更する。

SQL> alter session set NLS_DATE_FORMAT='RR-MM-DD';

Session altered.

※永続化したい場合はalter session set NLS_DATE_FORMAT='RR-MM-DD' scope=SPFILE;を指定する必要あり。?このままでは毎回上記を打つことになり若干面倒・・・

3.ロケールの設定

ロケールを日本語に設定する。クライアントのインスタンスの環境変数に設定する。

[opc@my-instance ~]$ tail  -n 4 .bashrc
export ORACLE_BASE=/usr/lib/oracle/
export ORACLE_HOME=/usr/lib/oracle/19.20
export TNS_ADMIN=/usr/lib/oracle/19.20/client64/lib/network/wallet/
export NLS_LANG=japanese_japan.UTF8   ★これを設定

データの流し込み

insertできた。

SQL> insert into emp values('100','佐藤','00-04-01','500000','50');

1行が作成されました。

SQL> select * from emp;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

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

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

表ができたところで早速expdpしたいところだが、expdpするにはまず入出力先のディレクトリオブジェクトが必要。早速作成する。以下はADMINユーザで実施。

SQL> create directory dpdir1 as 'dpdir1';

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

SQL> select directory_name, directory_path from dba_directories;

DIRECTORY_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DPDIR1
/u03/dbfs/07416308B33C6B60E0630618000AFF4D/data/dpdir1

DATA_PUMP_DIR
/u03/dbfs/07416308B33C6B60E0630618000AFF4D/data/dpdump
...
  • 普通はディレクトリ名には実パスを指定するところだが、autonomous DBはSaaS特有の事情により、ディレクトリ名(dpdir1)だけ与えると自動でディレクトリ(/u03/dbfs/07416308B33C6B60E0630618000AFF4D/data/dpdir1)が勝手に与えられるようになっている。
  • デフォルトでもdatapump用にDATA_PUMP_DIRというディレクトリオブジェクトがあり、こちらも利用可能。今回は自分で作成。

権限付与

すぐこの後にALPHAJINSEIユーザでdatapumpすることを見越して、あらかじめディレクトリオブジェクトの読み書き権限を付与しておく。

SQL> grant read,write on directory DPDIR1 to ALPHAJINSEI;

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

補足

ディレクトリオブジェクトに何が格納されているかは以下のコマンドで確認できる。
ただ、ファイルの中身を見ることはできず、中身を見たい場合はオブジェクトストレージにいちいち転送する必要がある。手順は後述。

SQL> SELECT * FROM DBMS_CLOUD.LIST_FILES('DPDIR1');

OBJECT_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     BYTES
----------
CHECKSUM
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATED                                                                     LAST_MODIFIED
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
alphajinsei_exp.log
      1243

23-10-23 16:25:07.000000 +00:00                                             23-10-28 13:30:24.000000 +00:00

Data Pump

ようやく本題。作成したスキーマalphajinsei、表emp、ディレクトリオブジェクトdpdir1を用いて、表のexport/importを行う。

export

スキーマ単位でexportする。問題なくexportできた。

[opc@my-instance ~]$ expdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI;

Export: Release 19.0.0.0.0 - Production on 土 10月 28 12:35:23 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI

オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/COMMENTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMAの処理中です
. . "ALPHAJINSEI"."EMP"                         6.914 KB       1行がエクスポートされました
ORA-39173: 暗号化データがダンプ・ファイル・セットに暗号化されずに格納されました。
マスター表"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
ALPHAJINSEI.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
  /u03/dbfs/07416308B33C6B60E0630618000AFF4D/data/dpdir1/expdat_emp.dmp
ジョブ"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"が土 10月 28 12:36:00 2023 elapsed 0 00:00:34で正常に完了しました

[opc@my-instance ~]$

EMPテーブル削除

empテーブルがロストした想定で、いったんEMPテーブルを削除する。

(この後、先ほどexportしたデータをそのままimportして復活させる)

SQL> select * from emp
  2  ;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

SQL> DROP TABLE emp PURGE;

表が削除されました。

SQL> commit;

コミットが完了しました。

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

import

先ほどはalphajinseiスキーマ単位でexport したが、
importはempテーブル単位で実施する。

無事にインポートできた。

[opc@my-instance ~]$  impdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp

Import: Release 19.0.0.0.0 - Production on 土 10月 28 12:37:55 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"は正常にロード/アンロードされました
"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "ALPHAJINSEI"."EMP"                         6.914 KB       1行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
ジョブ"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"が土 10月 28 12:38:05 2023 elapsed 0 00:00:08で正常に完了しました

[opc@my-instance ~]$

無事empテーブルを復活させることができた。

SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
EMP

SQL> select * from emp;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

datapumpの挙動を確認

せっかくなので、datapumpの挙動を調べてみる。
適当言っている可能性が高いので遠目に見てください。。

情報は古いが以下のスライドがわかりやすい
https://www.oracle.com/jp/a/tech/docs/technical-resources/20100908-expimp-beginner.pdf

別名のemp2 表にインポートする

過去のデータを別名でDBにインポートして、現在のデータを見比べる・・・などのユースケースを想定する。

事前状態確認

SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
EMP

別名でimport

REMAP_TABLE=emp:emp2 を指定してimportする。
事前にemp2を作っておく必要はない。
※emp2を事前に作っておいてもimportできる。ただしTABLE_EXISTS_ACTION のオプションが必要。

[opc@my-instance ~]$ impdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log REMAP_TABLE=emp:emp2

Import: Release 19.0.0.0.0 - Production on 土 10月 28 12:48:04 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ALPHAJINSEI"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"ALPHAJINSEI"."SYS_IMPORT_FULL_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log REMAP_TABLE=emp:emp2
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "ALPHAJINSEI"."EMP2"                        6.914 KB       1行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
オブジェクト型SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMAの処理中です
ジョブ"ALPHAJINSEI"."SYS_IMPORT_FULL_01"が土 10月 28 12:48:14 2023 elapsed 0 00:00:07で正常に完了しました

emp2として表が作成され、データもimportされていることがわかる。

SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
EMP2
EMP

SQL> select * from emp2;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

emp表を上書きする

TABLE_EXISTS_ACTION=REPLACEのオプションを指定すると、既存の同名の表が存在した場合でも内容を上書きしてimportできる。データのリストアを行う手段の一つとして使えるか。

事前準備

事前準備として、既存の表に更新が入ったていで修正を加えておく。

SQL> select * from emp;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

SQL> update emp set NAME='田中' where EMP_ID=100;

1行が更新されました。

SQL> insert into emp values('200','加藤','00-05-01','600000','60');

1行が作成されました。

SQL>  select * from emp order by emp_id;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 田中                           00-04-01     500000         50
       200 加藤                           00-05-01     600000         60

SQL> commit;

コミットが完了しました。

リストア

TABLE_EXISTS_ACTION=REPLACE オプションをつけてテーブルをimpdpする。

[opc@my-instance ~]$ impdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp TABLE_EXISTS_ACTION=REPLACE

Import: Release 19.0.0.0.0 - Production on 土 10月 28 12:41:03 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"は正常にロード/アンロードされました
"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp TABLE_EXISTS_ACTION=REPLACE
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "ALPHAJINSEI"."EMP"                         6.914 KB       1行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
ジョブ"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"が土 10月 28 12:41:12 2023 elapsed 0 00:00:06で正常に完了しました

emp表の中身がもとに戻っていることがわかる。

[opc@my-instance ~]$ sqlplus alphajinsei/xxx@myautonomousdb_medium

SQL*Plus: Release 19.0.0.0.0 - Production on  10 28 12:41:18 2023
Version 19.20.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間:  10 28 2023 12:41:03 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
に接続されました。
SQL> select * from emp order by emp_id;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

SQL>

補足

ちなみに、TABLE_EXISTS_ACTIONオプションを指定せずに普通に実行するとエラーになる。

SQL>  select * from emp;

    EMP_ID NAME                           HIRE_DAT     SALARY    DEPT_ID
---------- ------------------------------ -------- ---------- ----------
       100 佐藤                           00-04-01     500000         50

SQL>
SQL>
SQL> quit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0との接続が切断されました。
[opc@my-instance ~]$ impdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp

Import: Release 19.0.0.0.0 - Production on 土 10月 28 12:42:40 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"は正常にロード/アンロードされました
"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log TABLES=emp
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
ORA-39151: 表"ALPHAJINSEI"."EMP"が存在します。スキップのtable_exists_actionのため、すべての依存メタデータおよびデータはスキップされます

オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
ジョブ"ALPHAJINSEI"."SYS_IMPORT_TABLE_01"が完了しましたが、1エラーが土 10月 28 12:42:48 2023 elapsed 0 00:00:06で発生しています

[opc@my-instance ~]$

ドライラン

expdpのドライラン(出力ファイルサイズの見積もり

実際にダンプファイルを出力することはせず、出力ダンプファイルのサイズを見積もる。

  • ESTIMATE_ONLY=YESをつけて実行する。見積の手法として追加でオプションを指定でき、
    • ESTIMATE=BLOCKS :ブロックサイズ * オブジェクトのブロックサイズで見積もる。精度は高くない
    • ESTIMATE=STATISTICS:統計情報をもとに見積もる。

※出力がないので当然だが、DUMPFILE=expdat_emp.dmpは指定しようとしてもエラーになる。

ESTIMATE_ONLY=YES ESTIMATE=BLOCKS を指定した場合

どう考えても1件しかデータの入っていないEMP表が64 KBなはずがないのだが、データブロックだかエクステントだかの単位で見積もられているものと思われる。

[opc@my-instance ~]$ expdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI ESTIMATE_ONLY=YES ESTIMATE=BLOCKS;

Export: Release 19.0.0.0.0 - Production on 土 10月 28 13:15:21 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI ESTIMATE_ONLY=YES ESTIMATE=BLOCKS
BLOCKSメソッドを使用して見積り中です...
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
.  見積"ALPHAJINSEI"."EMP"                            64 KB
.  見積"ALPHAJINSEI"."EMP2"                           64 KB
BLOCKSメソッドを使用した見積り合計: 128 KB
ジョブ"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"が土 10月 28 13:15:30 2023 elapsed 0 00:00:07で正常に完了しました

ESTIMATE_ONLY=YES ESTIMATE=STATISTICS を指定した場合

こちらのほうが精度よく見積もってくれる。

[opc@my-instance ~]$ expdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI ESTIMATE_ONLY=YES ESTIMATE=STATISTICS;

Export: Release 19.0.0.0.0 - Production on 土 10月 28 13:15:42 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI ESTIMATE_ONLY=YES ESTIMATE=STATISTICS
STATISTICSメソッドを使用して見積り中です...
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
.  見積"ALPHAJINSEI"."EMP"                         6.582 KB
.  見積"ALPHAJINSEI"."EMP2"                        6.582 KB
STATISTICSメソッドを使用した見積り合計: 13.16 KB
ジョブ"ALPHAJINSEI"."SYS_EXPORT_SCHEMA_01"が土 10月 28 13:15:51 2023 elapsed 0 00:00:07で正常に完了しました

[opc@my-instance ~]$

impdpのドライラン(実行予定SQLの表示)

実際にデータをimportすることはせず、実行される予定のSQLを表示するだけにとどめる。
SQLFILE=DPDIR1:emp.sqlのように出力先SQLファイルを指定する。

[opc@my-instance ~]$ impdp alphajinsei/xxx@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log SQLFILE=DPDIR1:emp.sql

Import: Release 19.0.0.0.0 - Production on 土 10月 28 13:30:17 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ALPHAJINSEI"."SYS_SQL_FILE_FULL_01"は正常にロード/アンロードされました
"ALPHAJINSEI"."SYS_SQL_FILE_FULL_01"を起動しています: alphajinsei/********@myautonomousdb_medium DIRECTORY=dpdir1 DUMPFILE=expdat_emp.dmp LOGFILE=alphajinsei_exp.log SQLFILE=DPDIR1:emp.sql
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
オブジェクト型SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMAの処理中です
ジョブ"ALPHAJINSEI"."SYS_SQL_FILE_FULL_01"が土 10月 28 13:30:23 2023 elapsed 0 00:00:04で正常に完了しました

[opc@my-instance ~]$

確かに問題なくSQL生成はできており、ディレクトリオブジェクトDPDIR1に格納されていることはわかる・・・が、簡単に読み出す手段がないのが面倒・・・。
中身を見ようと思うと前述の通りオブジェクトストレージに移す必要がある。

SQL>  SELECT * FROM DBMS_CLOUD.LIST_FILES('DPDIR1') where object_name='emp.sql';

OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     BYTES
----------
CHECKSUM
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATED                                                                     LAST_MODIFIED
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
emp.sql
      2137

23-10-28 13:28:59.000000 +00:00                                             23-10-28 13:30:22.000000 +00:00


SQL>

ディレクトリオブジェクトに格納したデータを確認する

この際なので、上記のemp.sqlふくめ、ディレクトリオブジェクトに格納したデータをオブジェクトストレージに移して確認するところまでやる。

バケットの準備

新規にalphajinsei-bucketを作成する。

image.png

正規のURIを確認する意図で、試しにテストデータをアップロードしてみる。
テストファイルのURIはhttps://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/testupload.txtだった。

image.png

ユーザーの準備

既存のユーザdeca meronにAdministrator権限を付与(本来は厳密に設計すべきだがよくわからないので割愛)

image.png

認証トークンを生成

image.png

credentialの作成

ADMINでログインして以下SQLを叩く。

SQL> BEGIN
  2    DBMS_CLOUD.CREATE_CREDENTIAL(
  3      credential_name => 'decameron_credential',
  4      username => 'decameron0107@gmail.com',
  5      password => 'xxx'
  6    );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL>

デフォルトのクレデンシャルを変更しておく。(不要かも?)

SQL> ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.decameron_credential';

データベースが変更されました。

SQL>

Autonomous DB -> object storageへのデータのコピー

ADMINでログイン。ディレクトリオブジェクトDPDIR1に格納されているファイルのうち、前節「impdpのドライラン(実行予定SQLの表示)」で生成したemp.sqlをobject storageにコピーしたい。

SQL> SELECT object_name FROM DBMS_CLOUD.LIST_FILES('DPDIR1') ;

OBJECT_NAME
--------------------------------------------------------------------------------
alphajinsei_exp.log
expdat.dmp
expdat2.dmp
expdat_emp.dmp
BLOCKS.sql
expdat_emp2.dmp
emp.sql

7行が選択されました。

早速DBMS_CLOUD.PUT_OBJECTで、emp.sqlをobject storageに移す。

※コマンドの詳細は以下。

叩いてみた結果が以下。問題なく通っている。

SQL> BEGIN
  2    DBMS_CLOUD.PUT_OBJECT(
  3      credential_name => 'decameron_credential',
  4      object_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/emp.sql',
  5      directory_name => 'DPDIR1',
  6      file_name => 'emp.sql'
  7    );
  8  END;
  9  /

PL/SQLプロシージャが正常に完了しました。

SQL>

object storageにも確かにemp.sqlが配置されている。

image.png

emp.sqlの中身を確認

ここまでしてようやくemp.sqlの中身を確認できる。
ダウンロードして確認した結果が以下。

  • 大きくわけて、CREATE TABLEの処理と、制約の追加の2つのSQLが投入される。
  • emp表の一行分のデータも入っているはずなので、INSERT 文も記載されていることを期待したが、ここには表れないようだ。DDLしか記載されないのだろうか?

まあとりあえず見れたのでよしとする。

emp.sql
-- CONNECT ALPHAJINSEI
ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ';
-- new object type path: SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

BEGIN 
sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'GE65A5B90992C2A_MYAUTONOMOUSDB', inst_scn=>'40068001910627');
COMMIT; 
END; 
/ 
-- new object type path: SCHEMA_EXPORT/TABLE/TABLE
CREATE TABLE "ALPHAJINSEI"."EMP" 
   (	"EMP_ID" NUMBER(3,0), 
	"NAME" VARCHAR2(10 CHAR) COLLATE "USING_NLS_COMP" NOT NULL ENABLE, 
	"HIRE_DATE" DATE NOT NULL ENABLE, 
	"SALARY" NUMBER(10,0) NOT NULL ENABLE, 
	"DEPT_ID" NUMBER(2,0)
   )  DEFAULT COLLATION "USING_NLS_COMP" SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 10 MAXTRANS 255 
 COLUMN STORE COMPRESS FOR QUERY HIGH ROW LEVEL LOCKING LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "DATA" ;
-- new object type path: SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
ALTER TABLE "ALPHAJINSEI"."EMP" ADD PRIMARY KEY ("EMP_ID")
  USING INDEX PCTFREE 10 INITRANS 20 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "DATA"  ENABLE;
-- new object type path: SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
-- new object type path: SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
-- new object type path: SCHEMA_EXPORT/STATISTICS/MARKER
-- new object type path: SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA

BEGIN 
 
COMMIT; 
END; 
/ 
-- fixup virtual columns... 
-- done fixup virtual columns 

同様の方法で、ディレクトリオブジェクトに格納していたダンプファイルなり、datapumpのログなりを取得してくることができる。

蛇足:object storageに直接export / import する

蛇足だが・・・直前に「ディレクトリオブジェクトに格納していたダンプファイルを取得してくる」と書いたが、
そもそもディレクトリオブジェクトを経由せずとも、直接object storageにダンプファイルをexportすることもできる。

object storageに直接export

[opc@my-instance ~]$ expdp ADMIN/"xxx"@myautonomousdb_medium credential=decameron_credential DIRECTORY=dpdir1 DUMPFILE=https://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/expdat_emp_os.dmp LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI;

Export: Release 19.0.0.0.0 - Production on 土 10月 28 18:28:39 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"ADMIN"."SYS_EXPORT_SCHEMA_01"を起動しています: ADMIN/********@myautonomousdb_medium credential=decameron_credential DIRECTORY=dpdir1 DUMPFILE=https://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/expdat_emp_os.dmp LOGFILE=alphajinsei_exp.log SCHEMAS=ALPHAJINSEI
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/USERの処理中です
オブジェクト型SCHEMA_EXPORT/SYSTEM_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/ROLE_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/DEFAULT_ROLEの処理中です
オブジェクト型SCHEMA_EXPORT/PASSWORD_HISTORYの処理中です
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMAの処理中です
. . "ALPHAJINSEI"."EMP"                         6.937 KB       2行がエクスポートされました
. . "ALPHAJINSEI"."EMP2"                        6.914 KB       1行がエクスポートされました
ORA-39173: 暗号化データがダンプ・ファイル・セットに暗号化されずに格納されました。
マスター表"ADMIN"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
ADMIN.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
  https://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/expdat_emp_os.dmp
ジョブ"ADMIN"."SYS_EXPORT_SCHEMA_01"が土 10月 28 18:29:16 2023 elapsed 0 00:00:35で正常に完了しました

[opc@my-instance ~]$

バケット上では以下のファイルが生成される。謎に2ファイルできる・・・

image.png

object storageから直接import

同様にimportもできる。
※ADMINユーザーを利用しているめ、importしたいテーブル名はalphajinsei.empとユーザー名を明示している点に注意。

[opc@my-instance ~]$ impdp ADMIN/"xxx"@myautonomousdb_medium credential=decameron_credential DUMPFILE=https://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/expdat_emp_os.dmp LOGFILE=alphajinsei_exp.log TABLES=alphajinsei.emp TABLE_EXISTS_ACTION=REPLACE

Import: Release 19.0.0.0.0 - Production on 土 10月 28 20:31:10 2023
Version 19.20.0.0.0

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

接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"ADMIN"."SYS_IMPORT_TABLE_01"は正常にロード/アンロードされました
"ADMIN"."SYS_IMPORT_TABLE_01"を起動しています: ADMIN/********@myautonomousdb_medium credential=decameron_credential DUMPFILE=https://nrliaoyraehn.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/nrliaoyraehn/b/alphajinsei-bucket/o/expdat_emp_os.dmp LOGFILE=alphajinsei_exp.log TABLES=alphajinsei.emp TABLE_EXISTS_ACTION=REPLACE
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "ALPHAJINSEI"."EMP"                         6.914 KB       1行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
ジョブ"ADMIN"."SYS_IMPORT_TABLE_01"が土 10月 28 20:31:22 2023 elapsed 0 00:00:10で正常に完了しました

感想

autonomous DB、起動するのも管理も簡単だが、
出力ファイルをいちいちobject storageを介さないと見れない点についてはやはり面倒くさい・・・

2
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
2
0