データベースウォーズ:SQL Server、Oracle PL/SQL、MySQLの徹底比較
市場には数多くのデータベースが存在し、まさに「頭脳戦」が始まっています。だからこそ今、業界をリードする3大リレーショナルデータベース——Microsoft SQL Server、Oracle PL/SQL、MySQL——の違いとそれぞれの重要性を理解することが重要です。リレーショナルデータベース管理システム(RDBMS)は現在、あらゆる産業の背骨ともいえる存在となっており、選択肢が多い分、どれを選ぶべきか判断に迷うのも当然でしょう。
リレーショナルデータベース管理システムは1980年代に登場しました。本記事では、業界で最も広く使われている3つのRDBMS、Microsoft SQL Server、Oracle、MySQLの歴史と特徴を詳しく掘り下げていきます。Microsoft SQL ServerとOracleが商用ソフトウェアである一方、MySQLはオープンソースのRDBMSとして提供されています。
Oracleは1980年代に、商用利用可能なRDBMSを最初に世に送り出した企業です。その後1990年代半ば、MicrosoftがSQL Serverで市場に参入し、Oracleの強力なライバルとなりました。一方のMySQLは、当初からオープンソースソフトウェアとして開発・配布されてきました。初版は1995年にリリースされ、Windows版は1998年に登場しています。2008年にはSun Microsystemsに買収され、その後Oracleの手に渡りました。
言語――コミュニケーションの心臓部
RDBMSの根幹を支えるのは、クエリを実行するために使われる言語です。パフォーマンスや実装のしやすさも、この言語に大きく左右されます。3つのデータベース管理システムはすべて、構造化照会言語(SQL)のバージョンを採用していますが、Microsoft SQL ServerはSybaseが開発しMicrosoftが使用しているSQLの拡張版であるTransact-SQL(T-SQL)を使用します。一方、OracleはPL/SQL(Procedural Language/SQL)を採用しています。
この2つはいずれもSQLの「方言(フレーバー)」であり、構文や機能には微妙な違いがあります。両者の主な相違点は、変数、ストアドプロシージャ、組み込み関数の扱い方です。OracleのPL/SQLでは、プロシージャを「パッケージ」としてグループ化できますが、これはMS SQL Serverでは実現できません。PL/SQLはやや複雑である反面、より高い表現力を持つ可能性があり、T-SQLはシンプルで実装が容易という特徴があります。
MySQLは、T-SQLの軽量版を使用しつつ、SQL/PSMに近い手続き型言語を組み合わせています。MySQLのストアドコードオブジェクトはANSI標準にかなり準拠していますが、MicrosoftとSybase独自のSQL拡張であるT-SQLのような幅広さと深さは備えていません。
トランザクション制御
トランザクションとは、一連の操作をひとつの単位として実行するものです。例えばユーザーが複数のSQLクエリを実行する場合、「すべてが実行される」か「一切実行されない」かのどちらかになります。トランザクション制御に関して、OracleとMS SQL Serverでは大きな違いがあります。
デフォルト設定のMS SQL Serverは、各コマンドやタスクを個別に実行・コミットします。そのため、処理中にエラーが発生しても変更をロールバックすることが困難、あるいは不可能になる場合があります。「BEGIN TRANSACTION」コマンドを使えばステートメントを適切にグループ化し、トランザクションの開始を宣言でき、最後にCOMMITステートメントを実行できます。このCOMMITステートメントによって変更されたデータがディスクに書き込まれ、トランザクションが終了します。トランザクション内であればROLLBACKによりブロック内の変更をすべて破棄できますが、一度COMMITを実行した後は、それ以降の時点へ戻すことはできません。
一方、Oracleでは新しいデータベース接続ごとに新しいトランザクションとして扱われます。クエリの実行やコマンドの発行が行われても、変更はまずデータベースのメモリ上のみに保持されキャッシュに留まります。明示的にCOMMITステートメントが実行されるまで、何もコミットされません。COMMIT後のコマンド発行が新たなトランザクションの開始となり、プロセスが再び繰り返されます。この仕組みにより柔軟性が高まり、COMMITが明示的に実行されるまでディスクへの変更が確定しないため、エラー制御にも役立ちます。
MySQLの場合、トランザクションへの対応はInnoDBストレージエンジンとの組み合わせで容易に実現できます。InnoDBはMySQLにデフォルトで同梱されているストレージエンジンで、外部キー対応に加え、ACID準拠の標準的なトランザクション機能を提供します。
データベースオブジェクトの構成
データベースオブジェクトの構成方法も、この3つのデータベースを大きく分ける要素です。MS SQL Serverでは、テーブル、ビュー、プロシージャなどのすべてのオブジェクトをデータベース名単位で整理します。MS SQLのユーザーはログインに割り当てられ、特定のデータベースとそのオブジェクトへのアクセス権を付与されます。Microsoft SQL Serverでは、各データベースがサーバー上に独立した専用のディスクファイルを持ちます。
一方、Oracleではすべてのデータベースオブジェクトがスキーマ単位でグループ化されます。スキーマとは、データベースオブジェクトのサブセットからなるデータベース構造のことです。すべてのデータベースオブジェクトは全スキーマおよび全ユーザー間で共有されますが、共有されているとはいえ、ユーザーごとにロールと権限が定義されており、特定のスキーマやテーブルへのアクセスを制限することも可能です。
まとめると、MySQL、Oracle、SQL Serverはいずれも強力なRDBMSの選択肢です。「内部動作」や実装方法には他にも多くの違いがあるものの、ほぼ同等の形で利用することができます。それぞれ異なる目的や環境に応じて使い分けが可能であり、目的は同じでも、その実装手法は大きく異なるのです。
-
SQL Serverデータベースへのログイン方法|SSMSとT-SQLの2つの手順を解説
SQL Serverへのログインは、WindowsやメールアカウントにIDとパスワードでサインインするのと同じように、データベースへアクセスするための基本的な手段です。SQL Serverには、主に以下の4種類のログイン方式が用意されています。 Windowsのログイン情報を使用する認証(Windows認証) SQL Server専用に作成されたログイン(SQL Server認証) 証明書から作成されたログイン 非対称キーから作成されたログイン 本記事では、このうち実務でよく使われる「Windows資格情報によるログイン」と「SQL Server専用のログイン」の2つに焦点を当てて解説しま
-
Microsoft SQL Serverのデータベース破損と高度な復旧テクニック徹底解説
本記事では、Microsoft® SQL Server®のデータベースレベルで発生しうる破損の種類、その検出方法、そして高度な復元および修復テクニックを用いた修正方法について詳しく解説します。 はじめに SQL Serverは、高度な内部構造と優れた信頼性により、現在もっとも広く利用されているリレーショナルデータベース管理システム(RDBMS)のひとつです。多くの企業が重要なビジネスデータの保存・管理のためにSQL Serverデータベースを採用しています。 企業はデータベース管理者(DBA)に対して、データベースのパフォーマンス、メンテナンス、セキュリティの継続的な向上を期待しています。しか