不定期更新雑記

[Book] Oracleの基本 ~データベース入門から設計/運用の初歩まで を読んでみた

Pocket

9/22(金)に技術評論社から出版された「Oracleの基本 ~データベース入門から設計/運用の初歩まで」という本のKindle版を読んでみました。

私がこの本を知るキッカケとなったのは次のツイートでした。

上記ツイート内のリンク先(コーソル DatabaseエンジニアのBlog)に書かれている次の内容には納得感しかありませんでした。

資格対策書籍をはじめとするOracle入門書籍の課題

  • 過去、Oracle DatabaseをはじめとするIT関連技術が比較的シンプルだった時代に正解だった(?)パラダイム(「Oracle独自の世界観」)を引きずる形で説明がなされている。 (正解だったかどうかは、個人的には疑問だけど・・・)
  • 解説=Oracleの用語説明になっている。
  • Oracle Databaseに閉じた視点で説明されており、Oracle Databaseを使う側の視点での記述が欠けている。具体的には、開発者、運用者(のヒヨコ)がOracle Databaseとのかかわり方を理解しにくい

この問題点を解決するため、本書では以下の点に配慮しまいた。

  • 平易な表現を用いてOracleを解説すること。特に、新しい概念の導入部において、「なぜXXXが必要なのか?」 をくどいぐらい(!)愚直に書き、単なる用語説明のような解説を避けること。
  • データベース,Oracle,開発,設計,運用の基本について広くさまざまな視点から学べること

「どの参考書を読んだらいいですか?」と若手(初級者)から質問される中級者の私としては、この本をまずオススメしていきたいと思います。
その後は、若手が欲する情報を提供できる立場でありたいと思っています。

 
以下、感想とかトラウマとか、思い浮かんだことを記してみます。
(いつか時間があれば整理します…)

  • 結果がエラーとなるケースをORA-xxxxxとともに紹介されているのはとてもGood!
  • ORDER BYを指定しなくても正しく並んでいるという認識誤り(たまたま)
    テストデータをロード(SQL*Loader) ⇒ データ参照(SELECT) ⇒ たまたま並んでいて後日バグ発見…
  • 比較演算子の != は、標準SQL規格ではないので <> も併記したほうが良いかも
    (まぁほとんどのRDBMSで実装されているから問題にはならないけど)
  • SUM関数の処理イメージ図の真ん中にΣがある!
    数学関係の記述以外で久々に見た気がします。
  • GROUP BY句の処理イメージ、これ分かりやすいですね!
    集計前(WHERE句)と集計後(HAVING句)の絞り込み動作の違いが理解しやすいぞ!
  • NULLの説明のなかにある「空文字列を指定すると、列値にNULLが設定されることに注意してください。これはOracle特有の動作で、よくトラブルになります。」
    …えぇ、なりました。経験したケースは「CHAR型の列に対して、初期値(半角スペース)という条件をWHERE句に指定しようとしたら空文字列指定になっていて、col1=” ⇒ col1=NULLになっていた」というもの。
    当該SQLは1件も返さない WHERE 1=0 と同じ結果になっていましたね。
  • Oracle独自の外部結合構文(+)について、いまも現役です(苦笑)
    システム開発当時、Oracle 10g のプリコンパイラ(Pro*COBOL)がJOIN句に対応していなかったので、(+)を利用しています。現行保守システム(11g)でも。
    サーバリプレース後(12c)も使い続けるのかなぁ??(既存のCOBOL資産をJavaにするときにJOIN句にする感じかなぁ)
  • トランザクションの終了条件の1つ、「接続を正常に終了したとき」というのがハマりやすい印象。
    SQL*Plusを終了するときの exit は、初期設定では exit commit になっているので、「あ、間違えた!」と思って終了させてもcommitされているという事象が発生する。
    SI Object Browser等のツール類でも、異常終了ではない通常のツール終了時にcommitされるので要注意かな。
  • シーケンスを使って採番した連番には、空き番号が発生することを知らずに使おうとしている人が昔いましたね。
    そして、RAC構成時の考慮など、使う場合は考慮すべき点が多いですよね。うまく使えば超絶便利なんですけどね~
  • テーブル設計(概念/論理/物理)についても触れられている点が面白いですね。
    Oracleの入門書としては異例かもしれませんが、テーブル設計が正しくされていないとOracleデータベースの真価を発揮できませんから重要ですよね。
    そして、この上流工程が疎かになっている場面を何度か見たことがあります…。
  • 論理設計の部分で、「多対多の排除」の説明はよく見るのですが、「1対1の排除」というのは見覚えがありません(忘れているだけかも)。
    当たり前だと思っている部分も明記されているので、これは入門者(初級者)には親切な気がします。
  • 正規化に関する説明はもう少しあると嬉しいですが、入門書に求めるレベルではないのかも。
    (「基本情報技術者試験(FE)」等の勉強でも補填できるからいいかな)
  • 物理設計の部分が理解しにくいという話をよく聞きます。
    「表領域は、複数のデータファイルを束ねた、オブジェクトにデータ格納用領域を割り当てるための『仮想的な箱』のようなもの」という考え方は、図を見ながらだと理解しやすくて良いと思います。
  • テーブル、インデックスのサイズ見積もりまで記載があるとは。詳細な内容は記載されていませんが、これは知っておいたほうがリソース(ストレージ)を意識できるようになるので良さそうですね。
  • SGAやPGAの構成などは、見慣れた図(クライアントとインスタンス、データベースの関係図)はありませんが、各所の説明のなかで必要な部分のみ図解されていました。
    本書では“アーキテクチャ部分の説明は割愛”されていましたが、やはりDBA見習いには知っておいて欲しい知識ですね。
  • 「おわりに」には、本書でOracleデータベースに入門したエンジニアの次の学習ポイントが整理されていますので、
    私もかなり参考になる(意識していかないといけない)部分がありました。
    (私が今、主に担当しているのは、パフォーマンス(性能)関連です。今後は、リプレースに向けて高可用性の話もプラスされます…。)

, ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">