Oracleでは「セグメント」単位にデータが管理されています。社員表などの「表」や「索引」といった単位はセグメントにあたります。セグメントは1つ以上の「エクステント」から構成され、セグメント単位にエクステントサイズを設定できます。エクステントはさらに細かい単位である「データブロック」から構成されます。 SQL Serverには、Oracleのセグメントに相当するような言葉はありません。 「テーブル(表)」や「インデックス(索引)」は、Oracleのデータブロックに相当する「ページ」で構成されます。ページはメモリとディスクの最低入出力単位で、サイズは8Kバイト固定です。ページが8つ連続した領域が「エクステント」で、64Kバイト固定です。テーブルを作成すると最初はページ単位で領域が確保されますが、テーブルサイズが大きくなるとエクステント単位で領域が取られます。 ☆さらに詳細はこちら→
「UNDOセグメント(旧ロールバックセグメント)」は、変更前のデータを格納し、トランザクションのロールバックや読み取り一貫性を確保するために使用されます。しかしSQL ServerにはUNDOセグメントに相当するものはありません。 SQL Serverでは、トランザクションの復旧には「トランザクションログファイル」の変更履歴が使用され、読み取り一貫性の確保には「ロックメカニズム」が使われます。SQL ServerではSELECT文の実行時にも読み取り対象リソースに「共有ロック」というタイプのロックがかかりますので、他のトランザクションから未コミットのデータを読み取ることができません。 Oracleの読み取り一貫性はUNDOセグメントから変更前のデータを読むことで保証されますが、SQL Serverは変更したデータをコミットするまで読み取らせないことでデータの精度を保っているのです。
Oracle Serverの「データファイル」とは、表領域に対応付けられるファイルで、表や索引などのデータを格納します。SQL Serverのデータファイルには、「プライマリデータファイル」と「セカンダリデータファイル」の2種類があります。プライマリデータファイルは1つのデータベースに1つ必要で、テーブルやインデックスなどのデータや他のファイルへのポインタを持ちます。推奨の拡張子は「.mdf」です。このプライマリデータファイル以外をすべてセカンダリデータファイルと呼び、これがない場合や複数存在する場合もあります。 拡張子は「.ndf」です。セカンダリデータファイルを作成する主な理由としては、ファイルを複数のディスクに分散させることにより同時I/Oでスループットが改善されることが挙げられます。
Oracle Serverは、サービスを起動することにより、@インスタンスの起動、Aデータベースのマウント、Bデータベースのオープンの3ステップで起動します。 SQL Serverの起動も、サービスの起動のみで行えます。サービスを起動するとインスタンスが起動します。インスタンスレベルの情報はシステムデータベースの1つであるmasterデータベースに格納されていて、サービス起動時に自動的に読み取り、ユーザーデータベースも自動的にオープンされます。 停止はサービスの停止です。「一時停止(NORMAL)」、「停止(SQL ServerEnterprise Managerなどの場合はIMMEDIATE、SQLステートメントの場合はステートメントの終了まで待つ)」、「SHUTDOWN_WAIT(ABORT)」の3種類があります。カッコ()の中は、それぞれ相当するOracleの停止オプションです。なお、「TRANSACTIONAL」に相当するものは、SQL Serverにはありません。
Oracle Serverには、データベースの起動、内部のイベントおよびエラー情報を記録する「アラートファイル」と「バックグラウンドトレースファイル」があります。また、セッションで実行したSQLの実行計画を記録する「ユーザートレースファイル」があります。これらのファイルは、トラブルシューティングやチューニングに利用されます。 SQL Serverの場合は、アラートファイルおよびバックグラウンドトレースファイルに該当するものとして、「SQL Serverエラーログ」およびWindowsの「アプリケーションログ」があります。SQL ServerエラーログはEnterprise Managerから参照し、Windowsのアプリケーションログはイベントビューアから参照します。ユーザートレースファイルに該当するものとしては、「プロファイラ」があります。プロファイラはGUIベースのユーティリティでSQL Server内のアクティビティをトレースすることができます。SQLの実行計画をトレースする機能も備えています。
SQL Serverのインスタンスには、「sqlservr」という名前のプロセスが1つあります。プロセスは1つですが、内部に複数のスレッドを含んでいます。実は、Windows版Oracle Serverも同一のしくみになっています。 SQL Serverの代表的なスレッドを紹介しましょう。「レイジーライタスレッド」はその機能の一つとして、データバッファキャッシュをスキャンし、使用済みのページ(ブロック)をデータファイルに書き込みます。「LRUリスト」に該当する「空きバッファリスト」が一定のレベルを下回ると、レイジーライタスレッドが書き込みを開始します。「ログライタスレッド」は、ログキャッシュをスキャンして、ログレコードをログファイルに書き込みます。このスレッドは非同期に書き込みを行いますが、チェックポイントやトランザクションのコミットが行われたときには強制的に書き込みを行います。その他、リソースのロックを管理する「ロックマネージャスレッド」、チェックポイントが発生したときに書き込みを行う「チェックポイントスレッド」などがあります。