はじめに
Oracle Database 23ai の新機能に「オブジェクト・ストレージ上の読取り専用表領域」があり、読取り専用表領域のデータファイルをOCI Object Storage移動することができます。これにより、データベースの一部をクラウド内の低コストのストレージに格納できます。
ASM上のデータファイルで構成されている読取り専用表領域のデータファイルをOCI Object Storageに移動してみました。
今回は、OCI 上のBase Database、Oracle Database23ai 23.9 で検証しました。
前提条件
DBMS_CLOUDパッケージのインストール
Oracle Database 23ai DBMS_CLOUDパッケージ・ファミリのインストール (2025/08/16)を参考に、DBMS_CLOUDが利用できる状態を作成します。
資格証明の作成
Object Storageジ内のファイルにアクセスするために、資格証明を作成します。
マルチテナント構成環境ではPDB間を分離するために、PDBごとに個別の資格証明を作成、使用することが推奨されます。
ファイルをObject Storageに移動するときに使用する資格証明オブジェクトを指定することもできますが、使い勝手をよくするため、PDBごとのデータベース・プロパティdefault_credentialがサポートされています。資格証明名を明示的に指定しない場合は、default_credentialが自動的に使用されます。
conn system/<PASSWORD>@PDB
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEF_CRED_NAME',
username => 'username@example.com',
password => '<password>'
);
END;
/
alter database property set default_credential = 'SYSTEM.DEF_CRED_NAME';
移動対象の表領域の作成と表の格納
移動対象となる表領域(今回は DATAS表領域)を作成し、確認用の表を格納します。
create tablespace datas datafile '+DATA' size 5m;
create table scott.SALES_DATE (
SALES_ID NUMBER,
SALE_DATE DATE
) tablespace datas;
確認
select table_name from dba_tables where tablespace_name='DATAS';
TABLE_NAME
--------------------------------------------------------------------------------
SALES_DATE
データファイルの移動
読取り専用表領域の準備
ASM上にデータファイルがある表領域(DATAS)を読取り専用表領域に変更します。
ALTER TABLESPACE DATAS READ ONLY;
データファイルのファイル名を確認します。
select name from v$datafile;
NAME
--------------------------------------------------------------
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/system.279.1185951387
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/sysaux.273.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/undotbs1.272.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/users.269.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/undots2.278.1185951377
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/datas.303.1211867697
データファイルの移動
OCI Object Storageのリージョン、ネームスペース、バケット名と格納するファイル名を指定して、ASM上の該当データファイル(今回は datas.303.1211867697 )をObject Storageに移動します。
alter database
move datafile '+DATA/DB23_RU9_NRT/23AI239/DATAFILE/datas.303.1211867697' to
'https://namespase.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/namesoace/b/bucket_name/o/datas.dbf';
Database altered.
データファイルの移動の確認と表へのアクセス
データファイルが移動したことを確認します。
SELECT file_name FROM dba_data_files;
NAME
------------------------------------------------------------------------------------------------------------------------
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/system.279.1185951387
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/sysaux.273.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/undotbs1.272.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/users.269.1185951057
+DATA/DB23_RU9_NRT/23AI239/DATAFILE/undots2.278.1185951377
https://namespase.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/namesoace/b/bucket_name/o/datas.dbf
Object Storageに移動したデータファイル(表領域)内の表およびパーティションのデータに対するアクセスは、ユーザーおよびSQLクライアントに対して完全に透過的になります。
データベース入出力サブシステムが、Object Storageに格納されているファイルのブロックを内部的に問い合せて処理しますので、通常のSQLで、Object Storageに移動された読取り専用表領域内の表の行を問い合せできます。
select * from system.SALES_DATE2;
SALES_ID SALE_DATE
---------- ---------
101 20-DEC-21
102 15-NOV-21
103 05-OCT-21
104 20-SEP-21
105 10-AUG-21
Object StorageからASMへのデータファイルの移動
読取り専用表領域をREAD WRITE可能な表領域に戻したい場合、Object Storage上のファイルは更新できないため、従前の場所(ASM領域)へデータを移動します。
alter database move datafile
'https://namespase.objectstorage.ap-tokyo-1.oci.customer-oci.com/n/namesoace/b/bucket_name/o/datas.dbf'
to '+DATA/';
Database altered.
Object Storage上のデータファイルの削除
Object Storage上のデータファイルは、標準のDROP TABLESPACEコマンドを使用して、データ・ファイルを含む表領域を削除できます。バックエンド・ストレージからデータファイルを削除するために使用するAND DATAFILES句により、ファイルがObject Storageから削除されます。Object StorageファイルでObject Storageに複数のチャンクがある場合、すべてのチャンクとマニフェストが削除されます。
drop tablespace datas including contents and datafiles;
Tablespace dropped.
おわりに
読取り専用表領域のデータファイルをObject Storageへ移動することができました。
Object StorageはBlock Volumeより安価であるため、アクセス頻度がひくく、読取り性能がそれほど求められないデータの格納先の選択肢に加えることができそうです。