はじめに
Oracle Database 23aiの新機能に、オブジェクト・ストレージ上の読取り専用表領域 (Read-Only Tablespace on Object Storage) があり、読取り専用表領域のデータファイルをObject Storageに透過的に移動(逆も)でき、それにより、データベースの一部をクラウド内の低コストのストレージに格納できます。
読取り専用表領域のデータファイルをASMからObject Storageへ移動させてみました。
前提条件
- OCI Base Database 23ai インスタンスを作成(23.4~)
- DBMS_CLOUDパッケージのインストール
- 参考: My Oracle Support ドキュメント How To Setup And Use DBMS_CLOUD Package (Doc ID 2748362.1) (要サポートアカウント)
前処理
2024年8月時点で、Base DatabaseでのObject Storage上の読取り専用表領域の利用には、ODM object storeライブラリの追加インストールが必要です。
- 参考:My Oracle Support ドキュメント 23ai:Trying to move data file to Object store with "Alter Database Move Datafile To Object Storage" throw ORA-01119 ORA-27040 Errors (Doc ID 3043058.1) (要サポートアカウント)
- データベースインスタンスのシャットダウン
SQL> connect / as sysdba
SQL> shutdown immediate
2. ODM object storeのインストール(OSコマンド)
$ sudo su - oracle
$ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk opc_on
3. データベースインスタンスの起動
SQL> connect / as sysdba
SQL> startup
事前準備
Object Storage バケットの作成
データファイルを格納するためのOCI Object Storageバケットを作成(バケット名をメモ:例 dbts)
表領域の作成と表の作成
create tablespace TSA datafile '+DATA' size 1G;
create table TBL(COL1 char(10) not null, COL2 char(1000)) tablespace TSA;
insert into TBL values('A','AAAAA');
commit;
パーティション表の例
create tablespace TSA datafile '+DATA' size 1G;
create tablespace TSB datafile '+DATA' size 1G;
partition by list(COL1)
(partition PA values ('A') tablespace TSA,
partition PB values ('B') tablespace TSB
) ;
insert into TBL values('A','AAAAA');
insert into TBL values('B','BBBBB');
commit;
表領域、データファイル情報の取得
set pages 5000 linesize 150
col TABLESPACE_NAME for a10
col FILE_NAME for a100
select FILE_ID, STATUS, TABLESPACE_NAME, FILE_NAME from DBA_DATA_FILES
where TABLESPACE_NAME like 'TS%';
FILE_ID STATUS TABLESPACE FILE_NAME
---------- --------- ---------- -----------------------------------------------------
18 AVAILABLE TSA +DATA/DB235_nrt/202C1977/DATAFILE/tsa.281.1177572797
19 AVAILABLE TSB +DATA/DB235_nrt/202C1977/DATAFILE/tsb.280.1177572805
表領域を 読取り専用に変更
ALTER TABLESPACE TSA read only;
select tablespace_name , status from dba_tablespaces where TABLESPACE_NAME = 'TSA';
TABLESPACE STATUS
---------- ---------
TSA READ ONLY
DBMS_CLOUD の動作確認
Object Storageバケット内のファイル名の取得
select object_name from dbms_cloud.list_objects('DEF_CRED_NAME','https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/dbts/o/');
Object Storageへデータファイルを移動
Enterprise Editionの場合、オンラインでのデータファイル移動が可能
alter database move datafile '+DATA/DB235_nrt/202C1977/DATAFILE/tsa.281.1177572797' to 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/dbts/o/tsa.dbf';
Database altered.
SQL> select FILE_ID, STATUS, TABLESPACE_NAME, FILE_NAME from DBA_DATA_FILES
2 where TABLESPACE_NAME like 'TS%';
FILE_ID STATUS TABLESPACE FILE_NAME
---------- --------- ---------- -----------------------------------------------------
18 AVAILABLE TSA https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/dbts/o/tsa.dbf
19 AVAILABLE TSB +DATA/DB235_nrt/202C1977/DATAFILE/tsb.280.1177572805
Standard Editionの場合、表領域をオフラインに変更し、手動でデータファイルをObject Storageへアップロードし、データファイルのRENAMEを実施します。
ALTER TABLESPACE TSA read only;
ALTER TABLESPACE TSA offline;
$ sudo su - grid
$ asmcmd cp +DATA/DB235_nrt/202C1977/DATAFILE/tsa.281.1177572797 /tmp/tsa.dbf
$ sudo su - oracle
$ oci os object put -ns <namespace> -bn dbts --file /tmp/tse.dbf --name tsa.dbf --no-multipart
ALTER TABLESPACE TSA RENAME DATAFILE '+DATA/DB235_nrt/202C1977/DATAFILE/tsa.281.1177572797' to 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/dbts/o/tsa.dbf';
ALTER TABLESPACE TSA online;
select FILE_ID, STATUS, TABLESPACE_NAME, FILE_NAME from DBA_DATA_FILES
where TABLESPACE_NAME = 'TSA';
FILE_ID STATUS TABLESPACE FILE_NAME
---------- --------- ---------- -----------------------------------------------------
18 AVAILABLE TSA https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/dbts/o/tsa.dbf
select tablespace_name , status from dba_tablespaces where TABLESPACE_NAME = 'TSA';
TABLESPACE STATUS
---------- ---------
TSA READ ONLY
おわりに
読取り専用表領域のデータファイルをObject Storageに移動することで、データ量増加時のストレージ費用を節約することができます。
DBMS_CLOUDのインストールは少し手間がかかりますが、データファイルの移動は簡単に実行できました。
参考情報
- 古いパーティションでのオブジェクト・ストアの使用
- My Oracle Support ドキュメント How To Setup And Use DBMS_CLOUD Package (Doc ID 2748362.1) (要サポートアカウント)
- オブジェクト・ストレージからOracle DB 19c/21cにデータを導入する
- My Oracle Support ドキュメント 23ai:Trying to move data file to Object store with "Alter Database Move Datafile To Object Storage" throw ORA-01119 ORA-27040 Errors (Doc ID 3043058.1) (要サポートアカウント)