Gblog

おもにTips

UNDO がエクステントを割り当てる際の優先順位

  1. 表領域の空きがあれば使う。
  2. オフラインの UNDO セグメントから、期限切れのエクステントがあれば使う。
  3. オンラインの UNDO セグメントから、期限切れのエクステントがあれば使う。
  4. 表領域が拡張できれば、拡張
  5. オフラインの UNDO セグメントから、期限切れではないエクステントをスチール
  6. 使用中のエクステントの次のエクステントがアクティブでなければ使う。
  7. オンラインの UNDO セグメントから、期限切れではないエクステントがあれば使う。

DB_SECUREFILE

マニュアルの記載がわかりにくく、PERMITTED を設定した場合の挙動について認識齟齬があったので動作確認。12.2.0.1 を使っています。(19c まではどうせ同じでしょ?)

 

以下の SQL を使用。

alter system set db_securefile='NEVER';
create table never1 (id number, col1 varchar2(100), col2 clob) ;
create table never2 (id number, col1 varchar2(100), col2 clob) lob (col2) store as securefile ;
create table never3 (id number, col1 varchar2(100), col2 clob) lob (col2) store as basicfile ;

alter system set db_securefile='PERMITTED';
create table permitted1 (id number, col1 varchar2(100), col2 clob) ;
create table permitted2 (id number, col1 varchar2(100), col2 clob) lob (col2) store as securefile ;
create table permitted3 (id number, col1 varchar2(100), col2 clob) lob (col2) store as basicfile ;

alter system set db_securefile='PREFERRED';
create table PREFERRED1 (id number, col1 varchar2(100), col2 clob) ;
create table PREFERRED2 (id number, col1 varchar2(100), col2 clob) lob (col2) store as securefile ;
create table PREFERRED3 (id number, col1 varchar2(100), col2 clob) lob (col2) store as basicfile ;

alter system set db_securefile='ALWAYS';
create table ALWAYS1 (id number, col1 varchar2(100), col2 clob) ;
create table ALWAYS2 (id number, col1 varchar2(100), col2 clob) lob (col2) store as securefile ;
create table ALWAYS3 (id number, col1 varchar2(100), col2 clob) lob (col2) store as basicfile ;

alter system set db_securefile='IGNORE';
create table IGNORE1 (id number, col1 varchar2(100), col2 clob) ;
create table IGNORE2 (id number, col1 varchar2(100), col2 clob) lob (col2) store as securefile ;
create table IGNORE3 (id number, col1 varchar2(100), col2 clob) lob (col2) store as basicfile ;

 

結果は以下。

SQL> col TABLE_NAME for a20
SQL> col COLUMN_NAME for a10
SQL> select TABLE_NAME, COLUMN_NAME, SECUREFILE from user_lobs;

TABLE_NAME           COLUMN_NAM SECUREFIL
-------------------- ---------- ---------
NEVER1               COL2       NO
NEVER2               COL2       NO
NEVER3               COL2       NO
PERMITTED1           COL2       NO
PERMITTED2           COL2       YES
PERMITTED3           COL2       NO
PREFERRED1           COL2       YES
PREFERRED2           COL2       YES
PREFERRED3           COL2       NO
ALWAYS1              COL2       YES
ALWAYS2              COL2       YES
ALWAYS3              COL2       YES
IGNORE1              COL2       NO
IGNORE2              COL2       NO
IGNORE3              COL2       NO

15 rows selected.

 

すみません、IGNORE と NEVER の違いが判りません。。。

STS のバインド値

STS (SQL Tuning Set) のバインド値は、DBA_SQLSET_BINDS のVALUE 列から確認が可能です。

ただ、これ、ANYDATA 型。。。

SQL> DESC DBA_SQLSET_BINDS
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SQLSET_NAME                                        VARCHAR2(128)
 SQLSET_OWNER                                       VARCHAR2(128)
 SQLSET_ID                                          NUMBER
 CON_DBID                                           NUMBER
 SQL_ID                                             VARCHAR2(13)
 FORCE_MATCHING_SIGNATURE                           NUMBER
 PLAN_HASH_VALUE                                    NUMBER
 POSITION                                           NUMBER
 VALUE                                              ANYDATA
 CAPTURED                                           CHAR(1)
 SQL_SEQ                                            NUMBER

 データを確認するのにちょっとコツがいります。

続きを読む