これは InterSystems FAQ サイトの記事です。
コンソールログに任意のメッセージを書き込む方法として%SYS.System クラスの WriteToConsoleLog メソッドを使用することができます。
以下に例を示します。
%SYSwrite##class
WriteToConsoleLogメソッドに指定できるパラメータの詳細は、以下のドキュメントをご参照下さい。
これは InterSystems FAQ サイトの記事です。
コンソールログに任意のメッセージを書き込む方法として%SYS.System クラスの WriteToConsoleLog メソッドを使用することができます。
以下に例を示します。
%SYSwrite##class
WriteToConsoleLogメソッドに指定できるパラメータの詳細は、以下のドキュメントをご参照下さい。
これは InterSystems FAQ サイトの記事です。
残念ながら良い方法はありません。
もし処理の流れとして突然処理を中断されると不都合がある場合には、OnunloadHandler内でalertメソッドにより、Xボタンを押さないように注意を促すようなメッセージを出す方法が考えられます。
一般的には、ユーザ都合で処理中断されてもサーバ側処理内でデータの整合性等に不都合が発生しない様にアプリケーションの実装を行う必要があります。
ページのアンロード時に呼び出されるOnunloadHandler内でサーバ・メソッドを呼び出す方法は様々な問題があるため、使用することはお勧めしません。
これは InterSystems FAQ サイトの記事です。
TRYブロック内で任意のカスタムエラーを発生させたい場合、以下のように throw で例外を渡すことが可能です。
以下のサンプルでは、Stcount が 1 より小さい場合にカスタムエラーを発生させています。
ClassClassMethodtry
上の例では、Stcount が 1 より小さい場合、以下のようなエラーが出力されます。
USER>
詳細は以下のドキュメントをご覧ください。
ObjectScriptコマンド_THROW
また、任意のステータスコードを作成したい場合は以下のように行います。
USER>
以下の関連トピックもあわせてご覧ください。
【FAQ】ユーザ定義のエラーを定義したいのですが、どのようにすればいいですか?
【FAQ】プログラミングを行う際のエラー処理方法を教えてください。
これは InterSystems FAQ サイトの記事です。
ObjectScript言語は、Java言語等がサポートしている型キャストをサポートしていません。
ただし、メソッドのキャストはサポートしています。
詳細は以下ドキュメントページをご参照ください。
InterSystems ObjectScript言語はJava言語や.NetのC#言語のような静的型付き言語とは異なり、動的型付き言語に分類される言語になります。
従って型の解釈は実行時に行われ、宣言時に型を合わせるという必要性がないため型キャストのような仕組みを用意していません。
これは InterSystems FAQ サイトの記事です。
ミラーリングが同期の対象とするのはデータベースファイルのみです。
アプリケーションに必要なその他のファイル(CSPファイル、画像ファイル、ドキュメントファイルなど)をミラーセットを構成する二台のサーバー間で同期させるには、
などの方法が考えられます。
また、2の方法ではWindows上ではRoboCopy、Linuxの場合にはrsyncという同期ソフトを使った実例があります。
これは InterSystems FAQ サイトの記事です。
バージョン2015.2以降から、Windows上のインストール環境では、サービス・アカウントを
「Windowsコントロールパネル > 管理ツール > サービス > InterSystems IRIS/Cache Controller for XX」
の「ローカル・システムアカウント」から Windows の任意の管理者アカウントに変更した場合に <NOTOPEN> エラー または -1 が返ります。
この状況を回復するためには、以下2つの設定をする必要があります。
1. 「Windowsコントロールパネル > 管理ツール > サービス > InterSystems IRIS/Cache Controller for XX」 のログオン設定を、「ローカルシステムアカウント」に戻す 2. irisinstall/cinstall コマンドを使用してInterSystems IRIS サービス・アカウントを変更する
2 の手順は以下になります。
Windowsコマンドプロンプトを管理者権限で起動し、以下コマンドを使用して変更します。
この設定を有効するためには、インスタンスの再起動が必要です。
これは InterSystems FAQ サイトの記事です。
デフォルトではテーブルのカラムの順番はシステムが自動的に決定します。
順番を変更するにはクラス定義を行う際にプロパティ・キーワード SqlColumnNumber でプロパティ毎に明示的に順番を設定してください。
例:
ドキュメントは以下をご参照ください。
なお、SQLテーブル名を変えたい場合は SqlTableName 、カラム名(フィールド名)を変えたい場合は SqlFieldName を指定します。
ともに、永続クラスのみに適用されます。
皆さん、こんにちは!
職場で持ち上がった単純なリクエストで始めた個人プロジェクトを紹介したいと思います。
使用している Caché ライセンス数を調べることはできますか?
コミュニティに掲載されている他の記事を読んでみたところ、David Loveluck が投稿したぴったりの記事が見つかりました。
APM - Using the Caché History Monitor(APM - Caché 履歴モニターを使用する)
そこで、David の記事を参考に、Caché 履歴モニターを使って、リクエストされた情報を表示して見ました。
「どのテクノロジーを使用するのか」という疑問に対し
私は CSP に決定しました。単純で強力なテクノロジーであるため、私が担当するお客様は Caché が単なる MUMPS/ターミナルではないことに気づくでしょう。
ライセンス、データベース増加状況、CSP セッションの履歴を表示するページを作成した後、「システムダッシュボードとプロセス」ページのデザインを新装することにしました。
私の Caché インスタンスではすべてうまく機能します。
でも、IRIS はどうでしょうか?
これは InterSystems FAQ サイトの記事です。
InterSystems IRIS/Caché の管理ポータルメニュー:SQLデータインポートウィザードの処理で行うようなCSVファイルをテーブルへインポート、テーブルからファイルにエクスポートする方法をプログラムで実行することができます。
※ サンプルはバージョン 2017.1以降で動作確認しています。
※ バージョン 2016.2.3以前でお試しいただく場合は、SQL.Utilsクラス の20行目をコメント化してからご利用ください。
//Set mgr.IQN=$$$BuildIQN(SchemaName,TableName)
サンプルはこちらにあります👉https://github.com/Intersystems-jp/DataImportExport
CSVファイルをテーブルへインポート、テーブルからファイルへエクスポートの処理は、SQL.Utilsクラスを使用しています。
1) サンプルのインポート
実行したいネームスペースに SQL.Utilsクラスをインポートします。
スタジオをご利用の場合は、ファイルをドラッグ&ドロップするとインポートできます。
これは、InterSystems FAQサイトの記事です。
%SYS.Namespace クラスの List クエリで取得することができます。
次のようなルーチンを作成し、ターミナルで実行してください。
1. サンプルの作成
getnsp
// ネームスペース一覧を取得する write "nsp:glo:rtn",!,!set2. ターミナルから実行
こちらの記事でご紹介しているクラスクエリを実行する方法は、様々なケースで応用できます。
クラスリファレンスをご覧いただくと、様々なクラスクエリをご覧いただけます。
例えば、
%SYS.DatabaseQuery:GetFreeSpace() データベースの空き容量
%SYS.GlobalQuery:DirectoryList データベース内のグローバル名一覧
%SYS.GlobalQuery:Size データベース内のグローバルサイズ一覧
%SYS.ProcessQuery:SS プロセス情報(^%SSユーティリティで確認できる一覧と同じ)
などがあり、様々な情報を取得できます。
開発者のみなさん、こんにちは!
2022年3月9日開催「InterSystems Japan Virtual Summit 2022」のセッション「ミラーリングを使用した HA および DR の構成例」のアーカイブを YouTube に公開いたしました。
(プレイリストはこちら)
ミラーリングは、IRIS インスタンス間のデータベースの複製およびフェイルオーバを行う機能です。
動画では、ミラーリングを利用した高可用(HA)なシステムおよびディザスタリカバリ(DR)に対応したシステムの構成例についてご紹介します。
ぜひご参照ください。
【目次】
00:35 ミラーリングの概要
03:20 ミラーリングの種類と機能:フェイルオーバ・ミラー・メンバ
05:07 ミラーリングの種類と機能:非同期ミラー・メンバ
06:33 DR 非同期ミラー・メンバの昇格・降格
07:29 DR 非同期ミラー・メンバの昇格・降格の機能を利用した災害復旧での対応例
10:07 ISCAgent について
11:12 Arbiter について
13:06 ミラーリングの構成例
これは、InterSystems FAQサイトの記事です。
InterSystems製品では、永続データは後で高速にランダムアクセスできるように、ある一定の規則に沿ってキー順にソートされて格納されます。
新しいノードが追加された場合、ノードが削除された場合、データの長さが変更された場合など、データの構造変化が起こる度に、その並び順を維持できるよう、また無駄な領域が発生しないように動的なデータの配置変えを実施します。
従って、常にデータはきれいに整理された状態で格納されるため、無駄な空き領域が発生しません。
これらの並べ替えの作業は、書き換えのコストのかかる処理ですが、InterSystems製品では、これらの処理はなるべくメモリ(キャッシュ)上で実行し、ディスクI/Oを軽減することにより、性能の劣化を抑えています。
これは、InterSystems FAQサイトの記事です。
アプリケーションモニタが提供する %Monitor.System.Diskspace(ディスク容量メトリック)を利用して指定サイズを下回る場合にメール通知を行うように設定を追加することができます。
アプリケーション・モニタのメトリック【IRIS】
アプリケーション・モニタのメトリック
システム提供のアプリケーションモニタは、デフォルトでは全て無効化されています。使用を開始するためには、対象のモニタを有効化し、システムモニタを再起動します。
アプリケーションモニタの有効/無効やシステムモニタの停止/開始は、システムルーチン ^%SYSMONMGR を利用します。
以下の例では、ディスクの空き容量が 100MB を下回る場合にメール通知を行う設定手順について説明します。
手順は以下の通りです。
1) ^%SYSMONMGR を起動し、アプリケーションモニタから %Monitor.System.Diskspace を有効化する
2) アラート対象とする閾値を変更する(例では、通知は最初の1回のみとしています)
3) Email通知設定を行う
4) システムモニタを再起動する
1) ^%SYSMONMGR を起動し、アプリケーションモニタから %Monitor.System.Diskspace を有効化する
ドキュメントは以下ご参照ください。
これは、InterSystems FAQサイトの記事です。
システムユーティリティクラス:SYS.Database のクエリ:FreeSpace を利用してディスクの空き容量を任意のタイミングで確認することができます。
IRIS ターミナルで試す方法は以下の通りです(%SYSネームスペースに移動してから実行します)。
zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
//全件一括表示
do rset.%Display()出力結果例は以下の通りです。
※コマンド実行例では、全データベースが同じディスクに置かれているので、ディスクの空き容量(DiskFreeSpace)はすべて同じ値が返っています。
これは、InterSystems FAQサイトの記事です。
メール送付のコードを記述する前に、管理ポータルで SSL/TLS 構成を作成します。
管理ポータル > システム管理 > セキュリティ > SSL/TLS 構成

メール送付までの流れは以下の通りです。
ターミナルからの実行例は以下の通りです(Gmail を利用しています)。
《メモ》
現在(2022年5月30日以降)、Gmailを利用したメール送付を行う場合 OAuth2.0 の利用が必須となりました。Gmailを利用する場合の手順ついては、「OAuth 2.0 を利用して IRIS から Gmail を送信する」をご参照ください。
これは、InterSystems FAQサイトの記事です。
データベースの空き容量は、システムモニタを使用して監視することができます。
システムモニタは、システム開始時に自動開始され、予め設定された閾値に対してアラートが通知されます。
システムの閾値については以下ドキュメントをご参照ください。
システム・モニタのステータスおよびリソース・メトリック【IRIS】
システム・モニタのステータスおよびリソース・メトリック
データベースの空き容量については、システムデフォルトでは 50 MBを下回る場合にアラートが通知され、メッセージログ(コンソールログ)にアラート(深刻度 2)として記録され、alerts.log ファイルにも出力されます。
データベースの空き容量を任意サイズで監視したい場合、システムモニタに含まれる「アプリケーションモニタ」を利用して設定します。
注意:アプリケーションモニタでは、アラート対象となる情報があってもメッセージログ(コンソールログ)に出力しないため、メール通知/メソッド実行 を使用して通知するように設定します。
例えば、空き容量が 100MB を下回った時にアラートを通知したい場合は、アプリケーションモニタが提供する %Monitor.System.Sample.Freespace(空き容量メトリック)を利用します。
これは、InterSystems FAQサイトの記事です。
現在実行中のコードの位置は、$STACK関数を使用して $STACK($STACK,"PLACE") で取得できます。
サンプルコードは以下ドキュメントをご参照ください。
これは、InterSystems FAQサイトの記事です。
SQLの場合、NULLデータと空文字列 ('')は区別されます。
それぞれの設定・確認方法は、以下のようになります。
(1) NULLデータ
【SQL】
【InterSystems ObjectScript】
(2) 空文字列 ('')
【SQL】
【InterSystems ObjectScript】
詳細については、以下ドキュメントをご参照ください。
これはInterSystems FAQ サイトの記事です。
※管理ポータルから、もしくはコマンドから開始できます。
do##class%Net.Remote.Servicea. コマンドで作成する場合
"C:\temp\TestDll.dll
do ##class(%Net.Remote.Gateway).%ExpressImport(dllPath, 55000, "b. スタジオで作成する場合
[ツール] - [アドイン] - [.Net ゲートウェイウィザード] ⑥ 以下のような手順でコードを実行します。
例:
Setこれは、InterSystems FAQサイトの記事です。
ジャーナル・ファイルの処理でジャーナルファイルに記録されるタイプが、それぞれどのような状況下で記録されるのかについて説明します。
| 処理 | (管理ポータルの)タイプ | 説明 | 具体的にどのような処理で記録? |
これは InterSystems FAQ サイトの記事です。
以下のコードは、https://www.intersystems.com/assets/intersystems-logo.png をダウンロードし、c:\temp\test.pngとしてファイルを保存する例になります。
以下のコードを動作させるためには、SSLTESTという名前のSSL定義を作成しておく必要があります。
ClassMethodAs%Status背景
先日、ObjectScript の永続(Persistent)クラスのプロパティを編集していたところ、ストレージ定義が最後の変更を反映するように更新されていないことに気づきました。
この場合、クラス定義に不要となったプロパティを削除した上で保存し、再コンパイルしましたが、それでもストレージ定義に残ったままになっていました。
それでも焦ることはありませんでした。 ストレージ定義がコンパイル時に自動生成されるのであれば、それを_削除_して、クラスを再コンパイルすればよいからです。 もちろん、この後、削除されたプロパティはストレージ定義に表示されなくなりました。
問題解決... ですよね?
(ブブー、間違いです)
後になって、このアプローチはクラスにデータが保存されていないときに機能することがわかりました。 ただし、既存のデータがあるのであれば、重大なデータ参照の問題が発生する可能性があります。
そもそもストレージ定義とは?
ストレージ定義はクラスプロパティとデータベース内のその物理ストレージ場所をリンクするマップとして機能します。
複数のスロットのある本棚とどのスロットに本が収まっているかを追跡するためのリストがあるとします。
InterSystemsを使用してExcelファイルを生成する方法はたくさんあります。ZENレポートやIRISレポート(Logiレポートまたは正式にはJReportsと呼ばれるレポート)のほか、サードパーティのJavaライブラリを使用するなど、可能性はほぼ無限です。
しかし、Caché ObjectScriptだけで単純なスプレッドシートを作成したい場合はどうでしょうか。 (サードパーティアプリケーションを使用せずに、です)
私の場合、大量の生データを含むレポート(金融関係の人たちが好むレポート)を生成する必要がありますが、私のZEN/IRISでは対応できません。私が呼ぶところの「ゼロバイトファイル」が生成され、基本的にJavaのメモリ不足となり、レポーティングサーバーに大きな負荷を生じてしまいます。
これは、Office Open XML(OOXML)を使って実現できます。 Office Open XML形式は、多数のXMLファイルで構成されるZIPパケージです。 つまり基本的には、これらのXMLファイルを生成してZIP圧縮し、.xslxに名前を変更すればよいのです。 それくらい単純です。
ファイルは、Open Packaging Conventionsという単純な命名規則に従っています。
注意事項:前回リリースしましたビルド2021.1.1.324.0には問題があります。 2021.1.1 メンテナンスリリースはWRCから削除し、ビルド2021.1.2.336.0 に更新しています。2021.1.2のコンテナ版はまもなくリリースする予定です。
2種類のメンテナンスリリースが利用可能です。
インストレーションキットやコンテナはWRC ソフトウェア配布サイト からダウンロードできます。 Container images for the Enterprise Editions of InterSystems IRISや IRIS for Health の Enterprise Editionのコンテナイメージ、すべての関連コンポーネントはInterSystems Container Registry から取得できます。
これは、InterSystems FAQサイトの記事です。
ある処理において、データを無期限に保存する必要がなくグローバルの強力な性能が必要になる場合に、IRISTEMP/CACHETEMP データベースに保存される一時グローバルが使用されます。
IRISTEMP/CACHETEMPデータベースはジャーナルされないので、一時グローバルの使用ではジャーナルファイルは作成されません。
IRISTEMP/CACHETEMP データベースは、システムで一時ストレージ用に使用され、ユーザも同じ用途で使用することができます。
一時グローバルとIRISTEMPデータベースの詳細については、以下のドキュメントをご覧ください。
一時グローバルと IRISTEMP データベース
一時グローバルとして使用されるグローバルには以下のようなものがあります。
1. システムテンポラリグローバル(^IRIS.Temp*、^%cspSession、^CacheTemp*、^mtemp* など)
2. ユーザが設定したIRISTEMP/CACHETEMPへのマッピングによる一時グローバル
3. プロセスプライベートグローバル (^||name、^|"^"|name、^["^"]name、^["^",""]name など)
4.
これは、InterSystems FAQサイトの記事です。
オブジェクトに対する一般的な処理をサポートする各種関数を提供しています。
詳細は以下ドキュメントをご参照ください。
オブジェクトへの動的アクセス【IRIS】
オブジェクトへの動的アクセス
サンプルクラス(Sample.Person)を使用して、利用例をご紹介します。
【InterSystems IRIS でご確認いただく場合】
InterSystems IRISでは、サンプル定義の一部を GitHub 上に公開しています。
ダウンロード情報やインポート、データ作成手順については、下記の記事をご参照ください 。
サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について
【Caché/Ensemble/HealthShare でご確認いただく場合】
SAMPLES ネームスペースへ移動してご確認ください。
(1) クラス名の取得:$CLASSNAME(インスタンス
これは、InterSystems FAQサイトの記事です。
マップされたクラス・ルーチンも含めてコンパイルする場合は、コンパイラ修飾子に "/mapped=1" もしくは "/mapped" を指定します。 例えば、以下のように行います。
【例1】クラスリストを取得してコンパイル
【例2】全てのクラスをコンパイル
これは、InterSystems FAQサイトの記事です。
ミラー構成削除時に、ミラー・データベースのミラー属性を削除するオプションを指定しないと、通常データベースに戻すことができず、次回マウント時に読み取り専用でデータベースがマウントされます。 読み書き可能なデータベースに戻すためには、システムルーチン ^MIRROR を使用してミラー属性を削除する必要があります。
手順は以下のとおりです。(%SYSネームスペースで実行します。)
これは、InterSystems FAQサイトの記事です。
現ジャーナルファイル名の取得は、ジャーナリング API を利用します。
##class(%SYS.Journal.System).GetCurrentFileName()
現ジャーナルファイルの使用量bytesの取得は、ジャーナリング API を利用します。
##class(%SYS.Journal.System).GetCurrentFileOffset()
実行例は以下の通りです。
あわせて、以下の関連記事も是非ご覧ください。
これは、InterSystems FAQサイトの記事です。
各プロセスが消費しているメモリの内容は、Windowsリソースモニタの項目のワーキングセット、共有可能、プライベートで確認できます。
これらの内容は以下になります。
ワーキングセット プロセスが使用する物理メモリです。
ワーキングセット(プライベート)とワーキングセット(共有可能)との合計です。
共有可能 プロセスが使用する物理メモリ内で他のプロセスと共有可能なメモリです。
プライベート プロセスが使用する物理メモリ内で他のプロセスと共有不可能なメモリです。
例えば、以下のようにメモリを使用しているプロセスがある場合、ほとんどは共有メモリになっているといえます。
プロセスがアクセスする共有メモリは、データベースキャッシュおよびルーチンキャッシュで使用されているメモリ領域になります。
プロセスが大量にグローバルへのアクセスを行うと、データベースキャッシュへのアクセス量も多くなり、メモリ使用量の共有可能の数値が大きくなります。