スイッチの使用法
InterSystems IRIS スイッチは、インスタンス単位のフラグで、さまざまな目的に使用できます。特に、バックアップの実行中やクラッシュしたシステムの回復中に、各種システム・プロセスを抑制する際に便利です。^SWSET ルーチンを使用して、スイッチの値を直接操作できます。
背景
InterSystems IRIS のスイッチの起源はマシンとの物理的な接点にあり、かつてはコンピュータのオペレータ・コンソールの一部として使用されたり、マイクロコンピュータのフロント・パネルに装備されていました。オペレータは、これらのスイッチの 1 つを設定することで、そのマシンで実行中のプログラムに 1 ビットの情報を送信できました。InterSystems IRIS では “仮想マシン” が実装されるため、マシンに対するスイッチの概念も同様に抽象化されています。
今日、InterSystems IRIS におけるスイッチとは、InterSystems IRIS インスタンスの共有メモリまたは共通メモリの個々のビット設定であり、すべての InterSystems IRIS プロセスから見えます。一部のスイッチはユーザに対して設定されますが、その大半は InterSystems IRIS 自体のオペレーションに影響を与えます。
Note:
ユーザはスイッチを InterSystems IRIS インスタンスに対してローカルに使用する必要があります。InterSystems IRIS 自体には特定の設定の意味をクラスタの他のメンバに伝播する機能がありますが、これらの機能はインターシステムズの内部使用にのみ制限されています。ユーザ・スイッチの値は、他のシステムに送信することはできません。
現在定義されているスイッチ
スイッチは、すべて番号によって識別されます。InterSystems IRIS の起動時、スイッチはゼロ (オフ) に初期化されます。次のテーブルは、スイッチの番号とその動作を示しています。
スイッチ |
意味/使用法 |
0 — 7 |
アプリケーション・プログラムで使用する目的で予約されています。 |
8 |
既存の InterSystems IRIS デーモンによるネットワーク要求に対する応答を抑制します。 |
9 |
ネットワーク・ログインを処理する新しいデーモンの作成を抑制します。 |
10 |
このスイッチを設定するプロセス以外によるすべてのグローバル・アクセスを抑制します。また、このプロセスを除き、ディスク入出力の原因となるルーチン・アクセスを抑制します。 |
11 |
このスイッチを設定するシステム・ジョブ以外によるすべてのグローバル・アクセスを抑制します。この設定はスイッチ 10 に優先し、システム用に予約されています。例えば、このスイッチは、コピー操作の前にシステムの動作を停止する目的でバックアップ・プロセスによって設定されます。 |
12 |
InterSystems IRIS へのログインを抑制します。ユーザがログインを試みると、"Sign-on and JOB inhibited: Switch 12 is set" というメッセージが表示されます。 |
13 |
すべてのグローバル SET、KILL、および ZSAVE コマンドを抑制し、グローバルとルーチンに対して読み取りアクセスのみを許可します。 |
14 |
すべてのグローバルおよびすべてのルーチンに対するすべてのアクセスを抑制します。 |
15 |
通常はスイッチ 10、13、または 14 によってアクセスが抑制される場合でも、ピアからのネットワーク参照を許可します。 |
16 |
シャットダウン操作を調整する目的で、InterSystems IRIS によって内部的に使用されます。 |
17 |
クラスタでのジャーナル・フラッシュの完了待機を回避します。 |
18 |
ブロックに対するキューが非常に長くなる場合は、追加プロセスの休止を抑制します。 |
19 |
新規トランザクションの開始を抑制します。 |
20 — 31 |
未定義で、インターシステムズ用に予約されています。 |
Caution:
インターシステムズの担当者またはドキュメントに記載されている手順によって具体的に指示される場合を除き、アプリケーションで使用するスイッチは、アプリケーション・プログラム用に予約されているスイッチ (スイッチ 0–7) に限定する必要があります。
スイッチの操作法
^SWSET ルーチンを使用して、スイッチの値を直接操作できます。また、クラスタ・システム上でのジャーナル操作やシステム・バックアップを行う機能など、他の InterSystems IRIS 機能でも呼び出し元に代わってスイッチの値を設定します。
SWSET ルーチン
このルーチンは、ターミナル・セッションなどからスイッチの値をインタラクティブに設定する方法を提供します。
備考
この後の例に示す方法でこのルーチンを呼び出すと、スイッチ番号とそのスイッチに設定する値 (0 または 1) の入力を求められます。
例
以下の例は、SWSET の使用法を示しています。実行すると、
DO ^SWSET
以下のような内容が順次表示されます。
Set/Clear switch #:
Set/Clear switch #: 2
Set/Clear switch #: 2 to value (0 or 1):
Set/Clear switch #: 2 to value (0 or 1): 1
Set/Clear switch #: 2 to value (0 or 1): 1...done
%swstat^SWSET 関数
この関数は、スイッチの現在の設定を返します。
備考
考えられる返り値として以下の 3 つがあります。
-
0 — スイッチが目的の値に設定されていないことを示します。
-
1 — スイッチが新しい目的の値に適切に設定されていることを示します。
-
-1 — スイッチが無効な値 (0 または 1 以外の値) に設定されていることを示します。
例
以下の例は、スイッチ番号 1 の値を出力します。
Write $$%swstat^SWSET(1)
%swset^SWSET 関数
この関数は、スイッチを指定された値に設定します。
%swset^SWSET(switch, value)
パラメータ
-
switch — スイッチの番号。
-
value — 設定する値 (0 または 1)。
備考
switch が有効な番号で value が 0 または 1 の場合、この関数はスイッチを指定された値に設定し、次を返します。
-
0 — スイッチはリセットされました (オフ)。
-
1 — スイッチは設定されました (オン)。
それ以外の場合は、エラーが発生したことを示す値の –1 を返します。
例
以下の例は、スイッチ番号 1 の値をオフに設定します。
Write $$%swset^SWSET(1, 0)
失敗モード
InterSystems IRIS プロセスがシステム予約スイッチのいずれかを設定し、その処理を適切にクリーンアップせずに終了した場合、システムが制限オペレーティング・モードのままになる場合があります。例えば、あるプロセスでスイッチ 12 を設定した後に重大な障害 (あるいは単純な停止) が発生した場合、InterSystems IRIS は以降のユーザがログインできない状態になります。この問題が生じた場合は、インターシステムズのサポート窓口 (WRC)Opens in a new tab までお問い合わせください。
Note:
InterSystems IRIS では、スイッチ 10 に対してのみ自動リカバリが実装されています。プロセスがスイッチ 10 を設定後に停止した場合、InterSystems IRIS は自動的にこのスイッチをゼロにリセットします。
FeedbackOpens in a new tab