そうだ 検証、しよう。
JPOUG in 15 minutes #1
三原 健一
私の考える検証
問題、障害の原因探求
仕様の確認
マニュアルの行間を探る
これがけっこう楽しい!
検証をする際に役立つ情
報をいくつか紹介します
。
準備フェーズ
データ作成
別スキーマにテーブル作成
ALTER SESSION SET
CURRENT_SCHEMA ~
ALTER SESSION SET
CURRENT_SCHEMA ~
• デフォルトは ログインユーザ=スキー
マ
• アプリケーション・コンテキストのセッ
ション情報を変更できる
例:SYSユーザでログインして
SCOTTスキーマにTEST表を作成
SQL> conn / as sysdba
接続されました。
SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA
2 from dual;
CURRENT_SCHEMA
--------------
SYS
SQL> alter session set CURRENT_SCHEMA = SCOTT;
セッションが変更されました。
SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA
2 from dual;
CURRENT_SCHEMA
--------------
SCOTT
SQL> show user
ユーザーは"SYS"です。
SQL> create table TEST (
2 ID number
3 );
表が作成されました。
SQL> select OWNER,TABLE_NAME from DBA_TABLES
2 where TABLE_NAME = 'TEST';
OWNER TABLE_NAME
------ -----------
SCOTT TEST
バルクインサート
SQL> DECLARE
2 TYPE tbl_ins IS TABLE OF TEST%ROWTYPE INDEX BY PLS_INTEGER;
3 w_ins tbl_ins;
4 BEGIN
5 FOR i IN 1..100000 LOOP
6 w_ins(i).ID := i;
7 END LOOP;
8
9 FORALL i IN 1..100000 insert into TEST values w_ins(i);
10 commit;
11 END;
12 /
PL/SQLプロシージャが正常に完了しました。
SQL> select count(*) from TEST;
COUNT(*)
----------
100000
例:10万件を一括インサート
実行フェーズ
トレース
SQL> select name, value from v$diag_info;
NAME VALUE
--------------------- ------------------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231.trc
Active Problem Count 3
Active Incident Count 5
11行が選択されました。
SQL> alter session set tracefile_identifier = 'SQLTRC';
セッションが変更されました。
SQL> select name, value from v$diag_info
2 where NAME = 'Default Trace File';
NAME VALUE
--------------------- -------------------------------------------------------------------
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231_SQLTRC.trc
トレースファイル出力場所・名称
SQL> alter system set events '10046 trace name context forever,level 12';
システムが変更されました。
SQL> alter system set events '10046 trace name context off';
システムが変更されました。
トレース有効化・無効化
SQL> alter session set events '10046 trace name context forever,level 12';
システムが変更されました。
SQL> alter session set events '10046 trace name context off';
システムが変更されました。
インスタンス単位
セッション単位
c.f. DBMS_SESSION or DBMS_MONITOR(SQLトレース)
SQLトレース(10046)
レベル 説明
0 無効
1 alter session set SQL_TRACE = TRUE と同じ
4 バインド変数値を含む
8 待機イベント情報を含む
12 バインド変数値+待機イベント情報
CBOトレース(10053)
レベル 説明
1
レベル指定なしと同じ。統計情報、CBO関連パラメ
ータ一覧および計算結果を含む
2 計算結果のみ
SQL> set serveroutput on
SQL> DECLARE
2 err_msg LONG;
3 err_cod PLS_INTEGER;
4 i PLS_INTEGER;
5 BEGIN
6 FOR err_cod IN 10000..10999 LOOP
7 i := UTL_LMS.GET_MESSAGE (err_cod, 'rdbms',
'ora', 'japanese', err_msg);
8 IF err_msg not like 'Message%not found%' THEN
9 DBMS_OUTPUT.PUT_LINE (TO_CHAR (err_cod,
'FM00000') || ': ' || err_msg);
10 END IF;
11 END LOOP;
12 END;
13 /
イベント一覧取得要領
10000: control file debug event, name 'control_file'
10001: control file crash event1
10002: control file crash event2
10003: control file crash event3
10004: block recovery testing - internal error
………………
10045: free list update operations - ktsrsp, ktsunl
10046: enable SQL statement timing
10047: trace switching of sessions
………………
10052: don't clean up obj$
10053: CBO Enable optimizer trace
10054: CBO Enable optimizer trace for recursive statement (RPI)
………………
10995: general event for materialized views
10997: another startup/shutdown operation of this instance
inprogress
10998: event to enable short stack dumps in system state dumps
10999: do not get database enqueue name
イベント一覧(抜粋)
ブロック・ダンプ取得
SQL> SELECT
2 ROWID
3 ,DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'RM','SMALL_TBL') "FILE#"
4 ,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) "BLOCK#"
5* FROM RM.SMALL_TBL;
ROWID FILE# BLOCK#
------------------ ---------- ----------
AAADkVAAFAAAAAHAAA 5 7
AAADkVAAFAAAAAHAAB 5 7
AAADkVAAFAAAAAHAAC 5 7
AAADkVAAFAAAAAHAAD 5 7
AAADkVAAFAAAAAHAAE 5 7
AAADkVAAFAAAAAHAAF 5 7
AAADkVAAFAAAAAHAAG 5 7
AAADkVAAFAAAAAHAAH 5 7
AAADkVAAFAAAAAHAAI 5 7
AAADkVAAFAAAAAHAAJ 5 7
10 rows selected.
ファイル番号、ブロック番号を取得す
る
1. ALTER SYSTEM DUMP DATAFILE <データファイルNo.> BLOCK <ブロック
No.>;
2. ALTER SYSTEM DUMP DATAFILE <FNO> BLOCK MIN <開始ブロックNo.>
BLOCK MAX <終了ブロックNo.>;
結果はDiag Trace(10g以前はUSER_DUMP_DEST)に出力される。
(データ・)ブロック・ダンプ取得方
法
/opt/app/oracle/admin/xxxxx/udump/xxxxxx_ora_8652.trc
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
ORACLE_HOME = /opt/app/oracle/product/10.2.0/db
System name: Linux
............... (中略) ............................................
*** SESSION ID:(446.1507) 2010-03-18 11:18:00.905
Start dump data blocks tsn: 5 file#: 5 minblk 7 maxblk 7
buffer tsn: 5 rdba: 0x01400007 (5/7)
scn: 0x0000.0376e690 seq: 0x01 flg: 0x06 tail: 0xe6900601
frmt: 0x02 chkval: 0x1f4b type: 0x06=trans data
Hex dump of block: st=0, typ_found=1 ←しばらくバイナリ・ダンプが続く
Dump of memory from 0x00000000125CE400 to 0x00000000125CEC00
0125CE400 00006206 01400007 0376E690 06010000 [.b....@...v.....]
0125CE410 00001F4B 00000001 00003915 0376E68F [K........9....v.]
............... (中略) ............................................
0125CE480 02660324 00EA01A8 0000002C 00000000 [$.f.....,.......]
0125CE490 100B012C 30303052 30303030 30303030 [,...R00000000000] 10行目
0125CE4A0 30313030 30303010 30303030 30303030 [0010.00000000000]
0125CE4B0 30303030 31311030 31313131 31313131 [00000.1111111111]
............... (中略) ............................................
0125CEB40 3052100B 30303030 30303030 30303030 [..R0000000000000] 1行目
0125CEB50 30103130 30303030 30303030 30303030 [01.0000000000000]
0125CEB60 10303030 31313131 31313131 31313131 [000.111111111111]
0125CEB70 31313131 32323210 32323232 32323232 [1111.22222222222]
0125CEB80 32323232 33331032 33333333 33333333 [22222.3333333333]
0125CEB90 33333333 34103333 34343434 34343434 [333333.444444444]
0125CEBA0 34343434 10343434 35353535 35353535 [4444444.55555555]
0125CEBB0 35353535 35353535 36363610 36363636 [55555555.6666666]
0125CEBC0 36363636 36363636 37371036 37373737 [666666666.777777]
0125CEBD0 37373737 37373737 38103737 38383838 [7777777777.88888]
0125CEBE0 38383838 38383838 10383838 39393939 [88888888888.9999]
0125CEBF0 39393939 39393939 39393939 E6900601 [999999999999....]
(行データはブロック内で下から順に格納されるイメージ)
............... (中略) ............................................
data_block_dump,data header at 0x125ce464
バイナリ(16進)・ダンプ
data_block_dump,data header at 0x125ce464
===============
tsiz: 0x798
hsiz: 0x26
pbl: 0x125ce464
bdba: 0x01400007
76543210
flag=--------
ntab=1 ←ブロックに格納されている表数
nrow=10 ←ブロックに格納されている行数
frre=-1
fsbo=0x26
fseo=0x2c
avsp=0x6
tosp=0x6
0xe:pti[0] nrow=10 offs=0
0x12:pri[0] offs=0x6da ←行情報(ブロック内の行位置)
0x14:pri[1] offs=0x61c pri:pointer record index?
0x16:pri[2] offs=0x55e 1行目(pri[0])~10行目(pri[9])
0x18:pri[3] offs=0x4a0 行内の相対位置(オフセット)を表示
0x1a:pri[4] offs=0x3e2
0x1c:pri[5] offs=0x324
0x1e:pri[6] offs=0x266
0x20:pri[7] offs=0x1a8
0x22:pri[8] offs=0xea
0x24:pri[9] offs=0x2c
block_row_dump: ←論理ダンプの始まり
tab 0, row 0, @0x6da
tl: 190 fb: --H-FL-- lb: 0x1 cc: 11 ←1行目(長さ190byte)
col 0: [16] 52 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 ←RNO列
col 1: [16] 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ←COL0列
col 2: [16] 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
col 3: [16] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
col 4: [16] 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
col 5: [16] 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
col 6: [16] 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
col 7: [16] 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36
col 8: [16] 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
col 9: [16] 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
col 10: [16] 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
............... (後略) ............................................
論理ブロック・ダンプ
評価フェーズ
tkprofコマンド・オプション
オプション 説明
sort
指定したソート・オプションに基づいて降順にソート
例:EXEELA - 実行に費やされた経過時間
print
最初に整数でソートされたSQL文のみのリスト
を作成
explain
指定されたユーザーとパスワードを使用してデータベースに
接続した後、EXPLAIN PLAN文を発行して実行計画を判断
sys
sys=yes(デフォルト)
SYSが発行したSQL文のリストを作成
aggregate
aggregate=yes(デフォルト)
同じ文の実行は1つのサマリー表に集計
AWRレポートをまとめて出力するTips
SQL> @awr_output.sql
SQL> SELECT TEXT FROM DBA_VIEWS WHERE VIEW_NAME = 'USER_TAB_IDENTITY_COLS';
TEXT
----------------------------------------------------------------------------
select o.name, c.name,
decode(bitand(c.property, 137438953472 + 274877906944),
137438953472, 'ALWAYS',
274877906944, 'BY DEFAULT'),
so.name,
'START WITH: ' || i.startwith ||
', INCREMENT BY: ' || s.increment$ ||
', MAX_VALUE: ' || s.maxvalue ||
', MIN_VALUE: ' || s.minvalue ||
', CYCLE_FLAG: ' || decode (s.cycle#, 0, 'N', 1, 'Y') ||
', CACHE_SIZE: ' || s.cache ||
', ORDER_FLAG: ' || decode (s.order$, 0, 'N', 1, 'Y')
from sys.idnseq$ i, sys.obj$ o, sys.col$ c,
sys.seq$ s, sys.obj$ so
where o.owner# = userenv('SCHEMAID')
and o.obj# = i.obj#
and c.intcol# = i.intcol#
and c.obj# = i.obj#
and s.obj# = i.seqobj#
and so.obj# = i.seqobj#
;
データ・ディクショナリ定義確認
参考情報
お役立ちサイト
• juliandyke.com
http://www.juliandyke.com/Presentations/Presentations.p
hp
• Oracle Data Dictionary
http://www.morganslibrary.org/reference/data_dict.html
今まで検証したテーマ
• オプティマイザ統計の保留
• Oracle12c 新機能:「Identity Column」
• TNS_ADMIN環境変数
• インスタンスのリスナーへの登録
• Oracle12c 新機能:APPROX_COUNT_DISTINCT関数
• Flashback Drop
• USE_INVISIBLE_INDEXESヒント
• インターバル・パーティション
• ADR
• 行移行・行連鎖
etc.
詳しくは「サイクル&オラクル」
http://onefact.jp/wp/
おわり

そうだ 検証、しよう。

  • 1.
    そうだ 検証、しよう。 JPOUG in15 minutes #1 三原 健一
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    ALTER SESSION SET CURRENT_SCHEMA~ • デフォルトは ログインユーザ=スキー マ • アプリケーション・コンテキストのセッ ション情報を変更できる 例:SYSユーザでログインして SCOTTスキーマにTEST表を作成
  • 9.
    SQL> conn /as sysdba 接続されました。 SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA 2 from dual; CURRENT_SCHEMA -------------- SYS SQL> alter session set CURRENT_SCHEMA = SCOTT; セッションが変更されました。 SQL> select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA 2 from dual; CURRENT_SCHEMA -------------- SCOTT SQL> show user ユーザーは"SYS"です。
  • 10.
    SQL> create tableTEST ( 2 ID number 3 ); 表が作成されました。 SQL> select OWNER,TABLE_NAME from DBA_TABLES 2 where TABLE_NAME = 'TEST'; OWNER TABLE_NAME ------ ----------- SCOTT TEST
  • 11.
  • 12.
    SQL> DECLARE 2 TYPEtbl_ins IS TABLE OF TEST%ROWTYPE INDEX BY PLS_INTEGER; 3 w_ins tbl_ins; 4 BEGIN 5 FOR i IN 1..100000 LOOP 6 w_ins(i).ID := i; 7 END LOOP; 8 9 FORALL i IN 1..100000 insert into TEST values w_ins(i); 10 commit; 11 END; 12 / PL/SQLプロシージャが正常に完了しました。 SQL> select count(*) from TEST; COUNT(*) ---------- 100000 例:10万件を一括インサート
  • 13.
  • 14.
    SQL> select name,value from v$diag_info; NAME VALUE --------------------- ------------------------------------------------------------ Diag Enabled TRUE ADR Base /u01/app/oracle ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231.trc Active Problem Count 3 Active Incident Count 5 11行が選択されました。 SQL> alter session set tracefile_identifier = 'SQLTRC'; セッションが変更されました。 SQL> select name, value from v$diag_info 2 where NAME = 'Default Trace File'; NAME VALUE --------------------- ------------------------------------------------------------------- Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2231_SQLTRC.trc トレースファイル出力場所・名称
  • 15.
    SQL> alter systemset events '10046 trace name context forever,level 12'; システムが変更されました。 SQL> alter system set events '10046 trace name context off'; システムが変更されました。 トレース有効化・無効化 SQL> alter session set events '10046 trace name context forever,level 12'; システムが変更されました。 SQL> alter session set events '10046 trace name context off'; システムが変更されました。 インスタンス単位 セッション単位 c.f. DBMS_SESSION or DBMS_MONITOR(SQLトレース)
  • 16.
    SQLトレース(10046) レベル 説明 0 無効 1alter session set SQL_TRACE = TRUE と同じ 4 バインド変数値を含む 8 待機イベント情報を含む 12 バインド変数値+待機イベント情報
  • 17.
  • 18.
    SQL> set serveroutputon SQL> DECLARE 2 err_msg LONG; 3 err_cod PLS_INTEGER; 4 i PLS_INTEGER; 5 BEGIN 6 FOR err_cod IN 10000..10999 LOOP 7 i := UTL_LMS.GET_MESSAGE (err_cod, 'rdbms', 'ora', 'japanese', err_msg); 8 IF err_msg not like 'Message%not found%' THEN 9 DBMS_OUTPUT.PUT_LINE (TO_CHAR (err_cod, 'FM00000') || ': ' || err_msg); 10 END IF; 11 END LOOP; 12 END; 13 / イベント一覧取得要領
  • 19.
    10000: control filedebug event, name 'control_file' 10001: control file crash event1 10002: control file crash event2 10003: control file crash event3 10004: block recovery testing - internal error ……………… 10045: free list update operations - ktsrsp, ktsunl 10046: enable SQL statement timing 10047: trace switching of sessions ……………… 10052: don't clean up obj$ 10053: CBO Enable optimizer trace 10054: CBO Enable optimizer trace for recursive statement (RPI) ……………… 10995: general event for materialized views 10997: another startup/shutdown operation of this instance inprogress 10998: event to enable short stack dumps in system state dumps 10999: do not get database enqueue name イベント一覧(抜粋)
  • 20.
  • 21.
    SQL> SELECT 2 ROWID 3,DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'RM','SMALL_TBL') "FILE#" 4 ,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) "BLOCK#" 5* FROM RM.SMALL_TBL; ROWID FILE# BLOCK# ------------------ ---------- ---------- AAADkVAAFAAAAAHAAA 5 7 AAADkVAAFAAAAAHAAB 5 7 AAADkVAAFAAAAAHAAC 5 7 AAADkVAAFAAAAAHAAD 5 7 AAADkVAAFAAAAAHAAE 5 7 AAADkVAAFAAAAAHAAF 5 7 AAADkVAAFAAAAAHAAG 5 7 AAADkVAAFAAAAAHAAH 5 7 AAADkVAAFAAAAAHAAI 5 7 AAADkVAAFAAAAAHAAJ 5 7 10 rows selected. ファイル番号、ブロック番号を取得す る
  • 22.
    1. ALTER SYSTEMDUMP DATAFILE <データファイルNo.> BLOCK <ブロック No.>; 2. ALTER SYSTEM DUMP DATAFILE <FNO> BLOCK MIN <開始ブロックNo.> BLOCK MAX <終了ブロックNo.>; 結果はDiag Trace(10g以前はUSER_DUMP_DEST)に出力される。 (データ・)ブロック・ダンプ取得方 法
  • 23.
    /opt/app/oracle/admin/xxxxx/udump/xxxxxx_ora_8652.trc Oracle Database 10gRelease 10.2.0.4.0 - 64bit Production ORACLE_HOME = /opt/app/oracle/product/10.2.0/db System name: Linux ............... (中略) ............................................ *** SESSION ID:(446.1507) 2010-03-18 11:18:00.905 Start dump data blocks tsn: 5 file#: 5 minblk 7 maxblk 7 buffer tsn: 5 rdba: 0x01400007 (5/7) scn: 0x0000.0376e690 seq: 0x01 flg: 0x06 tail: 0xe6900601 frmt: 0x02 chkval: 0x1f4b type: 0x06=trans data Hex dump of block: st=0, typ_found=1 ←しばらくバイナリ・ダンプが続く Dump of memory from 0x00000000125CE400 to 0x00000000125CEC00 0125CE400 00006206 01400007 0376E690 06010000 [.b....@...v.....] 0125CE410 00001F4B 00000001 00003915 0376E68F [K........9....v.] ............... (中略) ............................................ 0125CE480 02660324 00EA01A8 0000002C 00000000 [$.f.....,.......] 0125CE490 100B012C 30303052 30303030 30303030 [,...R00000000000] 10行目 0125CE4A0 30313030 30303010 30303030 30303030 [0010.00000000000] 0125CE4B0 30303030 31311030 31313131 31313131 [00000.1111111111] ............... (中略) ............................................ 0125CEB40 3052100B 30303030 30303030 30303030 [..R0000000000000] 1行目 0125CEB50 30103130 30303030 30303030 30303030 [01.0000000000000] 0125CEB60 10303030 31313131 31313131 31313131 [000.111111111111] 0125CEB70 31313131 32323210 32323232 32323232 [1111.22222222222] 0125CEB80 32323232 33331032 33333333 33333333 [22222.3333333333] 0125CEB90 33333333 34103333 34343434 34343434 [333333.444444444] 0125CEBA0 34343434 10343434 35353535 35353535 [4444444.55555555] 0125CEBB0 35353535 35353535 36363610 36363636 [55555555.6666666] 0125CEBC0 36363636 36363636 37371036 37373737 [666666666.777777] 0125CEBD0 37373737 37373737 38103737 38383838 [7777777777.88888] 0125CEBE0 38383838 38383838 10383838 39393939 [88888888888.9999] 0125CEBF0 39393939 39393939 39393939 E6900601 [999999999999....] (行データはブロック内で下から順に格納されるイメージ) ............... (中略) ............................................ data_block_dump,data header at 0x125ce464 バイナリ(16進)・ダンプ
  • 24.
    data_block_dump,data header at0x125ce464 =============== tsiz: 0x798 hsiz: 0x26 pbl: 0x125ce464 bdba: 0x01400007 76543210 flag=-------- ntab=1 ←ブロックに格納されている表数 nrow=10 ←ブロックに格納されている行数 frre=-1 fsbo=0x26 fseo=0x2c avsp=0x6 tosp=0x6 0xe:pti[0] nrow=10 offs=0 0x12:pri[0] offs=0x6da ←行情報(ブロック内の行位置) 0x14:pri[1] offs=0x61c pri:pointer record index? 0x16:pri[2] offs=0x55e 1行目(pri[0])~10行目(pri[9]) 0x18:pri[3] offs=0x4a0 行内の相対位置(オフセット)を表示 0x1a:pri[4] offs=0x3e2 0x1c:pri[5] offs=0x324 0x1e:pri[6] offs=0x266 0x20:pri[7] offs=0x1a8 0x22:pri[8] offs=0xea 0x24:pri[9] offs=0x2c block_row_dump: ←論理ダンプの始まり tab 0, row 0, @0x6da tl: 190 fb: --H-FL-- lb: 0x1 cc: 11 ←1行目(長さ190byte) col 0: [16] 52 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 ←RNO列 col 1: [16] 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 ←COL0列 col 2: [16] 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 col 3: [16] 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 col 4: [16] 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 col 5: [16] 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 col 6: [16] 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 col 7: [16] 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 col 8: [16] 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 col 9: [16] 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 col 10: [16] 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 ............... (後略) ............................................ 論理ブロック・ダンプ
  • 25.
  • 26.
    tkprofコマンド・オプション オプション 説明 sort 指定したソート・オプションに基づいて降順にソート 例:EXEELA -実行に費やされた経過時間 print 最初に整数でソートされたSQL文のみのリスト を作成 explain 指定されたユーザーとパスワードを使用してデータベースに 接続した後、EXPLAIN PLAN文を発行して実行計画を判断 sys sys=yes(デフォルト) SYSが発行したSQL文のリストを作成 aggregate aggregate=yes(デフォルト) 同じ文の実行は1つのサマリー表に集計
  • 27.
  • 28.
    SQL> SELECT TEXTFROM DBA_VIEWS WHERE VIEW_NAME = 'USER_TAB_IDENTITY_COLS'; TEXT ---------------------------------------------------------------------------- select o.name, c.name, decode(bitand(c.property, 137438953472 + 274877906944), 137438953472, 'ALWAYS', 274877906944, 'BY DEFAULT'), so.name, 'START WITH: ' || i.startwith || ', INCREMENT BY: ' || s.increment$ || ', MAX_VALUE: ' || s.maxvalue || ', MIN_VALUE: ' || s.minvalue || ', CYCLE_FLAG: ' || decode (s.cycle#, 0, 'N', 1, 'Y') || ', CACHE_SIZE: ' || s.cache || ', ORDER_FLAG: ' || decode (s.order$, 0, 'N', 1, 'Y') from sys.idnseq$ i, sys.obj$ o, sys.col$ c, sys.seq$ s, sys.obj$ so where o.owner# = userenv('SCHEMAID') and o.obj# = i.obj# and c.intcol# = i.intcol# and c.obj# = i.obj# and s.obj# = i.seqobj# and so.obj# = i.seqobj# ; データ・ディクショナリ定義確認
  • 29.
  • 30.
  • 31.
    今まで検証したテーマ • オプティマイザ統計の保留 • Oracle12c新機能:「Identity Column」 • TNS_ADMIN環境変数 • インスタンスのリスナーへの登録 • Oracle12c 新機能:APPROX_COUNT_DISTINCT関数 • Flashback Drop • USE_INVISIBLE_INDEXESヒント • インターバル・パーティション • ADR • 行移行・行連鎖 etc. 詳しくは「サイクル&オラクル」 http://onefact.jp/wp/
  • 32.