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ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
分析に使用できる一時スクラッチ表領域の名前。 |
|
|
分析される表のスキーマ。 |
|
|
分析される表の名前。 |
|
|
LOB列名 |
|
|
パーティション化された表の場合、関連するパーティションまたはサブパーティションの名前。 |
|
|
圧縮率とは、元のデータ・サイズ(バイト)と圧縮されたデータ・サイズ(バイト)の比率です。 |
|
|
圧縮率を見積もるためにサンプリングされた行数。 |
block_compr_ratio |
ブロック・レベルの圧縮率は、blkcnt_uncmpをblkcnt_cmpで割った値です。圧縮されていないデータによって占有されているブロック数と、圧縮されたデータによって占有されているブロック数の比率を提示します。
|
total_time |
表内のLOBデータを圧縮するためにかかる推定時間を提示します(時間単位)。 |
|
|
分析の圧縮タイプを指定します。使用可能な値は、 |
|
|
表の圧縮されたサンプルに使用されるブロック数。 |
|
|
表の圧縮解除されたサンプルに使用されるブロック数。 |
|
|
圧縮率を見積もるために実際にサンプリングされた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ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
表領域の名前 |
|
|
表の所有者 |
|
|
表の名前 |
|
|
重複除外率が計算されるLOB列の名前 |
|
|
パーティション化された表の場合は、関連するパーティション名を入力します |
|
|
重複除外率を見積もるためにサンプリングされた行数。デフォルトでは、すべての行について重複除外率が計算されます。 |
戻り値
重複除外を有効にした後に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%のうち、いずれか小さい方です。