181 DBMS_SECUREFILES

DBMS_SECUREFILESパッケージは、SecureFiles LOBを操作および管理するためのファンクションを提供します。

この章のトピックは、次のとおりです:

181.1 DBMS_SECUREFILESのセキュリティ・モデル

このパッケージはAUTHID CURRENT USERで定義されるため、現在のユーザーの権限で実行されます。

無名PL/SQLブロックからコールされたDBMS_SECUREFILESサブプログラムは、現在のユーザーの権限を使用して実行されます。

参照:

AUTHIDおよび権限の詳細は、Oracle AI Database PL/SQL言語リファレンスを参照してください

181.2 DBMS_SECUREFILESのファンクションの要約

この表は、DBMS_SECUREFILESのファンクションを示し、簡単に説明しています。

表181-1 DBMS_SECUREFILESパッケージのファンクション

サブプログラム 説明
GET_LOB_COMPR_RATIOファンクション このファンクションを使用して、SecureFile LOBで圧縮を有効にすることで、記憶域節約の可能性を見積もります。
GET_LOB_DEDUPLICATION_RATIOファンクション このファンクションを使用して、SecureFile LOBで重複除外を有効にすることで、記憶域節約の可能性を見積もります。

181.2.1 GET_LOB_COMPR_RATIOファンクション

このファンクションを使用して、SecureFile LOBで圧縮を有効にすることで、記憶域節約の可能性を見積もります。様々なパラメータの値を指定して、異なる圧縮タイプを選択的に分析します。

圧縮率は、LOB列の指定の行数について見積もられます。たとえば、圧縮率が2.33であるとします。これは、圧縮を有効にすると、LOB列のサンプリングされた行について記憶域の約半分が節約されることを示します。

免責事項: 圧縮率は、LOB列のサンプリングされた行に基づいて計算される概算値です。LOBに対して圧縮機能が有効になっているときに節約される実際の領域は異なる場合があります。

構文

LOBの圧縮率を取得する構文。

DBMS_SECUREFILES.GET_LOB_COMPR_RATIO (
   tablespacename        IN     VARCHAR2,
   tabowner              IN     VARCHAR2,
   tabname               IN     VARCHAR2,
   lobcolumnname         IN     VARCHAR2,
   partname              IN     VARCHAR2,
   comptype              IN     NUMBER,
   subset_numrows        IN     NUMBER,
   lobcnt                OUT    PLS_INTEGER,
   comp_ratio            OUT    NUMBER,
   block_compr_ratio     OUT    NUMBER,
   total_time            OUT    NUMBER,
   blkcnt_cmp            OUT    PLS_INTEGER,
   blkcnt_uncmp          OUT    PLS_INTEGER,
   ) return NUMBER;

パラメータ

表181-2 GET_LOB_COMPR_RATIOファンクションのパラメータ

パラメータ 説明

tablespacename

分析に使用できる一時スクラッチ表領域の名前。

tabowner

分析される表のスキーマ。

tabname

分析される表の名前。

lobcolumnname

LOB列名

partname

パーティション化された表の場合、関連するパーティションまたはサブパーティションの名前。

comp_ratio

圧縮率とは、元のデータ・サイズ(バイト)と圧縮されたデータ・サイズ(バイト)の比率です。

subset_numrows

圧縮率を見積もるためにサンプリングされた行数。

block_compr_ratio ブロック・レベルの圧縮率は、blkcnt_uncmpblkcnt_cmpで割った値です。圧縮されていないデータによって占有されているブロック数と、圧縮されたデータによって占有されているブロック数の比率を提示します。
total_time 表内のLOBデータを圧縮するためにかかる推定時間を提示します(時間単位)。

comptype

分析の圧縮タイプを指定します。使用可能な値は、12および3です。低圧縮タイプの場合は1、中圧縮タイプの場合は2、高圧縮タイプの場合は3を入力します。

blkcnt_cmp

表の圧縮されたサンプルに使用されるブロック数。

blkcnt_uncmp

表の圧縮解除されたサンプルに使用されるブロック数。

lobcnt

圧縮率を見積もるために実際にサンプリングされたLOBの数。

DECLARE
  cmp_ratio          NUMBER;
  block_comp_ratio   NUMBER;
  time_taken         NUMBER;
  blkcnt_uncmp       INTEGER;
  blkcnt_cmp         INTEGER;
  lobcnt             INTEGER;
BEGIN
  cmp_ratio := DBMS_SECUREFILES.GET_LOB_COMPR_RATIO(
    tablespacename    => 'SYSAUX',
    tabowner          => 'T',
    tabname           => 'T',
    lobcolumnname     => 'DATA',
    partname          => '',
    comp_ratio        => cmp_ratio,
    subset_numrows    => 1000,
    block_compr_ratio => block_comp_ratio,
    total_time        => time_taken,
    comptype          => 2,
    blkcnt_uncmp      => blkcnt_uncmp,
    blkcnt_cmp        => blkcnt_cmp,
    lobcnt            => lobcnt
  );

  DBMS_OUTPUT.put_line('Estimated compression ratio of sample: ' || cmp_ratio);
  DBMS_OUTPUT.put_line('Estimated compression ratio at block level: ' || block_comp_ratio);
  DBMS_OUTPUT.put_line('Number of blocks used by the uncompressed sample of the table: ' || blkcnt_uncmp);
  DBMS_OUTPUT.put_line('Number of blocks used by the compressed sample of the table: ' || blkcnt_cmp);
  DBMS_OUTPUT.put_line('Number of LOBS actually sampled: ' || lobcnt);
  DBMS_OUTPUT.put_line('Time taken: ' || time_taken);
END;
/

サンプル出力

Estimated compression ratio of sample: 1.36889059958356
Estimated compression ratio at block level: 1
Number of blocks used by the uncompressed sample of the table: 3102
Number of blocks used by the compressed sample of the table: 3102
Number of LOBS actually sampled: 1000
Time taken: .00015315493742147832

PL/SQL procedure successfully completed.

使用上のノート

このファンクションは、スクラッチ表領域に異なる表を作成し、これらのオブジェクトで分析を実行します。ユーザー指定の表では何も変更しません。ファンクションが完了する前に、すべての仮のオブジェクトが削除されます。

181.2.2 GET_LOB_DEDUPLICATION_RATIOファンクション

拡張LOB重複除外を使用すると、Oracle AI Databaseで、LOB列内やLOBパーティション内の重複するLOBデータを自動検出でき、データのコピーが1つのみ格納されることで領域を節約できます。GET_LOB_DEDUPLICATION_RATIOファンクションを使用して、SecureFile LOBで重複除外を有効にすることで、記憶域節約の可能性を見積もります。

GET_LOB_DEDUPLICATION_RATIOファンクションは重複除外率を戻し、これにより、BasicFiles LOBをSecureFiles LOBに移行する前に、拡張LOB重複除外の有効化や結果のSecureFiles LOBの重複除外について情報に基づいた意思決定を行うことができます。拡張LOB重複除外の詳細は、『Oracle AI Database SecureFilesおよびラージ・オブジェクト開発者ガイド』拡張LOB重複除外を使用したALTER TABLEを参照してください。

重複除外率は、LOB列の指定の行数について見積もられます。たとえば、重複除外率が2.33であるとします。これは、重複除外を有効にすると、LOB列のサンプリングされた行について記憶域の約半分が節約されることを示します。

免責事項: 重複除外率は、LOB列のサンプリングされた行に基づいて計算される概算値です。表全体に対して重複除外が有効になっているときに節約される実際の領域は異なる場合があります。

必要なロール

GET_LOB_DEDUPLICATION_RATIOファンクションを使用するには、SECUREFILE_MONITORロールが必要です。

構文

DBMS_SECUREFILES.GET_LOB_DEDUPLICATION_RATIO (
   tablespacename        IN     VARCHAR2,
   tabowner              IN     VARCHAR2,
   tabname               IN     VARCHAR2,
   lobcolumnname         IN     VARCHAR2,
   partname              IN     VARCHAR2,
   dedup_ratio           OUT    NUMBER,
   subset_numrows        IN     NUMBER DEFAULT DEDUP_RATIO_LOB_MAXROWS
)

パラメータ

表181-3 GET_LOB_DEDUPLICATION_RATIOファンクションのパラメータ

パラメータ 説明

tablespacename

表領域の名前

tabowner

表の所有者

tabname

表の名前

lobcolumnname

重複除外率が計算されるLOB列の名前

partname

パーティション化された表の場合は、関連するパーティション名を入力します

subset_numrows

重複除外率を見積もるためにサンプリングされた行数。デフォルトでは、すべての行について重複除外率が計算されます。

戻り値

重複除外を有効にした後にSecureFile LOB列について節約される記憶域を示す、重複除外率dedup_ratioを戻します。

次のサンプル・コードは、JOHNが所有するACME_TABLE内のLOB列Cについて重複除外率を計算して戻します。

DECLARE
 dedup_ratio    number;
 l_table_name   varchar2(128) = "ACME_TABLE";
 l_column_name  varchar2(3000) = "C";
 l_tablespace_name varchar2(128) := "TBS";
 l_owner varchar2(128) := "JOHN";
BEGIN
dedup_ratio := dbms_lob.GET_LOB_DEDUPLICATION_RATIO(
    l_tablespace_name,
    l_owner,
    l_table_name,
    l_column_name,
    '',
    dedup_ratio,
    -1);
dbms_output.put_line('Deduplication ratio: ' || dedup_ratio);
END;

使用上のノート

このファンクションで処理できるLOBの最大数は、100000または表の合計行数の1%のうち、いずれか小さい方です。