#ヒントとコツ

0 フォロワー · 353 投稿

特定の問題をエレガントまたは異常な方法で解決するためのInterSystems テクノロジーの一連の経験。

記事 Megumi Kakechi · 6月 6, 2023 4m read

これは InterSystems FAQ サイトの記事です。
 

こちらでは、InterSystems Container Registry(ICR) より入手可能なDockerコンテナイメージを使用する方法をご案内します。

WRCDirectのダウンロードサイト より入手可能なイメージを使用する場合も同じようにできます。
 その際、Name:Web でフィルタリングしていただくと、Web Gateway の Docker イメージが見つけやすくなります。
※インターシステムズが提供する webgateway コンテナイメージには、Web ゲートウェイと Apache Web サーバの両方が含まれています。


【手順】

1. ブラウザより https://containers.intersystems.com/ にアクセスし、インターシステムズWRC認証情報でログインします。

2. Dockerログイントークンかログインコマンドを取得します。


3. 取得した認証情報を使い、Dockerインターフェース(PowerShellウインドウやLinuxコマンドラインなど)でICRへの認証を行います。
    以下の例のように、表示されるDocker ログインコマンドをコピー、ペーストすることで認証できます。

0
0 332
記事 Mihoko Iijima · 6月 6, 2023 5m read

これは InterSystems FAQ サイトの記事です。

ターミナルでルーチンやクラスのコンパイルを行う際、コンパイル結果が画面に表示されるのでエラーが発生した場合でも確認しやすいですが、一括コンパイルの場合は、大量のコンパイル結果の中にエラー情報が含まれてしまうためエラー情報だけを取得したい場合には少し工夫が必要です。

以下、ルーチン/クラスの一括コンパイル時の結果からエラー情報を取得する方法をご紹介します。

ルーチンの場合

ネームスペースにあるルーチンをターミナルで一括コンパイルするには、%Library.Routine クラスの CompileAll() メソッドを使用します。

以下実行例は、USERネームスペースにあるルーチンを一括コンパイルした結果です。TestRoutine1でコンパイルエラーが発生しています。

0
0 262
記事 Mihoko Iijima · 6月 2, 2023 6m read

開発者の皆さん、こんにちは!

この記事では、ワークフローコンポーネントを使ってみよう!~使用手順解説~ でご紹介したユーザ操作画面(ユーザポータル)を任意のWebアプリに変更する際に便利な REST API の使用方法をご紹介します。

ワークフロー用 REST APIですが、開発者コミュニティのサンプル公開ページ:Open Exchange に公開されているAPIでどなたでも自由にご利用いただけます。

Open Exchangeの検索ボックスに「Workflow rest」と入力すると出てきます。EnsembleWorkflow が対象のサンプルです。

ちなみに、2023年6月2日時点で724のアプリケーションが公開されているようです👀

0
0 376
記事 Mihoko Iijima · 5月 30, 2023 2m read

これは InterSystems FAQ サイトの記事です。

%SYSTEMパッケージには沢山の便利なシステムクラスがあり、Embedded Pythonでも一般クラスと同様に%SYSTEMパッケージ以下クラスを操作できます(iris.cls("クラス名").メソッド名()で呼び出せます)。

ObjectScriptでは、$SYSTEM特殊変数を利用して、%SYSTEMパッケージ以下クラスのメソッドを呼び出すことができますが、Embedded Pythonでは、iris.system を利用して実行することができます。

以下実行例をご紹介します。

現在のネームスペースを取得する

一般クラスと同じ呼び出し方の例

iris.cls("%SYSTEM.SYS").NameSpace()

iris.systemを利用する例

iris.system.SYS.NameSpace()

 

binディレクトリのパスを返す

一般クラスと同じ呼び出し方の例

iris.cls("%SYSTEM.Util").BinaryDirectory()

iris.systemを利用する例

iris.system.Util.BinaryDirectory()

 

SQL関連をまとめたSQLクラスの例は以下の通りです。

YYYY-MM-DDから$horolog形式の日付を返す

一般クラスと同じ呼び出し方の例

0
0 128
記事 Megumi Kakechi · 5月 30, 2023 3m read

これは InterSystems FAQ サイトの記事です。
 

Apache環境でRESTを動かすための設定方法は以下のとおりです。


1. Webゲートウェイをインストールします

添付(Webゲートウェイインストール手順.pdf)の手順に従い、Webゲートウェイをインストールします。
Webゲートウェイをインストールする前に、Apacheを停止してください。


2. Apache 構成ファイルの設定を行います

/etc/httpd/conf/httpd.conf の末尾に以下を追加します。
追加後、Apacheを再起動してください。

<Location />
    CSP On
    SetHandler csp-handler-sa
</Location>


こちらの設定では、Apacheに対するすべてのリクエストをWebゲートウェイに渡す設定になります。
 <Location />ではなく、<Location /rest> にすると、/rest のみWebゲートウェイに渡すようになります。
 (既に他の目的でApacheを使用している場合、<Location /> の設定にするとそちらが動かなくなりますのでご注意ください)

Apacheの再起動:

0
0 662
記事 Mihoko Iijima · 5月 26, 2023 6m read

これは InterSystems FAQ サイトの記事です。

IRISではジャーナルファイルが自動的に圧縮される仕組みが導入されています。

ジャーナルファイルの圧縮機能について詳しくは、別の記事「ジャーナル圧縮機能について」をご参照ください。

例えば、CachéからIRISへ移行された後に、念のためIRISで更新されたデータを手動でCachéにも反映させたいことばある場合に、IRISのジャーナルファイルをCachéにリストアすることができます。

手順は以下の通りです。

(手順1) IRISのジャーナルファイル(YYYYMMDD.nnnz) ファイルを解凍する
(手順2,3) 解凍した ジャーナルファイルを Cachéに転送してリストアする

リストアの方法として、以下の2パタンをご紹介

(A) 指定グローバルとデータベースについて、指定ジャーナルから、全エントリをリストア
(B) 指定グローバルとデータベースについて、指定ジャーナルから、特定のアドレスまでリストアする

(A) 指定グローバルとデータベースについて、指定ジャーナルから、全エントリをリストア

(手順1) IRISサーバ上で以下のコマンドにより、ジャーナルを解凍する

IRIS 2022.1 以降、現在実行中のジャーナル以外は、拡張子 z で圧縮されています。

以下のコマンドで解凍し、指定のフォルダにコピーします。

0
0 214
記事 Megumi Kakechi · 5月 21, 2023 2m read

すべての永続クラス (%Persistent) およびシリアルクラス(%SerialObject) をコンパイルすると、ストレージ定義 が展開されます。
ストレージ定義には、オブジェクト保存と検索用のグローバル構造情報、ストレージインタフェースによって使用される追加のパラメータや、ストレージクラスを定義する一連のキーワードや値などが含まれます。

スタジオや ObjectScript コマンドを使用して永続クラスをエクスポートする場合、既定では以下のようなストレージ情報が付与された状態でエクスポートされます。

Storage Default
{
<Data name="PersonDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value
:


こちらの記事では、このストレージ定義を除いた状態でクラスをエクスポートする方法をご紹介します。
 

/skipstorage」というエクスポート修飾子を指定すると、クラスのストレージ情報なしでエクスポートすることが可能です。

コマンドで使用する方法は以下のようになります。

0
0 130
記事 Megumi Kakechi · 5月 15, 2023 2m read

これは InterSystems FAQ サイトの記事です。

サブスクリプトレベルマッピングされたグローバルを、トップノードから全体をkillする場合、<SLMSPAN>エラーとなり削除ができません。

これは、サブスクリプトレベルマッピングされたグローバルについては、マッピングを跨いだサブスクリプト範囲の kill コマンドは行えないためです。

// 以下のように、別々のデータベースにサブスクリプトマッピンググローバルが存在する場合:^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Topレベルから Kill しようとすると、<SLMSPAN>エラーとなる
NAMESPACE>Kill^TEST
<SLMSPAN> <- このエラーが出力


現ネームスペース(データベース)のグローバルのみ削除するには、次のように指定して下さい。

NAMESPACE>Kill ^["^^."]TEST

サブスクリプトレベルでマッピングしているグローバルは、データベースに移動して直接Killする必要があります。
データベースに移動する場合は以下のようにします。

0
0 118
記事 Megumi Kakechi · 5月 12, 2023 2m read

こちらの記事 では、ヘルスモニタのセンサー値を ^%SYSMONMGR ユーティリティを使用して変更する方法をご紹介しました。
今回は、ヘルスモニターセンサー値を コマンド(プログラム)で変更する方法をご紹介します。


ヘルスモニタは、CPUUsage(CPU使用率)、DBLatency(DBからのランダム読取に要する時間)、DiskPercentFull(DBのディスク使用率)などの該当しきい値を超えた場合に、通知を生成します。
ヘルスモニタのセンサー値(閾値)について

センサーのしきい値を超えると、IRISのシステムログ(messages.log)に以下のようなメッセージが記録されます。

[SYSTEM MONITOR] CPUusage Warning: CPUusage = 81 ( Warnvalue is 75).
[SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1092.228 ( Warnvalue is 1000).
[SYSTEM MONITOR] DiskPercentFull(/hs-connect/sys/mgr/) Alert: DiskPercentFull = 99.00, 99.02, 99.03 (Max value is 99).
0
0 203
記事 Megumi Kakechi · 5月 8, 2023 4m read

これは InterSystems FAQ サイトの記事です。

InterSystems IRIS では、柔軟でユーザ拡張可能な監視ツールである「システムモニタ」をお使いいただくことが可能です。

システムモニタには、以下の3つのインスタンス監視ツールがあります。

  • システムモニタ:システムの状態およびリソースを監視・固定パラメータに基づいて通知 (アラートおよび警告) を生成
  • ヘルスモニタ:主要なシステムメトリックおよびユーザ定義メトリックをサンプリング&ユーザ変更可能パラメータおよび規定の通常値と比較し、該当しきい値を超えた場合に通知を生成
    ※ヘルスモニタは既定では無効となっています。
     起動するには、^%SYSMONMGR を使用してヘルスモニタを有効にする必要があります。
     ただし、システムモニタのサブスクライバクラスは、ヘルスモニタが有効でなくても動作します。
  • アプリケーションモニタ:重要なシステムメトリックをサンプリング&ユーザが作成したアラート定義を使用して評価

messages.logに、以下のようなログが記録される場合があります。

[SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1510 ( Warnvalue is 1000).
※このメッセージの意味については こちらの記事 をご覧ください。

0
0 260
記事 Megumi Kakechi · 5月 1, 2023 6m read

IRISTEMPというデータベースをご存じでしょうか?

特定の処理に対してデータを無期限に保存する必要がなく、「同一プロセス内でのみ使用したい場合」や「IRISが起動中のみ使用したい場合」に、IRISTEMPデータベースに保存されるグローバルを使用できます。
IRISTEMPデータベースに保存されるグローバルに対する操作は ”一切ジャーナルされない” ため、効率性を最大限にしたい作業に使用できます。

IRISTEMPデータベースに保存されるグローバル(データ)には、以下の種類があります。

0
1 302
記事 Megumi Kakechi · 4月 24, 2023 2m read

クラウド環境で Windows 英語版に日本語言語パックをインストールして日本語化している場合、設定に注意が必要です。

以下のようにランチャー(キューブ)メニューの一部が文字化けするのは、言語設定が足りていないのが原因と考えられます。


以下の設定をご確認ください。

Windows設定 > 時刻と言語 > 言語:管理用の言語設定
「Unicode 対応でないプログラムの現在の言語」が、日本語以外の言語 (例:英語(米国)) になっていないでしょうか?


この場合、システムロケールの変更 ボタンで現在のシステムロケールを「日本語(日本)」 に変更することで、文字化けが解消します。

※この変更を反映させるにはWindowsの再起動が必要です。
 

***

【注意】

システムロケールが「英語(米国)」のように日本語以外の言語になっている環境にIRISをインストールしている場合、IRISのデフォルトの ロケール定義 が日本語以外に設定されています。

この場合、例えばファイル入出力も日本語の言語対応がされないため、日本語を含むCSPなどのファイルインポートで文字化けが発生してしまいます。

その際には、OSのシステムロケールの変更に加えて、IRISのロケール定義も変更するようにしてください。


※以下の例は、日本語 Windows OS の場合

0
0 497
記事 Mihoko Iijima · 4月 17, 2023 1m read

これは InterSystems FAQ サイトの記事です。

以下の状態の時、ReadOnlyでマウントされます。

0
0 282
記事 Megumi Kakechi · 4月 11, 2023 4m read

これは InterSystems FAQ サイトの記事です。
 

Question:

TIMESTAMP型の項目に対して、TO_CHAR() や TO_DATE() を用いた SELECT を実行すると以下のエラーになります。

実行SQL:

select 
  TO_CHAR(xxxDateTime,'YYYY-MM-DD')
from
  Test

エラー:
  [SQLCODE: <-400>:<深刻なエラーが発生しました>]
  [%msg: <Unexpected error occurred: <ZCHAR>IllegalValuePassedToTOCHAR^%qarfunc>]

エラーの原因を教えてください。


Answer:

こちらは、IRIS2022.1以降のバージョンで CREATE TABLE (DDL) の TIMESTAMP 型が IRIS側クラスで %Library.PosixTime にマッピングするように変更されているためです。
(アップグレードした環境の場合は、従来のままの %Library.TimeStamp にマッピングされています)

0
0 1527
記事 Mihoko Iijima · 4月 10, 2023 4m read

これは InterSystems FAQ サイトの記事です。

バージョン2017.2以降から、CREATE TABLE文で作成したテーブル定義のデータを格納するグローバル変数の命名ルールが変わり ^EPgS.D8T6.1 のようなハッシュ化したグローバル変数名が設定されます。(この変更はパフォーマンス向上のために追加されました。)

※ バージョン2017.1以前については、永続クラス定義のルールと同一です。詳細は関連記事「永続クラス定義のデータが格納されるグローバル変数名について」をご参照ください。

以下のテーブル定義を作成すると、同名の永続クラス定義が作成されます。

CREATETABLE Test.Product(
    ProductID VARCHAR(10) PRIMARY KEY,
    ProductName VARCHAR(50),
    Price INTEGER
)

 永続クラス:Test.Productの定義は以下の通りです。(パラメータ:USEEXTENTSETに1が設定されます) 

0
0 309
記事 Megumi Kakechi · 3月 28, 2023 3m read

これは InterSystems FAQ サイトの記事です。
 

テーブル名/カラム名/インデックス名を変更したい場合、以下のケース別に変更方法をご案内します。

A. テーブル名・カラム名の変更
B. インデックス名の変更
 

-------------------------------------------------------------------------
A. テーブル名・カラム名の変更する方法
-------------------------------------------------------------------------

テーブル(クラス)名とカラム(プロパティ)名は基本的には変えないようにしてください。

もし「SQLアクセス時の名前だけ変更したい」場合は、以下のように新しい名前を SqlTableName(テーブル名)、SqlFieldName(カラム名) として指定することができます。

Class User.test Extends%Persistent [ SqlTableName = test2 ] {
    Property p1 As%Integer [ SqlFieldName = xx ];
    ....
0
1 233
記事 Megumi Kakechi · 3月 19, 2023 2m read

Visual Studio Code 用のエクステンション(拡張機能)には、その動作を構成するための多くの設定が用意されています。

設定可能な項目一覧は、こちらの VS Codeドキュメント でご紹介しています(英語のみ)。

今回は、これらの設定の中で「コンパイルフラグを変更したい場合」の例で、設定の変更方法をご案内します。
※コンパイルフラグの詳細については こちらの記事 をご覧ください。


~ VS Code でコンパイルフラグを変更する方法 ~


① メニューから File(ファイル) > Preferences(ユーザ設定) > Settings(設定) (macOS では Code > Preferences > Settings) を選択し、設定エディタを開きます。


② 検索欄に、objectscript と入力して設定を絞り込み、今回は検索欄の下にある [Workspace(ワークスペース)] (※)を選択します。
※ユーザー:PCのユーザーごとに設定したい場合や、ワークスペースを作っていない時に利用する設定
 ワークスペース:ワークスペースを作成して作業するときに、ワークスペース全体に適用して利用する設定


③ 表示されている設定項目の中から変更したい項目を見つけます。

0
0 700
記事 Megumi Kakechi · 3月 8, 2023 2m read

これは InterSystems FAQ サイトの記事です。
 

^%GCMP ユーティリティにて2つのグローバルの内容を比較することができます。

例としてUSERとSAMPLESネームスペースにある、^testと^testを比較する場合は以下のようになります。
※以下の例では、2つのネームスペースに全く同じグローバルを700個作り、その中の一つの中身を変えて検出対象としています。

0
0 141
記事 Mihoko Iijima · 3月 2, 2023 1m read

これは InterSystems FAQ サイトの記事です。

コミュニティ版は1インスタンスでの利用を想定しているため、2インスタンス以上で設定する構成は利用できません。

製品版と異なる点は以下の通りです。

  • 組込みのライセンスキーを利用しているため、別のライセンスキーを適用できません。
  • 同時接続 8ユーザまで利用できますがキーには期限があります。
    • キーの期限を迎えた場合は、コミュニティ版の新バージョンに切り替えることで新しいキーが適用されます。
  • ミラーリング、ECP、シャーディング、InterSystems APIマネージャ(IAM)を利用できません。
  • データベースのサイズに制限があります(10GB)。
  • インストール環境のCPU数に制限があります(20コア)。

最新情報は InterSystems IRIS Community Edition Limitations をご確認ください。
※上記制限事項はバージョン2022.2~の情報です。バージョン2022.1以前の制限事項は日本語ドキュメントInterSystems IRIS Community Edition の制限」をご参照ください。

0
0 565
記事 Toshihiko Minamoto · 2月 27, 2023 7m read

今回は、「孤立メッセージ」について説明します。

孤立メッセージとは何ですか?

すべてのメッセージボディは、メタデータを保持するメッセージヘッダと関連付けらます。ヘッダーには、ソース構成名称、ターゲット構成名称、作成時刻、処理時刻、関連するメッセージボディ参照、セッション情報、メッセージボディのクラス名称、メッセージステータスなどの情報が格納されます。 メッセージボディに対応するヘッダーレコードが存在しない場合、そのメッセージボディは孤立メッセージボディと呼ばれます。ここでは、孤立メッセージボディの原因となる可能性があるものについて説明します。

ヘッダーのみを削除する場合

削除タスクの設定において、BodiesToo メッセージヘッダとともにメッセージボディも削除するかどうかを指定するものです。この設定をOFFにすると、削除タスクはメッセージヘッダーのみを削除し、メッセージボディは残します。これらのメッセージボディは、参照されたヘッダが削除されることから、孤立したレコードとなります。 メッセージヘッダの削除したが、メッセージボディは残している場合、マネジメントポータルでは孤立メッ セージボディを削除する方法はありません。この場合、プログラムによってメッセージボディを削除する必要があります。

 

削除タスクについては、ドキュメントをご参照ください。

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG_purge#EGMG_purge_basic

複合メッセージボディの クラス (オブジェクトの値によるプロパティ)

Ensemble がメッセージボディを削除する際、メッセージボディのオブジェクトの値によるプロパティが削除されるとは限り ません。具体的には、他のオブジェクトを削除するのは、それらがシリアルオブジェクトであるか、子オブジェクト(関係によって定義される)である場合のみである。その他のオブジェクトについては、削除トリガーを定義するか、メッセージボディのクラスで %OnDelete() 方法を実装して、適切に削除を処理する必要があります。

OnDelete実装のサンプルコード

Class Sample.Address Extends %Persistent{
/// 所番地。
Property Street As %String(MAXLEN = 80);
/// 市名。
Property City As %String(MAXLEN = 80);
/// 2文字の州の略称。
Property State As %String(MAXLEN = 2);
/// 米国の5桁のZIP(Zone Improvement Plan)コード。
Property Zip As %String(MAXLEN = 5);
}
Class Sample.Person Extends %Persistent{
/// 本人の名前。
Property Name As %String [ Required ];
/// 本人の社会保障番号。これはパターンマッチで検証さ れます。
Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ];
/// 本人の生年月日。
Property DOB As %Date;
/// 本人の自宅住所。
Property Home As Address;
/// 本人の勤務先住所。
Property Office As Address;
///オブジェクトを削除するためのコールバック。
ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private ]{
      // プロパティオブジェクトの参照を削除することです。
      Set tSC = $$$OK, tThis = ##class(Sample.Person).%Open(oid)
      If $ISOBJECT(tThis.Home) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Home.%Id())
      If $ISOBJECT(tThis.Office) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Office.%Id())
      Quit tSC
}
///SQL削除のコールバック/トリガー
Trigger OnDelete [ Event = DELETE ]{
      // プロパティ・オブジェクトの参照を削除します。{%%ID} は削除されるレコードの ID を保持します。
      Set tID={%%ID}
      Set tThis = ##class(Sample.Person).%OpenId(tID)
      If $ISOBJECT(tThis.Home) Do ##class(Sample.Address).%DeleteId(tThis.Home.%Id())
      If $ISOBJECT(tThis.Office) Do ##class(Sample.Address).%DeleteId(tThis.Office.%Id())
      Quit
}
}

メッセージオブジェクトが作成さられましたが、他のホストに送信されませんでした。

メッセージが別のホストに送信/転送さ れようとしたら、Ensemble は新しいメッセージヘッダを作成し、対応するメッセージボディを関連付けます。 ビジネスサービス/プロセスで作成されたメッセージボディ/オブジェクトのインスタンスがディスク/データベースに保存され、かつプロダクション内の別のホストに送信されなかった場合、関連するヘッダーがなく、孤立メッセージボディとして残ります。ベストプラクティスは、転送されない限りメッセージボディを作成しないこと、またはオブジェクトのインスタンスの %Save() をコールしないことです (SendRequestSync/SendRequestAsync API は、メッセージをターゲット設定キューに入れる前にそれを保存します)。この方法では、メッセージボディのオブジェクトは、他のホストに送信されない限り、永続化されることはありません。

この問題の最も一般的な原因は、開発者が:

  1. メッセージボディを複製し、複製されたメッセージボディを転送しない場合です。
  2. コンテキスト変数(BPL)で作成されたメッセージボディオブジェクトが転送されない場合です。

孤立メッセージの効果

孤立メッセージは、削除タスクによって削除されません。これらのメッセージはディスクスペースを消費し、その数が増えるにつれて、ディスク使用量も増加します。ディスク使用量は、メッセージボディのデータだけでなく、これらの孤立メッセージボディレコードのインデックス/サーチテーブルのエントリも含めて使用されることになります。

孤立したメッセージの特定

孤立したメッセージの存在は、メッセージヘッダとボディを照会することで 特定することができます。各メッセージヘッダは、対応するメッセージボディを参照します。メッセージボディのオブジェクトIdの参照はヘッダのMessageBodyIdプロパティに、メッセージボディのクラス名はヘッダのMessageBodyClassNameプロパティに格納されます。

HL7 メッセージ・テーブルで孤立メッセージを見つけるためのクエリの例:

SELECT HL7.Id  FROM EnsLib_HL7.Message HL7

   LEFT JOIN Ens.MessageHeader hdr

   ON HL7.Id=hdr.MessageBodyId

   WHERE hdr.MessageBodyId IS NULL

上記のクエリは、対応するヘッダを持たないすべての HL7 メッセージを返します。このクエリは、メッセージボディのテーブル名称を置き換えるだけで、他のメッセージタイプに対するクエリに変更することができます。

孤立メッセージの削除

マネジメントポータルでは孤立メッ セージボディを削除する方法はありません。この場合、プログラムによってメッセージボディを削除する必要があります。ENSDEMO データベースでは、Demo.Util.CleanupSet というクラスが、これを実行する方法の例を示してくれます。このルーチンは、オブジェクトのプロパティ参照も含めて深く削除します。

孤立メッセージを削除するためのルーチンがもう一つありますが、このルーチンは深い削除はしませんし、メッセージボディの削除だけを助けます。ソースをダウンロードするために、以下にgithubへのリンクを載せておきます。

https://gist.github.com/suriyasv/2ed7f2dbcfd8c79f3b9938762c17c0b5

ベストプラクティスは、

  1. 孤立メッセージを防ぐために、常にプログラミングエラーを避けることです(前述)。
  2. BodiesToo設定をOFFにした削除タスクを、ボディが必要な場合のみ設定し、これらのメッセージボディはプログラムによってのみ削除できることを認識することです。
  3. 永続オブジェクトプロパティに対するRelationshipsまたはOnDelete実装することです。

この記事が、プロダクションを構築する際にお役に立てば幸いです。また、ご不明な点などございましたら、お知らせください。ありがとうございました。

0
0 169
記事 Megumi Kakechi · 2月 27, 2023 2m read

Question:

Windows環境にて、新規サーバにWebゲートウェイ(Web Gateway)をインストールしたところ「HTTP Error 503. The service is unavailable.」エラーで接続ができません。
対処法を教えてください。
 

Answer:

IRIS2022.1以降のバージョンでは、Visual Studio 2015 Visual C++ 再頒布可能パッケージ(64bit) のインストールが必須となりました。
IRISをインストールされているお客様は、IRISのインストール時に VC++ 2015 再頒布可能パッケージもインストールされるため気にする必要はありませんが、Webゲートウェイのみインストールされる場合は別途インストールする必要があります。

0
0 300
記事 Megumi Kakechi · 2月 23, 2023 3m read

弊社サポートセンターに、「IRIS SQLに Oracle の RANK() 関数のようものはありませんか?」というお問い合わせいただくことがあります。

IRIS2021.1以降のバージョンであれば、RANK() や ROW_NUMBER() などの ウィンドウ関数 がサポートされるようになりましたので、以下のように使用することができます。

// RANK() 関数
SELECTRANK() OVER (ORDERBY Age) as Ranking,Name,Age 
FROM Sample.Person 
WHERE Age > 60orderby Age
Ranking Name Age
1 Townsend,Neil W. 61
1 Murray,Terry J. 61
3 Huff,Patrick B. 67
4 Rotterman,Umberto A. 72
5 Quine,Imelda D. 75
6 McCormick,Imelda S. 80
7 Roentgen,Vincent Q. 81
8 Ueckert,Terry Q. 85
9 Perez,Ted P. 97
0
0 285
記事 Megumi Kakechi · 2月 12, 2023 3m read

これは InterSystems FAQ サイトの記事です。
 

日時検索で、TimeStamp型のクエリのパフォーマンスが出ない場合の対処法をご紹介します。

%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff)は、人が読めることを目的とした ODBC 日付形式の文字列として格納されます。
そのため、どうしてもデータサイズが大きくなりクエリの実行に時間がかかってしまいます。
%TimeStamp型のプロパティにインデックスを作成している場合にも、クエリオプティマイザはそのインデックスを優先して最適化するようにはなっておりません。

IRISでは、POSIX 時刻(※)をサポートしているため、TimeStamp値を表すのに %Library.PosixTime データ型形式を使用できます。
こちらは、Integer型で保存され、%Timestampの高性能な代替法となります。

※POSIX 時間は、協定世界時 (UTC) 1970年1月1日 00:00:00(UNIXエポック)からの経過秒数として表されます。
 1970-01-01 00:00:00より前の日付は、負の論理値で表されます。

0
1 442
記事 Megumi Kakechi · 2月 2, 2023 2m read

これは InterSystems FAQ サイトの記事です。
 

クエリパフォーマンスを最適化するための方法の一つとして、クエリ単位またはシステム全体でクエリの並列処理を使用することができます(標準機能)。

こちらは、特定のクエリに対しマルチプロセッサシステムでクエリの実行をプロセッサ間で分割して行うものです。
並列処理の効果が得られる可能性がある場合のみ、クエリオプティマイザは並列処理を実行します。
並列処理の対象はSELECT文のみとなります。

なお、並列プロセスの数は、CPUの数に応じて自動で調整するため、数の指定は行えません。
現在のシステムのプロセッサ数は以下のコマンドで確認することができます。

USER>write$SYSTEM.Util.NumberOfCPUs()
8

以前は、クエリに %PARALLEL キーワードを付与することで並列処理が有効となっておりましたが、IRIS2019.1以降のバージョンより既定で「常時有効」となりました。

管理ポータル:
  システム管理 > 構成 > SQLとオブジェクトの設定 > SQL
    単一プロセス内でクエリを実行
    ※チェックを入れると並列処理は行わない(既定はチェックなし)


クエリ単位で並列処理を行わないようにする場合は、%NOPARALLEL キーワードを指定します。

0
0 269
記事 Toshihiko Minamoto · 1月 29, 2023 1m read

数ヶ国語を知っていて、世界のさまざまな地域のユーザーと知識を共有したいとお考えですか?

でしたら、今こそあなたが輝く時です 🤩

開発者コミュニティでは、あなたのオリジナル記事とその翻訳を簡単にリンクさせることができます(翻訳を依頼することも可能です)

ではどのように翻訳記事を作成するのか説明しましょう。

0
0 128
記事 Mihoko Iijima · 1月 5, 2023 14m read

これは InterSystems FAQ サイトの記事です。

システムモニタの中の「アプリケーションモニタ」を利用することで、ユーザが定義した特定の監視対象に対してチェックを行い特定の条件に合致した場合に通知を行ったり、メッセージログ(コンソールログ)に情報を出力したり、ユーザが定義するアクションを指定できます。

<メモ>
アプリケーションモニタはインストールにより準備されますが、ユーザが付属のアプリケーション・モニタ・クラスを有効化するまで動作しないモニタです。
付属のアプリケーションモニタには、監査のカウントやイベント詳細を収集するもの、ディスクの容量を監視するものなどが含まれます。

詳細は、以下ドキュメントをご参照ください。
【IRIS】アプリケーション・モニタのメトリック
アプリケーション・モニタのメトリック

作成手順は以下の通りです。

  1. %SYSネームスペースにアプリケーションモニタ用クラスを作成する
  2. 作成した1のクラスを、システムモニタのアプリケーションモニタ有効化メニューで有効化する
  3. 収集のインターバルを設定する(秒単位)
  4. システムモニタを再起動する
0
0 209