このドキュメントは、Oracle® 11g/12c データベースから Cloud SQL for MySQL バージョン 5.7 の第 2 世代インスタンスへの移行を計画し、実施する際に必要な情報とガイダンスを提供するシリーズの一つです。このシリーズは次のパートから構成されています。
- Oracle ユーザーの Cloud SQL for MySQL への移行: 用語と機能(このドキュメント)
- Oracle から Cloud SQL for MySQL への移行: データ型、ユーザー、テーブル
- Oracle から Cloud SQL for MySQL への移行: クエリ、ストアド プロシージャ、関数、トリガー
- Oracle から Cloud SQL for MySQL への移行: セキュリティ、オペレーション、モニタリング、ロギング
用語
このセクションでは、Oracle と Cloud SQL for MySQL のデータベース用語の類似点と相違点について説明します。また、それぞれのデータベース プラットフォームの主な要素を確認して比較します。この比較では、アーキテクチャ上の違いから Oracle バージョン 11g と 12c を区別しています(たとえば、Oracle 12c ではマルチテナント機能を導入しています)。ここで言及されている Cloud SQL for MySQL のバージョンは 5.7.x です。
Oracle 11g と Cloud SQL for MySQL の用語の違い
Oracle 11g | 説明 | Cloud SQL for MySQL | 主な違い |
---|---|---|---|
インスタンス | 1 つの Oracle 11g インスタンスで保持できるデータベースは 1 つのみです。 | インスタンス | 1 つの MySQL インスタンスで複数のデータベースを保持できます。 |
データベース | 1 つのデータベースが 1 つのインスタンスとみなされます(データベースの名前はインスタンス名と同じです)。 | データベース | 複数または 1 つのデータベースが複数のアプリケーションに対応します。 |
スキーマ | スキーマとユーザーはどちらもデータベース オブジェクトのオーナーとみなされるため、この 2 つは同義です(ユーザーの作成では、スキーマを指定したりユーザーをスキーマに割り当てたりする必要はありません)。 | スキーマ | スキーマはデータベースと呼ばれます。データベース オブジェクトは特定のスキーマ / データベースの下で作成されます。 |
ユーザー | 両方ともデータベース オブジェクトのオーナーであるため、スキーマと同義です(例: インスタンス → データベース → スキーマ/ユーザー → データベース オブジェクト)。 | ユーザー | 特定のスキーマ / データベースでデータベース オブジェクトに対して接続または変更する特定の権限が付与されたデータベース ユーザー(例: インスタンス → データベース / スキーマ → データベース オブジェクト)。 |
ロール | グループとして連結できる定義済みのデータベース権限一式。データベース ユーザーに割り当てることができます。 | MySQL 権限 | MySQL 5.7 ではロールの管理をサポートしていません。権限を構成するには、GRANT 句を使用して、データベース オブジェクトに対するさまざまなレベル(読み取りや書き込みなど)の権限をユーザーに付与します。 |
管理 / SYSTEM ユーザー | 以下の最高レベルのアクセス権限が割り当てられた Oracle 管理者ユーザー:SYS SYSTEM |
スーパー ユーザー | Cloud SQL for MySQL をデプロイすると、root@'%' ユーザー(任意のホストから接続可能)に加えて、ローカルホストからのみ接続できる mysql.sys という名前のユーザーが設定されます。 |
ディクショナリ / メタデータ | Oracle では以下のメタデータ テーブルを使用します。 USER_TableName ALL_TableName DBA_TableName |
ディクショナリ / メタデータ | MySQL ではディクショナリ / メタデータに以下のデータベース / スキーマを使用します。MYSQL INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
システムの動的ビュー | Oracle の動的ビュー: V$ViewName |
システムの動的ビュー | 以下のシステム データベースには MySQL 動的ビューがあります。INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
テーブルスペース | Oracle データベースのプライマリ論理ストレージ。テーブルスペースごとに 1 つ以上のデータファイルを格納できます。 | テーブルスペース | Oracle と同様に、MySQL テーブルスペースは論理ユニットですが、(複数のテーブルのデータを保持する)複数のデータファイルを格納できる Oracle のテーブルスペースとは異なり、1 つのテーブルのみを表します。 MySQL では、データファイルを割り当てた新しいテーブルスペースを作成してから、そのテーブルスペースに関連付ける新しいテーブルを作成できます。サイズ設定や上限などのテーブルスペース構成設定は、テーブルスペースの作成時に設定するのはなく、データベース パラメータを使用して設定します。 |
データファイル | データを保持し、特定のテーブルスペースで定義されている Oracle データベースの物理要素です。 データファイルは初期サイズと最大サイズによって定義され、1 つのデータファイルで複数のテーブルのデータを保持できます。 Oracle のデータファイルには .dbf 接尾辞が使用されます(必須ではありません)。 |
データファイル | Cloud SQL for MySQL では値を ON (デフォルト)に設定した innodb_file_per_table パラメータを使用します。この構成により、テーブルごとの新しいデータファイルと専用テーブルスペースが生成されます。MySQL データファイルには、 .ibd (データ)と .frm (メタデータ)ファイルが使用されます。 |
システム テーブルスペース | Oracle データベース全体のデータ ディクショナリ テーブルとビュー オブジェクトを格納します。 | システム テーブルスペース | Oracle と同じくディクショナリ / メタデータ テーブルを格納します。ibdata1 データファイルが関連付けられた innodb_system テーブルスペース内に保管されます。 |
一時テーブルスペース | セッション中に有効なスキーマ オブジェクトが含まれます。また、サーバーメモリに収まりきらない実行中のオペレーションもサポートします。 | 一時テーブルスペース | 目的は Oracle と同じであり、ibtmp1 データファイルが添付された MySQL innodb_temporary テーブルスペースに格納されます。 |
Undo テーブルスペース |
特殊なタイプのシステム永続テーブルスペース。自動 UNDO 管理モード(デフォルト)でデータベースを実行中にロールバック オペレーションを管理するために Oracle によって使用されます。 | Undo テーブルスペース | Oracle と同様に、MySQL の undo テーブルスペースにはロールバックを目的とした undo ログが格納されます。このオプションはデフォルトで OFF に設定されています。また、今後の MySQL リリースでは非推奨になります。 |
ASM | Oracle ASM(Automatic Storage Management)は、高パフォーマンスの統合データベース ファイル システムおよびディスク マネージャーです。ASM が構成された Oracle データベースでは、すべてのストレージ管理が自動的に行われます。 | サポート対象外 | MySQL では、さまざまなデータ処理の実装を表すストレージ エンジンという用語を使用しますが、Oracle ASM はサポートしていません。Cloud SQL for MySQL では、ストレージの自動増量、パフォーマンス、スケーラビリティなどのさまざまな機能によってストレージ管理を自動化できます。 |
テーブル / ビュー | ユーザーが作成する基本的なデータベース オブジェクト。 | テーブル / ビュー | Oracle と同じ。 |
マテリアライズド ビュー | 特定の SQL ステートメントを使用して定義します。手動で、または特定の構成に基づいて自動更新できます。 | MySQL ではサポート対象外 | Oracle のマテリアライズド ビューの代わりに、トリガー / ビューを使用できます。 |
シーケンス | Oracle 固有の値生成ツール。 | 自動増分 | MySQL は Oracle シーケンスをサポートしていません。自動シーケンス生成機能の代替ソリューションとして、AUTO_INCREMENT を使用します。 |
シノニム | 他のデータベース オブジェクトの代替識別子の役割を果たす、Oracle データベース オブジェクト。 | サポート対象外 | MySQL では Oracle シノニムをサポートしていません。適切な権限が設定されている間はビューを使用できます。 |
パーティショニング | Oracle では、大規模なテーブルを小さい複数のパーティションに分割して管理するためのパーティショニング ソリューションが多数用意されています。 | パーティショニング | Oracle に比べ、MySQL ではパフォーマンス向上を目的としたパーティショニングのサポートが限られていますが、Oracle パーティションのようなデータ管理とメンテナンスのオペレーションは保持されています。 |
フラッシュバック データベース | Oracle データベースを以前に定義した時間まで初期化するために使用できる Oracle 独自の機能。誤って変更または破損したデータをクエリまたは復元できます。 | サポート対象外 | 別の解決策として、Cloud SQL バックアップとポイントインタイム リカバリを使用して、データベースを以前の状態に復元できます(たとえば、テーブルをドロップする前に復元)。 |
sqlplus | Oracle のコマンドライン インターフェース。データベース インスタンスをクエリして管理できます。 | mysql | クエリと管理を行うための MySQL と同等のコマンドライン インターフェース。Cloud SQL に対して適切な権限を持つクライアントであれば、どのクライアントからでも接続できます。 |
PL/SQL | ANSI SQL を拡張した Oracle のプロシージャ言語。 | MySQL | MySQL には異なる構文と実装で独自に拡張したプロシージャ言語があります。この拡張言語には特に名前は付けられていません。 |
パッケージとパッケージの本文 | Oracle 固有の機能。ストアド プロシージャと関数を同じ論理参照にグループ化します。 | サポート対象外 | MySQL ではグループの割り当てを使用して、ストアド プロシージャと関数を 1 つのオブジェクトにまとめることができます。 |
ストアド プロシージャと関数 | PL/SQL を使用してコードの機能を実装します。 | ストアド プロシージャと関数 | MySQL では実装されている独自のプロシージャ言語を使用して、ストアド プロシージャと関数を作成できます。 |
トリガー | テーブルに対する DML 実装を制御する Oracle オブジェクト。 | トリガー | Oracle と同じ。 |
PFILE / SPFILE | Oracle のインスタンス レベルとデータベース レベルのパラメータは、SPFILE というバイナリ ファイルに格納されます(以前のバージョンでは PFILE と呼ばれていました)。パラメータの手動設定用テキスト ファイルとしてこれを使用できます。 |
Cloud SQL for MySQL データベース フラグ | データベース フラグ ユーティリティを使用して、Cloud SQL for MySQL のパラメータを設定または変更できます。MySQL クライアント コマンドライン インターフェース(mysql>
SET GLOBAL ... など)を使用して Cloud SQL for MySQL のデータベース パラメータを変更することはできません。これらのパラメータを変更するには、データベース フラグ ユーティリティを使用する必要があります。 |
SGA / PGA / AMM | データベース インスタンスへのメモリ割り当てを制御する、Oracle のメモリ パラメータ。 |
INNODB_BUFFER_POOL_SIZE
|
MySQL には独自のメモリ パラメータがあります。同等のパラメータは INNODB_BUFFER_POOL_SIZE です。Cloud SQL for MySQL では、このパラメータは選択したインスタンス タイプによって事前定義されています。パラメータ値はタイプに応じて変わります。 |
結果キャッシュ | SQL I/O オペレーションの数を減らすために、バッファ キャッシュから行を取得します。このキャッシュは、データべース パラメータとヒントを使用してセッション レベルで管理できます。 | クエリ キャッシュ | 基本的な目的は Oracle の結果キャッシュと同じです。このキャッシュは、データベース レベルとセッション レベルで管理できます。 |
データベース ヒント | パフォーマンスを高めるために、オプティマイザーの動作に影響を与える SQL ステートメントの処理方法を制御します。Oracle には 50 を超えるデータベース ヒントがあります。 | データベース ヒント | Oracle と比較すると、MySQL でサポートされているデータベース ヒントの数は限られています(オプティマイザー ヒントとインデックス ヒント)。MySQL では異なるデータベース ヒント、構文、命名が使用されます。 |
RMAN | Oracle Recovery Manager ユーティリティ。複数の障害復旧シナリオやクローン作成などをサポートする拡張機能を使用して、データベース バックアップを作成できます。 | Cloud SQL for MySQL のバックアップ | Cloud SQL for MySQL では、オンデマンド バックアップと自動バックアップの 2 つの方法で完全バックアップを適用できます。 |
データパンプ(EXPDP/IMDP) | エクスポート / インポート、データベースのバックアップ(スキーマまたはオブジェクト レベル)、スキーマ メタデータ、スキーマ SQL ファイルの生成など、さまざまな機能に使用できる Oracle ダンプ生成ユーティリティ。 | mysqldump/mysqlimport |
クライアントとして(リモートで)接続し、ダンプファイル(SQL)を生成できる MySQL ダンプ(エクスポート)ユーティリティ。後で、ダンプファイルを圧縮して Cloud Storage に移動できます。mysqldump ユーティリティの対象はエクスポート ステップのみです。 |
SQL*Loader | テキスト ファイルや CSV ファイルなどの外部ファイルからデータをアップロードできるツール。 | mysqlimport/ |
mysqlimport ユーティリティを使用して、対応する構造のデータベース テーブルにテキスト ファイルや CSV ファイル(Oracle では他のファイル形式もサポートしています)を読み込むことができます。 |
Data Guard | スタンバイ インスタンスを使用した、Oracle の障害復旧ソリューション。ユーザーはスタンバイ インスタンスから読み取りオペレーションを実行できます。 | Cloud SQL for MySQL の高可用性とレプリケーション | 障害復旧または高可用性を実現するために、Cloud SQL for MySQL ではフェイルオーバー レプリカ アーキテクチャを提供しています。また、(読み取りと書き込みを分離した)読み取り専用オペレーションにはリードレプリカを使用できます。 |
Active Data Guard/Golden Gate | Oracle の主要なレプリケーション ソリューション。スタンバイ(DR)、読み取り専用インスタンス、双方向レプリケーション(マルチソース)、データ ウェアハウジングなど、さまざまな目的で使用できます。 | Cloud SQL for MySQL のリードレプリカ | Cloud SQL for MySQL のリードレプリカは、読み取りと書き込みを分離したクラスタリングを実装します。現時点では、Golden Gate 双方向レプリケーションのようなマルチソース構成や、異種混合レプリケーションはサポートされていません。 |
RAC | Oracle Real Application Cluster。Oracle 独自のクラスタリング ソリューションであり、1 つのストレージ ユニットで複数のデータベース インスタンスをデプロイして高可用性を確保できます。 | サポート対象外 | マルチソース アーキテクチャは、Google Cloud の Cloud SQL ではまだサポートされていません。読み取りと書き込みが分離された高可用性クラスタリング アーキテクチャを実現するには、Cloud SQL の高可用性とリードレプリカを使用してください。 |
Grid / Cloud Control(OEM) | データべースおよびその他の関連するサービスをウェブ アプリケーションの形式で管理、モニタリングするための Oracle ソフトウェア。高負荷のワークロードを把握するためにリアルタイムでデータベースを分析する際に非常に便利です。 | Cloud SQL for MySQL Console、Cloud Monitoring | モニタリングに Cloud SQL for MySQL を使用できます。このコンソールでは、時間とリソースに基づく詳細なグラフも確認できます。また、高度なモニタリング機能を備えた Cloud Monitoring を使用して、特定の MySQL モニタリング指標を保持し、ログ分析を行うこともできます。 |
REDO ログ | 事前に割り当てられた 2 つ(またはそれ以上)の定義済みファイルで構成される Oracle のトランザクション ログ。データが変更されると変更内容が記録されます。REDO ログの目的は、インスタンスに障害が発生した場合にデータベースを保護することです。 | REDO ログ | MySQL にも REDO ログファイルがあります。これらのファイルは障害復旧時に使用され、不完全なトランザクション REDO ログメカニズムによって書き込まれたデータが修正されます。 |
アーカイブログ | アーカイブログでは、バックアップやレプリケーションのオペレーションなどがサポートされています。各 REDO ログ切り替えオペレーションが完了するたびに、Oracle によってアーカイブログ(有効になっている場合)への書き込みが行われます。 | binlog | 主にレプリケーション目的で使用される、MySQL のトランザクション ログ保持の実装(Cloud SQL ではデフォルトで有効にされます)。 |
制御ファイル | Oracle の制御ファイルは、データベースに関する情報を保持します。具体的には、データファイルと REDO ログの名前と場所、現在のログシーケンス番号、インスタンス チェックポイントに関する情報などです。 | MySQL | MySQL アーキテクチャには Oracle で実装しているような制御ファイルは含まれていません。これは、MySQL パラメータと SHOW MASTER STATUS コマンドを使用して現在のバイナリログの位置を確認することで制御されます。 |
SCN | Oracle SCN(システム変更番号)。SCN を使用するとすべての Oracle データベース コンポーネントでデータの整合性を維持できるため、ACID モデルのトランザクションに対応できます。 | ログシーケンス番号 | データベースの整合性を確保するための MySQL 実装では、LSN(ログシーケンス番号)を使用します。 |
AWR | Oracle AWR(自動ワークロード リポジトリ)は、Oracle データベース インスタンスのパフォーマンスに関する詳細レポートです。これは、パフォーマンスを診断するための DBA ツールとみなされています。 | performance_schema |
MySQL には、Oracle AWR に相当するレポートはありませんが、performance_schema で収集されたパフォーマンス データが収集されます。別のソリューションとして、MySQL Workbench のパフォーマンス ダッシュボードを使用することもできます。 |
DBMS_SCHEDULER |
事前定義されたオペレーションを設定して実行時間を決めるための Oracle ユーティリティ。 | EVENT_SCHEDULER |
MySQL データベースの内部スケジューラ機能。デフォルトでは、この機能は OFF に設定されています。 |
透過的データ暗号化 | 保存データを保護するために、ディスクに保存されているデータを暗号化します。 | Cloud SQL AES(Advanced Encryption Standard) | Cloud SQL for MySQL では 256 ビットの Advanced Encryption Standard(AES-256)を使用して、保存データだけではなく、転送中のデータもセキュリティで保護します。 |
Advanced Compression | データベースのストレージ フットプリントを改善して、ストレージ コストを削減し、データベースのパフォーマンスを向上させるために、Oracle はデータ(テーブル / インデックス)の高度な圧縮機能として Advanced Compression を提供しています。 | InnoDB テーブル圧縮 | MySQL では、テーブルの作成時に ROW_FORMAT パラメータを COMPRESSED に設定することで、テーブルを圧縮できます。詳しくは、インデックスの圧縮をご覧ください。 |
SQL Developer | 無料で使用できる Oracle の SQL GUI。SQL ステートメントと PL/SQL ステートメントを管理、実行できます(MySQL でも使用できます)。 | MySQL Workbench | 無料で使用できる MySQL の SQL GUI。SQL コードと MySQL コードのステートメントを管理、実行できます。 |
アラートログ | 一般的なデータベース オペレーションとエラーが記録される、Oracle のメインログ。 | MySQL エラーログ | Cloud Logging のログビューアを使用して MySQL エラーログを監視する |
DUAL テーブル |
主に SYSDATE や USER などの疑似列の値を取得するために保持される、Oracle の特殊なテーブル。 |
DUAL テーブル | MySQL では、どのテーブルのデータにも依存しない SQL ステートメントで、テーブルに DUAL を指定できます。 |
外部テーブル | Oracle では、データベースの外部にあるファイルのデータをソースとする外部テーブルを作成できます。 | サポートされていません。 | 同等のものはありません。 |
リスナー | 受信データベース接続をリッスンする役割を果たす Oracle ネットワーク プロセス。 | Cloud SQL 承認済みネットワーク | MySQL は、Cloud SQL の [承認済みネットワーク] 構成ページで許可されると、リモートソースからの接続を受け入れます。 |
TNSNAMES | Oracle のネットワーク構成ファイル。接続エイリアスを使用して接続を確立するためのデータベース アドレスを定義します。 | 存在しません | MySQL は、Cloud SQL インスタンス接続名またはプライベート / パブリック IP アドレスを使用した外部接続を受け入れます。Cloud SQL Proxy を安全なアクセス手段として使用すると、特定の IP アドレスを許可したり SSL を構成したりせずに、Cloud SQL for MySQL(第 2 世代インスタンス)に接続できます。 |
インスタンスのデフォルト ポート | 1521 | インスタンスのデフォルト ポート | 3306 |
データベース リンク | ローカルやリモートのデータベース オブジェクトを操作するために使用できる、Oracle のスキーマ オブジェクト。 | サポート対象外 | 代わりにアプリケーション コードを使用してリモート データベースに接続し、データを取得します。 |
Oracle 12c と Cloud SQL for MySQL の用語の違い
Oracle 12c | 説明 | Cloud SQL for MySQL | 主な違い |
---|---|---|---|
インスタンス | Oracle 11g では 1 つの Oracle インスタンスが取得できるのは 1 つのデータベースのみですが、Oracle 12c ではマルチテナント機能が導入されたため、1 つの Oracle インスタンスが複数のデータベースをプラガブル データベース(PDB)として保持できます。 | インスタンス | Cloud SQL for MySQL では、さまざまな名前を付けた複数のデータベースを保持して、複数のサービスやアプリケーションに対応できます。 |
CDB | マルチテナント コンテナ データベース(CDB)では 1 つ以上の PDB をサポートでき、(すべての PDB に適用される)ロールなどの CDB グローバル オブジェクトを作成できます。 | MySQL インスタンス | MySQL インスタンスと Oracle CDB は同等です。どちらも PDB のシステム層を提供します。 |
PDB | PDB(プラガブル データベース)を使用すると、サービスやアプリケーションを互いに分離できます。PDB は移植可能なスキーマ コレクションとして使用できます。 | MySQL データベース / スキーマ | 1 つの MySQL データベースで、複数のサービスやアプリケーション、多数のデータベース ユーザーに対応できます。 |
セッション シーケンス | Oracle 12c 以降では、シーケンスの作成をセッション レベル(セッション内でのみ固有の値を返します)またはグローバル レベル(一時テーブルを作成する場合など)で行うことができます。 | 自動 増分 |
MySQL ではシーケンスがサポートされていませんが、代わりのソリューションとして AUTO_INCREMENT 列プロパティを使用できます。 |
Identity 列 | Oracle 12c の IDENTITY 型を使用すると、シーケンスが生成されてテーブル列に関連付けられます。手動で別個の Sequence オブジェクトを作成する必要はありません。 |
自動増分 | Oracle 12c の Identity 列(自動シーケンス生成機能に代わるソリューション)と同じ機能をシミュレートするには、AUTO_INCREMENT 列プロパティを使用します。 |
シャーディング | Oracle Sharding は、1 つの Oracle データベースを複数の小さいデータベース(シャード)に分割するソリューションです。OLTP 環境のスケーラビリティ、可用性、地理的分散を実現できます。 | (機能としては)サポート対象外 | MySQL には、シャーディング機能に相当するものはありません。シャーディングを実装するには、(データ プラットフォームとしての)MySQL とサポート アプリケーション層を使用します。 |
インメモリ データベース | Oracle には、OLTP ならびに混合ワークロードに対するデータベース パフォーマンスを改善できる一連の機能が用意されています。 | サポート対象外 | MySQL に同等の機能はありません。代わりに、Memorystore を使用できます。 |
リダクション | Oracle の高度なセキュリティ機能の 1 つ。リダクションでは、ユーザーやアプリケーションによって機密データが表示されないように列をマスクできます。 | サポート対象外 | MySQL に同等の機能はありません。 |
機能
Oracle 11g/12c データベースと Cloud SQL for MySQL データベースはそれぞれ異なるアーキテクチャ(インフラストラクチャと拡張プロシージャ言語)に基づいて機能しますが、どちらもリレーショナル データベースの同じ基本要素を共有しています。データベース オブジェクト、マルチユーザー同時実行ワークロード、トランザクション(ACID 互換性)をサポートしています。また、(ビジネスニーズに基づく)複数の分離レベルをサポートするロック競合も管理し、オンライン トランザクション処理(OLTP)オペレーションとオンライン分析処理(OLAP)に対応するリレーショナル データストアとしての継続的なアプリケーション要件にも対処しています。
次のセクションでは、Oracle と Cloud SQL for MySQL 間のいくつかの主な機能の相違点について説明します。場合によっては、必要に応じて、セクションには詳細な技術的な比較も含まれます。
既存のデータベースの作成と表示
Oracle 11g/12c | Cloud SQL for MySQL 5.7 |
---|---|
通常、Oracle Database
Creation Assistant(DBCA)ユーティリティを使用して、データベースを作成し、既存のものを表示します。手動で作成されたデータベースやインスタンスの場合、追加のパラメータを指定する必要があります。SQL> CREATE DATABASE ORADB USER SYS IDENTIFIED BY password USER SYSTEM IDENTIFIED BY password EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE temp UNDO TABLESPACE undotbs1 DEFAULT TABLESPACE users; |
次の例のように、CREATE DATABASE Name; という形式のステートメントを使用します。mysql> CREATE DATABASE MYSQLDB; |
Oracle 12c | Cloud SQL for MySQL 5.7 |
Oracle 12c では、コンテナ データベース(CDB)テンプレートから、または既存の PDB から PDB のクローンを作成して、PDB をシードから作成できます。いくつかのパラメータを使用します。SQL> CREATE PLUGGABLE DATABASE PDB ADMIN USER usr IDENTIFIED BY passwd ROLES = (dba) DEFAULT TABLESPACE sales DATAFILE '/disk1/ora/dbs/db/db.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/') STORAGE (MAXSIZE 2G) PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'; |
次の例のように、CREATE DATABASE Name; という形式のステートメントを使用します。mysql> CREATE DATABASE MYSQLDB; |
すべての PDB を一覧表示する:SQL> SHOW is PDBS; |
すべての既存データベースを一覧表示する:mysql> SHOW DATABASES; |
別の PDB に接続する:SQL> ALTER SESSION SET CONTAINER=pdb; |
別のデータベースに接続する:mysql> use databaseName; mysql> \u databaseName; |
特定の PDB を開く、または閉じる(オープン / 読み取り専用):SQL> ALTER PLUGGABLE DATABASE pdb CLOSE; |
単一のデータベースではサポートされていません。 すべてのデータベースが同じ Cloud SQL for MySQL インスタンスに属しており、起動するかダウンするかのどちらかです。 |
Cloud SQL コンソールを使用したデータベースの管理
Google Cloud コンソールで、[ストレージ] > [SQL] > [インスタンス] > [データベース] > [表示 / 作成] に移動します。
システム データベースとスキーマ
Oracle データベース インスタンスは特定のシステム スキーマを取得します(たとえば、データベース メタデータ オブジェクトのオーナーロールが割り当てられた SYS/SYSTEM
など)。
一方、MySQL は、Oracle スキーマとは対照的に以下の複数のシステム データベースを保持します。これらのシステム データベースはメタデータ層の役割を果たします(データベース名では大文字と小文字が区別されます)。
-
mysql
システム データベースは以下のテーブルを保持します。これらのテーブルには MySQL サーバーの実行時に必要な情報が格納されます。- システム権限テーブル
- オブジェクト情報テーブル
- ログシステム テーブル
- レプリケーション システム テーブル
- オプティマイザー システム テーブル
- タイムゾーン システム テーブル
-
INFORMATION_SCHEMA
は、メインのデータベース データ ディクショナリおよびシステム カタログとして機能します。データベースまたはテーブルの名前、列のデータ型、アクセス権限など、MySQL サーバーに関する内部データベース情報であるデータベース メタデータにアクセスできます。 -
MySQL インスタンスに関する統計情報を収集するシステム データベース。
performance_schema
システム データベースは、サーバー実行時のモニタリング指標を非常に詳細なレベルで保持します。スキーマは、実行時にサーバー内部の実行検査を行い、データベースのパフォーマンス問題を分析する際のメインソースとして利用できます。Cloud SQL for MySQL を使用する場合、
performance_schema
はデフォルトで無効になっています。スキーマを有効にするには、gcloud
コマンドライン ツールを使用します。gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
この構成を完了するには、インスタンスを再起動する必要があります。Google Cloud コンソールの Cloud SQL for MySQL データベース フラグ ページを使用して
--database-flags
パラメータを変更することはできません。 -
sys
スキーマは MySQL バージョン 5.5.7 で導入されました、主に、performance_schema
システム テーブルのビューを保持します。このスキーマは、performance_schema
データをよりわかりやすい形式にまとめた、一連の見やすいビューを提供します。sys
スキーマは、performance_schema
の構成や診断レポートの生成などのオペレーションを実行する複数のストアド プロシージャと関数も保持します。sys
スキーマは、performance_schema
が有効な場合にのみ情報を表示します。
メタデータとシステムの動的ビューの表示
このセクションでは、Oracle で使用される最も一般的なメタデータ テーブルとシステム動的ビューの一部と、Cloud SQL for MySQL バージョン 5.7 の対応するデータベース オブジェクトについて説明します。
Oracle ではシステム メタデータのテーブルとビューを数百種類提供していますが、MySQL には数十種類しかありません。いずれの場合も、特定の目的を果たすデータベース オブジェクトが複数存在する可能性があります。
Oracle のメタデータ オブジェクトには以下の複数のレベルがあり、レベルによって必要な権限が異なります。
USER_TableName
: ユーザーが表示できます。ALL_TableName
: すべてのユーザーが表示できます。DBA_TableName
:SYS
やSYSTEM
などの DBA 権限を持つユーザーのみが表示できます。
動的パフォーマンス ビューの場合、Oracle では V$
と GV$
の接頭辞が使用されます。MySQL ユーザーがシステム メタデータのテーブルやビューを表示するには、システム オブジェクトに対する特定の権限を取得する必要があります。セキュリティの詳細については、セキュリティをご覧ください。
メタデータの種類 | Oracle テーブル / ビュー | MySQL テーブル / ビュー / 表示(MySQL CMD) |
---|---|---|
オープン セッション | V$SESSION |
SHOW PROCESSLIST INFORMATION_SCHEMA.PROCESSLIST performance_schema.threads |
実行中のトランザクション | V$TRANSACTION |
INFORMATION_SCHEMA.INNODB_TRX |
データベース オブジェクト | DBA_OBJECTS |
サポートされていません。各オブジェクトをその種類でクエリします |
テーブル | DBA_TABLES |
INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.INNODB_SYS_TABLES |
テーブル列 | DBA_TAB_COLUMNS |
INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.INNODB_SYS_COLUMNS |
テーブルと列の権限 | TABLE_PRIVILEGES DBA_COL_PRIVS ROLE_TAB_PRIVS |
INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
パーティション | DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS |
INFORMATION_SCHEMA.PARTITIONS SHOW CREATE TABLE TableName SHOW TABLE STATUS LIKE 'TableName' |
ビュー | DBA_VIEWS |
INFORMATION_SCHEMA.VIEWS |
制約 | DBA_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS SHOW CREATE TABLE TableName |
インデックス | DBA_INDEXES DBA_PART_INDEXES |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.INNODB_SYS_INDEXES INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
マテリアライズド ビュー | DBA_MVIEWS |
サポート対象外 |
ストアド プロシージャ | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
ストアド ファンクション | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
トリガー | DBA_TRIGGERS |
INFORMATION_SCHEMA.TRIGGERS |
ユーザー | DBA_USERS |
mysql.user |
ユーザーの権限 | DBA_SYS_PRIVS DBA_ROLE_PRIVS SESSION_PRIVS |
INFORMATION_SCHEMA.USER_PRIVILEGES |
ジョブ / スケジューラ |
DBA_JOBS DBA_JOBS_RUNNING DBA_SCHEDULER_JOBS DBA_SCHEDULER_JOB_LOG |
INFORMATION_SCHEMA.EVENTS |
テーブルスペース | DBA_TABLESPACES |
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES |
データファイル | DBA_DATA_FILES |
INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.INNODB_SYS_DATAFILES |
シノニム | DBA_SYNONYMS |
サポート対象外 |
シーケンス | DBA_SEQUENCES |
サポート対象外 |
データベース リンク | DBA_DB_LINKS |
サポート対象外 |
統計情報 | DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.KEY_COLUMN_USAGE SHOW INDEXES FROM TableName |
ロック | DBA_LOCK DBA_DDL_LOCKS DBA_DML_LOCKS V$SESSION_BLOCKERS V$LOCKED_OBJECT |
INFORMATION_SCHEMA.INNODB_LOCKS INFORMATION_SCHEMA.INNODB_LOCK_WAITS INFORMATION_SCHEMA.INNODB_TRX performance_schema.metadata_locks performance_schema.rwlock_instances SHOW PROCESSLIST |
データベース パラメータ | V$PARAMETER V$NLS_PARAMETERS SHOW PARAMETER Param |
performance_schema.global_variables performance_schema.session_variables INFORMATION_SCHEMA.CHARACTER_SETS SHOW VARIABLES LIKE '%variable%'; |
セグメント | DBA_SEGMENTS |
セグメント表はサポートされていません。各オブジェクトをその種類でクエリします |
役割 | DBA_ROLES DBA_ROLE_PRIVS USER_ROLE_PRIVS |
Roles not supported use instead: information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES mysql.columns_priv mysql.procs_priv mysql.proxies_priv mysql.tables_priv |
セッション履歴 | V$ACTIVE_SESSION_HISTORY DBA_HIST_* |
sys.statement_analysis performance_schema.events_stages_history performance_schema.events_stages_history_long performance_schema.events_statements_history performance_schema.events_statements_history_long performance_schema.events_transactions_history performance_schema.events_transactions_history_long performance_schema.events_waits_history performance_schema.events_waits_history_long |
バージョン | V$VERSION |
sys.version SHOW VARIABLES LIKE '%version%'; |
待機イベント | V$WAITCLASSMETRIC V$WAITCLASSMETRIC_HISTORY V$WAITSTAT V$WAIT_CHAINS |
performance_schema.events_waits_current performance_schema.events_waits_history performance_schema.events_waits_history_long sys.innodb_lock_waits sys.io_global_by_wait_by_bytes sys.io_global_by_wait_by_latency sys.schema_table_lock_waits sys.wait_classes_global_by_avg_latency sys.wait_classes_global_by_latency sys.waits_by_host_by_latency sys.waits_by_user_by_latency sys.waits_global_by_latency |
SQL の調整と 分析 |
V$SQL V$SQLAREA V$SESS_IO V$SYSSTAT V$STATNAME V$OSSTAT V$ACTIVE_SESSION_HISTORY V$SESSION_WAIT V$SESSION_WAIT_CLASS V$SYSTEM_WAIT_CLASS V$LATCH V$SYS_OPTIMIZER_ENV V$SQL_PLAN V$SQL_PLAN_STATISTICS |
performance_schema.events_statements_current performance_schema.events_statements_history performance_schema.events_statements_history_long sys.statement_analysis sys.host_summary_by_statement_latency sys.host_summary_by_statement_type sys.statements_with_errors_or_warnings sys.statements_with_full_table_scans sys.statements_with_runtimes_in_95th_percentile sys.statements_with_sorting sys.statements_with_temp_tables sys.user_summary_by_statement_latency sys.user_summary_by_statement_type slow-query-log general-log SHOW STATUS LIKE '%StatusName%'; |
インスタンスの メモリ調整 |
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT |
information_schema.INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM performance_schema.memory_summary_by_account_by_event_name performance_schema.memory_summary_by_host_by_event_name performance_schema.memory_summary_by_thread_by_event_name performance_schema.memory_summary_by_user_by_event_name performance_schema.memory_summary_global_by_event_name performance_schema.replication_group_member_stats performance_schema.replication_group_members sys.memory_by_host_by_current_bytes sys.memory_by_thread_by_current_bytes sys.memory_by_user_by_current_bytes sys.memory_global_by_current_bytes sys.memory_global_total |
MySQL ストレージ エンジン
他の多くの RDBMS(Oracle を含む)とは異なり、MySQL はプラグイン対応ストレージ システムであるため、ポリモーフィックな形で機能できます。MySQL プラグイン対応ストレージ エンジン アーキテクチャでは、データベース管理者が特定のアプリケーションのニーズに特化したストレージ エンジンを選択できます。
MySQL データベース サーバー内の MySQL プラグイン対応ストレージ エンジン コンポーネントでは、データ I/O オペレーションが行われます。これには、ディスク / メモリバッファへのデータの保存も含まれます。プラグイン対応ストレージ エンジン アーキテクチャは、管理サービスとサポート サービスの標準セットを提供します。これらは、基礎となるすべてのストレージ エンジンで共通です。
MySQL バージョン 5.5 以降のデフォルトのストレージ エンジンは InnoDB ストレージ エンジンです。InnoDB は一時テーブルも処理します。次の例のように、テーブルの CREATE
または ALTER
の間にストレージ エンジンを構成できます。
mysql> SHOW CREATE TABLE JOBS \G;
次のような出力が表示されます。
*************************** 1. row *************************** Table: JOBS Create Table: CREATE TABLE `JOBS` ( `JOB_ID` varchar(10) NOT NULL, `JOB_TITLE` varchar(35) NOT NULL, `MIN_SALARY` decimal(6,0) DEFAULT NULL, `MAX_SALARY` decimal(6,0) DEFAULT NULL, PRIMARY KEY (`JOB_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
詳細については、MySQL の各種ストレージ エンジンをご覧ください。
ストレージ エンジンの構成を表示するには、次のクエリを使用します。
mysql> SHOW VARIABLES LIKE '%storage%';
出力は次のようになります。
+----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | enforce_storage_engine | Innodb | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+
すべての組み込みストレージ エンジンを表示するには、次のコマンドを実行します。
mysql> SHOW STORAGE ENGINES;
出力は次のようになります。
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
InnoDB はデフォルトのストレージ エンジンであり、トランザクション(ACID 準拠)をサポートする唯一のストレージ エンジンです。InnoDB は、Oracle の機能に近い唯一のストレージ エンジンであるため、常に InnoDB を使用することをおすすめします。Cloud SQL for MySQL 第 2 世代では、InnoDB ストレージ エンジンのみがサポートされています。
システム パラメータ
Oracle データベースと GCP Cloud SQL for MySQL データベースはどちらも、デフォルトでの構成だけでなく、特定の機能を果たすように明示的に構成できます。Oracle で構成パラメータを変更するには、特定の管理権限が必要です(主に SYS/SYSTEM
ユーザー権限)。
以下に、ALTER SYSTEM
ステートメントを使用して Oracle の構成を変更する例を示します。この例では、ユーザーは spfile
構成レベルでのみ「ログイン失敗時の最大試行回数」パラメータを変更しています(変更を適用するには、再起動が必要です)。
SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;
次の例では、Oracle パラメータ値の表示のみをリクエストしています。
SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
出力は次のようになります。
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sec_max_failed_login_attempts integer 2
Oracle パラメータの変更は、次の 3 つのスコープで適用されます。
- SPFILE: パラメータの変更は Oracle
spfile
にのみ書き込まれ、パラメータを有効にするにはインスタンスの再起動が必要です。 - MEMORY: パラメータの変更はメモリ層にのみ適用されます。ただし、静的パラメータの変更は許可されません。
- BOTH: パラメータの変更はサーバー パラメータ ファイルとインスタンス メモリの両方に適用されます。ただし、静的パラメータの変更は許可されません。
Cloud SQL for MySQL 構成フラグ
Cloud SQL for MySQL のシステム パラメータを変更するには、Google Cloud コンソールの構成フラグ、gcloud CLI、または CURL を使用します。Cloud SQL for MySQL でサポートされている変更可能なすべてのパラメータの全リストをご覧ください。
MySQL のパラメータは次のスコープに分類されます。
- 動的パラメータ: 実行時に変更できます。
- 静的パラメータ: 適用するにはインスタンスの再起動が必要です。
- グローバル パラメータ: 現在と将来のすべてのセッションに適用されます。
- セッション パラメータ: 現在のセッションの存続期間中に限り、他のセッションとは独立してセッション レベルで変更できます。
Cloud SQL for MySQL のメモリ パラメータ innodb_buffer_pool_size
(MySQL 環境の計画とサイズ設定で考慮すべき重要なパラメータの 1 つ)は、インスタンスのタイプによって決定されます。構成フラグや次のようなその他の方法で変更することはできません。
- インスタンス タイプ
db-n1-standard-1
のメモリ割り当ては 1.4 GB です。 - インスタンス タイプ
db-n1-highmem-8
のメモリ割り当ては 38 GB です。
Cloud SQL for MySQL パラメータを変更する例
コンソール
Google Cloud コンソールを使用して、event_scheduler
パラメータを有効にします。
Cloud Storage の [インスタンスの編集] ページに移動します。
次のスクリーンショットのように、[フラグ] で [項目を追加] をクリックし、
event_scheduler
を検索します。
gcloud
gcloud CLI を使用して、
event_scheduler
パラメータを有効にします。gcloud sql instances patch INSTANCE_NAME \ --database-flags event_scheduler=on
次のような出力が表示されます。
WARNING: This patch modifies database flag values, which may require your instance to be restarted. Check the list of supported flags - /sql/docs/mysql/flags - to see if your instance will be restarted when this patch is submitted. Do you want to continue (Y/n)?
MySQL セッション
セッション レベルで AUTOCOMMIT
モードを無効にします。この変更は現在のセッションにのみ適用され、セッションの存続期間中にのみ有効になります。
autocommit
のような変数を表示します:mysql> SHOW VARIABLES LIKE '%autoc%';
次の出力が表示されます。
autocommit
はON
です。+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+
autocommit
を無効にします:mysql> SET autocommit=off;
autocommit
のような変数を表示します:mysql> SHOW VARIABLES LIKE '%autoc%';
次の出力が表示されます。
autocommit
はOFF
です。+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
トランザクションと分離レベル
このセクションでは、トランザクション レベルと分離レベルの移行に関連する Oracle と Cloud SQL for MySQL の主な違いについて説明します。
Commit モード
Oracle はデフォルトで非自動 commit モードで動作します。各 DML トランザクションは COMMIT/ROLLBACK
ステートメントで確定される必要があります。Oracle と MySQL の基本的な相違の 1 つは、MySQL はデフォルトで自動 commit モードで動作し、各 DML トランザクションは COMMIT/ROLLBACK
ステートメントを明示的に指定して自動 commit されることです。
次の複数の方法で、MySQL を非自動 commit モードで動作させることができます。
- ストアド プロシージャのスコープ内でトランザクションを管理している場合は、
START TRANSACTION
句を使用して Oracle と同じトランザクション モードを開始します。 次のステートメントを使用して、セッション レベルで
autocommit
システム パラメータをOFF
に設定し、DML トランザクションでCOMMIT/ROLLBACK
ステートメントを明示的に使用します。mysql> SET autocommit=off;
分離レベル
ANSI / ISO SQL 標準(SQL92)では、4 つの分離レベルを定義しています。レベルによって、データベース トランザクションの同時実行を処理する方法が異なります。
- Read Uncommitted: 現在処理されているトランザクションで、他のトランザクションで確定されていないデータを参照できます。ロールバックが実行されると、すべてのデータが以前の状態に復元されます。
- Read Committed: トランザクションの実行中に参照できるのは、確定されたデータの変更のみです。確定されていないデータの変更は(「ダーティリード」)は参照できません。
- Repeatable Read: あるトランザクションの実行中に、他のトランザクションで行われた変更を参照できるのは、両方のトランザクションが
COMMIT
を発行した後、あるいは両方のトランザクションがロールバックされた後に限られます。 - Serializable: 最も厳格かつ強力な分離レベルです。このレベルでは、アクセスされたすべてのレコードがロックされ、レコードがテーブルに追加されないようにリソースがロックされます。
トランザクションの分離レベルにより、実行中の他のトランザクションに対する変更データの可視性が管理されます。また、複数の同時実行トランザクションで同じデータにアクセスする際にそれぞれのトランザクションがどのように相互作用するかも、選択した分離レベルによって異なります。
Oracle でサポートされている分離レベル
- Read Committed(デフォルト)
- Serializable
- Read-Only(ANSI/ISO SQL 標準(SQL92)には含まれていません)
Oracle MVCC(マルチバージョン同時実行制御)
- Oracle では MVCC メカニズムを使用して、データベース全体とすべてのセッションで自動読み取りの整合性を確保しています。
- Oracle は現在のトランザクションのシステム変更番号(SCN)を使用してデータベース ビューの整合性を確保します。したがって、すべてのデータベース クエリは、クエリが実行された時点で SCN に関して commit されているデータのみを返します。
- 分離レベルは、トランザクション レベルとセッション レベルで変更できます。
分離レベルの設定例を次に示します。
-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;
-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
Cloud SQL for MySQL は、Oracle と同様に、ANSI SQL:92 標準で指定されている次の 4 つのトランザクション分離レベルをサポートしています。
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ (default)
SERIALIZABLE
Cloud SQL for MySQL のデフォルトの分離レベルは REPEATABLE READ
です。新しいデータは、両方のトランザクションが COMMIT
コマンドを発行した後にのみ、両方で使用できます。これらの分離レベルは、SESSION
レベルと GLOBAL
レベルで変更できます(グローバル レベルの変更は現在、構成フラグを使用するベータ段階です)。
現在の分離レベルを SESSION
レベルと GLOBAL
レベルの両方で検証するには、次のステートメントを使用します。
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
次のような出力が表示されます。
+-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ | +-----------------------+-----------------+
分離レベルの構文は次のように変更できます。
SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]
分離レベルは SESSION
レベルで変更できます。
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- Verify
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
次のような出力が表示されます。
+-----------------------+------------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+------------------+ | REPEATABLE-READ | READ-UNCOMMITTED | +-----------------------+------------------+
Cloud SQL for MySQL のトランザクション構造
トランザクションの構文:
START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] |
---|
トランザクションは START TRANSACTION
または BEGIN
で実装できます。
WITH CONSISTENT SNAPSHOT
オプションにより、整合性のある READ
トランザクションが開始されます。このオプションは実質的に、SELECT
の後に任意のテーブルからの START TRANSACTION
を実行することと同じです。整合性のある READ
(スナップショット情報を使用して、その時点でのクエリ結果を表す READ
オペレーション)を開始する WITH CONSISTENT SNAPSHOT
句によって、トランザクションの分離レベルが変更されることはありません。この句は、REPEATABLE READ
分離レベルでのみサポートされます。
整合性のある READ
では、同時実行トランザクションによって行われた変更とは関係なく、スナップショット情報を使用して、その時点でのクエリ結果を使用可能にします。クエリ対象のデータが別のトランザクションによって変更されている場合、undo ログを使用して元のデータが再現されます。これは、同時実行性を損なう可能性のあるロックの問題を回避するのに役立ちます。
REPEATABLE READ
分離レベルでは、スナップショットは最初の READ
オペレーションが実行された時点に基づきます。READ COMMITTED
分離レベルでは、スナップショットはそれぞれの READ
オペレーションの時点にリセットされます。
トランザクションと分離レベルの設定の例を次に示します。
mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;