20070330

Disassembling the Oracle Data Block - A Guide to the BBED

今回はOracleの秘密ツールであるBBEDのガイドをご紹介したいと思います。
BBEDとはBlock Browser and Editorの略で、その名の通りブロックを参照したり
更新したりできるツールです。
Traceファイルなどにブロックダンプを出力せずに対話式で
ブロックの内容を確認できるので便利なツールだと思います。

使用開始にあたっての準備は簡単です。Oracle解説のコーナーで説明しています。

このドキュメントでは後半のExampleコーナーで非常に丁寧に
どのようにBBEDを使用するのかを説明しているので、
英語がわからないとしてもブロックの参照はできると思います。
(もし英語でわからないところがあれば気軽にお尋ねください!)

!!!!要注意!!!!

このツールの勝手な使用はサポート対象外になります。
商用環境での使用はサポートからの明確な指示が無い限り絶対に止めましょう。
もちろんその他の環境での使用もツールの仕様を良く理解した上で
自己責任で利用しましょう。

このツールは便利である反面、悪用するとDBを乗っ取ったり、
ログインや監査をすり抜けてデータを改ざんすることもできる
恐ろしいツールです。もし悪用が起きてしまった場合、今後のリリースで
デフォルトで配置されなくなってしまう可能性があります。
絶対に悪用はやめましょう。

また余程のことが無い限り、editモードを使用するのは止めましょう。
browseモードでブロックの中身を見る程度にしておきましょう。

!!!!要注意 おわり!!!!


引用箇所はDeleteしてしまったレコードを復活するためのExampleです。

(お詫び)
 引用PDFファイルがTEXTコピーできない為、全て私自身のタイプ入力です。
 誤字などあるかもしれませんのでご注意ください。

このガイドの紹介サイトとしては、PL/SQLの暗号解読の回でご紹介した
Pete Finniganさんが丁寧に解説してくださっているのでそちらをご覧下さい。
(暗号解読の回はこちら:http://imoment.web.fc2.com/20060827.html)

■ Pete Finnigan's Oracle security weblog
http://www.petefinnigan.com/weblog/archives/00000999.htm

■ Excerpt(引用記事)
http://orafaq.com/papers/dissassembling_the_data_block.pdf

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Disassembling the Oracle Data Block - A Guide to the BBED

Example #5 - Recovering Deleted / Damaged Data

The following example demonstrates the recovery of deleted data using an
older copy of the data file. This has potential uses for clients who have
deleted or erroneously updated their data, but cannot afford the time
required to restore the database to another location and export the table
to a dump file.

Connect to the database and delete the data from the table

SQL> delete from scott.presidents;

9 rows deleted.

SQL> commit;

Commit complete.

Prepare a bbed parameter file and file list with the current copy of the
data file (with the deleted table) and the one from an older back with the
data still intact.

[oracle@pingu bbed]$ cat bed_copy.par
blocksize=8192
listfile=/home/oracle/bbed/fileunix_copy.log
mode=edit

[oracle@ping bbed]$ cat fileunix_copy.log
1 /home/oracle/OraHome1/oradata/gctdev2/users01.dbf 26214400
2 /gct/oradata/backup2/users01.dbf 26214400

From the current database, determine the number and location of the
blocks that comprise the table affected:

SQL> select owner, segment_name, header_file, header_block, blocks
2 from dba_segments
3 where owner = 'SCOTT' and segment_name = "PRESIDENTS';

OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
-------- -------------- ----------- ------------ ----------
SCOTT PRESIDENTS 7 11 8

So we can see that we need to restore blocks in file 7 from block 11
forward through 8 blocks. However the DBA_SEGMENTS view counts blocks from
zero whereas bbed counts them from one. Therefore the bbed block where the
table starts is in fact block 12. We can verify this with bbed by printing
the ktbbh structure which shows the object id(see the section on the map
command) as follows:

BBED> set dba 1,11
DBA 0X0040000b (4194315 1,11)

BBED> p ktbbh
BBED-00400: invalid blocktype (35)

Block 11 is empty,however when we check block 12:

BBED> set dba 1,12
DBA 0X0040000c (4194316 1,12)

BBED> p ktbbh
struct ktbbh, 72 bytes @20
ub1 ktbbhtyp @20 0x01 (KDDBTDATA)
union ktbbhsid, 4 bytes @24
ub4 ktbbhsg1 @24 0x00006c27
ub4 ktbbhod1 @24 0x00006c27
struct ktbbhcsc, 8 bytes @28



b2 _ktbitfsc @86 0
ub2 _ktbitwrp @86 0x0000
ub4 ktbitbas @88 0x00000000

Notice also we are referring to DBA 1,12 rather than DBA 7,12. This is due
to the use of the special parameter file where we have included both copies
of the file. In this example file 1 is the damaged file and file 2 is the
one from the backup with the table intact. We will now copy blocks 12
through 20 from file 2 to file 1:

BBED> set offset 0
OFFSET 0

BBED> copy dba 2,12 to dba 1,12
File: /home/oracle/OraHome1/oradata/gctdev2/users01.dbf (1)
Block: 12 Offsets: 0 to 511 Dba:0x0040000c
------------------------------------------------------------------------
06020000 0c00c001 16830300 00000104 2e670000 01000000 276c0000 319c0200
<>
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

The process is repeated for all 8 blocks. Once completed the Oracle database
is restarted and the table checked:

SQL> select * from scott.presidents;

NAME START_YEAR END_YEAR
---------------------- ---------- ----------
Dwight Eisnehower 1952 1960
John Kennedy 1960 1963
Lindon Johnson 1963 1969
Richard Nixon 1969 1974
Gerald Ford 1974 1977
Jimmy Carter 1977 1981
Ronald Reagan 1981 1989
George H Bush 1989 1993
Bill Clinton 1993 2001


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈するために敢えて不自然な語順になっている部分があります。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Disassembling the Oracle Data Block - A Guide to the BBED
オラクルのデータ・ブロックの分解 - BBEDガイド

Example #5 - Recovering Deleted / Damaged Data
例5 - 削除または壊れたデータの回復

The following example demonstrates the recovery of deleted data
using an older copy of the data file.
以下の例ではデータファイルの古いコピーを使用した削除データの回復を
行っています。

This has potential uses for clients who have deleted or erroneously
updated their data, but cannot afford the time
required to restore the database to another location and export the table
to a dump file.

これは顧客がデータを削除したり、誤って更新してしまった場合に、
DBを別の場所にリストアしてエクスポートするような余裕が無い場合に
使用する可能性があります。


Connect to the database and delete the data from the table
DBへ接続し、テーブルからデータを削除します。

SQL> delete from scott.presidents;

9 rows deleted.

SQL> commit;

Commit complete.

Prepare a bbed parameter file and file list with the current copy of the
data file (with the deleted table) and the one from an older back with the
data still intact.

bbedパラメタファイルと現在の(DELETEしたテーブルを含む)データファイルの
コピー及びデータがまだ削除されていない古いバックアップを羅列したファイルリスト
を準備します。


[oracle@pingu bbed]$ cat bed_copy.par
blocksize=8192
listfile=/home/oracle/bbed/fileunix_copy.log
mode=edit

[oracle@ping bbed]$ cat fileunix_copy.log
1 /home/oracle/OraHome1/oradata/gctdev2/users01.dbf 26214400
2 /gct/oradata/backup2/users01.dbf 26214400

From the current database, determine the number and location of the
blocks that comprise the table affected:

現在のデータベースから、影響するテーブルを含んでいるブロック位置と
番号を決定します。


SQL> select owner, segment_name, header_file, header_block, blocks
2 from dba_segments
3 where owner = 'SCOTT' and segment_name = "PRESIDENTS';

OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
-------- -------------- ----------- ------------ ----------
SCOTT PRESIDENTS 7 11 8

So we can see that we need to restore blocks in file 7 from block 11
forward through 8 blocks.

これでリストアに必要なブロックがファイル番号7のブロック番号11から
8ブロック先までであることを確認できます。

However the DBA_SEGMENTS view counts blocks from zero whereas bbed counts
them from one.

しかしながら、DBA_SEGMENTSビューはブロックをゼロからカウントしているのに
対してbbedは1からカウントしています。

Therefore the bbed block where the table starts is in fact block 12.
その為、bbed上でテーブルが始まる実際のブロックは12になります。

We can verify this with bbed by printing the ktbbh structure which shows
the object id(see the section on the map command) as follows:

bbedでオブジェクトIDを表示するktbbh(トランザクションヘッダ)構造体をプリント
することで以下のように証明することができます。(mapコマンドセクション参照)

BBED> set dba 1,11
DBA 0X0040000b (4194315 1,11)

BBED> p ktbbh
BBED-00400: invalid blocktype (35)

Block 11 is empty,however when we check block 12:
ブロック11は空ですが、ブロック12をチェックすると、、、

BBED> set dba 1,12
DBA 0X0040000c (4194316 1,12)

BBED> p ktbbh
struct ktbbh, 72 bytes @20
ub1 ktbbhtyp @20 0x01 (KDDBTDATA)
union ktbbhsid, 4 bytes @24
ub4 ktbbhsg1 @24 0x00006c27
ub4 ktbbhod1 @24 0x00006c27
struct ktbbhcsc, 8 bytes @28

<output removed to aid clarity>
<見易くする為に出力結果を一部削除しています>

b2 _ktbitfsc @86 0
ub2 _ktbitwrp @86 0x0000
ub4 ktbitbas @88 0x00000000

Notice also we are referring to DBA 1,12 rather than DBA 7,12.
DBA 7,12ではなく、DBA 1,12を参照していることに注意してください。

This is due to the use of the special parameter file where we have
included both copies of the file.
これは2つデータファイルのコピーを含む特別なパラメタファイルを
使用している為です。

In this example file 1 is the damaged file and file 2 is the one from
the backup with the table intact.
この例では、ファイル1は壊れたファイルでファイル2はテーブルがまだ
残っているバックアップファイルです。

We will now copy blocks 12 through 20 from file 2 to file 1:
これからファイル2からファイル1へブロック12から20をコピーします。

BBED> set offset 0
OFFSET 0

BBED> copy dba 2,12 to dba 1,12
File: /home/oracle/OraHome1/oradata/gctdev2/users01.dbf (1)
Block: 12 Offsets: 0 to 511 Dba:0x0040000c
------------------------------------------------------------------------
06020000 0c00c001 16830300 00000104 2e670000 01000000 276c0000 319c0200
< output removed to aid clarity >
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

The process is repeated for all 8 blocks.
この処理は8ブロック分全てに対して繰り返されます。

Once completed the Oracle database is restarted and the table checked:
終了したらオラクルデータベースを再起動し、テーブルを確認します。

SQL> select * from scott.presidents;

NAME START_YEAR END_YEAR
---------------------- ---------- ----------
Dwight Eisnehower 1952 1960
John Kennedy 1960 1963
Lindon Johnson 1963 1969
Richard Nixon 1969 1974
Gerald Ford 1974 1977
Jimmy Carter 1977 1981
Ronald Reagan 1981 1989
George H Bush 1989 1993
Bill Clinton 1993 2001

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
単語/英文解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Disassembling : 分解

The following ~ : 後続に関する説明文の出だし

This has potential uses for clients who have deleted or erroneously
updated their data, but cannot afford the time
required to restore the database to another location and export the table
to a dump file.

whoからdataまではclientの修飾
requiredから文の最後まではtimeの修飾


Prepare a bbed parameter file and file list with the current copy of the
data file (with the deleted table) and the one from an older back with the
data still intact.

bbed parameterはbbed起動時に指定できる設定内容が含まれたファイル。
(引用ドキュメント4ページ最下行のThe following...以降の説明参照)
file listはbbedで使用するデータファイルの情報を含んだリスト
(引用ドキュメント5ページ中段のThe list file should...以降の説明参照)


comprise : 含む、構成する

forward through 8 blocks : 8ブロック先

whereas : 対極する内容をはさむ際の接続詞

verify : (証拠や確認によって)証明する、立証する

ktbbh structure : bbed では特定の構造体に当てはめてブロックの内容を表示する
ことができる。p ktbbhコマンドはトランザクションヘッダ構造体形式でブロックの
内容を印字する。(詳細は引用ドキュメント10ページ中段から始まる表を参照)

as follows: : 後続で何かを列挙し始める場合に使用する。

clarity : 清らかさ、認識や理解についての明快さ

<output removed to aid clarity> : <中略>

rather than : 単純な比較ではなく、前者より後者の方が勝っている場合に
ratherをつける。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★

※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆「なんでこんなミスしたの?」って言いたい場合は?

◆Why did you do such a mistake?
http://clickenquete.com/a/a.php?M0002066Q0020246A150a5
◆Why did you make such a mistake?
http://clickenquete.com/a/a.php?M0002066Q0020246A2138e
◆How did you do such a mistake?
http://clickenquete.com/a/a.php?M0002066Q0020246A3200b
◆How did you make such a mistake?
http://clickenquete.com/a/a.php?M0002066Q0020246A4d9a5
○結果を見る
http://clickenquete.com/a/r.php?Q0020246Cbb1f

締切:2007年04月07日23時00分
協力:クリックアンケート http://clickenquete.com/

こたえは次回に発表します。


■ 前回のこたえ

☆ソフトウェアの使い方を質問したい場合は?

◆How do I use this?
◆How do you use this?
◆How can I use this?
◆How can you use this?
○結果を見る
http://clickenquete.com/a/r.php?Q0019997C3483

ネイティブ数人に確認する限りはHow do you useが一番一般的だという
意見です。もちろんHow do I useも問題ありません。
doの代わりにcanを使用すると単純な"使い方"ではなく、
使う目的や能力を尋ねるイメージに変わってしまうそうです。

敢えてcanを使った質問をするのであれば、What can I use this software for?
(このソフトウェアは何のために使えますか?)の方が自然だそうです。

この説明は疑問を感じる人もいる気がしますので、ご意見お待ちしています。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle 解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
引用の例は取り急ぎの復旧策で、redoログやarchiveなどが変わるわけでは
ありませんから、復旧後にバックアップを取得する必要があると思います。

このような危険なツールはOracleからは公式に発表されていません。
でもたったの2コマンドで実行可能になります。
Windows版もあるようなのですが、私は見つけることができませんでした。
UNIX版であれば、以下のようにコマンドを実行することで使用可能になります。

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

ただし使用する為にはパスワードが必要です。
もちろん公開されていないのですが、このパスワードは固定で、
bbedの実行ファイルをリバースエンジニアリングすることで簡単にわかるそうです。
私は残念ながらそんなスキルは無いので、別の方法で知ることができたのですが、
知った後にstrings -aコマンドやバイナリエディタを使用して実行ファイルの中身を
参照しても、どこに書いてあるかはわかったのですが、そこがそれだという
理由は読み取れませんでした。

申し訳ありませんが、ここでパスワードをお伝えするのは非常に微妙なので
みなさんもご自分で調べてみてください。(たぶん簡単にわかります)

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。

DBA Villageの投稿で見つけたのですが、
SQLだけでパイチャートを表示するファンクションを作成した人がいます。
http://technology.amis.nl/blog/index.php?p=398
脱力間違いなしなのでお時間のある方はリンク先ご覧下さい。(^-^)

それではまた。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。

簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274

バックナンバーはこちら
http://imoment.web.fc2.com/

登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm

ラベル: , , ,

20070315

Yahoo Pipes in re: OTN Semantic Web

皆様、Yahooパイプは既に利用されていますでしょうか。
RSSを使いこなしている方なら、たぶん楽しめるんじゃないかと思います。

http://pipes.yahoo.com/

#既にこのような機能をもったソフトやサービスを使いこなしている人も
 いるかもしれませんが。。。

とりあえずoracleでサーチしてみると、
hatena_oracleというパイプがあったので自分のRSSリーダに登録してみました。
(RSSリーダはcococを使用しています。何かおすすめありましたら教えてください)

このパイプは単純ではてなブックマークのタグ検索でoracleとオラクルの
2つのキーワード検索結果のRSSを融合(mashup)して、ユニークなURLだけを
抽出しているものです。

以下のURLで設計図が確認できます。
http://pipes.yahoo.com/pipes/pipe.edit?_id=XgyNwgC42xGg4gerqu5lkA
※私のブラウザで開くと、最初何も表示されないのですが、
 ページ上部中央につまみ付近(左右)にカーソルを合わせると
 引っ張り下して図を確認することができます。


私も自分が訪問するOracleサイトでRSSフィードがあるページをmashupしてみました。
http://pipes.yahoo.com/pipes/person.info?eyuid=.tfC4MsxqWGw_6pbo84gdFEzCwuyhA--
feedはこちら
http://pipes.yahoo.com/pipes/pipe.run?_id=EO_YuajN2xGFYfcNmLokhQ&_render=rss

引用記事でも紹介されていますが、本当はキーワードでフィルタしたり、
他のパイプを取り込んだりできるようです。

■ Yahoo Pipes
http://pipes.yahoo.com/

■ Excerpt(引用記事)
http://blogs.oracle.com/otn/2007/02/22#a376

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Yahoo Pipes in re: OTN Semantic Web

If you are an OTN Semantic Web user however you can already do a variation
of that operation, for all Oracle content syndicated via RSS. Basically,
you can create topic-specific mashups from various Oracle RSS feeds.

For example, want to create a "live" bookmark in FF that contains all
Oracle syndicated info re: Oracle Fusion Middleware + Identity Management
+ Java? Build that query from the OTN SemWeb homepage, and then you can
cull the results via RSS (look for the orange RSS button in the left nav).


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈するために敢えて不自然な語順になっている部分があります。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Yahoo Pipes in re: OTN Semantic Web
  OTNのセマンティック・ウェブに関するヤフーパイプ

If you are an OTN Semantic Web user however
もしあなたがOTNセマンティック・ウェブをなんらかの形で利用しているなら、

you can already do a variation of that operation,
あなたは既にその操作の変化に対応することができます。

for all Oracle content syndicated via RSS.
RSSを経由して組織化された全てのOracleコンテンツに対して


Basically, you can create topic-specific mashups from various Oracle RSS feeds.
基本的に、あなたは多様なOracleのRSSフィードからトピックを特定した
マッシュアップを作成することができます。

For example, want to create a "live" bookmark in FF that contains all
Oracle syndicated info re: Oracle Fusion Middleware + Identity Management
+ Java?
例えば、オラクルフュージョンミドルウェア、ID管理、Javaが混合された
Oracleの情報を持つFireFoxのlive bookmakを作成したいなら?

Build that query from the OTN SemWeb homepage,
OTNのセマンティック・ウェブのホームページからクエリを作成して下さい。

and then you can cull the results via RSS
そしてRSSを経由した結果から必要な情報だけ抽出することができます。

(look for the orange RSS button in the left nav).
(左側のオレンジのRSSボタンを探してください)

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
単語/英文解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
in re: ~について

Semantic:syntaxの対義語。syntaxが構文に焦点を置いているの対し、
     semanticはその意味に焦点をおいています。

Semantic Web:ここでは、OTNのセマンティック・ウェブを指していますが、
       そもそもセマンティック・ウェブというのは、W3Cが提唱している
       ウェブ上の情報全てに意味を持たせてコンピュータによる情報操作
       が容易になるような標準化の活動です。RSSが顕著な功績かと
       思います。詳細はwikipediaや以下のリンクを参照ください。

       http://www.kanzaki.com/docs/sw/

however:ここでのhoweverはしかしながらのhoweverではなく、
    接続語としてのwhatever的な軽い意味です。

variation of:~の変化

syndicated:組織化された

via:経由して

RSS:RDF Site Summaryの略

mashup:mash upならマッシュポテトのように押しつぶすという意味ですが、
    合体すると、他の作品を混合したオムニバスみたいな作品を意味します。
    ITとしては、既にあるリソースを融合した新しいサービスを指し、
    RSSのマッシュアップもまさにその通りの意味です。

feed:ITでは、COMPUTERにデータを読み込ませることを指します。

FF:FireFoxという主にLinux上で使用されるウェブブラウザの略です。

live bookmark:FireFoxのキーワードに対応したページを一覧表示してくれる
       動的なブックマーク機能です。

Oracle Fusion Middleware:オラクルのミドルウェア製品群のブランド名です。
※あまりにわかりにくいので、Fusion Confusionと言われる場合があります。

cull:より抜く、選り抜く


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★

※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆ソフトウェアの使い方を質問したい場合は?

◆How do I use this?
http://clickenquete.com/a/a.php?M0002066Q0019997A16bf7
◆How do you use this?
http://clickenquete.com/a/a.php?M0002066Q0019997A24bcf
◆How can I use this?
http://clickenquete.com/a/a.php?M0002066Q0019997A348e4
◆How can you use this?
http://clickenquete.com/a/a.php?M0002066Q0019997A44b80
○結果を見る
http://clickenquete.com/a/r.php?Q0019997C3483

締切:2007年03月21日23時00分
協力:クリックアンケート http://clickenquete.com/

こたえは次回に発表します。


■ 前回のこたえ

☆服が似合っている人に言うのは

◆it's so like you.
◆that's very you.
◆that's typical of you.
○結果を見る
http://clickenquete.com/a/r.php?Q0019795Cac00

very youが服が似合うときに使うフレーズです。
so like youは態度や発言などがあなたらしい場合に使います。
typical of youもlike youに近いフレーズです。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。

RSSリーダーって本当に便利ですね。
ヤフオクなどでめったに出品されない商品で、複雑なキーワード検索が
必要なものなどもRSSリーダに登録しておけば、出品されたらすぐにわかります。
私はサーバー製品などチェックするですが、
以前クラスタ構成、テープ装置など入ったラックまるごとセットが1万円で
出品されていて、入札しようとしたら嫁さんに泣かれたのでやめました(^^;

それではまた。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。

簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274

バックナンバーはこちら
http://imoment.web.fc2.com/

登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm

ラベル: , , ,

20070301

What is the DUAL table costing you?

みなさんには全然関係ないことなのですが、
私のブログがGoogle Japanから一時期完全に抹消されてました(T-T)。
原因不明!

blog形式にそろそろ限界を感じていたので、FC2にお引越ししてみました。
みすぼらしいページですが、色々自由にできるので少しずつ発展していければ
と思います。

今回はSearchOracle.comからdualテーブルに関するトピックの引用です。
dualテーブルはたぶん説明不要とは思いますが、Oracleデータベースを作成すると、
必ず作成されるDummyテーブルです。OracleのSQL関数などを使用したいけど、
別にデータにアクセスする必要は無い場合に使用します。

dualの説明は他のサイトにもたくさんあるので早速ですが
引用に入りたいと思います。

■ SearchOracle.com

http://searchoracle.techtarget.com/

■ Excerpt(引用)
What is the DUAL table costing you?

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Introduction

The DUAL table is one of the first things we learn as Oracle professionals.
It is created by default as a single row table, understood by the optimizer
and available to everyone for selection. We typically use this table to
select the name of the current user, ping the database or to generate the
next sequence number for a surrogate key. Chances are, few of us consider
the impact of querying this table on our applications. This article will
explore the cost of querying the DUAL table and offer some less expensive
options to optimize application processing.


◆ Cost prior to Oracle 10g

Prior to 10g the cost of querying the DUAL table is relatively expensive.
The following diagram shows the access path from the optimizer's execution
plan as a full scan of the DUAL table. The SQL statement execution statistics
show querying the DUAL table will cost a minimum of three consistent gets.


set autotrace traceonly
SELECT user FROM dual;

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'DUAL'

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
233 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed


You can create your own less expensive DUAL as an indexed-organized table
(IOT). In the following diagram, the access path from the optimizer's
execution plan shows an index (FULL SCAN) of the BETTER_DUAL table.
The SQL statement execution statistics show the number of consistent gets
have dropped from three to one.

create table better_dual
(dummy varchar2(1) null
,constraint better_dual_pk primary key (dummy)
)
organization index;

insert into better_dual values ('X');
commit;

execute dbms_stats.gather_table_stats ('SA','BETTER_DUAL');
-- or
analyze table better_dual compute statistics;

set autotrace traceonly
SELECT user FROM better_dual;

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1)
1 0 INDEX (FULL SCAN) OF 'BETTER_DUAL_PK' (UNIQUE) (Cost=1 Card=1)

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1 consistent gets
0 physical reads
0 redo size
206 bytes sent via SQL*Net to client
234 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed


◆ Cost in Oracle 10g

In Oracle 10g the overhead of performing logical I/O for our query has been
eliminated. The access path from the optimizer's execution plan shows a new
fast dual operation. SQL statement execution statistics show consistent
gets are zero.

Note: A 'select * from dual' SQL statement still behaves as it did prior to
10g and requires three consistent gets to satisfy the query. Changing your
code to 'select 1 from dual' will eliminate consistent gets.

set autotrace traceonly
SELECT user FROM dual;

Execution Plan
----------------------------------------------------------
Plan hash value: 1388734953

-----------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |
| 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
331 bytes sent via SQL*Net to client
377 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed


◆ Conclusion

We've seen that taking the Oracle DUAL table for granted may be costing you
more than you thought. Whether you're on Oracle 9i or 10g you should rethink
your use of the DUAL table and optimize processing by considering some of
the alternatives we introduced in this article!


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈する癖をつけるために敢えて不自然な日本語に
 なっているところがあります。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Introduction
  はじめに

The DUAL table is one of the first things we learn as Oracle professionals.
DUALテーブルは私達がOracleのプロとして最初に覚えるものの1つです。

It is created by default as a single row table, understood by the optimizer
and available to everyone for selection.
それは1行のデータを持ち、オプティマイザに認識され、
誰でもSELECT可能なテーブルとしてデフォルトで作成されます。

We typically use this table to select the name of the current user, ping
the database or to generate the next sequence number for a surrogate key.
通常このテーブルはカレントユーザ名のSELECT、データベースのping、
次シーケンス番号の生成などで使用します。

Chances are, few of us consider the impact of querying this table on our
applications.
恐らくこのテーブルのクエリによるアプリケーションへの影響を考える人は
ほとんどいないでしょう。

This article will explore the cost of querying the DUAL table and offer
some less expensive options to optimize application processing.
この記事はDUALテーブル検索のコストを調査し、アプリケーション処理最適化の為の
より低コストな選択肢をいくつか提案します。


◆ Cost prior to Oracle 10g
  Oracle 10g以前のコスト

Prior to 10g the cost of querying the DUAL table is relatively expensive.
10g以前のDUALテーブル検索のコストは比較的高いです。

The following diagram shows the access path from the optimizer's execution
plan as a full scan of the DUAL table.
以下の図はオプティマイザによるDUALテーブルフルスキャンの実行計画の
アクセスパスを示しています。

The SQL statement execution statistics show querying the DUAL table will
cost a minimum of three consistent gets.
SQL実行統計はDUALテーブル検索は最低3ブロックのバッファ読み込みが
必要になることを示しています。

You can create your own less expensive DUAL as an indexed-organized table
(IOT).
あなた用の低コストなDUALを索引構成表(IOT)として作成することができます。

In the following diagram, the access path from the optimizer's
execution plan shows an index (FULL SCAN) of the BETTER_DUAL table.
以下の図では、オプティマイザ実行計画のアクセスパスがBETTER_DUALテーブルの
インデックス(フルスキャン)であることを示しています。

The SQL statement execution statistics show the number of consistent gets
have dropped from three to one.
SQL実行統計はバッファアクセスのブロック数が3から1に減っていることを
示しています。


◆ Cost in Oracle 10g
  Oracle 10gのコスト

In Oracle 10g the overhead of performing logical I/O for our query has been
eliminated.
Oracle 10gでは、検索の為の論理I/O処理のオーバヘッドが無くなっています。

The access path from the optimizer's execution plan shows a new
fast dual operation.
オプティマイザ実行計画のアクセスパスは新しいfast dual operationを
示しています。

SQL statement execution statistics show consistent gets are zero.
SQL実行統計はバッファブロックアクセスがゼロであることを示しています。

Note: A 'select * from dual' SQL statement still behaves as it did prior to
10g and requires three consistent gets to satisfy the query.
注意: 'select * from dual'のSQL文はまだ10g以前の動作と同じように動きます。
そして、検索を満たす為に3回のバッファブロックアクセスを要求します。

Changing your code to 'select 1 from dual' will eliminate consistent gets.
あなたのコードを'select 1 from dual'変更すれば、バッファブロックアクセスは
無くなります。


◆ Conclusion
  結論

We've seen that taking the Oracle DUAL table for granted may be costing you
more than you thought.
私達はここまでで、OracleのDUALテーブルを当たり前のように使用することは、
あなたが思っていた以上にコストがかけるかもしれないということを見てきました。

Whether you're on Oracle 9i or 10g you should rethink your use of the DUAL
table and optimize processing by considering some of the alternatives
we introduced in this article!
あなたがOracle 9iか10gどちらを使っているにせよ、DUALテーブルの使用と
処理最適化について、この記事で紹介した代替案の適用を再考してみては
いかがでしょうか。


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
単語/英文解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

The DUAL table is one of the first things we learn as Oracle professionals.
※weの前のthatが省略されている。

typically:典型的に,一般的に,通常
ping:相手(ここではDB)の起動確認用のメッセージ送受信

Chances are:文の初めに使用される場合は、可能性を示唆する

Prior to:以前
relatively:比較的

diagram:図

access path:sqlが実際のデータにたどり着くまでのアクセス方式の経緯

optimizer's execution plan:実行計画

indexed-organized table(IOT):索引構成表

eliminated:削除された

than someone thought:someoneが思ったより

alternatives:代替物

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★

※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
☆服が似合っている人に言うのは?

◆it's so like you.
◆that's very you.
◆that's typical of you.
┗○結果を見る

締切:2007年03月08日18時00分
協力:クリックアンケート

こたえは次回に発表します。


■ 前回のこたえ

☆「チャック開いてますよ」って言いたい時に一番使わないフレーズは?

◆Your barn door is open
◆XYZ
◆Your fastener is open
◆You are flying low
◆Your zipper is open
○結果を見る
http://clickenquete.com/a/r.php?Q0019492C633e

Your fastener is openだと機械が喋っているような
無機質な感じになります。たぶんこれが一番使われていないと
思われます。

Your barn door is openはちょっと古い表現で、
「社会の窓が~」的な感じでしょうか。

XYZはeXamine Your Zipperの略です。

you are flying lowは低空飛行のflying lowと
チャックのflyをかけた冗談です。

Your zipper is openはノーマルな表現です。

他にもPDQ(pretty done quick)などがあります。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
大規模なバッチ処理やアクセスが殺到するようなアプリケーションでは、
このコンマ数秒の改善が数時間の違いをもたらす場合があります。

以下念のためdualの使用例です。

例)select sysdate from dual;

これでデータベースの日付を取得できます。


sqlplus大好きな先輩が電卓代わりに使用しているのを見たこともあります(笑)

例)select 10+165 from dual;

以前、中国にアプリケーション開発を委託したとき、
Cプログラムのテキスト操作などでいちいちSQLでテキスト操作していて
びっくりしたことがあります。

このテーブルを削除したり、データをINSERT/DELETEしたりすると
想像以上に痛い目に会います(って普通誰もしないですよね(^-^;

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。

和歌山のAdventure World in Shirama(AWS)に赤ちゃん双子パンダを
見に行ってきました。生きた"たれぱんだ"が見れました。
この園内で8匹目のパンダで、中国を除けば世界一のパンダ飼育サイトだそうです。

象の鼻にバナナを直接プレゼントしたり、イルカを調教したり、
カバの口に餌投げ込んだり、予想以上に楽しいところでした。

それではまた。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。

簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274

バックナンバーはこちら
http://imoment.web.fc2.com/

登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm

ラベル: , , , ,

20070210

Oracle B-Tree Index Internals:Rebuilding The Truth(4)

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 英語で Oracle! #037 2007/02/13
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今までの目次です。
http://imoment.blogspot.com/2006/11/toctable-of-contents.html

おはようございます。
マイミクさんから教えてもらったのですが、
you tubeで千手観音という中国の素敵な演舞を見ました。
美輪明宏さんが号泣されたということもうなづける内容でした。
なんとメンバー全員が視聴覚になんらかの障害を持っているとか!
http://www.youtube.com/watch?v=1sh6RzzMrcw
(ご覧になる時は是非音声込みで)

引き続きRichard FooteさんのIndex Rebuildに関するプレゼン資料を
ご紹介します。(今回で最終回です)

前回までの内容は

1.導入、B-tree Indexの基礎、Clustering Factor、Fast Full Scanの説明
2.Indexブロック分割、PCTFREE、PCTUSED、FREELISTの説明
3.Index削除領域の再利用について、遅延ブロッククリーンアウトの説明

でした。各ページはお手数ですが目次経由で表示してください。

※残り2回の予定でしたが、ちょっと無理目に押し込んで今回で最終回にしました。

※Index用語に慣れていない方は、先にoracle解説のコーナー(前号までも含む)で
 知らない用語について確認されるといいかもしれません。


■ askTomでのIndex Rebuildに関するdiscussion
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2913600659112

※今回は引用PDFを紹介している適切なサイトが無いので、
 その資料について触れているaskTomのdiscussionをリンクとして
 ご紹介します。

■ 引用PDFファイル
http://www.actoug.org.au/Downloads/oracle_index_internals.pdf

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Index Height - Rebuild Factor ?

. The simple answer is no
. Most index rebuilds do not result in a height reduction
. If the pct_used is high, rebuild is pointless
. If index creeps over height boundary, rebuild is still
 pointless as:
 - Instead of reading root, now read root + branch resulting in
 - just 1 additional cached I/O
. Index eventually will grow anyways
. Rebuilding an index purely because of its height is yet
 another myth


◆ Conditions for Rebuilds

. Large free space (generally 50%+), which indexes rarely reach, and
. Large selectivity, which most index accesses never reach, and
. Response times are adversely affected, which rarely are.
. Note requirement of some free space anyways to avoid insert and
 subsequent free space issues
. Benefit of rebuild based on various dependencies which include:
. Size of index
. Clustering Factor
. Caching characteristics
. Frequency of index accesses
. Selectivity (cardinality) of index accesses
. Range of selectivity (random or specific range)
. Efficiency of dependent SQL
. Fragmentation characteristics (does it effect portion of index frequently used)
. I/O characteristics of index (serve contention or I/O bottlenecks)
. The list goes on and on ….


◆ Other Rebuild Issues To Consider

. More efficient index structures can reduce stress
 on buffer cache. Harder to formulate but
 requires consideration
. If you have the resources and you have the
 appropriate maintenance window, then the cost
 vs. benefit equation more favorable to rebuild
. Benefit maybe low but perhaps so is the relative cost
. Rebuild or Coalesce ?


◆ Index Coalesce

. More efficient, less resource intensive, less
 locking issues than rebuild option
. Can significantly reduce number of leaf blocks in some scenarios
. Requires sum of free space to exceed 50% +
 pctfree in consecutive leaf blocks
. However, as generally needs excessive 50%+
 freespace for rebuild to be effective
. Does not reduce index height

 alter index bowie_idx coalesce;


◆ Summary

. The vast majority of indexes do not require rebuilding
. Oracle B-tree indexes can become “unbalanced” and
 need to be rebuilt is a myth
. Deleted space in an index is “deadwood” and over time
 requires the index to be rebuilt is a myth
. If an index reaches “x” number of levels, it becomes
 inefficient and requires the index to be rebuilt is a myth
. If an index has a poor clustering factor, the index needs
 to be rebuilt is a myth
. To improve performance, indexes need to be regularly rebuilt is a myth


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈する癖をつけるために敢えて不自然な日本語に
 なっているところがあります。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Index Height - Rebuild Factor ?
  indexの高さはrebuildの要因になるか?

. The simple answer is no

 シンプルな答えはnoです。

. Most index rebuilds do not result in a height reduction

 ほとんどのindex rebuildはindexの高さを減らしません。

. If the pct_used is high, rebuild is pointless

 もし、pct_usedが高い場合、rebuildは無意味です。

. If index creeps over height boundary, rebuild is still
 pointless as:

 もし、Indexが現在のIndexの高さの限界に近づいている場合、
 rebuildは以下のようにやはり無意味です


 - Instead of reading root, now read root + branch resulting in
  just 1 additional cached I/O
  rootブロックを読む代わりに、rootブロックとブランチブロックを
  読むことになります。結果として1回のキャッシI/Oが追加されるだけです。


 - Index eventually will grow anyways
  Indexはどちらにしてもいずれ成長します(高さが上がります)。

. Rebuilding an index purely because of its height is yet
 another myth

 単純にIndexの高さに伴ってrebuildを実施することは
 やはり誤った考えです。



◆ Conditions for Rebuilds
  Rebuildの条件

. Large free space (generally 50%+), which indexes rarely reach, and
 大きな空き領域(通常50%以上)(Indexがこの値に他することはほとんどありません)
 そして。。。

. Large selectivity, which most index accesses never reach, and
 高い選択性(ほとんどのIndexアクセスが決して満たしません)
 そして。。。

. Response times are adversely affected, which rarely are.
 応答時間が悪影響している場合(あまりないですが)

. Note requirement of some free space anyways to avoid insert and
 subsequent free space issues
 心に留めてください、空き領域の要件は
 とにかく挿入や後続する空き領域問題を避けるためであることを(心に留めてください)

. Benefit of rebuild based on various dependencies which include:
 Rebuildの利点は以下を含む様々な依存関係があります

 - Size of index
  Indexサイズ

 - Clustering Factor
  クラスタリングファクター

 - Caching characteristics
  キャッシング特性

 - Frequency of index accesses
  Indexのアクセス頻度

 - Selectivity (cardinality) of index accesses
  Indexアクセスの選択性(カーディナリティ)

 - Range of selectivity (random or specific range)
  選択性の範囲(不規則または特定の範囲)

 - Efficiency of dependent SQL
  依存SQLの効率

 - Fragmentation characteristics (does it effect portion of index frequently used)
  フラグメンテーション特性(Indexで頻繁に利用される部分に影響するかどうか?)

 - I/O characteristics of index (serve contention or I/O bottlenecks)
  IndexのI/O特性(I/O競合またはI/Oボトルネックを助ける)

 - The list goes on and on ….
  この一覧は延々と続いきます。。。


◆ Other Rebuild Issues To Consider
  考慮すべきその他のRebuild問題

. More efficient index structures can reduce stress
 on buffer cache. Harder to formulate but
 requires consideration
 より効率の良いIndex構造はバッファキャッシュへの圧迫を軽減します
 明確に説明するのは難しいですが、考慮が要求されます。

. If you have the resources and you have the
 appropriate maintenance window, then the cost
 vs. benefit equation more favorable to rebuild
 もし資源を持っていて、適切なメンテナンス時間を持っているなら、
 費用対利益の定式の結果はよりRebuildしやすい値になるでしょう。

 - Benefit maybe low but perhaps so is the relative cost
  利益は少ないかもしれませんが、関連するコストも低いかもしれません。

. Rebuild or Coalesce ?
 Rebuild または 結合?


◆ Index Coalesce
  Indexの結合

. More efficient, less resource intensive, less
 locking issues than rebuild option
 Rebuildに比べ、より効率的で、より少ないリソース集中で、競合問題をより少なくします

. Can significantly reduce number of leaf blocks in some scenarios
 場合によっては多くのリーフブロックを減らすことができます。

. Requires sum of free space to exceed 50% +
 pctfree in consecutive leaf blocks
 隣り合ったリーフブロックのpctfreeの空き領域の合計が
 50%を超えている必要があります。

. However, as generally needs excessive 50%+
 freespace for rebuild to be effective
 しかしながら、Rebuildが効果的になる為には、
 一般的には50%を遥かに超える空き領域が必要です。

. Does not reduce index height
 Indexの高さは減少しません。

 alter index bowie_idx coalesce;


◆ Summary
  まとめ

. The vast majority of indexes do not require rebuilding
 圧倒的大多数のIndexはRebuildが不要です。

. Oracle B-tree indexes can become “unbalanced” and
 need to be rebuilt is a myth
 OracleのB-tree Indexがアンバランスな状態になり、
 Rebuildが必要になるという教えは誤りです。

. Deleted space in an index is “deadwood” and over time
 requires the index to be rebuilt is a myth
 Index内の削除された領域は無用で、
 一定期間毎にRebuildが必要になるという教えは誤りです。

. If an index reaches “x” number of levels, it becomes
 inefficient and requires the index to be rebuilt is a myth
 もし、Indexが一定のレベルに達した場合、非効率になり、
 Rebuildが必要になるという教えは誤りです。

. If an index has a poor clustering factor, the index needs
 to be rebuilt is a myth
 もし、Indexのクラスタリングファクタが悪い場合、
 Rebuildが必要になるという教えは誤りです。

. To improve performance, indexes need to be regularly rebuilt is a myth
 パフォーマンスを向上させるために、定期的なRebuildが必要という教えは誤りです。


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
単語解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

Index Height:第1回のOracle解説のB-Tree欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

pct_used:第2回のOracle解説欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index_22.html

creep:(気づかれないように)忍び寄る、忍び寄り(名詞)

root + branch:第1回のOracle解説のB-Tree欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

eventually:ついに、最終的には、ようやく

purely:単純に、純粋に

condition:条件

adversely:ネガティブだったり有害だったりする影響

subsequent:後続の

based on:~に基づいた

Clustering Factor:第1回のOracle解説参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

selectivity:選択性、全体の行に対してIndexによって特定できる行数の割合
      (ある列値の特定で限られた行を特定できる場合、
       その列のselectivityは低いと言えます)

cardinality:集合の中の要素の種類の数。cardinalityが低い時、
      selectivityは高くなります。
      例えば列の値が男と女の2種類しかない場合、
      cardinalityは2です。
      通常はcardinalityではなく、cardinality度数(全体行中の要素数の割合)
      を参考にします。

specific:特定の

efficiency:効率

portion of:一部分の

serve:役立つ、仕える、給仕する

on and on:(うんざりするほど)延々と、長い間、

formulate:詳細な計画を立てる、(系統立てて)明確に説明する、方式やシステムを考案する

resource:資産、(価値のある)人材や組織

maintenance window:保守をする為の時間枠(windowは窓の他に時間枠の意味も持っている)

cost vs. benefit equation:費用対利益の定式

relative:関連/関係する

coalesce:結合
※発音(kou(e)le's:cぁLe'S)

intensive:集中的な、徹底的な

leaf block:第1回のOracle解説のB-Tree欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

pctfree:第2回のOracle解説欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index_22.html

consecutive:連続した

Index height:第1回のOracle解説のB-Tree欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

vast majority:圧倒的多数

Oarcle B-tree Index:第1回のOracle解説のB-Tree欄参照
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

deadwood:枯れ木、無用な、お荷物な


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★

※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

☆「チャック開いてますよ」って言いたい時に一番使わないフレーズは?

◆Your barn door is open
http://clickenquete.com/a/a.php?M0002066Q0019492A16c50
◆XYZ
http://clickenquete.com/a/a.php?M0002066Q0019492A29b75
◆Your fastener is open
http://clickenquete.com/a/a.php?M0002066Q0019492A3c8a3
◆You are flying low
http://clickenquete.com/a/a.php?M0002066Q0019492A4cf8d
◆Your zipper is open
http://clickenquete.com/a/a.php?M0002066Q0019492A51040
○結果を見る
http://clickenquete.com/a/r.php?Q0019492C633e

締切:2007年02月18日23時00分
協力:クリックアンケート http://clickenquete.com/

こたえは次回に発表します。


■ 前回のこたえ

☆どちらが理想的でしょうか。

◆to study English.
◆to learn English.
○結果を見る
http://clickenquete.com/a/r.php?Q0019367C983d

studyはテキストや学校の授業に沿って勉強するというイメージです。
learnは主に実際の経験を伴って、原則として達成も伴う学習を意味します。
どちらが理想と考えるかは人それぞれとは思いますが、
普通に考えるとlearnでしょうか。
学校で勉強しているだけならstudy、それ以上に色々努力しているなら
learnを使用すると良いですね。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
footeさんが過去の有識者の【うそ】を証明するために様々な角度から
Indexの動作を解説してくれました。

【うそ】

OracleのB-tree Indexは時間が経つとアンバランスになり、Rebuildが必要
Deleteが繰り返されると無駄な領域が増えるのでやがてRebuildが必要
Indexのレベルがあるレベルに達すると、非効率になるのでRebuildが必要
Clustering Factorが悪くなるとRebuildが必要
パフォーマンス向上の為にIndexのRebuildが定期的に必要

以下のような【おすすめ】を参考にしながら、
今後のOracle管理に役立てていきたいですね。

【おすすめ】

Rebuildを検討する前にcoalesceを検討しましょう。
以下のケースに該当する場合、Rebuildを検討する価値があります。

・永続テーブルの収縮
・特定のIndex値を激減させるdeleteまたはupdateの発生
・単調に増加するIndex値および削除
・大規模な同一値のIndexエントリが削除された場合

Index Rebuild編もこれで終了です。
辛抱強くお付き合いいただきありがとうございました。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。

blog上でAdsenseというgoogleの広告サービスを使用しています。
原則としてそのページに合っている広告が表示されるので、
私のページには主にOracle関連、英語関連が表示されます。

そんな中で時々以下のような異色の広告が表示されるんです。

切れないそば打てますよ!そばアカデミー
http://soba.specialist.co.jp/academy/
=>何故そば?

Oracleのど飴
http://www.oracle.vc/index.html
=>かなり笑いました。


それではまた。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。

簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274

バックナンバー兼ブログはこちら
http://imoment.blogspot.com/

登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm

20070202

Oracle B-Tree Index Internals:Rebuilding The Truth(3)

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 英語で Oracle! #036 2007/02/05
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今までの目次です。
http://imoment.blogspot.com/2006/11/toctable-of-contents.html

おはようございます。
嫁様に頑張ってもらって、光回線が開通しました。
夜中の速度計測で16mbps。。。ピーク時もこの速度なら変えた甲斐がありました。

引き続きRichard FooteさんのIndex Rebuildに関するプレゼン資料を
ご紹介します。(第3回)

前回までの発行はこちら

1.導入、B-tree Indexの基礎、Clustering Factor、Fast Full Scanの説明
http://imoment.blogspot.com/2007/01/oracle-b-tree-index.html

2.Indexブロック分割、PCTFREE、PCTUSED、FREELISTの説明
http://imoment.blogspot.com/2007/01/oracle-b-tree-index_22.html

そして今回は削除済領域の再利用に対する見解が主なテーマです。
遅延ブロッククリーンアウト機能の内部動作も説明していきます。

※今回含めて残りあと3回続きますが、もうしばらくお付き合い下さい。

※index用語に慣れていない方は、先にoracle解説のコーナー(前号までも含む)で
 知らない用語について確認されるといいかもしれません。


■ askTomでのindex rebuildに関するdiscussion
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2913600659112

※今回は引用PDFを紹介している適切なサイトが無いので、
 その資料について触れているaskTomのdiscussionをリンクとして
 ご紹介します。

■ 引用PDFファイル
http://www.actoug.org.au/Downloads/oracle_index_internals.pdf

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Deleted Index Deleted Index Space Is Reused

- The previous example clearly illustrates that any insert to
 a leaf block removes all deleted entries
- In randomly inserted indexes, deleted space is not an issue as it will
 eventually be reused
- But wait, there’s more …

◆ Deleted Deleted Entries: Delayed Block Cleanout

- Long running transactions may result in dirty blocks being flushed
 from memory before a commit;
- When subsequently accessed, delayed block cleanout is performed
- Delayed block cleanout results in all corresponding deleted entries
 being cleaned out

◆ Conclusion: Conclusion: Deleted Space

- Deleted space is cleaned out by subsequent writes
- Deleted space is cleaned out by delayed block cleanout
- Fully emptied blocks are placed on freelist and recycled
 (although remain in the index structure)
- Suggestions that deleted space can never be reused are wrong and yet
 another silly myth

◆ Index Fragmentation

Although deleted index space is generally reusable,
there can be wasted space:

. Bug with 90-10 split algorithm in 9i (previously discussed)
. Too high PCTFREE
. Permanent table shrinkage
. Monotonically increasing index values and deletions
. Deletes or Updates that dramatically reduce occurrence of specific
 index values
. Large volume of identical index entries

◆ Large Volume Large Volume Of Identical Values

There are a number of issues with this behaviour:

1. The only leaf blocks that can be inserted into are:
  . L3 for values of AAA
  . L7 for values of BBB or CCC
  i.e. the last leaf blocks containing a specific value
2. All other leaf blocks are “isolated” in that they cannot be considered
  by subsequent inserts
  (assuming only current values)
3. The isolated blocks are empty due to 50-50 block splits

◆ Index Rebuilds

. As discussed, most indexes are efficient at allocating and reusing space
. Randomly inserted indexes operate at average 25% free space
. Monotonically increasing indexes operate at close to 0% free space
. Deleted space is generally reusable
. Only in specific scenarios could unused space be expected to be higher
 and remain unusable
. So when may index rebuilds be necessary ?
. An index rebuild should only be considered under the following
 general guideline:
 “The benefits of rebuilding the index are greater than the overall
  costs of performing such a rebuild”
. Another way to look at this:
 “If there are no measurable performance benefits of performing
  an index rebuild, why bother ?”
. Another important point:
 “If after a rebuild, the index soon reverts back to it’s previous
  state, again why bother ?”
. The basic problem with index rebuilds improving performance is
 that generally, the ratio of index blocks visited to table blocks
 visited is relatively small.


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の解釈
※自然な語順で解釈する癖をつけるために敢えて不自然な日本語に
 なっているところがあります。 ()書きは後続修飾節の修飾対象です。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Deleted Index Space Is Reused
  削除された領域は再利用される

- The previous example clearly illustrates that any insert to
 a leaf block removes all deleted entries
 前述の例では、どのようなリーフブロックへのinsertでも削除済エントリを
 消去することを明確に証明しています。
(前述の例とは引用資料のP35-37の内容です)

- In randomly inserted indexes, deleted space is not an issue as it will
 eventually be reused
 不規則にinsertされたindexでは、削除済領域は最終的に再利用されるので
 問題になりません。

- But wait, there’s more …
 しかし待ってください。まだあります。

◆ Deleted Entries: Delayed Block Cleanout
  削除済エントリと遅延ブロッククリーンアウト

- Long running transactions may result in dirty blocks being flushed
 from memory before a commit;
 長時間実行されるトランザクションはダーティブロック(更新済のブロック)が
 コミット前にmemoryからフラッシュされてしまう可能性を持っています。

- When subsequently accessed, delayed block cleanout is performed
 その後のアクセスがあったとき、遅延ブロッククリーンアウトが発生します。

- Delayed block cleanout results in all corresponding deleted entries
 being cleaned out
 遅延ブロッククリーンアウトは全ての対応する削除済エントリを一掃します。

◆ Conclusion: Deleted Space
  削除済領域の結論

- Deleted space is cleaned out by subsequent writes
 削除済領域は後続の書込みによって消去されます。

- Deleted space is cleaned out by delayed block cleanout
 削除済領域は遅延ブロッククリーンアウトによって消去されます。

- Fully emptied blocks are placed on freelist and recycled
 (although remain in the index structure)
 完全な空ブロックはfree listに移動して、再利用されます。
 (しかしindex構造内には残ります)

- Suggestions that deleted space can never be reused are wrong and yet
 another silly myth
 削除済領域が再利用されないという提案は間違っており、
 もうひとつのバカな通説です。

◆ Index Fragmentation
  indexのフラグメンテーション

Although deleted index space is generally reusable,
there can be wasted space:
削除されたindex領域は通常再利用されますが、
無駄な領域である可能性も残っています。

. Bug with 90-10 split algorithm in 9i (previously discussed)
 (以前討論された)9iの90-10分割アルゴリズムのバグ

. Too high PCTFREE
 あまりにも高いPCTFREE

. Permanent table shrinkage
 永続テーブルの収縮

. Monotonically increasing index values and deletions
 単調に増加するindex値および削除

. Deletes or Updates that dramatically reduce occurrence of specific
 index values
 特定のindex値を激減させるdeleteまたはupdateの発生

. Large volume of identical index entries
 大規模な同一値のindexエントリ

◆ Large Volume Large Volume Of Identical Values
  大規模な同一値のindexエントリ

※P51の図解ベースにしたP52の解説の引用です

There are a number of issues with this behaviour:
このふるまいには沢山の問題があります。

1. The only leaf blocks that can be inserted into are:
  insertされうるのは以下のブロックのみです。

  . L3 for values of AAA
   AAA用のリーフ3
  
  . L7 for values of BBB or CCC
   BBBとCCC用のリーフ7

  i.e. the last leaf blocks containing a specific value
  すなわち特定の値の最後のブロックです。

2. All other leaf blocks are “isolated” in that they cannot be considered
  by subsequent inserts
  (assuming only current values)
  この場合、他の全てのブロックが孤立します。後続のinsertでは考慮されません。
  (現在の例示した値だけで仮定した場合)

3. The isolated blocks are empty due to 50-50 block splits
  50-50ブロック分割のために孤立したブロックは半分が空です。

◆ Index Rebuilds

. As discussed, most indexes are efficient at allocating and reusing space
 議論したように、ほとんどのindexは領域の割り当てや再利用において効率的です。

. Randomly inserted indexes operate at average 25% free space
 不規則なinsertが起こるindexでは平均25%の空き領域で機能します。

. Monotonically increasing indexes operate at close to 0% free space
 単調に値が増加するindexではほとんど0%の空き領域で機能します。

. Deleted space is generally reusable
 削除された領域は通常再利用されます

. Only in specific scenarios could unused space be expected to be higher
 and remain unusable
 特定のケースに限って、未使用領域が多く残ることが考えられます

. So when may index rebuilds be necessary ?
 というわけで、いつrebuildは必要になるのでしょうか?

. An index rebuild should only be considered under the following
 general guideline:
 index rebuildは以下のガイドラインによってのみ考慮されます

 “The benefits of rebuilding the index are greater than the overall
  costs of performing such a rebuild”
  ”index rebuildはrebuildを行う手間やコストを上回る場合において
   意味があります”

. Another way to look at this:
 こういった見方もあります。

 “If there are no measurable performance benefits of performing
  an index rebuild, why bother ?”
  ”もし計測可能なindex rebuildによるパフォーマンスの利益が無いなら、
   何故わざわざ(rebuild)するのでしょうか”
  
. Another important point:
 もうひとつ重要なポイントです

 “If after a rebuild, the index soon reverts back to it’s previous
  state, again why bother ?”
  ”もしindex rebuildをした後に、すぐに元の状態に戻るとしたら、
   繰り返しますが、何故わざわざ(rebuild)するのでしょうか”

. The basic problem with index rebuilds improving performance is
 that generally, the ratio of index blocks visited to table blocks
 visited is relatively small.
 index rebuildによるパフォーマンス向上に関する基本的な問題は、
 通常tableブロックのアクセス数に対するindexブロックのアクセス数の
 割合は比較的小さいことです。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- The previous example clearly illustrates that any insert to
 a leaf block removes all deleted entries

illustrate:(主に本や雑誌に)描く、
      (より明確に図解や例示によって)意味や真実を示す

 
- In randomly inserted indexes, deleted space is not an issue as it will
 eventually be reused

issue:(雑誌など)発行する、課題、問題
eventually:ついに、最終的に


◆ Deleted Entries: Delayed Block Cleanout

Delayed Block Cleanout:遅延ブロッククリーンアウトと呼ばれるOracleの仕様です。
            (Oracle解説参照)


- Long running transactions may result in dirty blocks being flushed
 from memory before a commit;

dirty blocks:メモリ上に存在する更新済み未COMMITデータ
       (Oracle解説のDelayed Block Cleanout参照)
flush:(メモリの内容を)一掃してDISKに反映する。通常はトイレを流すという意味で使用する。


- When subsequently accessed, delayed block cleanout is performed

subsequently:後続して

 
◆ Index Fragmentation
  indexのフラグメンテーション

Fragmentation:元々大きな1つの何かが細かくバラバラになってしまった状態。
       fragmentは小さくなった破片、または、塊を砕く行為そのもの。

       diskのfragmentationはデータの削除、追加の繰り返しにより、
       連続した空き領域がなくなり、ファイルを細かい断片にして小さな空き領域に
       格納すること、またはそれが発生した状態を指す。(断片化)
       ここではindexのエントリの削除によって、細かい未使用領域が沢山存在した
       状態を指している。


Although deleted index space is generally reusable, there can be wasted space:

generally:一般的に、総じて、通常


. Bug with 90-10 split algorithm in 9i (previously discussed)

Bug with 90-10: 9.2で90-10のsplitアルゴリズムにバグがあり、
        50-50になってしまっていたというもの。


. Permanent table shrinkage

Permanent:永遠の、永続の
     Oracleでは一時テーブルと区別する為に、
     永続テーブルとしてPermanentを使用する。


. Deletes or Updates that dramatically reduce occurrence of specific
 index values

dramatically:劇的に
occurrence:発生
specific:特定の


. Large volume of identical index entries

identical:同一の


There are a number of issues with this behaviour:

behaviour:振舞い


i.e. the last leaf blocks containing a specific value

i.e.:要約、すなわち、(ラテン語のid estの略)


2. All other leaf blocks are “isolated” in that they cannot be considered
  by subsequent inserts
  (assuming only current values)

isolated:孤立した、隔離された
assuming ~:~と仮定した場合
 
 
◆ Index Rebuilds

. As discussed, most indexes are efficient at allocating and reusing space

efficient:効率的


. Randomly inserted indexes operate at average 25% free space

randomly:不規則に
operate:動作する、機能する


“If there are no measurable performance benefits of performing
 an index rebuild, why bother ?”

mesurable:計測可能な
bother:邪魔する、わざわざする

 
“If after a rebuild, the index soon reverts back to it’s previous
 state, again why bother ?”

revert:元に戻る


. The basic problem with index rebuilds improving performance is
 that generally, the ratio of index blocks visited to table blocks
 visited is relatively small.

relatively:比較的


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
★ 英語ぷちクイズ ★

※答えと思うリンクをぷちっとクリックしてください。
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

☆どちらが理想的でしょうか。

◆to study English.
http://clickenquete.com/a/a.php?M0002066Q0019367A1a2bf
◆to learn English.
http://clickenquete.com/a/a.php?M0002066Q0019367A245c4
○結果を見る
http://clickenquete.com/a/r.php?Q0019367C983d

締切:2007年02月10日23時00分
協力:クリックアンケート http://clickenquete.com/

こたえは次回に発表します。


■ 前回のこたえ

☆現在完了形は英語でどう言いますか

◆present perfect
◆current complete
◆present finish
◆current perfect
○結果を見る
http://clickenquete.com/a/r.php?Q0019172Ccd12

こたえはpresent perfectです。

その他の英語学習用語です。

時制:tense
現在進行形:continuous
現在:present
過去形:past tense
未来形:future tense
現在完了:present perfect
過去完了:past perfect

主語:subject
述語:predicate
動詞:verb
名詞:noun
前置詞:preposition
形容詞:adjective
副詞:adverb
代名詞:pronoun
不定詞:infinitive
受動態:passive
冠詞:article

発音:pronounce(動詞)/pronunciation(名詞)
母音:vowel
子音:consonant
音節:syllable
アクセント:accent/stress

語順:word order
単数:singular
複数:plural

多少でも英語がわかるのであれば、
英語で書かれた文法テキストでの勉強を強くお勧めします。
日本のそれよりもずっとわかりやすいと思います。

以下は私が使った文法テキストです。小学校低学年向けの内容なので文章も難しくありません。
◆ Amazon.co.jp:Basic Grammar in Use With Answers
http://tinyurl.com/38mpmx

Basic版で物足りなければ、Intermediate版(高学年)、Advanced版(中学生程度)もあります。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今回の用語説明は"Delayed Block Cleanout"のみです。
既にご存知の方は後続の解説にお進みください。

-・ Delayed Block Cleanout ・-・-・-・-・-・-・-・-・-・-・-・

日本語では「遅延ブロッククリーンアウト」と呼ばれる動作について、
削除時の内部動作から理解しましょう。

01.delete発行
02.delete対象のブロックをDISKからバッファキャッシュに読み込む
03.redoログバッファにdelete情報を記録
04.undoエントリをundoセグメントヘッダのトランザクションエントリに作成
05.delete行のコピーを空いているundoブロックに書き込む
06.delete行をバッファキャッシュ上の該当ブロック内から消し去る
07.該当ブロックをdirtyブロックとしてマークし、delete前のデータが存在する
  undoブロックの宛先を記録
  (dirtyブロック:メモリ上に存在する更新済みの未COMMITデータ)
08.commit発行
09.SCN(System Change Number)の生成
10.undoセグメントヘッダのトランザクションエントリに該当するundoエントリが
  commit済であることを記録(SCNを記録)
11.LGWRがlog bufferの該当トランザクションに関連するredoデータを
  flush(redoログファイルに格納)する。
12.もし該当のデータブロックがバッファキャッシュにまだ残っていた場合、
  そのブロックヘッダにSCNを記録する。これをfast commitを呼びます。
13.項番12.に該当せず、既にバッファキャッシュからDISKに追い出され、
  dirtyブロックのままDISKに格納されてしまっていた場合、
  commit時点ではそのdirtyブロックそのままでほっとかれます。

  その後、dirtyブロックにアクセスした後続プロセスがdirtyブロック(未COMMIT)
  という情報を信じてundoセグメントヘッダのトランザクションエントリを参照し、
  「なんだ既にCOMMIT済みじゃん!」ってことになって、undoセグメントヘッダ
  トランザクションエントリ上のSCNを取得し、dirtyブロックのブロックヘッダに
  「やれやれ。。。何で俺がやんなきゃならんの?」という感じで記録してあげます。

この項番13.の動作が「遅延ブロッククリーンアウト」です!
これはcommitの性能を高めるために、dirtyブロックの存在するDISKへの
アクセスを後回した「日本の国債」のような問題先送りシステムです。
そのツケは後からアクセスしたプロセスが背負います。
最悪の場合、大量の行削除後に別の処理で同じテーブルにフルスキャンを
かけた場合、フルスキャン処理はとんでもないとばっちりを食う可能性が
あるということになります。

※ちなみにLGWRプロセスのlog buffer flush動作は上記項番11.を含めて以下のケースが
 あります。

 A.commit発行時
 B.3秒に1回
 C.log bufferの3分の1が使用された場合
 D.DBWnプロセスが修正済みのバッファをDISKに書き込む時

 A.の場合にflushするのはcommitレコードとそのトランザクションに属するredoデータです。
 D.の場合にflushするのはDISKに書き出すバッファに関連するredoデータです。
 B.C.のflush内容はわかりません。その時点の全てのredoデータでしょうか。
  すみません勉強不足です。(どなたか教えてください)

(flushは主にトイレを流すという意味の動詞として日常では使用されます)

今回の引用文ではこのDelayed Block Cleanoutがindexの削除済み領域をクリアする
要因になることを説明しています。

-・ Delayed Block Cleanout ここまで・-・-・-・-・-・-・-・-・-・

Footeさんの結論としては、indexの削除済みエントリは後続のinsertやupdate時に
使用される予約領域なので、rebuildでクリアするのは馬鹿げていると考えています。

ただし、例外事項としてrebuildが必要なケースもちゃんと説明しています。

・9iの90-10分割アルゴリズムのバグ
・あまりにも高いPCTFREE
・永続テーブルの収縮
・単調に増加するindex値および削除
・特定のindex値を激減させるdeleteまたはupdateの発生
・大規模な同一値のindexエントリ

アンチrebuildのfooteさんが要rebuildのケースと言っているんだから、
考慮する価値がありそうですね。

・9iの90-10分割アルゴリズムのバグ
 →これはパッチをあてるかPSRを上げるかしないとでしょうか。

・あまりにも高いPCTFREE
 →これはあえてそうしているのだから考慮不要では?設定ミスの可能性?
  これを掲載しているfooteさんの意図がわかりませんでした。

・永続テーブルの収縮
・特定のindex値を激減させるdeleteまたはupdateの発生
 →大規模な支店の統廃合などでindexが激変した場合などでしょうか。

・単調に増加するindex値および削除
 →年月で古いデータから消えていくテーブルなど

・大規模な同一値のindexエントリ
 →複数のindexブロックを跨ってしまうほどの同一値エントリだと
  連続する同一値ブロックは最後のブロック以外永遠に再利用されることが
  原則としてありません。(同一値全て削除されれば再利用可)

上記のケースに当てはまりそうで、かつパフォーマンスクリティカルなindexが
あった場合、rebuildを考慮してみてはいかがでしょうか。

一番のrebuild緊急検討ケースはindexが使用されなくなってしまう程、
無駄な削除済領域が増えてしまったった場合でしょうか。


___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
編集後記
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今号からご購読いただいた皆様はじめまして。
本日も最後まで読んでいただきありがとうございます。

厳しい1月の仕事をなんとか乗り越えることができました。
次は2,3月と怒涛の休日出勤が始まります。
滞らないように頑張りたいと思います。

それではまた。

___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おわりに
___________________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記述誤りなどのご指摘、
記事に関する疑問点・質問・感想・ご意見・ご感想など
yakusa_oracle@yahoo.co.jpまでお願い致します。

簡単な自己紹介はこちら
http://pr2.cgiboy.com/S/3191274

バックナンバー兼ブログはこちら
http://imoment.blogspot.com/

登録・解除はこちらから
http://www.mag2.com/m/0000200441.htm

About me

  • I'm yaksa
  • From Tokyo, Japan
My profile
にほんブログ村 IT技術ブログへ

blogRanking