12. Slony-I レプリケーションからの諸々の削除

Slony-I レプリケーションから物事を削除することに係わった、やりたいことがいくつかあると思います。

12.1. 全てのノードの削除

レプリケーションから全体のノードを削除したいと願うのであれば、slonik コマンド DROP NODE が扱います。

これは Slony-I にトリガーを取り去りさせ(一般的にはデータの更新機能を拒絶する)、"ネイティブ"トリガーを復旧し、Slony-I で使われたスキーマを削除し、そして、そのノードの slon プロセスを自身で停止させます。

結果として、データベースは、アプリケーションが利用する際の如何なる用途でも使用できるようになります。

実質的な破壊の原因となる考慮すべき可能性を秘めた、非常に重大な操作です。適切なノードの削除を確認してください。

削除を試みるノードをサブスクライブするなんらかのノードが存在する場合、操作は失敗しますので、エラーから保護するちょっとした自動安全制御があります。

もしも 1.0.5 以前のバージョンを稼働させている場合は、sl_confirm 上で行われる必要がある追加の保守に関して、 sl_log_1 がパージされない ドキュメントがあります。

12.2. 全体のセットの削除

特定のレプリケーションセットのレプリケーションを停止したい場合は、slonik コマンドDROP SETの使用が必要です。

DROP NODE とほぼ同じように、これで、Slony-I はテーブル上の Slony-I トリガを削除し、"ネイティブ"トリガーを復旧します。1 つの差異は、1 つのノードだけではなく、クラスタ内の全てのノードが対象となります。他の差異として、他のセットがサービス中の可能性があるので、Slony-I クラスタの名前空間を消去しません。

同じ様な"自動安全制御"が存在しないので、この操作は DROP NODE よりも少しですが危険です。DROP SET不都合なセットを削除するように指示すると、履歴制限の"不幸な結果"を潜在的に防ぐ何物も無くなります。注意して扱ってください。

12.3. 1 つのセットから 1 つのノードのサブスクライブ中止

UNSUBSCRIBE SET 操作は、DROP SET もしくは DROP NODE よりも多少侵略的ではありません。これは 1 つのレプリケーションセットに対し、1 つのノード上の Slony-I トリガーを削除し、"ネイティブ"トリガーを復旧することに係わっています。

DROP NODE と同じ様に、この操作はこのノード上のセットをサブスクライブしているノードがある場合失敗します。

警告

上記の全ての操作に対して、"レプリケーションを元に戻す"にはプロバイダ上の完全な新しいデータの中にノードのコピーが必要です。データが最近レプリケートされたという事実だけでは充分でありません。Slony-I はデータの一から再書き込みを予期しています。

12.4. セットからテーブルの削除

Slony-I 1.0.5 およびそれ以降には、ユーザにレプリケーションセット全体を削除させずに、レプリケーションから単一のテーブルを削除させる、Slonik コマンド SET DROP TABLE があります。

それ以前のバージョンの場合、これを行うための"巧妙なやりかた"があります。

削除したいテーブルのテーブル識別番号を見つけるため、手作業でいろいろ操作します。識別番号は sl_table にあります。そして、以下の 3 つの問い合わせを走らせます。

  select _slonyschema.alterTableRestore(40);
  select _slonyschema.tableDropKey(40);
  delete from _slonyschema.sl_table where tab_id = 40;

スキーマは明らかにどのように Slony-I クラスタを定義したかに依存します。

これら 3 つの問い合わせを全てのノードで走らせなければならず、できることなら、削除の伝播が適切に行われるように、最初にオリジンノード行います。これを新規の Slony-I 事象付きの slonik 命令文で実装します。EXECUTE SCRIPT を使用して 3 つの問い合わせを発行することで行えます。より詳細は 項14 を参照してください。更に、それぞれのデータベースに接続し、問い合わせを手作業で発行することでも可能です。

12.5. あるセットからあるシーケンスを削除

SET DROP TABLE と同じ様に、バージョン 1.0.5 では SET DROP SEQUENCE の操作が導入されています。

初期のころのバージョンを稼働している場合、どのようにしてシーケンスを削除するかの指図は以下です。

シーケンス識別番号 93 と 59 で識別される 2 つのシーケンスを継続してレプリケートしている Slony-I を停止するのに削除必要なデータ。

delete from _oxrsorg.sl_seqlog where seql_seqid in (93, 59);
delete from _oxrsorg.sl_sequence where seq_id in (93,59);

これらの 2 つの問い合わせは全てのノードに schemadocddlscript( integer, text, integer ) / EXECUTE SCRIPT を介して発行されます。そうすると、"一瞬にして"あらゆる所のシーケンスが削除されます。さもなければ、それぞれのノードに対して手作業で適用します。