2012年11月21日水曜日

Oracle vs SQLServer


SQLServerとOracleの違いを、Microsoft(以下、MSと記載)よりにまとめてみました。

ちなみに私は、SQLServerが専門です。

  • Oracleは技術者任せ、SQLServerはシステム任せ

    タイトルのとおりです。DBの成り立ちや、企業戦略の違い似様な気がしています。
    例えば、MSはWidnowsという代表するOSを持っており、
    そこに最適なDBとしてSQLServerを位置づけているはずです。Oracleは、特定のプラットフォームに依存しないものとことが強みでもあり、そのためさまざまな設定をカスタマイズ可能にしているため、設定する”人”が重要になるということです。

  • Oracleはインスタンスにデータベースは1つしか持てないが、
    SQLServer
    は、インスタンスにデータベースが複数持てる

    これは細かい話です。
    おそらく、後発のSQLServerがわかりやすい機能差異を作りたかったのではと思います。
    ただ、これがあるからなに?というレベルの違いで、
    Oracleの表領域を複数作れば同じ意味の構成が可能だと思います。
  • Oracleは、ログファイル領域がインスタンス内で共通
    SQLServer
    は、データベースごとにログファイル領域が異なる

    これは2つ目のものに引きずられていることですが、運用時に違いが出ます。
    例えば、SQLServerの場合、一つのインスタンスに複数のデータベースがあった場合、
    あるデータベースが壊れて復元する場合、読み込み対象ログは、
    そのデータベースのログのみです。
    しかし、Oracleの場合、表領域を分けていたとしても
    復旧する対象ログが、すべての表領域で共通のため復旧に時間がかかる場合があります。
  • Oracle と SQLServerはオブジェクトの配置について同様の考え方で設計ができる

    表領域 と ファイルグループ
  • SQLServerは、Stanby機能でオペミスで誤って復旧した場合もリカバリ可能

    例えば、「人事データを17:00時点に戻してくれ」と依頼されて実施してみたが、
    あとあと「ごめん、16:00の間違いだった」というとき、
    SQLServerは、Stanby機能という機能を使うことで、
    一旦読み取り専用で復旧。その後データ変更はさせず問題なければ確定ということができます。
    Oracleはこれができない。
  • SQLServerは、ログファイルのバックアップを手動で定期的にとらないと肥大する
    Oracle
    は、ログファイルをサイズ指定で自動でアーカイブログに取られるため肥大しにくい

    これは、OSの話でいうとちょっと矛盾している気もしますが、
    SQLServerは手動でバックアップ設定しないとログが肥大し、
    Oracleは自動でやってくれるということで、
    ともにバックアップしないと肥大するという仕組みは同じですが、
    問題が表面化しやすいのがSQLです。
  • SQLServerは、冗長化はOSが実施する。Oracleは、DBの機能としてある

    これはまさに冒頭の話ですね。背景がわかれば位置づけが違うのは理解できます。
  • クラスタ化インデックスは、SQLServerは途中でやめることが可能。Oracleは不可
  • カラムストアインデックス(SQLServer2012 新機能)

    設定すると参照のみ可能。集計だけのDBでは劇的にパフォーマンス向上。
    Oracleにはないインデックスの種類。
  • ロックエスカレーション

    これは完全にSQLServerのよろしくない仕様ですね。
    SQLServerは、「ある一定の行ロックがかかると、テーブルロックに切り替わる」という仕様が既定であります。元をたどると古いOS時代、まだメモリが十分にないときに大量の行ロックするとその分メモリが取られてしまい最悪の場合、システム停止に陥ってしまうもを回避するため、行ロックの上限を決め、それ以上はテーブルロックに切り替えるようにしたそうです。
     ただ、背景はわかるが、メモリが十分に確保できる現代ではマッチしてない仕様ですね。
    一応回避する方法ため、ロックエスカレーションをOFFにするコマンドがあります。 →LOCK_ESCALATION = DISABLE
  •  トランザクション分離レベルの既定値がReadCommitted

     OracleはReadCommitted Snapshot(SQLServer用語)

    トランザクション分離レベルという、ANSIが規定するトランザクションの仕様があります。
    それぞれどちらが既定かというお話です。
    ANSIの用語では、SQLServer、Oracleともに「READ COMMITTED」。
    違いは、同時実行時の制御の考え方である。
    巷では、SQLServerが劣勢ですが、既定値を変更してOracleの仕様にもできますし、
    この変更に関しては、Oracleよりカスタマイズが効く!?

    楽観的→Oracle
     自分の操作中に他からデータ更新があっても構わない。
    悲観的→SQLServer
     自分の操作中に他からデータ更新があったら困る。
     だからSQLServerは、更新中のデータにアクセスすると待たさせれる。
  • Oracle+JavaからSQL+.NETに移行して遅いといううわさ

    MS側から言うと「客観的なベンチマークで評価が必要」ということらしいです。
    要は、SQLServerが悪いか、他に問題ないかしっかり確認してねって。
    ただ、明らかに使えないレベルでは、うわさが出るのも仕方ないですよね。
    やはり、”第一印象”というのは非常に大事なんですね。
  • Oracleは、機能が有償オプション

    SQLServer
    は、All inOneパッケージ。
    これは、お金の話ですね。
    プリセールスの人なら常識ですかね。
    Oracleはオプション付けないとすべての機能は揃いません。

ORACLEデータベース用語でわかるSQL Server

0 件のコメント:

コメントを投稿