[23c] Oracle Database 10g から 23cにデータ移行できるか

## 確認したこと
Oracle Database 10g から23c へのデータ移行
Datapump Export / Import を使用します。



### 環境
＜移行元＞
・Windows 2003
・Oracle Database 10g

＜移行先＞
・Oracle Linux 8.8
・Oracle Database 23c Free (Developer Release)

注意：2023/7時点で正式な製品版ではないため、正式リリース前の事前検証用になります。

## Oracle Database 10gからDatapump Export

### 移行対象のデータ確認
今回は、Oracle Databaseの有名なサンプルスキーマであるScottを対象に検証します。
検索すると 4 テーブル、2 インデックスありました。
dept表のデータも検索してみます。
これらを移行することとします。

```

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on 木 7月 13 06:32:40 2023

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.



Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
に接続されました。
SQL> select object_type,object_name from dba_objects where owner='SCOTT' order by 1,2;

OBJECT_TYPE         OBJECT_NAME
------------------- ------------------------------
INDEX               PK_DEPT
INDEX               PK_EMP
TABLE               BONUS
TABLE               DEPT
TABLE               EMP
TABLE               SALGRADE

6行が選択されました。

SQL> select * from scott.dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>
SQL> exit
```



### Export
Oracle Database 10gから、Scottユーザのオブジェクト・データのみ、Exportを行います。
従来型ではなく、DataPumpExportを使用します。

```

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on 木 7月 13 06:32:40 2023

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.



Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
に接続されました。

--★ Exportに使用するディレクトリオブジェクトのパスを確認 ★--
SQL> select directory_name,directory_path from dba_directories;

DIRECTORY_NAME
------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
DATA_PUMP_DIR
C:\oracle\product\10.2.0/admin/gpsdb/dpdump/

ORACLE_OCM_CONFIG_DIR
C:\oracle\product\10.2.0\db_1/ccr/state


SQL> exit
Oracle Database 10g Release 10.2.0.5.0 - 64bit Productionとの接続が切断されました。

--★ 確認したディレクトリオブジェクト「data_pump_dir」を使用してExport ★--
C:\>expdp system/password dumpfile=data_pump_dir:10g.dmp logfile=data_pump_dir:10gexp.log schemas=scott

Export: Release 10.2.0.5.0 - 64bit Production on 木曜日, 13 7月, 2023 6:35:56

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

接続先: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
"SYSTEM"."SYS_EXPORT_SCHEMA_01"を起動しています: system/******** dumpfile=data_pump_dir:10g.dmp logfile=data_pump_dir:10gexp.log schemas=scott
BLOCKSメソッドを使用して見積り中です...
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
BLOCKSメソッドを使用した見積り合計: 192 KB
オブジェクト型SCHEMA_EXPORT/USERの処理中です
オブジェクト型SCHEMA_EXPORT/SYSTEM_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/ROLE_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/DEFAULT_ROLEの処理中です
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
. . "SCOTT"."DEPT"                              5.656 KB       4行がエクスポートされました
. . "SCOTT"."EMP"                               7.742 KB      12行がエクスポートされました
. . "SCOTT"."SALGRADE"                          5.585 KB       5行がエクスポートされました
. . "SCOTT"."BONUS"                                 0 KB       0行がエクスポートされました
マスター表"SYSTEM"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
SYSTEM.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
  C:\ORACLE\PRODUCT\10.2.0\ADMIN\GPSDB\DPDUMP\10G.DMP
ジョブ"SYSTEM"."SYS_EXPORT_SCHEMA_01"が06:37:04で正常に完了しました

```

### ExportされたDmpファイルの確認
出力されたDmpファイルを 23c環境にコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/6dcaee90-0d09-e42c-55d9-6751ed91af59.png)




### 23c:ディレクトリオブジェクトの確認
ここから23ck環境での作業です。
まずはImportのためにどこのDmpファイルを配置すればよいか、
ディレクトリオブジェクトのパスを確認します。
23cではマルチテナント環境が必須のため、PDB内での確認となります。

```
[oracle@host01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on 木 7月 13 09:37:59 2023
Version 23.2.0.0.0

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



Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
に接続されました。
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 FREEPDB1                       READ WRITE NO
SQL> alter session set container=freepdb1;

セッションが変更されました。

SQL> select directory_name,directory_path from dba_directories;

DIRECTORY_NAME                           DIRECTORY_PATH
---------------------------------------- --------------------------------------------------------------------------------
SDO_DIR_ADMIN                            /opt/oracle/product/23c/dbhomeFree/md/admin
XMLDIR                                   /opt/oracle/product/23c/dbhomeFree/rdbms/xml
XSDDIR                                   /opt/oracle/product/23c/dbhomeFree/rdbms/xml/schema
ORACLE_BASE                              /opt/oracle
ORACLE_HOME                              /opt/oracle/product/23c/dbhomeFree
OPATCH_INST_DIR                          /opt/oracle/product/23c/dbhomeFree/OPatch
DATA_PUMP_DIR                            /opt/oracle/admin/FREE/dpdump/FC950AB002EFA9B3E055020C29FC1158
DBMS_OPTIM_LOGDIR                        /opt/oracle/product/23c/dbhomeFree/cfgtoollogs
DBMS_OPTIM_ADMINDIR                      /opt/oracle/product/23c/dbhomeFree/rdbms/admin
OPATCH_SCRIPT_DIR                        /opt/oracle/product/23c/dbhomeFree/QOpatch
OPATCH_LOG_DIR                           /opt/oracle/product/23c/dbhomeFree/rdbms/log
JAVA$JOX$CUJS$DIRECTORY$                 /opt/oracle/product/23c/dbhomeFree/javavm/admin/

12行が選択されました。

SQL> exit
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0との接続が切断されました。
[oracle@host01 ~]$

```


### 23c:データのインポート
前手順で確認したDATA_PUMP_DIRディレクトリに、10gで取得したDmpファイルを配置します。
その後、impdpコマンドで、「PDB」にImportを行います。

```
[oracle@host01 ~]$ cd /opt/oracle/admin/FREE/dpdump/FC950AB002EFA9B3E055020C29FC1158
[oracle@host01 FC950AB002EFA9B3E055020C29FC1158]$ ls
10G.DMP  
[oracle@host01 FC950AB002EFA9B3E055020C29FC1158]$ impdp system/oracle@localhost:1521/freepdb1 dumpfile=data_pump_dir:10G.DMP logfile=data_pump_dir:imp.log

Import: Release 23.0.0.0.0 - Developer-Release on 木 7月 13 09:42:34 2023
Version 23.2.0.0.0

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

接続先: Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
マスター表"SYSTEM"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SYSTEM"."SYS_IMPORT_FULL_01"を起動しています: system/********@localhost:1521/freepdb1 dumpfile=data_pump_dir:10G.DMP logfile=data_pump_dir:imp.log
オブジェクト型SCHEMA_EXPORT/USERの処理中です
オブジェクト型SCHEMA_EXPORT/SYSTEM_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/ROLE_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/DEFAULT_ROLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "SCOTT"."DEPT"                              5.656 KB       4行がインポートされました
. . "SCOTT"."EMP"                               7.742 KB      12行がインポートされました
. . "SCOTT"."SALGRADE"                          5.585 KB       5行がインポートされました
. . "SCOTT"."BONUS"                                 0 KB       0行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
ジョブ"SYSTEM"."SYS_IMPORT_FULL_01"が木 7月 13 22:42:44 2023 elapsed 0 00:00:06で正常に完了しました

[oracle@host01 FC950AB002EFA9B3E055020C29FC1158]$

```


### 23c:データの確認
正しくImportされたことを確認します。
10gと同じテーブル、インデックス、データが確認できました。
10gから23cに無事にデータ移行できました！

```
[oracle@host01 FC950AB002EFA9B3E055020C29FC1158]$ sqlplus scott/tiger@localhost:1521/freepdb1

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on 木 7月 13 09:45:44 2023
Version 23.2.0.0.0

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

最終正常ログイン時間: 木 7月  13 2023 09:45:02 -04:00


Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0
に接続されました。
SQL> col object_name for a30
SQL> select object_type,object_name from user_objects order by 1,2;

OBJECT_TYPE             OBJECT_NAME
----------------------- ------------------------------
INDEX                   PK_DEPT
INDEX                   PK_EMP
TABLE                   BONUS
TABLE                   DEPT
TABLE                   EMP
TABLE                   SALGRADE

6行が選択されました。

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>