クリアフィルター
記事
Mihoko Iijima · 2020年12月1日
これは、InterSystems FAQサイトの記事です。
プログラムでロック情報を取得するには以下2種類の方法があります。
%SYS.LockQuery クラス を使用する方法
SSVN(構造化システム変数)を使用する方法
1. %SYS.LockQuery クラス を使用する方法
#dim rset As %SQL.StatementResult
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List")
set rset=stmt.%Execute()
while rset.%Next() {
write !,rset.%Get("FullReference")
write !,rset.%Get("Owner")
write !,rset.%Get("DelKey"),!
}
より詳細なロック情報を取得する場合には List クエリではなく Detail クエリを使用します。
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List") を
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","Detail") に変更します。
その他 条件を指定してロック情報を取得する事が出来ます。詳細についてはクラスリファレンス(%SYS.LockQuery)【IRIS】をご参照ください。(クラスリファレンス(%SYS.LockQuery))
2. SSVN(構造化システム変数)を使用する方法
以下サンプルは、現在のネームスペースにあるロックを検索し表示します。またローカル変数 LOCKET の配列に検索で見つかったロック名を設定しています。
SET lname=""
FOR I=1:1 {
SET lname=$ORDER(^$LOCK(lname))
IF lname="" { QUIT }
SET LOCKET(I)=lname
WRITE !,"the lock name is: ",lname
}
WRITE !,"All lock names listed"
QUIT
詳細は、^$LOCKについて【IRIS】のドキュメントをご参照ください。
(^$LOCKについて )
記事
Mihoko Iijima · 2020年12月1日
これは、InterSystems FAQサイトの記事です。
以下の例では Test.Class2 クラスの Images プロパティに画像ファイルが保存できるように定義しています。input() メソッドを利用して画像ファイルを Images プロパティに登録し、データベースに保存したとします。
Class Test.Class2 Extends %Persistent
{
Property Images As %Stream.GlobalBinary;
///引数には画像ファイルのフルパスを指定
ClassMethod input(in As %String) As %Status
{
//画像ファイル格納用ストリームのインスタンスを用意
set filestream=##class(%Stream.FileBinary).%New()
//画像ファイルをストリームのインスタンスにリンクさせる
do filestream.LinkToFile(in)
//Test.Class2クラスのインスタンス生成
set o=..%New()
//画像のストリームをTest.Class2のインスタンスにコピー
do o.Images.CopyFrom(filestream)
//インスタンスをデータベースに保存
quit o.%Save()
}
/// 以下Storage定義は省略
}
データベース登録されたストリームデータを画像ファイルに出力するコード例は以下の通りです(ID=1で格納されたデータをオープンしています)。
set file="/ISC/test.JPG"
set filestream=##class(%Stream.FileBinary).%New()
do filestream.LinkToFile(file)
set obj=##class(Test.Class2).%OpenId(1) //保存済オブジェクトのオープン
do filestream.CopyFrom(obj.Images)
set st=filestream.%Save()
記事
Tomoko Furuzono · 2020年11月24日
これは、InterSystems FAQサイトの記事です。
IRISTempデータベースのサイズを小さくする方法は2つあります。
一つは、IRISTempデータベースを再作成する方法です。手順としては、下記を実行します。
IRISの停止
IRISTempデータベースファイルの削除
IRISの起動
これにより、3.のIRIS起動時に、IRISTempデータベースが初期サイズ(1024KB)で再作成されます。
もう一つの方法は、構成パラメータの設定による方法です。構成パラメータ「MaxIRISTempSizeAtStart」を設定することにより、IRIS起動時のIRISTempデータベースの最大サイズを設定できます。
システムは、設定後、次のIRIS起動時に、設定された値(MB)にIRISTempの切り捨てを行います。 指定した MaxIRISTempSizeAtStart よりも現在のサイズが小さい場合は、切り捨ては行われません。また、0 を指定すると切り捨てが行われないため、サイズは変わらないまま起動します。(デフォルト)
設定は、以下メニューから行います。
管理ポータル[システム管理]>[構成]>[追加の設定]>[開始]>"MaxIRISTempSizeAtStart"
詳細は下記ドキュメントページをご確認ください。MaxIRISTempSizeAtStart
記事
Megumi Kakechi · 2021年1月6日
これは InterSystems FAQ サイトの記事です
Web サービス(SOAP)またはREST で IIS を経由してクライアントにエラー応答する際、既定では IISが生成するデフォルトのエラーページ( HTTP 500 エラー )が返されます。
SoapFaultなど、サーバ側で出力したエラーの詳細情報は返されません。
IIS7 以降、WebクライアントがWeb サービスの障害の詳細情報を取得するための設定オプションが追加されました。
HTTP ステータスコードがエラーの場合に、既存の応答をどうするかを existingResponse 属性で指定することができます。
こちらの値を、既定の Auto から PassThrough に変更することで、エラーの詳細情報が返されるように変更できます。※設定変更後、IISの再起動が必要です。
詳細や設定手順については、以下ドキュメントをご参照ください。Microsoft IIS 7 以降の設定手順について【IRIS】
Microsoft IIS 7 以降の設定手順について
※web.config ファイルの手動編集よりも、IIS マネージャに組み込まれている構成エディタ を使用する方法がエラーが少なく安全です。
※HTTP エラー について
お知らせ
Mihoko Iijima · 2022年5月22日
開発者のみなさん、こんにちは!
2022年3月9日開催「InterSystems Japan Virtual Summit 2022」のセッション「オープンソースだけで IRIS on Kubernetes を動かそう」のアーカイブを YouTube に公開いたしました。
(プレイリストはこちら)
Docker は使いこなせるようになってきたけど、Kubernetes はなかなか手を出すチャンスがないな、という方々を対象に手持ちの Windows/PC 上に K8s 環境を構築して色々試すことを最終目標としたセッションです。
開発者コミュニティの記事「microk8sでKubernetesをお手軽に試す」との紙面連動です。
ぜひご参照ください。
【目次】
01:43 Kubernetes について 参考動画:KubernetesでのIRISの運用とそれを支える仕組み
05:48 Microk8S 利用の動機付け
09:50 デモ 記事:microk8sでKubernetesをお手軽に試す の内容に沿ってデモを動かしています。
14:00 デモ - IRIS起動の確認
15:35 デモ - MicroK8S 環境をクラスタ構成にする
17:32 デモ - Longhorn をデプロイする
19:28 デモ - Longhorn を Persistent Volume としてIRISが使用するように構成する
20:58 デモ - ノード障害発生時の動作を確認
23:15 まとめ ↓参考となるオンラインラーニング(英語)↓ https://learning.intersystems.com/course/view.php?name=KubernetesExercise
記事
Hiroshi Sato · 2022年8月8日
これは InterSystems FAQ サイトの記事です。
TCP アダプタを使用するビジネスホストの [接続中を維持(StayConnected)]と[プールサイズ(PoolSize)]のデフォルト設定値は以下の通りです。
StayConnected = -1(常時接続タイムアウト無し)PoolSize = 1
ネットワークの問題でビジネスホストへの接続が切断された場合に、プロダクション側では切断されたことを検知できないため新しい接続を受け付けません。
またこの状況の時、イベントログにも記録されません。
StayConnected が デフォルト値(-1)の場合、接続がタイムアウトしないため新しい接続を受け付けるためには、ビジネスホストを再起動する必要があります。
このような状況を回避するためには、StayConnected を 0 以上の値に設定することを推奨します。
例えば300(秒)に設定した場合、TCP ビジネスホストは 300 秒以上新たなメッセージを受信しなかった場合に、自動的に接続を切断して再接続できます。
処理量の多いシステムの場合には、通常 StayConnected の値をさらに小さな値、例えば 5(秒)に設定します。
記事
Mihoko Iijima · 2024年3月6日
これは InterSystems FAQ サイトの記事です。
Ens.Directorクラスのクラスメソッドを使用して取得できます。
プロダクション名(FAQSample.Interop.Production)とホスト名(FAQSample.Interop.FileOperation)を指定して設定リストを取得する方法は以下の通りです。
Set status=##class(Ens.Director).GetHostSettings("FAQSample.Interop.Production||FAQSample.Interop.FileOperation",.tSettings)
以下、出力結果です。
USER>zwite tSettings
tSettings("AlertGroups")=""
tSettings("AlertOnError")=0
tSettings("AlertRetryGracePeriod")=0
tSettings("ArchiveIO")=0
tSettings("BusinessPartner")=""
tSettings("FailureTimeout")=15
tSettings("InactivityTimeout")=0
tSettings("OutputFileName")="test.txt"
tSettings("QueueCountAlert")=0
tSettings("QueueWaitAlert")=0
tSettings("ReplyCodeActions")=""
tSettings("RetryInterval")=5
tSettings("SendSuperSession")=""
tSettings("ThrottleDelay")=0
GetHostSettingValue()を使用すると、指定のプロダクション、指定コンポーネント内で指定している設定項目値を取得できます。
例はプロダクション名:FAQSample.Interop.Production、オペレーション:FAQSample.Interop.FileOperationで作成している設定値:OutputFileNameの値を取得しています。
Set val=##class(Ens.Director).GetHostSettingValue("FAQSample.Interop.Production||FAQSample.Interop.FileOperation","OutputFileName",.status)
GetAdapterSettingValue()を使用すると、アダプタが提供する設定項目を取得できます。
例はプロダクション名:FAQSample.Interop.Production、オペレーション:FAQSample.Interop.FileOperationのファイルアダプタが提供しているFilePathの値を取得しています。
Set val=##class(Ens.Director).GetAdapterSettingValue("FAQSample.Interop.Production||FAQSample.Interop.FileOperation","FilePath",.status)
この他のメソッド使用方法については、ドキュメント「Ens.Director の使用による設定へのアクセス」をご参照下さい。
記事
Hiroshi Sato · 2021年9月2日
これは InterSystems FAQ サイトの記事です。
$ZF(-100) のコマンドは、以下のフォーマットで使用します。
$ZF(-100, フラグ, コマンド名, コマンドの引数)
OSコマンドを実行する場合は、「/shell」フラグが必要です。例えば mkdir であれば、次のように使用します。
// mkdir C:\temp\newdir Write $ZF(-100, "/shell", "mkdir", "C:\temp\newdir")
コマンドの引数が複数ある場合は、以下の例のように引数の数だけ二重引用符で括ってカンマ区切りで指定します。
// move C:\temp\a.txt C:\temp\a2.txt Write $ZF(-100, "/shell", "move", "C:\temp\a.txt", "C:\temp\a2.txt") // net use Z: \\filesrv\public /user:user password Write $ZF(-100, "/shell", "net", "use", "Z:", "\\filesrv\public", "/user:user", "password")
また、同期・非同期実行は以下のように使用します。
// call BATPATH バッチファイルを呼び出します set BATPATH="C:\temp\test.bat" set status = $ZF(-100, "/shell", "call", BATPATH) // 同期 set status = $ZF(-100, "/shell /async", "call", BATPATH) // 非同期
詳細は以下のドキュメントをご覧ください。$ZF(-100) の使用方法について【IRIS】
$ZF(-100) の使用方法について
尚、$ZF(-100) コマンドが使用可能なバージョンは、January 2018 SV の脆弱性に対応している以下のバージョンになります(2019年1月現在)。
* Caché / Ensemble * 2013.1.7.974.6 2014.1.5.851.3 2015.1.4.803.6 2015.2.5.953.3 2016.1.4.104.2 2016.2.3.903.4 2017.1.3.317.0 2017.2.1.801.3 2017.2.2.865.0
2018.1以降の全てのバージョン
記事
Megumi Kakechi · 2021年8月26日
これは InterSystems FAQ サイトの記事です。
こちらは、コンパイル時に既にそのクラスのインスタンスを開いている場合に起こるエラーです。
対処方としては以下の2つの方法があります。
インスタンスを開いているプロセスまたはアプリケーションを終了する
スタジオのビルドメニュのコンパイルオプション:コンパイルフラグ “使用中のクラスをコンパイル” をチェックしコンパイルを行う
インスタンス化しているプロセスを特定したい場合は、以下のサンプルルーチンをお試しください。
/// Test.mac
search(classname) public {
Set pid=""
Set pid=$order(^$Job(pid))
While pid'="" {
Do checkVars(pid,classname)
Set pid=$Order(^$Job(pid))
}
} checkVars(pid,string) {
Set $ztrap="err"
Set var=""
For {
Set var=$zu(88,1,pid,var) q:var=""
Set val=$zu(88,2,pid,var)
If val[string {
Write !,pid,":",var," = ",val,!
}
}
Quit
err
Set $ztrap=""
Quit
}
こちらのサンプルルーチンは、ユーザプロセスのローカル変数を検索して指定したクラスを使用しているか確認します。
≪実行例≫
USER>do search^Test("Test.Person") 2352:p1 = 1@Test.Person6324:p2 = 2@Test.Person
※この場合は、Pid=2352 と Pid=6324 のプロセスが Test.Person を使用しています。
記事
Tomoko Furuzono · 2025年3月25日
これは、InterSystems FAQサイトの記事です。
SQLでクエリ実行時、ORDER BYで並べ替えをする場合、各RDBMSによって、照合順が異なることがあります。
たとえば、NULLと空文字の混じった文字列のカラムを並べ替える場合、
IRIS SQLでは、既定の照合順は下記のようになりますが、
NULL, 空文字, 0, 00, 01, 1, 10, 100, 11, A, a, B, b
Oracleでは、下記のような照合順になります。
空文字, 0, 00, 01, 1, 10, 100, 11, A, B, a, b, NULL
複数のDB由来のデータを取り扱う際には、このような照合順の違いを合わせたい場合があります。
IRISの場合、既定の文字列照合はSQLUPPERですが、照合タイプを変更することによって、照合順を変えることが出来ます。ドキュメント:照合
上記のIRIS SQLとOracleの違いを合わせるためには、照合タイプを「SQLSTRING」に設定し、インデックスを作成します。
Property TestColumn As %String(COLLATION = "SQLSTRING");
Index IdxTest On TestColumn;
但し、Nullについてはこの方法では対応できないため、Nullの照合順を合わせたい場合には、ORDER BY句を下記のようにします。
ORDER BY IFNULL(TestColumn, 1, 0), TestColumn
記事
Tomoko Furuzono · 2025年3月21日
これはInterSystems FAQサイトの記事です。
大量の更新を行うプログラムで、処理途中に何らかの問題が発生してもデータを初期化して再度実行することができる状況では、プロセスレベルでジャーナリングを無効/有効に変更することが可能です。
※但し、トランザクションのロールバックにはジャーナルが必要ですので、ロールバックを正しく動作させたい場合にはこの方法は使用しないでください。
以下のコマンドを使用します。更新処理の開始と終了(またエラー処理での終了)の際に以下のコマンドを追加します。
//ジャーナリング無効化(停止)
do DISABLE^%SYS.NOJRN
//ジャーナリング有効化
do ENABLE^%SYS.NOJRN
【注意】こちらの機能は、ミラーリング対象のデータベースには使用できません。DISABLE^%NOJRN を使用してジャーナリングを無効にしても、ミラーリングされたデータベースに影響はありません。
詳細は、以下のドキュメントをご参照ください。ドキュメント:DISABLE^%NOJRN を使用したプロセス・レベルでのジャーナリングの管理
記事
Tomoko Furuzono · 2025年4月7日
これはInterSystems FAQサイトの記事です。
指定した文字列式のうち指定したフィールド幅(半角での文字数)に収まる文字数を取得する関数:$ZPOSITIONと、部分文字列を返す関数:$EXTRACTを組み合わせることによって、全角/半角混在文字列から、指定された幅の文字列を取得することが出来ます。※$Extractは文字単位で処理を行いますので、全角/半角を区別した取り扱いはできません。
構文:
$ZPOSITION(<文字列式>, <フィールド幅>, <全角文字に使用するピッチ値(デフォルトは2)>)
$EXTRACT(<文字列>, <開始位置>, <終了位置>)
例:
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字数を取得
USER>set str="あい1234うえお"
USER>write $ZPOSITION(str,10,2)
7
//指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字列を取得
USER>write $extract(str,1,$zposition(str,10,2))
あい1234う
$ZPOSITION、$EXTRACTの詳細については、下記各ドキュメントページをご確認ください。
ドキュメント:$ZPOSITION(ObjectScript)
ドキュメント:$EXTRACT(ObjectScript)
記事
Hiroshi Sato · 2025年1月17日
これは InterSystems FAQ サイトの記事です。
何らかの理由でサーバー移行が必要になった際に、移行前の環境から移行後の環境に設定情報をコピーすることで設定作業を軽減できます。
以下の設定情報を移行できます。
cache.cpf
SQLゲートウェイ設定
CSPゲートウェイ設定 *注1
CAHCESYSデータベースに保存しているユーザー作成ルーチンなど *注2
セキュリティ設定
タスク設定
注1 パスワードを設定している場合には、パスワードのみ手動で再設定が必要です。注2 ^%ZSTART, ^ZMIRRORルーチンなど 優先接続サーバー設定に関しても、物理的には移行可能ですが、Windowsのレジストリー情報をコピーする必要があります。レジストリー情報をコピーして他システムに移行する方法は通常推奨される方法ではありません。
各設定のエクスポート/インポート方法は、以下のリンクをご確認ください。
各設定のエクスポート/インポート方法
また、以下のドキュメントもあわせてご覧ください。
タスクスケジュールをコピーする方法
サーバ移行ガイド
お知らせ
Rie Tokue · 2025年9月9日
いつもお世話になっております。
10月の開発者向けウェビナーの日時、内容が決まりました。
タイトル:「ベクトル検索でカスタマーサービスを向上 - 生成AIチャットボットの構築」
日時:10月16日(木)13時30分~14時
参加費無料・事前登録制
ご登録はこちらから
【概要】IRISのベクトル検索機能を使用した生成AIチャットボットをInterSystems米国本社の教育サービスチームが開発しました。全体アーキテクチャおよびこの構築を通じて学んだベストプラクティスをご紹介します。
本ウェビナーは2025年6月に米国フロリダ州で開催されたReady 2025のセッション”Enhancing Customer Engagement with Vector Search - Building a AI Chatbot"の内容を日本語でお届けします
【こんな方にお勧め】IRISのベクトル検索機能に関心のある方IRISに蓄えられたデータの活用方法を検討されている方生成AIチャットボットに興味のある方
ご多用中とは存じますが、皆様のご参加をお待ち申し上げております。
インターシステムズジャパン
記事
Mihoko Iijima · 2021年3月19日
これは InterSystems FAQ サイトの記事です。
複数の SQL 文を実行する GUI はありませんが、複数の SQL 文を含むファイルを作成しファイルをインポートしながら SQL を実行する方法で対応できます。
ご利用バージョンによって使用するユーティリティメソッドが異なります。
2020.3以降をご利用の場合は %SYSTEM.SQL.Schema クラスの ImportDDL() メソッドを使用します。
2020.2以前をご利用の場合は %SYSTEM.SQL クラスの DDLImport() メソッドを使用します。
1)バージョン 2020.3 以降での方法:%SYSTEM.SQL.Schema クラスの ImportDDL() メソッドの利用
インポート用ファイルに記述するSQL文が複数行ある場合は、記述する SQL の後ろに GO 文を記述する必要があります。
インポートファイル例は以下の通りです。
INSERT INTO Test2.Person (Name) values('test1')
go
INSERT INTO Test2.Person (Name) values('test2')
go
INSERT INTO Test2.Person (Name) values('test3')
go
%SYSTEM.SQL.Schema クラスの ImportDDL() メソッドの利用例は以下の通りです。
第1引数:インポート対象ファイルのフルパス
第2引数:インポート時のログ出力用ファイルのフルパス
第3引数:DDLモードを指定(指定文字詳細はクラスリファレンスをご参照ください)
USER>do $system.SQL.Schema.ImportDDL(file,"/irisdev/src/ddlimport.log","IRIS")
Importing SQL Statements from file: /irisdev/src/inserts.txt
Recording any errors to principal device and log file: /irisdev/src/ddlimport.log
SQL statement to process (number 1):
INSERT INTO Test2.Person (Name) values('test1')
Preparing SQL statement...
Executing SQL statement...
DONE
SQL statement to process (number 2):
INSERT INTO Test2.Person (Name) values('test2')
Preparing SQL statement...
Executing SQL statement...
DONE
SQL statement to process (number 3):
INSERT INTO Test2.Person (Name) values('test3')
Preparing SQL statement...
Executing SQL statement...
DONE
Elapsed time: .010847 seconds
USER>
詳細はドキュメントもご参照ください。
InterSystems SQL のインポート
2)バージョン 2020.2 以下での方法:%SYSTEM.SQL クラスの DDLImport() メソッドの利用
インポート用ファイルに記述するSQL文が複数行ある場合は、記述する SQL の後ろに GO 文を記述する必要があります。
GO 文の他に、SQLの文末に任意の区切り文字を指定することもできます。
以下実行例は、DDLImport() の7番目の引数に指定できる文末の区切り文字にセミコロン(;)を指定した方法の実行例です。
以下のような query.txt を用意しているとします。※文末区切り文字は ";" を指定しています。
C:\temp\query.txt
insert into Sample.Person(Name,SSN) values('test1','999-99-9901');
insert into Sample.Person(Name,SSN) values('test2','999-99-9902');
insert into Sample.Person(Name,SSN) values('test3','999-99-9903');
insert into Sample.Person(Name,SSN) values('test4','999-99-9904');
DDLImport() の7番目の引数に文末区切り文字を指定しながら以下のように実行します。
DO $SYSTEM.SQL.DDLImport("CACHE",$Username,"c:\temp\query.txt",,,,";")
※ 第2引数は必須で、SQLを実行するユーザ名を指定します。例では、現在のユーザを $Username で取得し指定しています(テーブルにアクセスできるユーザを指定してください)。
詳細は、以下のドキュメントをご覧ください。
SQL のインポートについて【IRIS】
SQL のインポートについて