2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Autonomous Database:Cloud Tableを使用してObject Storageに更新可能な表を作成してみた

Last updated at Posted at 2024-04-24

はじめに

Autonomous Databaseで、Oracle管理のオブジェクト・ストレージにデータを格納するCloud Tableの機能が利用可能になったので、検証してみました。

表データをオブジェクト・ストレージに格納するので、Autonomous Transaction Processing(ATP)では、DBストレージに表データを格納する場合より安価に表データを保持することができます。

Autonomous Data Warehouse(ECPUモデル)では、DBストレージの方がオブジェクト・ストレージより単価が安いため、Cloud Tableによるコスト・メリットはありません。

Cloud Tableはオブジェクト・ストレージにデータを格納するため、DBストレージにデータを格納する場合と比較するとパフォーマンス的には不利になりますので、ログデータ等のアクセス頻度の低いデータや低速アクセスが許容されるデータに向いていると思われます。

なお、Cloud Tableには、以下のような制限がありますので、ご注意ください。
(詳細はマニュアルをご参照ください)

・最大列数は996列に制限される
・インデック、不可視列、仮想列、DMLトリガー、ブーリアン型はサポートされない
・MERGE文はサポートされない
・LOB列の最大サイズは10MB
・INSERT実行時はロックを取得しない
・UPDATE/DELETE実行時は表に対して排他ロックが取得される

1. Cloud Tableの作成

Cloud Tableの作成にはDBMS_CLOUD.CREATE_CLOUD_TABLEプロシージャを使用します。
table_nameに作成する表の名前、column_listに列とその型をリストします。

SQL> BEGIN
  2      DBMS_CLOUD.CREATE_CLOUD_TABLE(
  3          table_name  => 'EMP_CLOUD_TABLE',
  4          column_list => 'empno NUMBER, ename VARCHAR2(10)' 
  5      );
  6  END;
  7* /

PL/SQL procedure successfully completed.

SQL>

2. Cloud Tableに対するDMLの実行

作成したCloud Table emp_cloud_tableにデータをINSERTしてみます。

SQL> INSERT INTO emp_cloud_table VALUES (7369,'SMITH');

1 row inserted.

SQL> INSERT INTO emp_cloud_table VALUES (7499,'ALLEN');

1 row inserted.

SQL> INSERT INTO emp_cloud_table VALUES (7511,'WARD');

1 row inserted.

SQL> COMMIT;

Commit complete.

SQL>

問題なくデータがINSERTできました。
emp_cloud_tableの内容を確認してみます。

SQL> SELECT * FROM emp_cloud_table;

   EMPNO ENAME    
________ ________ 
    7369 SMITH    
    7499 ALLEN    
    7511 WARD     

SQL>

emp_cloud_tableにデータがINSERTされていることが確認できました。

作成したCloud Table emp_cloud_tableのデータをUPDATEしてみます。

SQL> UPDATE emp_cloud_table SET ename = 'JACKSON'
  2* WHERE empno = 7369;

1 row updated.

SQL> COMMIT;

Commit complete.

SQL>

問題なくデータがUPDATEできました。

emp_cloud_tableの内容を確認してみます。

SQL> SELECT * FROM emp_cloud_table;

   EMPNO ENAME      
________ __________ 
    7369 JACKSON    
    7499 ALLEN      
    7511 WARD       

SQL>

emp_cloud_tableのデータがUPDATEされていることが確認できました。

作成したCloud Table emp_cloud_tableのデータをDELETEしてみます。

SQL> DELETE FROM emp_cloud_table
  2* WHERE empno = 7369;

1 row deleted.

SQL> COMMIT;

Commit complete.

SQL> 

問題なくデータがDELETEできました。
emp_cloud_tableの内容を確認してみます。

SQL> SELECT * FROM emp_cloud_table;

   EMPNO ENAME    
________ ________ 
    7499 ALLEN    
    7511 WARD     

SQL> 

emp_cloud_tableのデータがDELETEされていることが確認できました。

USER_SEGMENTSディクショナリ・ビューに対してクエリを実行してみます。

SQL> SELECT segment_name,sum(bytes) FROM user_segments
  2  WHERE segment_name LIKE 'EMP%'
  3  GROUP BY segment_name
  4* /

SEGMENT_NAME       SUM(BYTES) 
_______________ _____________ 
EMP                     65536 

SQL>

USER_SEGMENTSディクショナリ・ビューに対してクエリを実行し、emp_cloud_tableがDB内にセグメントを持たないことが確認できました。
(emp表は事前に作成した通常の表です。emp_cloud_table表は検索結果に表示されていないので、DB内にセグメントを持たないことがわかります。)

参考情報

Use Cloud Tables to Store Logging and Diagnostic Information

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?