0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Data Pump で LONG 型列の自動変換機能を試す(Oracle AI Database 26ai)

Posted at

Data Pump とは

 Data Pump は Oracle Database 標準の論理バックアップ・ツールです。コマンドラインから実行する expdp/impdp コマンドや、PL/SQL パッケージ DBMS_DATAPUMP から構成されています。バックアップやリストアはテーブル単位、スキーマ単位、データベース単位、表領域単位などを自由に選択できます。
 本記事では Oracle AI Database 26ai に含まれる Data Pump の新機能ついて検証します。

Oracle AI Database 26ai の新機能

 Oracle AI Database 26ai の Data Pump には LONG 型と LONG RAW 型の列を自動変換するパラメーターが追加されました。マニュアル Oracle AI Database 26ai Database Utility には以下の記載があります。

LONG_TO_LOB:[Y|N]
The default value is N. This parameter changes all LONG data types to CLOB and all LONG RAW data types to BLOB. Using this transform enables you to migrate deprecated LONG and LONG RAW data types, transparently and automatically converting them to CLOBs and BLOBs.

 LONG は古い Oracle Database で利用された大規模な文字列を格納するためのデータ型ですが、Oracle 8i 以降は非推奨になっています。LONG 型は CLOB 型または NCLOB 型に変更することが推奨されます。また LONG RAW はバイナリ・データを格納する目的のデータ型ですが、こちらも Oracle 8i 以降は非推奨で、BLOB 型に変更することが推奨されます。
 Data Pump ではインポート時にデータ型の変更を自動的に行うオプションを提供し、LOB 型への変更を進めようとしています。

検証

 実際の変更について検証します。

エクスポート

 Oracle Database 19c に LONG 型、LONG RAW 型の列を持つテーブルを作成し、エクスポートします。ダンプファイルを Oracle AI Database 26ai データベースにインポートします。

Oracle Database 19c でテーブル作成
SQL> CREATE TABLE data1(col1 NUMBER PRIMARY KEY, col2 LONG);
Table created.

SQL> CREATE TABLE data2(col1 NUMBER PRIMARY KEY, col2 LONG RAW);
Table created.

SQL> INSERT INTO data1 VALUES (100, 'data1');
1 row created.

SQL> INSERT INTO data2 VALUES (10, HEXTORAW('7D'));
1 row created.

SQL> COMMIT;
Commit complete.

エクスポートを行います。

エクスポート
$ expdp userid=scott/{Password}@dbsrv1:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp

Export: Release 23.26.0.0.0 - Production on Wed Nov 5 18:35:56 2025
Version 23.26.0.0.0

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

Connected to: Oracle AI Database 26ai Free Release 23.26.0.0.0 - Develop, Learn, and Run for Free
Starting "SCOTT"."SYS_EXPORT_TABLE_01":  userid=scott/********@dbsrv1:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "SCOTT"."DATA1"                               5.5 KB       1 rows
. . exported "SCOTT"."DATA2"                               5.5 KB       1 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  /opt/oracle/admin/FREE/dpdump/412FE92A5194BEEDE0639D01A8C08189/scott.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at Wed Nov 5 18:36:12 2025 elapsed 0 00:00:14

インポート

 元のテーブルを削除し、インポートを行います。まずはダンプファイル内の SQL 文を確認します。元のデータ型(LONG, LONG RAW)になっています。

SQLFILE オプションの指定
$ impdp userid=scott/{Password}@dbsvr11:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp sqlfile=scott.sql

Import: Release 23.26.0.0.0 - Production on Wed Nov 5 18:43:12 2025
Version 23.26.0.0.0
...
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SCOTT"."SYS_SQL_FILE_TABLE_01" successfully completed at Wed Nov 5 18:43:16 2025 elapsed 0 00:00:03
$ cat scott.sql
...
CREATE TABLE "SCOTT"."DATA2"
   (    "COL1" NUMBER,
        "COL2" LONG RAW
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS 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 "USERS" ;
CREATE TABLE "SCOTT"."DATA1"
   (    "COL1" NUMBER,
        "COL2" LONG
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS 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 "USERS" ;
...

transform=long_to_lob:y オプションを指定して SQLFILE を作成してみます。

TRANSFORM=LONG_TO_LOB:Y オプション付き
$ impdp userid=scott/{Password}@dbsvr11:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp sqlfile=scott.sql transform=long_to_lob:y

Import: Release 23.26.0.0.0 - Production on Wed Nov 5 18:43:12 2025
Version 23.26.0.0.0
...
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SCOTT"."SYS_SQL_FILE_TABLE_01" successfully completed at Wed Nov 5 18:42:57 2025 elapsed 0 00:00:03
$ cat scott.sql
...
CREATE TABLE "SCOTT"."DATA2"
   (    "COL1" NUMBER,
        "COL2" BLOB
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS 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 "USERS" ;
CREATE TABLE "SCOTT"."DATA1"
   (    "COL1" NUMBER,
        "COL2" CLOB
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS 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 "USERS" ;
...

 LONG 型の列は CLOB 型に、LONG RAW 型の列は BLOB に変換されていることが分かります。この検証により、SQLFILE オプションを指定した場合でも LONG 型列の変換機能が有効に働くことが確認できます。
 
次に実際にデータのインポートを行います。

インポート
$ impdp userid=scott/{Password}@dbsvr1:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp transform=long_to_lob:y

Import: Release 23.26.0.0.0 - Production on Wed Nov 5 20:38:49 2025
Version 23.26.0.0.0

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

Connected to: Oracle AI Database 26ai Free Release 23.26.0.0.0 - Develop, Learn, and Run for Free
Master table "SCOTT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  userid=scott/********@dbsvr1:1521/freepdb1 tables=data1,data2 directory=data_pump_dir dumpfile=scott.dmp transform=long_to_lob:y
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."DATA1"                               5.5 KB       1 rows
. . imported "SCOTT"."DATA2"                               5.5 KB       1 rows
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at Wed Nov 5 20:39:20 2025 elapsed 0 00:00:30

変換されたデータ型を確認します。

変換後のデータ型とデータ確認
SQL> DESCRIBE data1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER
 COL2                                               CLOB

SQL> SELECT * FROM data1;

      COL1 COL2
---------- ------------------------------
       100 data1

SQL> DESCRIBE data2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER
 COL2                                               BLOB

 SQL> SELECT * FROM data2;

      COL1 COL2
---------- ------------------------------
        10 7D

LONG 型は CLOB 型に、LONG RAW 型は BLOB 型に変換されていることがわかります。

Author: Noriyoshi Shinoda / Date: November 5, 2025

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?