Oracleの文字化けに関する記事の続編

公開されてから、ちょっと時間がたってしまいましたが・・・
2009/3/4から、以下の記事が公開されています。

* Oracleトラブル対策の基礎知識(5)文字化けに関するトラブルに強くなる【実践編】 ――UnicodeとJIS X 0213とサロゲートペア
* [記事](http://www.atmarkit.co.jp/fdb/rensai/ora_admin/06/oraadmin06_01.html)

文字コード自体に関する解説は可能な限り最小限にして、細部にとらわれず、
大枠のメカニズムを理解できるように工夫してみました。
文字コード自体について、より詳細な理解がしたい場合は、別途他の資料等で補完して
いただければと思います。お役に立ちましたらー

Developers Summit 2009 発表資料ダウンロード開始

ちょっと時間がたってしまいましたが・・・

Developers Summit 2009でのセッションは無事終了することができました。
聴講していただいた方、ありがとうございます。何かしらお役に立つ情報をご提供
できたのなら光栄です。

さて、発表資料の方もSlideShareで公開されています。

* [Developers Summit 2009 セッション資料ダウンロードサイト](http://www.slideshare.net/event/developers-summit-2009/slideshows)
* [【13-D-3】 プロとしてのOracleアーキテクチャ入門 ? 番外編 ?](http://www.slideshare.net/devsumi2009/13d3oracle)

おそらく期間限定と思いますので、ご入用のかたはダウンロードしてみてください。

CHAPTER 03 データファイルと関連する構成要素

今回のentryでは、「SECTION I Oracleアーキテクチャ概要」の
「CHAPTER 03 データファイルと関連する構成要素」について補足説明します。
この章では、データを格納するファイルである「データファイル」
と1つ以上のデータファイルをグループ化した記憶領域である「表領域」、データファイルへのI/Oのバッファ/キャッシュとして機能する「データベースバッファキャッシュ」について説明しています。

書籍では、いわゆる通常の表領域である「SMALLFILEタイプの表領域」についてのみ説明
しています。ターゲットの観点から書籍では説明していませんでしたが、
Oracle 10gからは新しい表領域のタイプである「BIGFILEタイプの表領域」が導入されています。

### BIGFILEタイプの表領域

SMALLFILEタイプの表領域、すなわち従来の表領域が存在した目的の1つに、
複数のデータファイルを束ねた仮想的な記憶域として表領域という概念を用意することで、
Oracleから意識する対象を表領域のみとすること、すなわち、
具体的なファイルの構造や、ファイルが配置されてている
ドライブ/パーティション/ファイルシステムを隠蔽して、いわば物理的なストレージを
仮想化することがあったと考えられます。
Continue reading CHAPTER 03 データファイルと関連する構成要素

Oracleの文字化けに関する記事を執筆しました。

* [Oracleトラブル対策の基礎知識(5)文字化けに関するトラブルに強くなる【基礎編】](http://www.atmarkit.co.jp/fdb/rensai/ora_admin/05/oraadmin0501.html)

Oracleの文字コードの扱いの基本、文字化けのトラブルシューティングの概要について
@ITに記事を執筆しました。
自分の勤務先で持ち回りで担当している [Oracleトラブル対策の基礎知識](http://www.atmarkit.co.jp/fdb/index/subindex/oraadmn_subindex.html) の文字化けに関連した記事となります。

今回の記事に執筆に当たっては、用語の導入を必要最小限にすることに留意しました。
文字コードについて正確に理解したり、応用の効く基礎知識を得るという観点では、
文字集合や文字列符号化方式などについて理解すべきなのですが、
Oracleに限定した文字コードの扱いについて、てっとり早く理解したいというニーズ
もあると考えたためです。

なお、文字化けについては、2回構成となっており、
次回は、チルダ文字化けとJIS X 0213(Unicodeサロゲートペア)について説明する予定
ですので、よろしければこちらもご覧ください。

Developers Summit 2009でお話させていただきます!

* [Development Style(DB)](http://www.seshop.com/event/dev/2009/timetable/Default.asp?mode=detail&eid=124&sid=761&tr=13%5FDevelopment+Style%81iDB%29#761)

なんとDevelopers Summit 2009(2/13(金) 13:10?14:00 at 目黒雅叙園)にてお話させていただくことになりました!
講演のタイトルは「プロとしてのOracleアーキテクチャ入門 ?番外編?」です。
来場される方の担当業務としては、DBA、インフラ設計よりはむしろ
SQL/プログラム開発の方が多いのかなという判断で、
SQL実行/チューニングにまつわる
Oracleアーキテクチャについてお話させていただきます。
書籍「プロとしてのOracleアーキテクチャ入門」でいうと、
「CHAPTER 13 問い合わせ処理の仕組み」+αの内容になると思います。

「テクノロジーの変化を体感するためのDevelopmentStyle 2.0」というテーマに
沿うよう、11g新機能や知られていないテクノロジを紹介できるように準備を進めてい
ますが、SQL/プログラム開発の方にターゲットを絞っている関係上、
内容的には基本的/基礎的なものになるかと思いますので、この点、あらかじめご了承
ください。

さて、具体的には、以下の内容についてお話させていただく予定です。

* SQL実行のためのOracleアーキテクチャ
* 実行計画とCBO
* ヒストグラムと最適なアクセスパス
* SQL開発におけるOracleアーキテクチャ特有の注意点
* オプティマイザ統計の重要性
* 共有プールのflush
* バインドピーク

それでは、当日会場でお会いできることを楽しみにしています。

CHAPTER 02 クライアントアプリケーションとサーバープロセス – プロとしてのOracleアーキテクチャ入門

今回のentryでは、「SECTION I Oracleアーキテクチャ概要」の「CHAPTER 02 クライアントアプリケーションとサーバープロセス」について補足説明します。
この章では、SQL*PlusなどのOracleに接続するアプリケーションである「クライアントアプリケーション」
とクライアントから指示に従い実際に処理を実行する「サーバープロセス」について説明しています。

あるクライアントアプリケーションがOracleに接続すると、そのクライアントアプリケー
ション専用のサーバープロセスが起動します。
ここで、クライアントアプリケーションとサーバープロセスの間に設定されるコネクションを、
Oracleではセッションと呼びます。
これらについては、書籍で説明したとおりですが、このentryでは、
Linux上でクライアントアプリケーションとしてSQL*PlusでOracleに接続した場合を例に、
クライアントアプリケーションとサーバープロセスの関係について、
プロセスの相互関係、セッションの観点から確認してみます。

まず、SQL*Plusを起動して、connectコマンドでOracleに接続すると、サーバープロセス
が起動します。
これは、SQL*Plusにおいて、fork()、exec()システムコールを実行することで、
プロセスが複製され、複製されたプロセスの実体がoracleプログラムに変わるためです。
このような処理を行うことで、サーバープロセスに対応したプロセスが新規に作成されます。
そして、このサーバープロセスはSQL*Plusの子プロセスとなり、
サーバープロセスとSQL*Plusは子プロセス、親プロセスの関係をもちます。
そして、2つのプロセス間にパイプと呼ばれるプロセス間通信路を設定します。
すなわち、セッションはパイプにより実現されるわけです。

ここで説明した動作を実際に確認してみましょう。
まず、SQL*Plusを実行して、Oracleに接続してみます。

[o11106@hp1 ~]$ sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 – Production on 日 11月 9 15:36:10 2008

Copyright (c) 1982, 2007, Oracle. All rights reserved.

SQL> connect / as sysdba
接続されました。
SQL>

このとき、pstreeコマンドを使用して、プロセスの親子関係を確認してみます。

[o11106@hp1 ~]$ pstree -p -a o11106
bash(9438)
(略)
sshd,9667
`-bash,9668
`-sqlplus,9694
`-oracle,9697 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

SQL*Plus(コマンド名:sqlplus, プロセスID:9694)と、
サーバープロセス(コマンド名:oracle, プロセスID:9697)が親子関係にあることが
確認できます。

次に、サーバープロセスとSQL*Plusの間に存在するパイプを確認してみましょう。

[o11106@hp1 ~]$ sudo /usr/sbin/lsof -u o11106 |head -1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
[o11106@hp1 ~]$ sudo /usr/sbin/lsof -u o11106 |grep pipe
(略)
sqlplus 9694 o11106 14w FIFO 0,7 75491 pipe
sqlplus 9694 o11106 15r FIFO 0,7 75492 pipe
oracle 9697 o11106 13r FIFO 0,7 75491 pipe
oracle 9697 o11106 16w FIFO 0,7 75492 pipe
(略)

SQL*Plus(コマンド名:sqlplus, プロセスID:9694)と、
サーバープロセス(コマンド名:oracle, プロセスID:9697)
の間に2つのパイプ(NODE:75491,75492) が存在することがわかるでしょう。
図式すると以下のようになります。

w r
SQL*Plus —-—> サーバープロセス
(PID:9694) r w (PID:9697)
<---—-

このようなfork(), exec()システムコール、pipeを使った子プロセスの生成、親子プロセス間の
通信はUNIX系プラットフォームにおいてはごくごく一般的な方法です。
Oracleにおいても、このような一般的な方法を用いて、ローカル接続を実現しています。

なお、リモート接続の場合はリスナープロセス(コマンド名:tnslsnr)がサーバープロセスを
子プロセスとして生成しています。(内部的にdouble-folkを使用)

CHAPTER 01 データベースとインスタンス – プロとしてのOracleアーキテクチャ入門

私が中心になって執筆した書籍 「プロとしてのOracleアーキテクチャ入門」について、
紙幅や構成上の制約で触れることができなかった点、誤記などについて、
各章ごとに補足説明をしたいと思っています。

今回のentryでは、「SECTION I Oracleアーキテクチャ概要」の「CHAPTER 01 データベースとインスタンス」
について説明します。
この章では、OS上のファイルの集合として構成される「データベース」と、
OS上のプロセスとメモリとして実現される「インスタンス」について取り上げています。

ファイルはlsコマンド(UNIX/Linux)や、エクスプローラ(Windows)にて実際に確認できます
から、「データベース」についてはイメージしやすく実感がわきやすいものと思います。

しかし、プロセスとメモリとして実現される「インスタンス」については、
理解がしにくいかもしれません。このため、書籍のP17 では、UNIX/Linux版Oracleを例にとり、
psコマンドやshow sgaコマンド(SQL*Plus)の実行例を記載することで、
理解を助けるように工夫しています。読者がより親しんでいるであろうOSのWindows版
Oracleを例にとり説明できればよかったのですが、以下の理由でUNIX/Linuxプラットフォーム
での説明とせざるをえませんでした。
Continue reading CHAPTER 01 データベースとインスタンス – プロとしてのOracleアーキテクチャ入門

書籍 「プロとしてのOracleアーキテクチャ入門」を執筆しました

(なんと前回のエントリから3年近く間が空いてしまいました・・・)
Oracle Database のアーキテクチャについて説明した書籍「プロとしてのOracleアーキテクチャ入門」を
執筆するお話をソフトバンククリエイティブ社様よりいただき、
同じ職場のOracle暦10年のベテランエンジニアの方と共同で執筆作業をすすめ、
2008/8/22に(なんとか)無事出版できました。

* [ソフトバンククリエイティブの本:プロとしてのOracleアーキテクチャ入門](http://www.sbcr.jp/books/products/detail.asp?sku=4797349801)

Amazonのレビューでも好意的なコメントをいただけており、ほっと一安心といったところです。
Continue reading 書籍 「プロとしてのOracleアーキテクチャ入門」を執筆しました

Joel on Software

Joel on Software

業務都合によりあまり時間が取れませんでしたが、私もレビュワーとして協力させていただきました。

この本、本当にいい本です。

第一線でプロとしてソフトウェア開発を行う全員に読んでほしい。
強くそう思います。

超オススメです。
文句なく、自身が読んだ中での今年のNo.1書籍といえますね。

PofEAA 8th

そろそろポジションペーパ書きに飽きて来たので手抜きをしてしまいました。
いかんですね。

### Unit Of Work : まさゆきさん

* Hibernate との比較で語られていたので、わかりやすかったように思う。
* ちなみに、EOF/WebObjects関連の資料は、WebObjects基礎研究室 とか、WebObjects関連プレゼン資料 にあります。

#### ちょいとHibernateに対する疑問
* 1 Request = 1 Sessionなる考え方にどうもなじめないなぁと。EOF/WebObjectsの1 HTTP Session = 1 Unit of Workの方がシンプルな気がするのです。なぜなら、複数画面に渡る編集機能を実現することを考えた場合を考えると、いちいちdetachしてattachするのが面倒に思えるので。(と某mixi日記に書いたのですが、獄長から「Hibernateでも1 HTTP Session = 1 Unit of Workでつかえるよん」とツッコミが。1 Request = 1 Sessionと1 HTTP Session = 1 Unit of Workを使い分けるというのがよい?)
* なんであんなにListenerが必要なのだろうか?実行の順序性に意味がありそうな一連のオペレーションを、Event, Listenerモデルで構築する意味がわからない・・・

### Identify Map
* Fawlerの語りの意味を読み解く作業は不毛感ありまくりな気がするなぁ。
* FawlerはIdentify Mapをキャッシュと密接な関連を持つものと位置づけているようだ。

### Lazy Load
* t-wada さん、相変わらずすばらしい発表ですね・・・。構成がイイ!なんというか、つかみがうまいんですよねー
* 具体的な事例、コードを見る視点と、抽象的なレベルでのアーキテクチャの捉え方の視点をいったりきたりする感じがとてもイイ!です。

### WRサーガ:非TM対応RM, キュー形トランザクション

* ちょっと仕込みが足りなかった感じ。反省
* べき等のあたりの説明って、理解できました? > 皆様
* あれ? 困ったときのkoichikさん頼り ができないじゃん!・・・と思ったらafukuiさんがいらしていたので・・・よかった!助かった!
* 【お願い】TM未対応RMの実行順序を工夫するあたりで、中村さん(?)が言っていた内容がよく聞こえなかったのですが、誰か教えてもらえません?
* 次回で無事終わることができる・・・かもしれない。