ヘッダーをスキップ
Oracle Database SQL Developer MySQLからの移行のための追加情報
リリース1.2
E06020-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2 OracleとMySQLの比較

この章では、MySQLデータベースとOracle Databaseを比較します。 内容は次のとおりです。

2.1 データベース・セキュリティ

この項には、MySQLデータベースとOracle Databaseのセキュリティ問題に関する情報が含まれています。

Oracleと同様に、MySQLユーザーはデータベースによって管理されます。 MySQLでは、一連の付与表を使用して、ユーザーとユーザーが所有できる権限を追跡します。 MySQLでは、ユーザーに対して認証、認可およびアクセス制御を実行する際に、これらの付与表を使用します。

2.1.1 データベース認証

Oracle(データベース認証を使用するように設定した場合)や、ユーザー名とパスワードのみを使用してユーザーを認証する他のほとんどのデータベースとは異なり、MySQLでは、ユーザーを認証する際に、追加のlocationパラメータを使用します。 このlocationパラメータは、通常、ホスト名、IPアドレスまたはワイルドカード(%)です。 MySQLでは、この追加のパラメータを使用して、データベースへのユーザー・アクセスをドメイン内の特定のホストに制限する場合があります。 また、これによって、接続元のホストに応じて、ユーザーに異なるパスワードと一連の権限を適用できます。 したがって、abc.comからログオンするユーザーscottは、xyz.comからログオンするユーザーscottと同じである場合もありますが、異なる場合もあります。

2.1.2 権限

MySQLの権限システムは、継承を介して機能する階層システムです。 高いレベルで付与された権限は、暗黙的にすべての低いレベルに渡されますが、低いレベルで設定されている同じ権限が優先される場合があります。 MySQLでは、次の権限範囲の降順に5つの異なるレベルで権限を付与できます。

  • グローバル

  • ホスト単位ベース

  • データベース・レベル

  • 表固有

  • 列固有(1つの表内の1つの列)

レベルごとの対応する付与表が、データベース内にあります。 権限チェックを実行する際に、MySQLでは、権限範囲の降順に各表がチェックされ、低いレベルで付与された権限は、高いレベルで付与された同じ権限よりも優先されます。

MySQLでサポートされている権限は、2つのタイプ(管理権限とオブジェクト単位権限)に分類されます。 管理権限は、サーバー全体に影響し、MySQLの機能に関連するグローバル権限です。 これらの管理権限には、FILE、PROCESS、REPLICATION、SHUTDOWNおよびSUPER権限が含まれています。 オブジェクト単位権限は、表、列、索引、ストアド・プロシージャなどのデータベース・オブジェクトに影響し、異なる範囲で付与できます。 これらのオブジェクト単位権限には、権限チェックをトリガーするSQL問合せに関連する名前が付けられます。

Oracleと異なり、MySQLにはロールの概念がありません。 したがって、ユーザーのグループに一連の同じ権限を付与するには、各ユーザーに対して権限を別々に付与する必要があります。 また、監査の面では不十分ですが、あるロールとしてタスクを実行するユーザーはすべて、1つのユーザー・アカウント(そのロールのためのもので、必要な権限が付与されている)を共有することもあります。

2.2 スキーマの移行

スキーマには、表、ビュー、索引、ユーザー、制約、ストアド・プロシージャ、トリガーおよびその他のデータベース固有のオブジェクトの定義が含まれています。 リレーショナル・データベースのほとんどは、類似したオブジェクトとともに動作します。

この項の内容は次のとおりです。

2.2.1 スキーマ・オブジェクトの類似点

OracleとMySQLのスキーマ・オブジェクトには多くの類似点があります。 ただし、これらのデータベース間で異なるスキーマ・オブジェクトもあります。 スキーマ・オブジェクトの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

表2-1に、OracleとMySQLの相違点を示します。

表2-1 OracleとMySQLのスキーマ・オブジェクト

Oracle MySQL

AFTERトリガー

トリガー

BEFOREトリガー

トリガー

チェック制約

チェック制約

列のデフォルト

列のデフォルト

データベース

データベース

外部キー

外部キー

索引

索引

パッケージ

該当なし

PL/SQLファンクション

ルーチン

PL/SQLプロシージャ

ルーチン

主キー

主キー

ロール

該当なし

スキーマ

スキーマ

順序

列のAUTO_INCREMENT

スナップショット

該当なし

シノニム

該当なし

表領域

該当なし

一時表

一時表

各行のトリガー

各行のトリガー

一意キー

一意キー

ユーザー

ユーザー

ビュー

ビュー


2.2.2 スキーマ・オブジェクト名

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つ以上の他の特性で一意のスキーマ・オブジェクト名を選択し、オブジェクト名がいずれのデータベースの予約語でもないようにする必要があります。

2.2.3 表設計時の考慮事項

この項では、MySQLデータベースをOracleに変換する際に考慮する必要がある表設計の問題について説明します。 この項の内容は次のとおりです。

2.2.3.1 文字データ型

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データ型の列に変換されます。

2.2.3.2 列のデフォルト値

NULL値が許可されない列のデフォルト値の処理方法は、MySQLとOracleでは異なります。

MySQLの場合、NULL値が許可されない列と、データが表に挿入される際にデータが提供されない列に対して、列のデフォルト値が決定されます。 このデフォルト値は、列のデータ型に対する暗黙的なデフォルト値です。 ただし、STRICTモードが有効になっていると、MySQLではエラーが生成され、トランザクション表に対してINSERT文がロールバックされます。

Oracleの場合、表にデータを挿入する際に、NULL値を許可しないすべての列にデータを指定する必要があります。 Oracleでは、NOT NULL制約が設定されている列のデフォルト値は生成されません。

2.2.4 複数のデータベースの移行

SQL Developerでは、複数のMySQLデータベースが同じMySQLデータベース・サーバー上にある場合の移行がサポートされています。

2.2.5 MySQLのスキーマ移行時の考慮事項

MySQLのスキーマ移行時の考慮事項は、次の領域に適用されます。

2.2.5.1 データベース

MySQLデータベースをOracleに移行する際に、SQL Developerは、各MySQLデータベースをOracleの表領域にマップします。 表、索引、ビューなどのデータベース・オブジェクトは、それぞれの表領域に格納され、それらを所有するユーザーのOracleスキーマから参照されます。

2.2.5.2 MySQLのグローバルおよびデータベース・レベル権限の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 ANT 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


2.2.5.3 一時表

SQL Developerでは、一時表の移行はサポートされません。

MySQLでは、一時表は、現行のユーザー・セッションのみで参照可能であり、ユーザー・セッションが終了すると自動的に削除されるデータベース・オブジェクトです。

一度作成された一時表は明示的に削除されるまで存在し、適切な権限を持つすべてのセッションで参照可能であるという点で、Oracleの一時表の定義は、MySQLと若干異なります。 ただし、一時表のデータは、表にデータを挿入するユーザー・セッションのみで参照可能であり、トランザクションまたはユーザー・セッションの存続中はデータが保持される場合があります。

2.2.5.4 スキーマ・オブジェクトの所有者

SQL Developerでは、移行されるすべてのデータベースについて、ストアド・プロシージャを除いたすべてのデータベース・オブジェクトを所有するMySQLルート・ユーザーのOracleスキーマが作成されます。 ストアド・プロシージャの場合、それらを作成したMySQLユーザーが引き続き所有者となります。 SQL Developerでは、移行されるMySQLユーザーごとにOracleスキーマが作成されます。

2.3 データ型

この項では、Oracleで使用されるデータ型について説明します。MySQLデータ型および同等のOracleデータ型を示します。この章の内容は、次のとおりです。

2.3.1 サポートされているOracleデータ型

表2-3に、Oracle SQL DeveloperでサポートされているOracleデータ型を示します。

表2-3 サポートされている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.3.2 デフォルトのデータ型マッピング

表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内のマップされた列で使用可能になるように、これらの列に制約とトリガーが追加されます。

2.3.3 データ型の比較

この項では、MySQLデータ型とOracleデータ型の違いを示します。一部のMySQLデータ型には、複数の代替Oracleデータ型が存在します。この表の内容は、次のとおりです。

2.3.3.1 数値型

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)

2.3.3.2 日時型

次の表では、MySQLとOracleの日時型を比較しています。

MySQL サイズ Oracle
DATE 3バイト DATE
DATETIME 8バイト DATE
TIMESTAMP 4バイト DATE
TIME 3バイト DATE
YEAR 1バイト NUMBER

2.3.3.3 文字列型

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

2.4 データ記憶域の概念

この項では、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表領域で構成されています。 Oracle Databaseは、ユーザー定義表領域でも構成できます。 表領域は、データベース・オブジェクトの論理的な格納場所です。 たとえば、特定の表または索引が作成される表領域内の場所を指定できます。