この章では、MySQLデータベースとOracle Databaseを比較します。内容は次のとおりです。
この項には、MySQLデータベースとOracle Databaseのセキュリティ問題に関する情報が含まれています。
Oracleと同様に、MySQLユーザーはデータベースによって管理されます。MySQLでは、一連の付与表を使用して、ユーザーとユーザーが所有できる権限を追跡します。MySQLでは、ユーザーに対して認証、認可およびアクセス制御を実行する際に、これらの付与表を使用します。
Oracle(データベース認証を使用するように設定した場合)や、ユーザー名とパスワードのみを使用してユーザーを認証する他のほとんどのデータベースとは異なり、MySQLでは、ユーザーを認証する際に、追加のlocation
パラメータを使用します。このlocation
パラメータは、通常、ホスト名、IPアドレスまたはワイルドカード(“%”)です。MySQLでは、この追加のパラメータを使用して、データベースへのユーザー・アクセスをドメイン内の特定のホストに制限する場合があります。また、これによって、接続元のホストに応じて、ユーザーに異なるパスワードと一連の権限を適用できます。したがって、abc.comからログオンするユーザーscottは、xyz.comからログオンするユーザーscottと同じである場合もありますが、異なる場合もあります。
MySQLの権限システムは、継承を介して機能する階層システムです。高いレベルで付与された権限は、暗黙的にすべての低いレベルに渡されますが、低いレベルで設定されている同じ権限が優先される場合があります。MySQLでは、次の権限範囲の降順に5つの異なるレベルで権限を付与できます。
グローバル
ホスト単位ベース
データベース・レベル
表固有
列固有(1つの表内の1つの列)
レベルごとの対応する付与表が、データベース内にあります。権限チェックを実行する際に、MySQLでは、権限範囲の降順に各表がチェックされ、低いレベルで付与された権限は、高いレベルで付与された同じ権限よりも優先されます。
MySQLでサポートされている権限は、2つのタイプ(管理権限とオブジェクト単位権限)に分類されます。管理権限は、サーバー全体に影響し、MySQLの機能に関連するグローバル権限です。これらの管理権限には、FILE、PROCESS、REPLICATION、SHUTDOWNおよびSUPER権限が含まれています。オブジェクト単位権限は、表、列、索引、ストアド・プロシージャなどのデータベース・オブジェクトに影響し、異なる範囲で付与できます。これらのオブジェクト単位権限には、権限チェックをトリガーするSQL問合せに関連する名前が付けられます。
Oracleと異なり、MySQLにはロールの概念がありません。したがって、ユーザーのグループに一連の同じ権限を付与するには、各ユーザーに対して権限を別々に付与する必要があります。また、監査の面では不十分ですが、あるロールとしてタスクを実行するユーザーはすべて、1つのユーザー・アカウント(そのロールのためのもので、必要な権限が付与されている)を共有することもあります。
スキーマには、表、ビュー、索引、ユーザー、制約、ストアド・プロシージャ、トリガーおよびその他のデータベース固有のオブジェクトの定義が含まれています。リレーショナル・データベースのほとんどは、類似したオブジェクトとともに動作します。
この項の内容は次のとおりです。
OracleとMySQLのスキーマ・オブジェクトには多くの類似点があります。ただし、これらのデータベース間で異なるスキーマ・オブジェクトもあります。スキーマ・オブジェクトの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
表2-1に、OracleとMySQLの相違点を示します。
表2-1 OracleとMySQLのスキーマ・オブジェクト
Oracle | MySQL |
---|---|
AFTERトリガー |
トリガー |
BEFOREトリガー |
トリガー |
チェック制約 |
チェック制約 |
列のデフォルト |
列のデフォルト |
データベース |
データベース |
外部キー |
外部キー |
索引 |
索引 |
パッケージ |
該当なし |
PL/SQLファンクション |
ルーチン |
PL/SQLプロシージャ |
ルーチン |
主キー |
主キー |
ロール |
該当なし |
スキーマ |
スキーマ |
順序 |
列のAUTO_INCREMENT |
スナップショット |
該当なし |
シノニム |
該当なし |
表 |
表 |
表領域 |
該当なし |
一時表 |
一時表 |
各行のトリガー |
各行のトリガー |
一意キー |
一意キー |
ユーザー |
ユーザー |
ビュー |
ビュー |
Oracleでは、オブジェクト名の大/小文字が区別されません。Oracleのスキーマ・オブジェクト名は大文字で格納されます。
Oracleと同様に、MySQLの列名、索引名、ストアド・プロシージャ名、トリガー名および列の別名は、すべてのプラットフォームで大/小文字が区別されません。ただし、MySQLの場合、データベース名と表名の大/小文字の区別はOracleと異なります。MySQLの場合、データベースはデータ・ディレクトリ内のディレクトリに対応し、表はデータベース・ディレクトリ内の1つ以上のファイルに対応します。そのため、データベース名と表名の大/小文字の区別は、基礎となるオペレーティング・システムの大/小文字の区別によって決定されます。つまり、データベース名と表名は、Windowsでは大/小文字が区別されませんが、UNIXのほとんどの種類では大/小文字が区別されます。ただし、MySQLでは、lower_case_table_names
システム変数を使用することで、データベース名と表名がディスクにどのように格納されるか、およびMySQLでそれらの名前がどのように使用されるかをユーザーが決定できます。MySQL 4.1.1より前のリリースでは、表の別名は大/小文字が区別されます。
OracleとMySQLでは、引用識別子で名前を表すことによって予約語をオブジェクト名として使用できます。ただし、MySQLでは、DATE、TIMESTAMPなどのいくつかの予約語は、非引用識別子でオブジェクト名として使用できます。これは、Oracleでは許可されていません。SQL Developerでは、Oracleの予約語であるMySQLオブジェクトの名前にアンダースコア(_)が追加されます。
MySQLとOracleの識別子の定義には、わずかな違いがいくつかあります。MySQLでは、非引用識別子を数字で始めることができ、二重引用符を引用識別子内で使用できます。ただし、どちらもOracleの識別子では許可されていません。MySQLの場合、引用文字はバックティック(`)です。SQLモードANSI_QUOTESが設定されている場合は、二重引用符を使用して識別子を引用することもできます。Oracleの場合、識別子は二重引用符を使用して引用されます。
大/小文字の区別と、1つ以上の他の特性で一意のスキーマ・オブジェクト名を選択し、オブジェクト名がいずれのデータベースの予約語でもないようにする必要があります。
この項では、MySQLデータベースをOracleに変換する際に考慮する必要がある表設計の問題について説明します。この項の内容は次のとおりです。
MySQLとOracleの間には、サポートされているキャラクタ・タイプと、キャラクタ・タイプの値を格納および取得する方法にいくつかの違いがあります。
MySQLでは、65,535バイトより小さいキャラクタ・タイプに対してCHAR型とVARCHAR型がサポートされています。CHAR型の最大長は255バイトで、MySQL 3.23では、0バイトで宣言する場合もあります。MySQL 5.0.3より前の場合、VARCHAR型の長さの仕様はCHAR型と同じです。MySQL 5.0.3から、VARCHAR型の最大長は65,535バイトになりました。Oracleでは、4つのキャラクタ・タイプ(CHAR、NCHAR、NVARCHAR2およびVARCHAR2)がサポートされています。Oracleのすべてのキャラクタ・タイプで宣言可能な最小値は1バイトです。CHARおよびNCHARで使用可能な最大サイズは2,000バイトで、NVARCHAR2およびVARCHAR2の場合は4,000バイトです。
MySQLのCHARの値は、格納されるときに、指定した長さまで右に空白が埋め込まれ、取得されるときに、後続の空白が削除されます。一方、VARCHARの値は、指定したとおりの数の文字を使用して格納されますが、MySQL 5.0.3より前の場合は、値が格納および取得されるときに、後続の空白が削除されます。Oracleでは、値が列の長さより小さい場合、列の長さまでCHAR型とNCHAR型の値に空白が埋め込まれ、取得時に後続の空白は削除されません。NVARCHAR2およびVARVHAR2データ型の列の場合、Oracleでは、後続の空白も含めて、指定したとおりに値が格納および取得されます。
キャラクタ・タイプの列に指定した長さを超える値が割り当てられると、STRICT SQLモードが設定されていないかぎり、MySQLでは値が切り捨てられ、エラーは生成されません。Oracleでは、キャラクタ・タイプの列に割り当てられた値が指定した長さを超えると、エラーが生成されます。
MySQLの場合、すべてのキャラクタ・タイプ(CHAR、VARCHARおよびTEXT)の列には、列のキャラクタ・セットと照合があります。キャラクタ・セットまたは照合が列定義に明示的に定義されていない場合、表のキャラクタ・セットまたは照合が指定されている場合はそれになります。指定されていない場合は、データベースのキャラクタまたは照合が選択されます。Oracleの場合、CHAR型とVARCHAR2型のキャラクタ・セットはデータベースのキャラクタ・セットによって定義され、NCHAR型とNVARCHAR型のキャラクタ・セットは各国語キャラクタ・セットによって定義されます。
MySQLでCHAR型またはVARCHAR型を宣言する場合、MySQL 4.1以上では、デフォルトの長さセマンティクスはバイトではなく文字です。Oracleでは、デフォルトの長さセマンティクスは、CHAR型およびVARCHAR2型の場合はバイトで、NCHAR型およびNVARCHAR2型の場合は文字です。
SQL Developerでは、MySQLのCHAR型とVARCHAR型をそれぞれOracleのCHAR型とVARCHAR2型にマップします。SQL Developerでは、OracleのCHARおよびVARCHAR2データ型の列の最大バイト数は、MySQLの対応するCHARおよびVARCHARデータ型の列に指定した最大長を保持するのに必要なバイト数から決定されます。MySQLのVARCHAR2の列でデータが4000バイトを超える場合、その列はOracleのCLOBデータ型の列に変換されます。
NULL値が許可されない列のデフォルト値の処理方法は、MySQLとOracleでは異なります。
MySQLの場合、NULL値が許可されない列と、データが表に挿入される際にデータが提供されない列に対して、列のデフォルト値が決定されます。このデフォルト値は、列のデータ型に対する暗黙的なデフォルト値です。ただし、STRICTモードが有効になっていると、MySQLではエラーが生成され、トランザクション表に対してINSERT文がロールバックされます。
Oracleの場合、表にデータを挿入する際に、NULL値を許可しないすべての列にデータを指定する必要があります。Oracleでは、NOT NULL制約が設定されている列のデフォルト値は生成されません。
SQL Developerでは、複数のMySQLデータベースが同じMySQLデータベース・サーバー上にある場合の移行がサポートされています。
MySQLのスキーマ移行時の考慮事項は、次の領域に適用されます。
MySQLデータベースをOracleに移行する際に、SQL Developerは、各MySQLデータベースをOracleの表領域にマップします。表、索引、ビューなどのデータベース・オブジェクトは、それぞれの表領域に格納され、それらを所有するユーザーのOracleスキーマから参照されます。
SQL Developerでは、MySQLに対するSUPER権限以外の管理権限はすべてが処理されるわけではありません。表2-2に、異なるレベルで付与されるMySQLのオブジェクト単位権限、およびグローバル・レベルで付与されるSUPER権限のマッピングを示します。
表2-2 MySQLの権限とOracleのシステム権限
レベル | 権限 | Oracleでのシステム権限 |
---|---|---|
グローバル |
ALTER |
ALTER ANY TABLE、ALTER ANY SEQUENCE、ALTER ANY CUSTER、COMMENT ANY TABLE |
グローバル |
ALTER ROUTINE |
ALTER ANY PROCEDURE、DROP ANY PROCEDURE |
グローバル |
CREATE |
CREATE ANY TABLE、CREATE ANY SEQUENCE、CREATE ANY CLUSTER、CREATE DATABASE LINK、COMMENT ANY TABLE |
グローバル |
CREATE ROUTINE |
CREATE ANY PROCEDURE |
グローバル |
CREATE USER |
CREATE USER、GRANT ANY PRIVILEGE |
グローバル |
CREATE VIEW |
CREATE ANY VIEW |
グローバル |
DELETE |
ALTER ANY TABLE、DROP USER、DELETE ANY TABLE |
グローバル |
DROP |
DROP ANY TABLE、DROP ANY SEQUENCE、DROP ANY CLUSTER、DROP ANY VIEW |
グローバル |
EXECUTE |
EXECUTE ANY PROCEDURE |
グローバル |
INDEX |
CREATE ANY INDEX、ALTER ANY INDEX、DROP ANY INDEX |
グローバル |
INSERT |
INSERT ANY TABLE |
グローバル |
LOCK TABLES |
LOCK ANY TABLE |
グローバル |
SELECT |
SELECT ANY TABLE |
グローバル |
SUPER |
CREATE ANY TRIGGER、DROP ANY TRIGGER |
グローバル |
UPDATE |
UPDATE ANY TABLE |
グローバル |
USAGE |
CREATE SESSION、ALTER SESSION、UNLIMITED TABLESPACE |
データベース |
CREATE |
CREATE CLUSTER、CREATE DATABASE LINK、CREATE SEQUENCE、CREATE TABLE |
データベース |
CREATE ROUTINE |
CREATE PROCEDURE |
データベース |
CREATE VIEW |
CREATE VIEW |
表 |
CREATE |
CREATE TABLE |
表 |
CREATE VIEW |
CREATE VIEW |
SQL Developerでは、一時表の移行はサポートされません。
MySQLでは、一時表は、現行のユーザー・セッションのみで参照可能であり、ユーザー・セッションが終了すると自動的に削除されるデータベース・オブジェクトです。
一度作成された一時表は明示的に削除されるまで存在し、適切な権限を持つすべてのセッションで参照可能であるという点で、Oracleの一時表の定義は、MySQLと若干異なります。ただし、一時表のデータは、表にデータを挿入するユーザー・セッションのみで参照可能であり、トランザクションまたはユーザー・セッションの存続中はデータが保持される場合があります。
SQL Developerでは、移行されるすべてのデータベースについて、ストアド・プロシージャを除いたすべてのデータベース・オブジェクトを所有するMySQLルート・ユーザーのOracleスキーマが作成されます。ストアド・プロシージャの場合、それらを作成したMySQLユーザーが引き続き所有者となります。SQL Developerでは、移行されるMySQLユーザーごとにOracleスキーマが作成されます。
この項では、Oracleで使用するデータ型について説明します。MySQLのデータ型とそれと同等のOracleデータ型を示します。内容は次のとおりです。
表2-3に、Oracle SQL DeveloperでサポートされているOracleデータ型を示します。
データ型 | 説明 |
---|---|
BLOB |
バイナリ・ラージ・オブジェクトです。最大サイズは4GBです。 |
CHAR (SIZE) |
長さがsizeバイトの固定長文字データです。最大サイズは2000バイトです。デフォルトのサイズ(最小サイズ)は1バイトです。 |
CLOB |
シングルバイト文字を含むキャラクタ・ラージ・オブジェクトです。固定幅および可変幅の両方のキャラクタ・セットがサポートされています。両方でCHARデータベース・キャラクタ・セットが使用されます。最大サイズは4GBです。 |
DATE |
DATEデータ型には、日時情報が格納されます。日時情報はCHARおよびNUMBERの両方のデータ型で表すことができますが、DATEデータ型には特別な関連プロパティが含まれます。DATE型の各値に対して、世紀、年、月、日、時間、分、秒などの情報が格納されます。 |
FLOAT |
10進精度が38または2進精度が126の浮動小数点を指定します。 |
LONG (SIZE) |
最大2GBまたは2^31 -1バイトの可変長文字データです。 |
LONG RAW |
最大2GBの可変長のRAWバイナリ・データです。 |
NCHAR (SIZE) |
長さがsize文字またはsizeバイト(使用している各国語キャラクタ・セットによって異なる)の固定長文字データです。最大サイズは、各文字の格納に必要なバイト数(上限2000バイト)で決まります。デフォルトのサイズ(最小サイズ)は1文字または1バイト(キャラクタ・セットによる)です。 |
NCLOB |
マルチバイト文字を含むキャラクタ・ラージ・オブジェクトです。固定幅および可変幅の両方のキャラクタ・セットがサポートされています。両方でNCHARデータベース・キャラクタ・セットが使用されます。最大サイズは4GBです。各国語キャラクタ・セットのデータが格納されます。 |
NUMBER |
精度がpでスケールがsの数値です。精度pは1から38の範囲になります。スケールsは-84から127の範囲になります。 |
NVARCHAR2 (SIZE) |
最大長がsize文字またはsizeバイト(使用している各国語キャラクタ・セットによって異なる)の可変長文字列です。最大サイズは、各文字の格納に必要なバイト数(上限4000バイト)で決まります。NVARCHAR2にはサイズを指定する必要があります。 |
RAW (SIZE) |
長さがsizeバイトのRAWバイナリ・データです。最大サイズは2000バイトです。RAW値にはサイズを指定する必要があります。 |
VARCHAR (SIZE) |
VARCHARデータ型は、現在VARCHAR2データ型と同義です。VARCHARではなく、VARCHAR2を使用することをお薦めします。将来、VARCHARは、異なる比較セマンティクスで比較される可変長文字列で使用される別のデータ型として定義される可能性があります。最大サイズは4000で、最小サイズ(デフォルト)は1です。 |
BINARY_DOUBLE |
64ビットの倍精度浮動小数点データ型です。 |
BINARY_FLOAT |
32ビットの単精度浮動小数点データ型です。 |
Oracleデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
表2-4に、SQL Developerでデータ型をMySQLからOracleに変換するために使用されるデフォルトの設定を示します。SQL Developerでは、代替データ型を指定することによって、特定のデータ型のデフォルトの設定を変更できます。 デフォルトのデータ型マッピングの変更方法については、SQL Developerのオンライン・ヘルプを参照してください。
表2-4 Oracle SQL Developerで使用されるデフォルトのデータ型マッピング
MySQLデータ型 | Oracleデータ型 |
---|---|
BIGINT |
NUMBER(19, 0) |
BIT |
RAW |
BLOB |
BLOB、RAW |
CHAR |
CHAR |
DATE |
DATE |
DATETIME |
DATE |
DECIMAL |
FLOAT(24) |
DOUBLE |
FLOAT(24) |
DOUBLE PRECISION |
FLOAT(24) |
ENUM |
VARCHAR2 |
FLOAT |
FLOAT |
INT |
NUMBER(10, 0) |
INTEGER |
NUMBER(10, 0) |
LONGBLOB |
BLOB、RAW |
LONGTEXT |
CLOB、RAW |
MEDIUMBLOB |
BLOB、RAW |
MEDIUMINT |
NUMBER(7, 0) |
MEDIUMTEXT |
CLOB、RAW |
NUMERIC |
NUMBER |
REAL |
FLOAT(24) |
SET |
VARCHAR2 |
SMALLINT |
NUMBER(5, 0) |
TEXT |
VARCHAR2、CLOB |
TIME |
DATE |
TIMESTAMP |
DATE |
TINYBLOB |
RAW |
TINYINT |
NUMBER(3, 0) |
TINYTEXT |
VARCHAR2 |
VARCHAR |
VARCHAR2、CLOB |
YEAR |
NUMBER |
注意: ENUMおよびSETデータ型には、Oracleへの直接マッピングは存在しません。SQL Developerによって、MySQLのENUM列がOracleのVARCHAR2列にマップされます。この場合、ENUMデータ型で使用可能な値のみがOracle内のマップされた列で使用可能になるように、これらの列に制約とトリガーが追加されます。 |
この項では、MySQLデータ型とOracleデータ型の違いを示します。一部のMySQLデータ型には、複数の代替Oracleデータ型が存在します。この表の内容は、次のとおりです。
MySQLデータ型をOracleの数値データ型にマップする場合は、次の条件が適用されます。
マップ先のOracleデータ型に精度またはスケールが指定されていない場合は、ソースのMySQLデータ型の精度およびスケールが適用されます。
マップ先のOracleデータ型に精度またはスケールが指定されている場合は、それらの値がソースのデータ型の同等値と比較され、最大値が選択されます。
次の表では、MySQLとOracleの数値型を比較しています。
MySQL | サイズ | Oracle |
---|---|---|
BIGINT | 8バイト | NUMBER(19,0) |
BIT | 約(M+7)/8バイト | RAW |
DECIMAL(M,D) | D > 0の場合はM+2バイト、D = 0の場合はM+1バイト(M < Dの場合はD+2) | FLOAT(24)、BINARY_FLOAT |
DOUBLE | 8バイト | FLOAT(24)、BINARY_FLOAT、BINARY_DOUBLE |
DOUBLE PRECION | 8バイト | FLOAT(24)、BINARY_DOUBLE |
FLOAT(25<=X <=53) | 8バイト | FLOAT(24)、BINARY_FLOAT |
FLOAT(X<=24) | 4バイト | FLOAT、BINARY_FLOAT |
INT | 4バイト | NUMBER(10,0) |
INTEGER | 4バイト | NUMBER(10,0) |
MEDIUMINT | 3バイト | NUMBER(7,0) |
NUMERIC | D > 0の場合はM+2バイト、D = 0の場合はM+1バイト(M < Dの場合はD+2) | NUMBER |
REAL | 8バイト | FLOAT(24)、BINARY_FLOAT |
SMALLINT | 2バイト | NUMBER(5,0) |
TINYINT | 1バイト | NUMBER(3,0) |
次の表では、MySQLとOracleの日時型を比較しています。
MySQL | サイズ | Oracle |
---|---|---|
DATE | 3バイト | DATE |
DATETIME | 8バイト | DATE |
TIMESTAMP | 4バイト | DATE |
TIME | 3バイト | DATE |
YEAR | 1バイト | NUMBER |
MySQLデータ型をOracleの文字データ型にマップする場合は、次の条件が適用されます。
マップ先のOracleデータ型に長さが指定されていない場合は、ソースのMySQLデータ型の長さが適用されます。
マップ先のデータ型に長さが指定されている場合は、2つの長さの最大値が適用されます。
次の表では、MySQLとOracleの文字列型を比較しています。
注意: Mは、最大表示サイズを示します。最大有効表示サイズは255です。Lは、浮動小数点型で、小数点の後に続く桁数を示します。 |
MySQL | サイズ | Oracle |
---|---|---|
BLOB | L + 2バイト(L<2^16) | RAW、BLOB |
CHAR(m) | Mバイト(1<=M<=255) | CHAR |
ENUM (VALUE1, VALUE2, ...) | ENUM値の数(上限65535)に応じて、1または2バイト | |
LONGBLOB | L + 4バイト(L < 2 ^ 32) | RAW、BLOB |
LONGTEXT | L + 4バイト(L < 2 ^ 32) | RAW、CLOB |
MEDIUMBLOB | L + 3バイト(L < 2^ 24) | RAW、BLOB |
MEDIUMTEXT | L + 3バイト(L < 2^ 24) | RAW、CLOB |
SET (VALUE1, VALUE2, ...) | セット・メンバーの数(上限64)に応じて、1、2、3、4または8バイト | |
TEXT | L + 2バイト(L<2^16) | VARCHAR2、CLOB |
TINYBLOB | L + 4バイト(L <2 ^8) | RAW、BLOB |
TINYTEXT | L + 4バイト(L <2 ^8) | VARCHAR2 |
VARCHAR(m) | MySQL 5.0.3より前の場合はL+1バイト(L<=Mおよび0<=M<=255)(MySQL 5.0.3以上の場合は0 <= M <= 65535で、有効な最大長は65,532バイト) | VARCHAR2、CLOB |
この項では、MySQLとOracle Databaseのデータ記憶域における概念の相違点と類似点について説明します。
データ記憶域は、Oracleを含むほとんどすべてのデータベースとは異なるMySQLの側面です。MySQLでは、データベースはサーバーのデータ・ディレクトリ内のディレクトリに対応します。データベース内の表は、表に使用されるストレージ・エンジンに応じて、データベース・ディレクトリ内の1つ以上のファイルに対応します。
データベースでは、異なるストレージ・エンジンの表を混在させることができます。ストレージ・エンジンは、表のデータを格納および取得する役割を担っています。
MySQLでは、ユーザー環境の異なる要件を満たす様々なストレージ・エンジン(以前はテーブル・タイプと呼ばれていた)が提供されます。表2-5に、MySQLでサポートされているストレージ・エンジンを示します。
表2-5 MySQLでサポートされているストレージ・エンジン
ストレージ・エンジン | 説明 |
---|---|
MyISAM |
フルテキスト索引を提供し、移植性に優れたデフォルトの非トランザクション・ストレージ・エンジン。 |
MERGE |
同一の列と索引の情報を持つ一連のMyISAM表を1つのものとして使用できる非トランザクション・ストレージ・エンジン。 |
MEMORY(HEAP) |
メモリーにデータを格納する非トランザクション・ストレージ・エンジン。 |
BDB(Berkeley DB) |
最初のトランザクションセーフ・ストレージ・エンジン。 |
InnoDB |
大量のデータを処理する際にパフォーマンスが最大になるように設計されたトランザクションセーフ・ストレージ・エンジン。行レベルロックを提供します。 |
FEDERATED |
ローカル表ではなくリモート・データベースの表内のデータにアクセスするストレージ・エンジン。 |
ARCHIVE |
非常に小さいフットプリントで索引のない大量のデータを格納できるストレージ・エンジン。 |
CSV |
値をカンマで区切る形式を使用してテキスト・ファイルにデータを格納するストレージ・エンジン。 |
BLACKHOLE |
データを受け入れるが、それを破棄して格納せず、ブラック・ホールのように動作するストレージ・エンジン。 |
EXAMPLE |
何もしない「スタブ」エンジン。新しいエンジンの記述の開始方法を説明する例として機能することを目的とします。 |
ISAM |
MySQLの元のストレージ・エンジン。バージョン5.0からMyISAMストレージ・エンジンがサポートされるようになったため非推奨になりました。 |
各ストレージ・エンジンには、メリットとデメリットがあります。ストレージ・エンジンを区別する機能として、トランザクション、ロック、同時実行性、移植性があります。次の表に、一般的に使用される4つのストレージ・エンジンの機能の概要を示します。
表2-6 一般的なストレージ・エンジンの機能比較
機能 | MyISAM | HEAP | BDB | InnoDB |
---|---|---|---|---|
トランザクション |
なし |
なし |
あり |
あり |
ロック粒度 |
表 |
表 |
ページ |
行 |
記憶域 |
各表のデータ・ファイル(.MYD)および索引ファイル(.MYI) |
メモリー内 |
各表の1つのデータおよび索引ファイル(.db) |
すべての表の一連のデータ・ファイル |
移植性 |
あり |
該当なし |
なし |
あり |
Oracle Databaseは、1つ以上の表領域で構成されています。表領域では論理記憶域が提供され、データを保持する物理ディスクとデータベースがリンク付けされます。表領域は、1つ以上のデータファイルから作成されます。データファイルは、ファイル・システム内のファイルまたはRAWデバイスで指定されるディスク領域の領域です。データファイルを追加することで表領域を大きくすることができます。
Oracle Databaseは、Oracle表が格納されている1つ以上のSYSTEM表領域で構成されています。ユーザー定義表領域でも構成できます。表領域は、データベース・オブジェクトの論理的な格納場所です。たとえば、特定の表または索引が作成される表領域内の場所を指定できます。