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

ラベル: , , , ,

About me

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

blogRanking