レプリケーション環境におけるSQLコマンドの違い
- プライマリでSQLコマンドを実行する必要があります。
- レプリカでは、レプリケートされたオブジェクト(DDL、DML、データベース・テーブル、シーケンス)への変更はトランザクションを中断させます。 一時テーブルはレプリケートされたオブジェクトとはみなされないため、変更することができる。
- 複製されていないデータベースやシステム・データベースのデータを含む、すべてのデータ参照がサポートされています。 レプリケートされないデータへの参照は、値によるレプリケーションを引き起こす。
さらに、非決定性ステートメントは、バイ・バリュー・レプリケーション(変更値レプリケーション)を使用して処理される。
- 複製:コマンドはプライマリで実行され、レプリカで再生される
- レプリケートされない:コマンドはプライマリまたはレプリカで実行されるが、別のノードでは再生されない
- サポートされていない:コマンドの実行がブロックされる
| コマンド | ノート | 関連資料 |
|---|---|---|
| ALTER DATABASE | このコマンドは、レプリケートされたデータベースまたはSYSTEMデータベースへのセッション接続からのみ実行できます。 プライマリでレプリケートされたデータベースでは、 ALTER DATABASE コマンドがレプリカにレプリケートされます。 レプリカでは、 ALTER DATABASE コマンドは複製されていないデータベースでのみ許可されます。 | CREATE DATABASE コマンド |
| BEGIN およびCOMMIT | グローバルまたはレプリケートされたオブジェクトに影響する更新クエリ(対応する BEGIN および COMMIT コマンド)を含むトランザクションはレプリケートされます。 更新クエリーを伴わないトランザクション(読み取り専用で、データベースに変更を加えないもの)はそうではない。 | ROLLBACK コマンド |
| CALL EXEC EXECUTE ストアドプロシージャ SELECT | SQL単位または値単位のレプリケーションは、ストアド プロシージャによって参照されるすべてのオブジェクトがレプリケーション セットのメンバーであるかどうかに基づいて選択されます。 | ストアドプロシージャのレプリケーション |
| COPY FROM | このコマンドはサポートされていません。 | |
| CREATE AGGREGATE, CREATE [OR REPLACE] AGGREGATE, DROP AGGREGATE | すべてのユーザー定義集約(および変更できないシステムウィンドウ集約関数)は、値ごとのレプリケーションを使用する。 | |
| CREATE CATEGORY、ALTER CATEGORY、およびDROP CATEGORY | マルチレベル・セキュリティに関連するグローバル・オブジェクトがある。 | グローバル・オブジェクト |
| CREATE COHORT ALTER COHORTDROP COHORT | マルチレベル・セキュリティに関連するグローバル・オブジェクトがある。 | グローバル・オブジェクト |
| CREATE DATABASE REPLICATION SET | CREATE DATABASE コマンドのサブコマンドで、プライマリで発行されると新しい複製データベースを作成します。 | 新しい複製データベースの作成 |
| CREATE EXTERNAL TABLE | レプリカ上でコマンドを実行すると、外部ファイルが作成されるが、これはプライマリ上に存在した正確なファイルではない。 ディレクトリ・パスはレプリカ上に存在しなければならない。そうでない場合、レプリケーションは中断される。 | 外部テーブルの作成 |
| CREATE [OR REPLACE] FUNCTION、ALTER FUNCTION、およびDROP FUNCTION | DETERMINISTIC または NOT DETERMINISTIC オプションを指定できる。 NOT DETERMINISTIC オプションを指定すると、関数が呼び出されたときに値によるレプリケーションが選択される。 | 同期 |
| CREATE GROUP、ALTER GROUP、およびDROP GROUP | グローバルオブジェクト。 | グローバル・オブジェクト |
| CREATE HISTORY CONFIGURATION ALTER HISTORY CONFIGURATION DROP HISTORY CONFIGURATION SET HISTORY CONFIGURATION | ヒストリー・コンフィギュレーション関連のコマンドは複製されない。 レプリケーション・セット内のノードは、異なる、または有効でないヒストリ設定を持つことができます。 | |
| CREATE [OR REPLACE] LIBRARY、ALTER LIBRARY、およびDROP LIBRARY | ユーザー定義ライブラリはデータベース内のオブジェクトです。 コマンドは、ホストとSPU上でライブラリコードを実行するために使用されるファイルシステム上のコンパイル済みオブジェクトを特定する2つの句、 EXTERNAL HOST OBJECT と EXTERNAL SPU OBJECT を取る。 複製されたデータベース内の各ライブラリ(オプションの依存ライブラリを含む)とコンパイルされたオブジェクトを定義する必要があります。 | |
| CREATE MATERIALIZED VIEW | CREATE VIEWを参照してください。 | |
| CREATE PROCEDURE、ALTER PROCEDURE、およびDROP PROCEDURE | ストアドプロシージャのレプリケーション | |
| CREATE SECURITY LEVEL、ALTER SECURITY LEVEL、およびDROP SECURITY LEVEL | マルチレベル・セキュリティに関連するグローバル・オブジェクト。 | グローバル・オブジェクト |
| CREATE SEQUENCE、ALTER SEQUENCE、およびDROP SEQUENCE | バイ・バリュー・レプリケーションが使用される。 | シーケンスの一貫性 |
| CREATE SYNONYM、ALTER SYNONYM、およびDROP SYNONYM | データベースをまたがる同義語を作成できます。 バイ・バリュー・レプリケーションは、非レプリケーション・テーブルへの参照に使用されます。 | |
| CREATE TABLE、ALTER TABLE、およびDROP TABLE | コマンドは、レプリケートされたデータベース内の一時的でないテーブルに対してのみレプリケートされます。 | |
| CREATE TABLE AS SELECT | レプリケーションは、参照されるすべてのオブジェクトがレプリケーション・セットのメンバーであるかどうかによって、SQLまたは値によって行われる。 | |
| CREATE TEMPORARY TABLE | 一時テーブルは、プライマリ上のレプリケートされたデータベースでも、レプリケートされていないデータベースでも、同じように動作する。 一時テーブルはレプリケーション・セット・メンバー・オブジェクトではなく、一時テーブルへの参照は値によるレプリケーションになります。 | SQLレプリケーションの実装ルール |
| CREATE USER、ALTER USER、およびDROP USER | ALTER USER adminコマンドの実行はローカル操作である。 このコマンドはどのノードでも実行でき、複製されることはない。 その他のユーザー操作はすべてプライマリーで行う必要があり、それらは他のグローバル・オブジェクトとレプリケートされる。 | |
| CREATE VIEWおよびCREATE [OR REPLACE] VIEW | このコマンドは、複製されたデータベース内のオブジェクトやシステム・オブジェクトを参照することができる。 複製されていないデータベースのオブジェクトを参照すると、コマンドは失敗します。 | レプリカ初期化時のビュー |
| DROP DATABASE | プライマリでレプリケートされたデータベースに対してコマンドを発行すると、セット内のすべてのレプリケーション・ノードでデータベースが削除されます。 レプリケートされたトランザクションの同時実行中にデータベースをドロップすると、デッドロックが発生する可能性があります。 セッションが接続されたままデータベースを削除すると、コマンドは失敗します。 | |
| EXECUTE ASおよびREVERT | レプリケートされたデータまたはグローバル・データに対するマルチステートメント更新トランザクションでは、コマンドはレプリケートされなければならない。 暗黙のトランザクションとして発行された場合は影響なし。 | |
| GRANTおよびREVOKE | 特権の付与と剥奪 | |
| GENERATE STATISTICS | このコマンドはデータを変更しませんが、クエリのパフォーマンスに影響を与えます。 NPS®の 7.2.0.4より前のリリースでは、プライマリでコマンドを発行すると常に複製されます。 NPS 7.2.0.4 以降では、プライマリでコマンドを発行し、 replrqm.cfg ファイルの replReplayMaintenance パラメータを true に設定すると、コマンドが複製されます。 このパラメータのデフォルト値は true です。 レプリカ上のレプリケートされたデータベースに対してコマンドを発行できますが、コマンドはレプリケートされません。 |
|
| GROOM TABLE | このコマンドはデータを変更しませんが、クエリのパフォーマンスに影響を与えます。 7.1.0.4-P2 および 7.2.0.3-P2より前のNPSリリースでは、 RECLAIM BACKUPSET <backupsetid> オプションを指定した複製 GROOM TABLE コマンドによってレプリカが一時停止します。 NPS 7.1.0.4-P2 および 7.2.0.3-P2 以降では、 RECLAIM BACKUPSET <backupsetid> オプション付きのレプリケートされた GROOM TABLE コマンドは、 RECLAIM BACKUPSET <backupsetid> オプションなしの GROOM TABLE コマンドとして扱われます。 NPS 7.2.0.4 以降では、 GROOM TABLE コマンドをプライマリで発行し、 replrqm.cfg ファイル内の replReplayMaintenance パラメータを true に設定すると、 コマンドが複製されます。 このパラメータのデフォルト値は true です。 GROOM TABLE 、レプリカ上のレプリケートされたデータベースに対してコマンドを発行できますが、コマンドはレプリケートされません。 レプリカ上のレプリケートされたテーブルに対してコマンドを発行しても、プライマリからの後続のレプリケートされたトランザクションやレプリカ上の現在のトランザクションが表示する必要のある削除されたレコードはパージされません。 |
|
| INSERT、UPDATE、およびDELETE | 一時テーブルや外部テーブル(unload)を対象とする場合を除き、レプリケートされているデータベースに適用されたコマンドはレプリケートされます。 このコマンドは、複製されていないデータベースまたは複製されたデータベースの一時テーブルでのみ許可されます。 アンロードはプライマリでもレプリカでも記録されないので、レプリカでも許可される。 | |
| LOCK DATABASE ステートメント | LOCK DATABASE文はレプリケートされないが、トランザクションのデッドロックやアボートを防ぐためにプライマリで許可される。 | |
| LOCK TABLE ステートメント | レプリケートされたデータベース内のテーブルを含め、レプリケートされない。 | LOCK TABLE ステートメントと IBM Netezza Database User's Guide を参照してください。 |
| ROLLBACK | 複製されない。 | BEGINおよびCOMMIT |
| SELECT 照会 | SELECTを含む暗黙トランザクション、読み取り専用トランザクション、および読み取り/書き込みトランザクションの一部であるSELECT文はレプリケートされない。 | |
| SET および ステートメント RESET | いくつかの例外を除き、プライマリとレプリカの間でセッションの状態が保持されないため、レプリケートされない。 | NPSセッション変数 |
| SHOW ステートメント | 再現性はない。 | |
| TRUNCATE TABLE | コマンドは明示的なトランザクションの一部であることはできない。 プライマリで実行した場合、データベースがレプリケートされていれば、コマンドはレプリケートされる。 |