これは、InterSystems FAQサイトの記事です。
クライアントーサーバ接続を担当するスーパーサーバで、SSLバージョン3とTLSバージョン1での通信が可能です。
このオプションを利用することで、通信上のデータを暗号化できます。
その他、Kerberosを使うことで通信上の暗号化も可能です。
これは、InterSystems FAQサイトの記事です。
クライアントーサーバ接続を担当するスーパーサーバで、SSLバージョン3とTLSバージョン1での通信が可能です。
このオプションを利用することで、通信上のデータを暗号化できます。
その他、Kerberosを使うことで通信上の暗号化も可能です。
これはInterSystems FAQサイトの記事です。
大量の更新を行うプログラムで、処理途中に何らかの問題が発生してもデータを初期化して再度実行することができる状況では、プロセスレベルでジャーナリングを無効/有効に変更することが可能です。
※但し、トランザクションのロールバックにはジャーナルが必要ですので、ロールバックを正しく動作させたい場合にはこの方法は使用しないでください。
以下のコマンドを使用します。更新処理の開始と終了(またエラー処理での終了)の際に以下のコマンドを追加します。
//ジャーナリング無効化(停止)do DISABLE^%SYS.NOJRN
//ジャーナリング有効化do ENABLE^%SYS.NOJRN
【注意】
こちらの機能は、ミラーリング対象のデータベースには使用できません。
DISABLE^%NOJRN を使用してジャーナリングを無効にしても、ミラーリングされたデータベースに影響はありません。
詳細は、以下のドキュメントをご参照ください。
ドキュメント:DISABLE^%NOJRN を使用したプロセス・レベルでのジャーナリングの管理
これはInterSystems FAQサイトの記事です。
ISCLOG を有効にすることにより、CSP(REST)アクセスに関連するログ情報を収集できます。これを使用して CSP(REST)でのトラブル時の調査を行うことが可能です。
◎このツールをトラブルシューティングに使用する場合は、基本的に、エラーを(意図的に)再現できる状況で使用します。
他のウェブアクセス等がない状態で、単体実行してエラーを発生させ、このログを取得して調査します。
手順は以下のとおりです。
① ログをクリアします。
//IRISKill^ISCLOG//CachéKill^%ISCLOG
② ロギングレベルを設定します。
Set^%ISCLOG=3
③ CSPでエラーになる処理を行います。
これはInterSystems FAQサイトの記事です。
質問:
オンラインバックアップの保存先にネットワークドライブ(NAS等)を指定することはできますか?
回答:
バックアップの保存先に指定することはできますが、推奨はしておりません。
推奨しない理由は、
オンラインバックアップの最終フェーズにDBアクセスを禁止して処理が実行されますが、 このとき、万一ネットワークエラー等でバックアップ処理がハングアップすることがあれば、システム全体に影響が及ぶリスクがあるからです。
これは InterSystems FAQ サイトの記事です。
埋め込みSQLの出力ホスト変数は、SQLCODE=0(埋め込みSQL正常終了)の場合のみ、正しい値が設定されていることが保証されます。
InterSystems製品のバージョンによっては、SQLCODEが0以外の場合(該当データがない100やエラー等)で値が設定される場合もありますが、その値は無効です。
特に、IRIS2021.1以降のバージョンでは、SQLCODE=100 の場合、INTO 節で指定された出力ホスト変数は NULL("") にクリアされますので注意が必要です。
Cacheや、IRIS2020.x 以前のバージョンでは、明示的な値のクリアを行っておりませんでしたが、こちらについても値は保証されるものではありません。
埋め込みSQLを使用する場合は、必ずSQLCODEを確認してエラーチェックを行うようにして下さい。
また、エラーチェック以外でも、SQLCODE = 0(データあり) の場合と SQLCODE = 100(データなし) の場合は処理を分けるようにし、SQLCODE = 100 の場合は出力ホスト変数を参照しないようご注意ください。
例)
誤った使用例:
これは InterSystems FAQ サイトの記事です。
整合性チェックの目安の時間は、環境により異なってきます。ディスク速度やDBサイズに大きく依存してきます。
同じディスク上に置かれた比較的サイズの小さなDATでまず実施して、サイズと経過時刻からおおよその時刻を推測してください。
また、整合性チェックの方法によって要する時間が変わってきます。
詳細は参考記事で紹介しております「整合性チェックの各方法の違いについて」をご覧ください。
ターミナルで整合性チェックを実行していただく場合は、現在どのデータベース/グローバルのチェックを実行しているのかを出力ログ(画面またはファイル)にて確認することが可能です。
管理ポータルで実行する場合は、整合性チェックの実行プロセスID(※PIDの確認方法)を指定して、ターミナルで以下のコマンドを実行することにより確認することが可能です。
詳細については、ドキュメント をご覧ください。
%SYS>do Display^Integrity("^IRIS.TempIntegrityOutput(2596)") // 整合性チェック実行プロセス(2596)の場合これは InterSystems FAQ サイトの記事です。
整合性チェックを行う場合、管理ポータルやタスクマネージャーから行う方法と、ターミナルから ^Integrity ユーティリティを使用して行う方法があります。
こちらのトピックでは、それぞれの違いをご説明します。
こちらの方法は、選択した複数のデータベースや、1 つのデータベースに格納された選択可能な複数のグローバルを対象に整合性をチェックを行います。
管理ポータル:
[システムオペレーション] > [データベース] 整合性チェック・ボタン
※チェックを行いたいネームスペース、必要に応じてグローバルを選択し、実行・ボタンをクリック
整合性チェックタスク:
[システムオペレーション] > [タスクマネージャー] > [タスクスケジュール] 整合性チェック・タスク
SYS.Database クラスの IntegrityCheck メソッド:
これはInterSystems FAQサイトの記事です。
質問:
データベースファイルが存在するフォルダ全体をコピーしたとき、コピーしたデータベースファイルをマウントできません。なぜですか?
回答:
コピーした データベースファイル(iris.dat / cache.dat)のあるフォルダに、拡張子lck(iris.lck / cache.lck)のファイルが存在していないでしょうか?
InterSystems製品を停止せずに(もしくは、ディスマウントせずに)データベースファイルをコピーした場合、コピー前の情報を保持したままの lckファイルが残ってしまい、コピー後にマウントできない状況になります。
また、InterSystems製品を停止せずにコピーしたデータベースファイルは正しい状態ではないので、問題が生じる可能性があります。
コピー元のInterSystems製品を停止(もしくはディスマウント)した後、再度データベースファイルををコピーし直してください。
これは InterSystems FAQ サイトの記事です。
SQLでのストリームフィールドの取得についてはこちらのドキュメントに記載されております。
例: キャラクターストリームデータの50文字取得する
select substring(field1,1,50) from sample.streamtable%SQL.Statement を使用したクエリでそのストリームオブジェクトのOREF値を取得して、ストリームデータにアクセスすることもできます。
set stmt=##class(%SQL.Statement).%New()
set status = stmt.%Prepare("select field1 from sample.streamtable")
set rs=stmt.%Execute()
write rs.%Next()
set clob=rs.%GetData(1)
write clob.Read(50)埋め込みSQLを使用する場合は、そのストリームオブジェクトのOREFではなくストリームIDが返ってくるので、以下のようにストリームをオープンする処理を追加する必要があります。
これは InterSystems FAQ サイトの記事です。
何らかの理由でサーバー移行が必要になった際に、移行前の環境から移行後の環境に設定情報をコピーすることで設定作業を軽減できます。
以下の設定情報を移行できます。
注1 パスワードを設定している場合には、パスワードのみ手動で再設定が必要です。
注2 ^%ZSTART, ^ZMIRRORルーチンなど 優先接続サーバー設定に関しても、物理的には移行可能ですが、Windowsのレジストリー情報をコピーする必要があります。
レジストリー情報をコピーして他システムに移行する方法は通常推奨される方法ではありません。
各設定のエクスポート/インポート方法は、以下のリンクをご確認ください。
また、以下のドキュメントもあわせてご覧ください。
IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
これは InterSystems FAQ サイトの記事です。
09/04/24-14:37:47:260 (2575554) 2 [Utility.Event] ISCLOG: SuperServer Super Server job slave failure ns=%SYS rtn=%SYS.SERVER 09/04/24-14:37:47:260 (2575554) 2 [Utility.Event] SuperServer failed to start slave server
メッセージログ(cconsole.log/messages.log)の上記のようなログは、スーパーサーバ/SuperServer(既定:1972ポート)に対して外部からリクエストがあったが、リクエストに対応する子プロセスの起動に失敗した場合に記録されます。
スーパーサーバへの新規接続に対してスーパーサーバがJOBコマンド(タイムアウトあり)を実行したが、タイムアウト時間内にJOBコマンドが完了しなかったケースなどが考えられます。
通常こちらは 、システムの負荷が非常に高くJOBコマンドによる子プロセスの生成に時間を要してしまったような、OS レベルの問題である可能性が高いです。
運用に支障がないようであれば、そのような状況は一時的であったと考えられます。
これは InterSystems FAQ サイトの記事です。
InterSystems製品では、システム開始時に任意の処理を追加できます。
データベースミラーリングを構成していない環境では、%ZSTARTルーチンのSYSTEMラベルを作成することで任意の処理を実装できますが、データベースミラーリングを構成している環境では、このルーチンでは動作しない処理があります。
ご参考:^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ
理由として、ミラーリング構成の場合、ミラーデータベースへのアクセスはミラーリングサービスが開始されプライマリメンバとなるまでReadOnlyとなります。
ミラーリングの開始処理は、%ZSTARTの処理とは別プロセスで実施している為、%ZSTARTの実行時にミラーデータベースへ書き込みアクセスができる状態とは限りません。
そのため、InterSystems製品開始時にミラーデータベースにアクセスするような任意処理を追加する場合は、ルーチン:ZMIRRORの NotifyBecomePrimary()を使用します。
なお、ルーチン:ZMIRROR は、%ZSTART と同様に既定では存在しませんので%SYS上に新規で作成する必要があります。
例:ZMIRROR.mac
これは、InterSystems FAQサイトの記事です。
質問:
データ容量を見積もる計算式はありますか?
回答:
正確に見積もるための計算式は残念ながらありません。
InterSystems IRIS Data Platformの場合、データ部に関してはデータを全て可変長で格納しますので、各フィールドの平均がどのくらいであるかという目安の数字で平均レコード長を求め、キー部分も同様の計算を行い、必要な容量の推測値を求める必要があります。
インデックス部に関してはキー圧縮されますので、データと同じような上記の計算を行った推測値よりは少なくなることが期待できます。 ただしその圧縮率はデータの特性に大きく影響されますので、どの程度少なくなるかは一概には言えません。
実データのサンプル(例えば、1万件のデータ)をロードし、その時点でのサイズを確認して想定される件数分のデータ容量を推測するというのが現実的な方法となります。
これは InterSystems FAQ サイトの記事です。
こちらの記事では、タスク履歴の結果内容に、「タスクは 10 Apr 20xx 12:00:00AM 19 Aug 20xx 12:00:00AM から継続中 に有効期限切れになりました」のようなログがある場合、その意味と対処方法について説明します。
このログは、実行予定のタスクをチェックした際に、時間が対象タスクの有効期限を過ぎてしまったために、表示しているログになります。
有効期限を指定していない場合(※)は、次回タスク予定時刻が有効期限になります。
※有効期限の設定は、^TASKMGRユーティリティから行うことができます。
例えば、毎分実行予定のタスクスケジュールがあった場合、実行タスクの実行時間が1分を超える場合、仮に130秒とする場合、1分後と2分後に予定していたタスクスケジュールは実行することができなかったことになります。
この場合、3分後のタスクスケジュール以降実行されることになり、実行されなかったタスクは、「タスクが次のスケジュール時刻を過ぎても実行を続けています」とログされ、次に正常に実行できたタスクの後に「タスクは YYYY-MM-DD hh:mm YYYY-MM-DD hh:mm から継続中 に有効期限切れになりました」のようにログされます(タスク履歴へ)。
これは InterSystems FAQ サイトの記事です。
POST要求で受信したBodyのJSON文字列を、REST ディスパッチクラス内メソッドでダイナミックオブジェクト(%DyamicObject)に変換する際、以下エラーが発生する場合があります。
{
"errors": [
{
"code": 5035,
"domain": "%ObjectErrors",
"error": "エラー #5035: 一般例外 名前 'Premature end of data' コード '12' データ ''",
"id": "GeneralException",
"params": [
"Premature end of data",
12,
""
]
}
],
"summary": "エラー #5035: 一般例外 名前 'Premature end of data' コード '12' データ ''"
}これは InterSystems FAQ サイトの記事です。
ジャーナルファイルの中身を参照したい場合、通常は管理ポータルで参照します。
管理ポータル:
[システムオペレーション] > [ジャーナル] : (該当ジャーナルの名前)参照 リンクをクリック
こちらのページで、外部に保存したジャーナルファイルも参照することができることをご存じでしょうか?
以下のように、ID= の後ろにジャーナルのファイルパスを指定することで、ジャーナルファイルの中身を管理ポータルで参照することが可能です。
http://localhost/iris/csp/sys/op/UtilSysJournal.csp?$ID1=C:\temp\20240826.002z
ジャーナルファイルは、YYYYMMDD.001 の形式でも、YYYYMMDD.002z のような圧縮形式のどちらでも参照可能です。
(ジャーナル圧縮対応バージョン:2022.1 及び 2021.2~)
また、ミラージャーナルファイル(例:C:\temp\MIRROR-MIRRORSET-20240826.001z)も同様に参照可能です。
是非お試しください。
これは InterSystems FAQ サイトの記事です。
方法は2種類あります。
1) 同一サーバにIISとCachéがインストールされている環境をそのままアップグレードする場合は、IRIS(※)インストールキットを起動し「CACHE(CONVERSION)」からCSPゲートウェイとCaché両方をアップグレードします。
2) IISがIRISとは異なるサーバにインストールされている場合は、IRIS用Webゲートウェイキットを利用します。
(※)InterSystems IRISまたはIRIS for Health
それぞれの方法は以下の通りです。
1)同一サーバにIISとCachéがインストールされている環境の「CACHE(CONVERSION)」でのアップグレード方法
a) インストーラーを起動します。
b) CACHE(CONVERSION)を選択します。
c) 「このインスタンスのローカルIIS Webサーバを構成」選択し「次へ」のボタンをクリックします。
d) 「コンバート」ボタンをクリックします。(この後、IRISのライセンスキーの指定を行う必要があります。事前にiris.keyをご用意ください)
2) IRIS用Webゲートウェイキットを利用する方法
a) Webゲートウェイキットを起動します。
b) 「Complete」を選択し「Next」ボタンをクリックします。
これは InterSystems FAQ サイトの記事です。
イベントログの削除には、Ens.Util.LogクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
メッセージの削除には、2種類の方法があります。
1) 2022.1.2以降の導入されたマルチプロセスで削除する方法
Ens.Ens.Util.MessagePurgeクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)
第4引数:メッセージボディも一緒に削除する場合は1を指定
第5引数:デフォルトは500(秒)が設定されていますが、大量のメッセージをパージするとクリアされたビットマップの最適化に時間を要して最適化が完了しない場合があるため、大量削除の場合は 10000000000など大きな値を指定します。
2) Ens.MessageHeaderクラスのPurge()メソッドを使用する方法。
実行時以下の引数を指定します。
第1引数:削除数(参照渡し)
第2引数:保持日数(デフォルト7)
第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)
開発者の皆さん、こんにちは。
試していたWebAPIでは、POST要求時クエリパラメータとボディの両方を送る必要がありましたので、HTTPアウトバウンドアダプタが提供するメソッド:Post()/PostFormDataArray()/PostURL() 辺りをドキュメントで確認していたのですが、残念ながら両方を渡せるように作成された丁度良いメソッドがありませんでした。
ドキュメント:HTTPアウトバウンドアダプタが提供するメソッド
では、どのように送ったかというと、SendFormDataArray()の第3引数を利用して両方の情報を送付してみました。
具体的には、SendFormDataArray()の第2引数にはHTTPメソッド(GET、POST、PUT、DELETEなど)第3引数に%Net.HttpRequestのインスタンスが渡せる仕様になっていましたので、クエリパラメータとボディを%Net.HttpRequestのインスタンスに設定し、第3引数に指定して実行する方法をとりました。
set status=..Adapter.SendFormDataArray(.pHttpResponse,"POST",httprequest)
if$$$ISERR(status) {
return status
}変数httprequestの中身は以下のように作成しています
これは InterSystems FAQ サイトの記事です。
永続クラス定義では、データを格納するグローバル変数名を初回クラスコンパイル時に決定しています。
グローバル変数名は、コンパイル後に表示されるストレージ定義(Storage)で確認できます。
例)
こちらの記事では、既存のユーザ設定をプログラムで変更する方法をご紹介します。
ユーザロールを追加/削除したい、有効期限設定を変更したい、等の場合にお役立てください。
なお、ユーザ設定をプログラムで新規作成する方法は こちら の記事で紹介しております。
これは InterSystems FAQ サイトの記事です。
ジャーナルファイルのサイズが大きすぎて、管理ポータルで検索やフィルタリング等できない場合、以下の2つの方法で参照することができます。
① ^JRNDUMP ユーティリティを使用する方法
② プログラムで参照する方法
============================================================
① ^JRNDUMP ユーティリティを使用する方法 例えば、グローバル参照 ^ABC を含むジャーナルファイルのすべてのレコードを選択する場合は、以下のようになります。
※以下、すべてのコマンドは %SYS ネームスペースで実行してください。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",1)
グローバル参照 ^ABC に完全に一致するレコードのみを選択する場合は、以下のようになります。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",0)
グローバル ^ABC に対するローカルの Set 処理のレコードのみを選択する場合は、以下のようになります。
これは、InterSystems FAQサイトの記事です。
インターシステムズは、特定のオペレーティングシステムのパッチやサービスパックに対して、製品の検証は実施しておりません。
これらの保証については、オペレーティングシステムベンダーが互換性を保証する限りにおいて、提供されます。
まれなケースで、インターシステムズの製品を稼動するために、特定のパッチやサービスパックを必要とするケースもあります。
その様な特別な状況の詳細は、サポートサーバプラットフォームに明記しています。以下ドキュメントをご参照ください。
明記されていない場合には、オペレーティングシステムベンダーが互換性を保証する限りにおいて、パッチやサービスパックもサポート対象となります。
※2022.1以降のバージョンにおいては、OSのマイナーバージョンにおいても検証を実施しております。
これは InterSystems FAQ サイトの記事です。
HTTPレスポンスヘッダ情報を取得したい場合、以下のような方法があります。
開発中などに、送られてきたヘッダの項目名、そのデータを確認したい場合に、是非ご活用ください。
set var=""for {
set var=$order(%request.CgiEnvs(var))
if var=""quitset val=$get(%request.CgiEnvs(var))
write var_": "_val,"<BR>"
}
%Net.HttpRequest クラスの Head メソッドを使用します。
set http = ##class(%Net.HttpRequest).%New()
set http.Server = "localhost"set http.Port = 80do http.Head("/csp/user/menu.csp") // ヘッダ情報をリクエストするURLdo http.HttpResponse.OutputToDevice()
set http = ""通常、Caché でエクスポートしたクラスやルーチンをIRISにインポートすることは可能ですが、IRISよりエクスポートしたクラスやルーチンを Caché にインポートすることはできません。
Caché にインポートしようとすると、以下のようなエラーになります。
USER>do$system.OBJ.Load("C:\temp\test.xml")
ロード開始 07/23/202416:50:42
ファイル C:\temp\test.xml を xml としてロード中
ERROR #6301 行: 2 オフセット: 117 これはCacheエクスポートファイルではありません。インポートできません。
読込時に 1 個のエラーを検出しました。
どうしても、古いバージョンにインポートする必要がある場合、「/exportversion」というエクスポート修飾子を使用することが可能です。
使用方法は以下のようになります。/exportversion には、エクスポートしたルーチンをインポートしたい環境のCacheバージョンを指定します。
USER>write$SYSTEM.OBJ.Export("test.mac","c:\temp\test2.xml","/exportversion=cache2018.1")これは、InterSystems FAQサイトの記事です。
管理ポータルのグローバル変数表示ページでは、サブスクリプトレベルの範囲を指定して表示することが可能です。
各サブスクリプトレベルで、 <開始値>:<終了値> のように指定します。
開始値を省略すると先頭から終了値まで、終了値を省略すると指定値から最後までのグローバル変数を表示します。
《例》
(グローバル全体)
(第2サブスクリプトが"b"のデータだけを表示)

(第3サブスクリプトが300以上のデータを表示)

(第3サブスクリプトが50以下のデータを表示)
下記ドキュメントページも併せてご確認ください。
【ドキュメント】グローバル・データの表示
これは、InterSystems FAQサイトの記事です。
区切り識別子は、区切り文字で囲まれた一意の識別子です。
InterSystems SQL は、その区切り文字として二重引用符 「"」 をサポートしています。
一方、リテラル値を区切る場合は、一重引用符「'」を使用します。
例えば、下記のSQLにおいて、
①は、Nameの値が「AAA」という文字列である、という検索条件と解釈されますが、
②は、Name列 = AAA列、という結合条件と解釈されます。※実際にAAA列が無ければエラーとなります。
①
select * from Samle.Person
whereName = 'AAA'
②
select * from Sample.Person
whereName = "AAA"
リテラル値(文字列、数値)を示す区切り文字として二重引用符「"」を使用したい場合は、
下記を実行し、この区切り識別子サポートするためのオプションを無効にします。
これは、InterSystems FAQサイトの記事です。
既定では、InterSystems製品で表すことのできる日時の最小値は、1840年12月31日 0時0分0秒 です。
USER>write$ZDATETIME("0,0")
12/31/184000:00:00 ですが、アプリ内での用途や、他DBからの登録などで、それよりも前の日付時刻を登録する必要がある場合があります。
その場合には、日付日時のプロパティに、MINVAL(最小値)を設定することでサポートできます。
下記は、%DateTime型、%TeimaStamp型のプロパティに、最小値:西暦1年1月1日0時0分0秒と設定したものです。
Property TestDateTime As %DateTime(MINVAL = "0001-01-01 00:00:00");Property TestTimeStamp As %TimeStamp(MINVAL = "0001-01-01 00:00:00");※2023.3および2024.1以降のバージョンでは、%DateTime型のMINVALの設定は必要なく、1840年12月31日 0時0分0秒より前の日時でも問題なく登録できます。%TimeStamp型の場合は、引き続き設定が必要です。
これは InterSystems FAQ サイトの記事です。
新しいインデックスを定義した後、インデックスの再構築が完了する前にクエリを実行するとデータが存在しているにもかかわらず「検索結果0件」や検索結果数が徐々に増えるような状況が発生します。
インデックスを永続クラス定義(またはテーブル定義)に追加しコンパイルすることで今まで使用していたクエリ実行経路が削除され、再度同じクエリを実行するタイミングで新しいインデックス定義を含めた実行経路が作成されるためです。(この時にインデックス再構築が完了していないとインデックスデータが存在しない、または不完全であるため0件や徐々に検索結果数が増えるような状況を起こします。)
これを起こさなために、新しいインデックスの再構築が終了するまでクエリオプティマイザにインデックスを使用させないように指定する方法が用意されています。
※ 2024/8/2: 2024.1以降から利用できる方法を追加しました。
CREATE INDEXのDEFERオプションを使用します(オプションを付けないCREATE INDEX文では、作成時にインデックスの再構築も同時に行われます)。