データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

Oracle Database 19cの新機能「ハイブリッド・パーティショニング」とは?外部ファイルとDB内部を併用するパーティション管理

Oracle 19cの新機能「ハイブリッド・パーティショニング」とは

Oracle Database 12c Release 2では、外部表(External Table)に対してパーティションを作成できる機能が導入されました。さらにOracle Database 19cでは、その発展形となる「ハイブリッド・パーティショニング(Hybrid Partitioning)」が新たに追加されました。

この機能を使うと、一部のパーティションをデータベース外(OS上のフラットファイル)に配置し、残りのパーティションはデータベース内の表領域に格納するという、いわば「ハイブリッド」な構成を1つの表で実現できます。

これにより、アクセス頻度の低い過去のパーティションをLinuxファイルシステムなどの安価な外部ストレージに退避させながら、アクセス頻度の高いアクティブなデータはOracleデータベース内に保持する、といった運用が可能になります。ストレージコストの削減とパフォーマンスの両立に役立つ強力な機能です。

デモの概要

本記事では、4つのパーティション(DATA_2019DATA_2020DATA_2021DATA_2022)を持つハイブリッド・パーティション表 DATA を作成します。

  • DATA_2019 / DATA_2020 / DATA_2021:データベース外部。OSディレクトリ /home/oracle/data_dir 配下のフラットファイルにデータを保持します。
  • DATA_2022:データベース内部(USERS表領域)。通常の表と同じくOracle内にデータを格納します。

3つのフラットファイルには、2019年・2020年・2021年のデータが空白文字(whitespace)区切りで保存されています。

ステップ1:データベースへログインし、対象PDBを設定する

まずデータベースにログインし、表を作成するターゲットのプラガブル・データベース(PDB)に接続コンテナを切り替えます。

ALTER SESSION SET CONTAINER = orclpdb;

ステップ2:ディレクトリオブジェクトとユーザーを作成する

次に、OSディレクトリ /home/oracle/data_dir を指すディレクトリオブジェクト DATA_FILES_DIR をデータベース内に作成します。あわせてユーザー APP_USER を作成し、このディレクトリに対するREAD権限とWRITE権限を付与します。

CREATE DIRECTORY data_files_dir AS '/home/oracle/data_dir';
CREATE USER app_user IDENTIFIED BY password;
GRANT READ, WRITE ON DIRECTORY data_files_dir TO app_user;

ステップ3:ハイブリッド・パーティション表を作成する

APP_USER スキーマにハイブリッド・パーティション表 DATA を作成します。EXTERNAL PARTITION ATTRIBUTES 句で外部パーティション共通の属性(アクセスドライバやデフォルトディレクトリ)を定義し、個々のパーティションに EXTERNAL を指定すると外部化されます。

CREATE TABLE data (
  year  NUMBER,
  value VARCHAR2(100)
)
EXTERNAL PARTITION ATTRIBUTES (
  TYPE oracle_loader
  DEFAULT DIRECTORY data_files_dir
  ACCESS PARAMETERS (
    FIELDS TERMINATED BY WHITESPACE
  )
  REJECT LIMIT UNLIMITED
)
PARTITION BY RANGE (year) (
  PARTITION data_2019 VALUES LESS THAN (2020) EXTERNAL LOCATION ('data_2019.txt'),
  PARTITION data_2020 VALUES LESS THAN (2021) EXTERNAL LOCATION ('data_2020.txt'),
  PARTITION data_2021 VALUES LESS THAN (2022) EXTERNAL LOCATION ('data_2021.txt'),
  PARTITION data_2022 VALUES LESS THAN (2023)
);

この構成では、DATA_2019・DATA_2020・DATA_2021 の3パーティションがデータベース外部のフラットファイルを参照し、DATA_2022 パーティションのみデータベース内部に格納されるハイブリッド構成となります。

ステップ4:各パーティションからデータを照会する

作成した表に対して通常どおりSELECT文を実行でき、外部パーティションも透過的に参照できます。パーティション・プルーニングを利用すれば、特定のパーティションだけを効率よくスキャンすることも可能です。

DATA_2019:

SELECT * FROM data PARTITION (data_2019);

DATA_2020:

SELECT * FROM data PARTITION (data_2020);

DATA_2021:

SELECT * FROM data PARTITION (data_2021);

DATA_2022:

SELECT * FROM data PARTITION (data_2022);

いずれのパーティションについても、データが外部ファイルにあるかデータベース内にあるかを意識せずに問い合わせできる点が大きなメリットです。

ステップ5:本当にハイブリッド・パーティション表になっているか確認する

データディクショナリビューを参照すると、作成した表がハイブリッド・パーティション表であることを確認できます。

SELECT partition_name, external_name
FROM   user_tab_partitions
WHERE  table_name = 'DATA';

外部パーティションには対応する外部ファイル名が表示され、内部パーティションにはNULLが返るため、どのパーティションが外部化されているか一目でわかります。

ステップ6:内部パーティションへのINSERTとORA-01950エラーの確認

内部パーティション DATA_2022 にデータを挿入しようとすると、表領域 USERS に対する割当て(QUOTA)がない場合、次のエラーで失敗します。

ORA-01950: 表領域'USERS'に対する権限がありません
(ORA-01950: no privileges on tablespace 'USERS')

このエラーが発生するということは、DATA_2022 パーティションのデータがUSERS表領域、つまりデータベース内部に格納されることを裏付けています。

そこで、APP_USER にUSERS表領域のQUOTAを付与すると、今度は正常に挿入できるようになります。

ALTER USER app_user QUOTA UNLIMITED ON users;
INSERT INTO data VALUES (2022, 'sample');

ステップ7:セグメント情報から格納場所を確認する

セグメント情報を問い合わせると、データベース内に実体を持っているのは DATA_2022 パーティションのみであることがわかります。外部パーティション(DATA_2019〜DATA_2021)にはデータベース内にセグメントが存在しないためです。

SELECT segment_name, partition_name, tablespace_name
FROM   dba_segments
WHERE  owner      = 'APP_USER'
AND    segment_name = 'DATA';

結果として表示されるのは DATA_2022 のみで、その他のパーティションのデータはデータベース外部のフラットファイルに保持されていることが確認できます。

まとめ

ハイブリッド・パーティショニングを活用すれば、アクセスされなくなった古いパーティションのデータを、データベース外のより安価なストレージ(Linuxファイルシステムなど)へ移管しながら、アクティブなテーブルデータは引き続きOracleデータベース内に保持できます。

単一の表としてシームレスに扱えるため、アプリケーション側の改修は不要です。ライフサイクル管理(ILM)やストレージコスト最適化の選択肢として、ぜひ検討してみてください。

ご意見やご質問がある場合は、フィードバックフォームからお気軽にお寄せください。私たちとの対話も歓迎します。

  1. Oracle 19cのDBCAコマンドでデータベースをクローンする方法【サイレントモード完全ガイド】

    本記事では、Oracle Database 19cの新機能であるDatabase Configuration Assistant(DBCA)を使用して、ソースデータベースのバックアップを作成することなく、リモートのプラガブル・データベース(PDB)をコンテナ・データベース(CDB)へクローンする手順をご紹介します。 DBCAによるクローンの最大の特長は、ソースからターゲットへの複製にかかる時間が最小限に抑えられる点です。 ソースDBの構成 CDB:LCONCDB PDB:LCON 以下は、ソース側の各コンテナ(CDBおよびPDB)に存在するDBFファイルの総数です。クローン作成後は、ター

  2. データベース管理者必見!Oracle Database 19cの新機能徹底解説

    Oracle® Database 19cは、数多くの新機能と改善された機能を搭載して登場しました。本記事では、データベース管理者(DBA)の業務を効率化する主要な新機能について詳しく解説します。 はじめに Oracle 19cは、Oracle Database 12cリリース2製品ファミリーにおいて長期サポートが提供される最終リリースです。Linux®、Windows®、Solaris®、HP/UX®、AIX®などの各プラットフォームに加え、Oracle Cloud上でも利用可能です。Oracle 19cは、あらゆる運用系および分析系ワークロードに対して、最高レベルのパフォーマンス、スケーラビ