レプリケーション環境におけるSQLコマンドの違い

レプリケーション環境では、標準の Netezza® SQLコマンドの一部に違いがあります。 その違いには、構文や動作の変化が含まれる。 Netezza SQLコマンドの完全なリファレンスについては、 データベースのユーザーマニュアルを参照してください。
Netezza SQLをレプリケーションで使用する場合は、次のルールが適用されます:
  • プライマリでSQLコマンドを実行する必要があります。
  • レプリカでは、レプリケートされたオブジェクト(DDL、DML、データベース・テーブル、シーケンス)への変更はトランザクションを中断させます。 一時テーブルはレプリケートされたオブジェクトとはみなされないため、変更することができる。
  • 複製されていないデータベースやシステム・データベースのデータを含む、すべてのデータ参照がサポートされています。 レプリケートされないデータへの参照は、値によるレプリケーションを引き起こす。

さらに、非決定性ステートメントは、バイ・バリュー・レプリケーション(変更値レプリケーション)を使用して処理される。

SQLコマンドはレプリケーション内で実行されると、3つの結果のいずれかになります:
  • 複製:コマンドはプライマリで実行され、レプリカで再生される
  • レプリケートされない:コマンドはプライマリまたはレプリカで実行されるが、別のノードでは再生されない
  • サポートされていない:コマンドの実行がブロックされる
以下の表は、レプリケーションの影響を受けるSQLコマンドの一覧と説明です。
表 1. レプリケーションの影響を受けるSQLコマンド
コマンド ノート 関連資料
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 CATEGORYALTER CATEGORY、およびDROP CATEGORY マルチレベル・セキュリティに関連するグローバル・オブジェクトがある。 グローバル・オブジェクト
CREATE COHORT ALTER COHORTDROP COHORT マルチレベル・セキュリティに関連するグローバル・オブジェクトがある。 グローバル・オブジェクト
CREATE DATABASE REPLICATION SET CREATE DATABASE コマンドのサブコマンドで、プライマリで発行されると新しい複製データベースを作成します。 新しい複製データベースの作成
CREATE EXTERNAL TABLE レプリカ上でコマンドを実行すると、外部ファイルが作成されるが、これはプライマリ上に存在した正確なファイルではない。 ディレクトリ・パスはレプリカ上に存在しなければならない。そうでない場合、レプリケーションは中断される。 外部テーブルの作成
CREATE [OR REPLACE] FUNCTIONALTER FUNCTION、およびDROP FUNCTION DETERMINISTIC または NOT DETERMINISTIC オプションを指定できる。 NOT DETERMINISTIC オプションを指定すると、関数が呼び出されたときに値によるレプリケーションが選択される。 同期
CREATE GROUPALTER GROUP、およびDROP GROUP グローバルオブジェクト。 グローバル・オブジェクト
CREATE HISTORY CONFIGURATION ALTER HISTORY CONFIGURATION DROP HISTORY CONFIGURATION SET HISTORY CONFIGURATION ヒストリー・コンフィギュレーション関連のコマンドは複製されない。 レプリケーション・セット内のノードは、異なる、または有効でないヒストリ設定を持つことができます。  
CREATE [OR REPLACE] LIBRARYALTER LIBRARY、およびDROP LIBRARY ユーザー定義ライブラリはデータベース内のオブジェクトです。 コマンドは、ホストとSPU上でライブラリコードを実行するために使用されるファイルシステム上のコンパイル済みオブジェクトを特定する2つの句、 EXTERNAL HOST OBJECTEXTERNAL SPU OBJECT を取る。 複製されたデータベース内の各ライブラリ(オプションの依存ライブラリを含む)とコンパイルされたオブジェクトを定義する必要があります。  
CREATE MATERIALIZED VIEW CREATE VIEWを参照してください。  
CREATE PROCEDUREALTER PROCEDURE、およびDROP PROCEDURE   ストアドプロシージャのレプリケーション
CREATE SECURITY LEVELALTER SECURITY LEVEL、およびDROP SECURITY LEVEL マルチレベル・セキュリティに関連するグローバル・オブジェクト。 グローバル・オブジェクト
CREATE SEQUENCEALTER SEQUENCE、およびDROP SEQUENCE バイ・バリュー・レプリケーションが使用される。 シーケンスの一貫性
CREATE SYNONYMALTER SYNONYM、およびDROP SYNONYM データベースをまたがる同義語を作成できます。 バイ・バリュー・レプリケーションは、非レプリケーション・テーブルへの参照に使用されます。  
CREATE TABLEALTER TABLE、およびDROP TABLE コマンドは、レプリケートされたデータベース内の一時的でないテーブルに対してのみレプリケートされます。  
CREATE TABLE AS SELECT レプリケーションは、参照されるすべてのオブジェクトがレプリケーション・セットのメンバーであるかどうかによって、SQLまたは値によって行われる。  
CREATE TEMPORARY TABLE 一時テーブルは、プライマリ上のレプリケートされたデータベースでも、レプリケートされていないデータベースでも、同じように動作する。 一時テーブルはレプリケーション・セット・メンバー・オブジェクトではなく、一時テーブルへの参照は値によるレプリケーションになります。 SQLレプリケーションの実装ルール
CREATE USERALTER 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 、レプリカ上のレプリケートされたデータベースに対してコマンドを発行できますが、コマンドはレプリケートされません。 レプリカ上のレプリケートされたテーブルに対してコマンドを発行しても、プライマリからの後続のレプリケートされたトランザクションやレプリカ上の現在のトランザクションが表示する必要のある削除されたレコードはパージされません。
 
INSERTUPDATE、および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 コマンドは明示的なトランザクションの一部であることはできない。 プライマリで実行した場合、データベースがレプリケートされていれば、コマンドはレプリケートされる。