クリアフィルター
お知らせ
Seisuke Nakahashi · 2023年10月27日
InterSystems は InterSystems IRIS での VxFS ファイルシステムのサポートを終了し、 IRIS 2023.3 から非推奨とすることを決定しました。 InterSystems は本ファイルシステムを利用しているお客様のサポートを続けますが、新規プロジェクトでの利用を推奨しません。
VxFS は SUSE Linux でのみサポートされていました。対象のお客様は、XFS もしくは別のサポート対象のファイルシステムへの移行をご検討ください。
本件に関するご質問は、弊社担当アカウントチームにお問合せいただくか、 @Bob Kuszewski までご連絡ください。
記事
Mihoko Iijima · 2020年8月5日
IRIS サーバ側で JSON の操作を行う方法を解説します(3つのビデオに分かれています)。
ビデオ① :ダイナミックエンティティの操作練習
ビデオ② :ダイナミックエンティティで利用できるメソッドの練習
ビデオ③ :SQL関数と %JSON.Adapter の使い方
なお、このビデオには、以下の関連ビデオがあります。ぜひご参照ください。
IRISの基本操作についてのビデオ(索引ページ)
InterSystems開発者コミュニティ biginnerタグ一覧
ビデオ①
このビデオの目次は以下の通りです。
最初~ 復習ビデオ/関連ビデオについて など
IRIS で 作成する REST サーバの仕組み
手動によるRESTディスパッチクラスの作成
APIファーストによるRESTディスパッチクラスの作成
2:05~ JSONとは?
3:26~ JSONオブジェクト:ダイナミックエンティティの作成
//%DynamicObjectを使用した例
set json=##class(%DynamicObject).%New()
set json.Name="テスト太郎"
set json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
//{"Name":"テスト太郎","Address":"東京都新宿区"}
//リテラルJSONコンストラクタ {} を使用した例
set json={} // %DynamicObjectと一緒
set json.Name="テスト太郎",json.Address="東京都新宿区"
write json.%ToJSON()
// 出力結果は以下の通り
//{"Name":"山田太郎","Address":"東京都新宿区"}
7:25~ JSON配列:ダイナミックエンティティでの作成例
//%DynamicArrayを使用した例
set array=##class(%DynamicArray).%New()
set array."0"="配列1" //配列はインデックス番号0からスタート
set array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
//["配列1","配列2"]
//リテラルJSONコンストラクタ [] を使用した例
set array=[] //%DynamicArrayと一緒
set array."0"="配列1",array."1"="配列2"
write array.%ToJSON()
// 出力結果は以下の通り
//["配列1","配列2"]
9:49~ ダイナミックエンティティ操作用のメソッド
※ ビデオ②に続きます
先頭へ戻る
ビデオ②
もくじは以下の通りです。
00:00~ %Set()、%Get()、%Remove() オブジェクト編
set obj={}
set obj.Name="山田太郎"
do obj.%Set("Zip","160-0023")
do obj.%Set("Tel","03-5321-6200")
write obj.%ToJSON()
write obj.%Get("Zip")," - ",obj.%Get("Name")
do obj.%Remove("Zip")
write obj.%ToJSON()
set obj.Pref="東京都"
write obj.%ToJSON()
do obj.%Set("City","新宿区")
write obj.%ToJSON()
02:02~ %Set()、%Get()、%Remove() 配列編
set array=[]
do array.%Set(0,"最初")
write array.%ToJSON()
set array."4"="最後" //set array."番号"="値" は array.%Set("番号","値")と同等
do array.%Set(2,"真中")
write array.%ToJSON()
do array.%Pop()
write array.%ToJSON()
do array.%Push("Pushしたデータ")
write array.%ToJSON()
do array.%Remove(1) // 左から2番目の null を削除
write array.%ToJSON()
03:34~ JSON配列 要素の操作:%Size()、%Get()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
for i=0:1:array.%Size()-1 w array.%Get(i),!
// 出力結果は以下の通り
最初
最後
05:20~ 値が有効値かどうか確認する %IsDefined()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
for i=0:1:array.%Size()-1 {write array.%Get(i)," - 有効値?",array.%IsDefined(i),!}
// 出力結果は以下の通り
最初 - 有効値?1
- 有効値?1
- 有効値?1
- 有効値?0
最後 - 有効値?1
07:38~ 反復処理:配列の場合:%GetIterator()
set array=["最初",null,""]
do array.%Set(4,"最後") // インデックス番号3 はJSONのnullを設定
write array.%ToJSON()
// 出力結果は以下の通り
["最初",null,"",null,"最後"]
set iter=array.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value= ",val,! }
// 出力結果は以下の通り
0 - value= 最初
1 - value=
2 - value=
4 - value= 最後
09:55~ 反復処理:オブジェクトの場合:%GetIterator()
set obj={"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"}
write obj.%ToJSON()
// 出力結果は以下の通り
{"Name":"山田太郎","Zip":"160-0023","Pref":"東京都","City":"新宿区"} set iter=obj.%GetIterator()
set iter=obj.%GetIterator()
while iter.%GetNext(.key,.val) { write key," - value= ",val,! }
// 出力結果は以下の通り
Name - value= 山田太郎
Zip - value= 160-0023
Pref - value= 東京都
City - value= 新宿区
10:11~ JSON null/true/false (ObjectScriptの中での対応)
set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i),! }
// 出力結果は以下の通り
0 -
1 - 1
2 - 0
3 - 1
4 - 0
5 -
6 -
7 - 値あり
11:40~ JSONのデータタイプを確認する= %GetTypeOf()メソッド
set array=[null,true,false,1,0,""]
set array."7"="値あり"
for i=0:1:array.%Size()-1 {write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 - - null
1 - 1 - boolean
2 - 0 - boolean
3 - 1 - number
4 - 0 - number
5 - - string
6 - - unassigned
7 - 値あり - string
12:32~ JSONのデータタイプを指定して値を設定する
set array=[]
do array.%Set(0,"","null") // 第2引数はスクリプト上のnull
do array.%Set(1,1,"number") //数字の1として設定
do array.%Set(2,0,"number") //数字の0として設定
do array.%Set(3,1,"boolean") // booleanの1=trueとして設定
do array.%Push(0,"boolean") // booleanの0=false として設定
for i=0:1:array.%Size()-1 { write i," - ",array.%Get(i)," - ",array.%GetTypeOf(i),! }
// 出力結果は以下の通り
0 - - null
1 - 1 - number
2 - 0 - number
3 - 1 - boolean
4 - 0 - boolean
write array.%ToJSON()
// 出力結果は以下の通り
[null,1,0,true,false]
13:38~ ObjectScriptの変数や表現式を [] や {} で使用する方法
set obj={"日付":($ZDATE($H,16)),"時刻":($ZTIME($PIECE($H,",",2)))}
write obj.%ToJSON()
set mgr=$system.Util.ManagerDirectory()
set array=[($system.Util.InstallDirectory()),(mgr)]
write array.%ToJSON()
※ ビデオ③へつづきます
先頭へ戻る
ビデオ③
もくじは以下の通りです。
00:00~ テーブルデータをJSONオブジェクト、JSON配列で取得する方法 概要
関連ビデオのご紹介
基本操作についてのビデオ(索引ページ)
【はじめての InterSystems IRIS】セルフラーニングビデオ:基本その3:IRIS でクラス定義を作ろう(オブジェクト操作の練習)
(Test.Personの作り方を確認する場合に良いビデオ) 上記ビデオの 13:20~(スタジオでの操作)/18:44~(VS Code での操作) で作成方法を紹介しています。
00:54~ SQL:SELECTでの操作 JSON_OBJECT()関数 説明と実演
管理ポータル→システムエクスプローラ→SQL を開き対象ネームスペースに移動後 クエリ実行タブで以下実行します。
SELECT JSON_OBJECT('Name':Name,'Email':Email) ABSENT ON NULL as json from Test.Person
02:42~ JSON_OBJECT()例(埋込SQLでの実行例)
Class Test.JSONTest
{
ClassMethod GetAllPerson()
{
//埋込SQL
&sql(declare C1 cursor for
select JSON_OBJECT('Name':Name,'Email':Email) as json into :json from Test.Person)
&sql(open C1)
set array=[]
for {
&sql(fetch C1)
if SQLCODE'=0 {
quit
}
set obj={}.%FromJSON(json)
do array.%Push(obj)
}
&sql(close C1)
write array.%ToJSON()
}
}
//実行文
do ##class(Test.JSONTest).GetAllPerson()
07:00~ SQL:SELECTでの操作 JSON_ARRAY()関数
管理ポータル→システムエクスプローラ→SQL を開き対象のネームスペースに移動後 クエリ実行タブで以下実行します。
SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person
07:50~ JSON_ARRAY()例(ダイナミックSQL実行例)
ClassMethod GetAllPersonArray()
{
set sql="SELECT JSON_ARRAY(Name,Email ABSENT ON NULL) as array from Test.Person"
set stmt=##class(%SQL.Statement).%New()
set status=stmt.%Prepare(sql)
set rset=stmt.%Execute()
set root=[]
while rset.%Next() {
set array=[].%FromJSON(rset.%Get("array"))
do root.%Push(array)
}
do root.%ToJSON()
}
//実行文
do ##class(Test.JSONTest).GetAllPersonArray()
08:59~ JSONアダプタ(%JSON.Adapter)
set person=##class(Test.Person).%OpenId(1)
set status=person.%JSONExport()
write status
10:08~ オブジェクト→JSON文字列を含むストリーム %JSONExportToStream() 説明と実演
set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToStream(.jstream)
write st
write jstream.Read()
write jstream.Rewind()
set jobj={}.%FromJSON(jstream.Read())
write jobj.Name
write jobj.Email
12:59~ オブジェクト→JSON文字列にマッピング %JSONExportToString()
set person=##class(Test.Person).%OpenId(1)
set st=person.%JSONExportToString(.jstring)
write st
write jstring
set jobj={}.%FromJSON(jstring)
write jobj.Name
write jobj.Email
13:20~ JSON文字列→オブジェクトへのマッピング %JSONImport()
set json={}
set json.Name="ジェイソン", json.Email="json@mail.com"
zwrite json
set p1=##class(Test.Person).%New()
set st=p1.%JSONImport(json)
write st
14:24~ 確認できたこと
《2024/1/16追記》ビデオには含まれていませんが、バージョン2023.3以降でJSON配列に情報を追加できる add()メソッド、JSON配列同士の結合に便利な addAll()メソッドが追加されました。
USER>set a1=["a","b","c"]
USER>do a1.add("追加")
USER>zwrite a1
a1=["a","b","c","追加"] ; <DYNAMIC ARRAY>
USER>
USER>set a2=[1,2,3]
USER>do a1.addAll(a2)
USER>zwrite a1
a1=["a","b","c","追加",1,2,3] ; <DYNAMIC ARRAY>
先頭へ戻る ビデオには含まれていませんが、JSON配列同士の結合ができるメソッドなどが追加されましたので、本文末尾に追記しています。ぜひご確認ください。
記事
Hiroshi Sato · 2022年3月23日
質問
現在使っているリレーショナルデータベースからInterSystems IRIS Data Platformに移行することは可能ですか?
答え
InterSystems IRIS Data Platform(以下IRISと表記)は、SQLをサポートしていますので、多くの場合リレーショナルデータベースで構築されたアプリケーションは、大部分のコードを変更することなくIRISに移行することができます。
ただしSQLの各実装毎にSQL標準を拡張した仕様等があり、それにIRISが全て対応していませんので、コードの書き換えが必要なケースもあります。
また各実装が独自に用意した標準でない通信系API等にも対応していませんので、その場合にはJDBC、ODBCなどの標準的な通信APIに置き換える必要があり、かなり書き換えが必要になります。(使用されているSQL文等はそのまま流用可能な場合が多いです。)
さらにそのままコードを移行できるケースであっても動作保証はできませんので、必ず動作確認のためのテスト作業は必要になります。
以上のことから他データベースシステムからIRISシステムへの移行には相応の移行コストがかかるため、移行は必ずしも容易とは言えませんが、それでも移行を決断されたお客様はたくさんおられます。
そしてほとんどのお客様は移行したシステムの性能、開発生産性、保守性、運用の容易さ等に満足されております。
質問
ima · 2025年9月1日
1. 現象
>w $zvIRIS for Windows (x86-64) 2024.3 (Build 217U) Thu Nov 14 2024 17:59:58 EST
大きなXMLファイル(約165MB)をライブラリー%XMLでパースすると、<FILEFULL>エラーが発生する。
エラーパート
s libraryFile = "D:\iTunes3\iTunes Library.xml" ;サイズ=165M w !,"libraryFile = ",libraryFile w !,"##class(%File).GetFileSize(libraryFile)=",##class(%File).GetFileSize(libraryFile) w !,"s sc=##class(%XML.TextReader).ParseFile(libraryFile,.reader) 実行" Set sc = ##class(%XML.TextReader).ParseFile(libraryFile,.reader) w !,$SYSTEM.Status.GetErrorText(sc) q
libraryFile = D:\iTunes3\iTunes Library.xml##class(%File).GetFileSize(libraryFile)=165739267s sc=##class(%XML.TextReader).ParseFile(libraryFile,.reader) 実行エラー #6301: SAX XMLパーサエラー: <FILEFULL>startElement+3^%XML.SAX.Utils.Sequencer.1 ^||IRIS.Temp(4,13592576),c:\intersystems\iris1\mgr\iristemp\ while processing D:\iTunes3\iTunes Library.xml at line 2280394 offset 34USER>
上の処理と同時に同じネームスペースで、##Class(%Stream.TmpCharacter) の処理をしていて、それも
エラー #5002: ObjectScript エラー:<FILEFULL>SetupTmpGbl+3^%Stream.GlobalCharacter.1 ^||%IRIS.Stream,c:\intersystems\iris1\mgr\iristemp\
で止まる。
また、起動していた、システム管理ポータルも次の遷移時に
エラー #5002: ObjectScript エラー:<FILEFULL>GetCSPClassName+18^%SYS.cspServer ^IRIS.TempCSP("ClsN","%SYS","/iris1/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen","/iris1/csp/sys/%CSP.Broker.cls"),c:\intersystems\iris1\mgr\iristemp\
で止まる。この時、各処理をHALTしないで、IRISのSTOPをすると、止まらい場合があり、強制終了(iris force IRIS1)が必要な場合があった。
直接の原因は、IRISTEMP(c:\intersystems\iris1\mgr\iristemp\)のIRIS.DATで <FILEFULL>エラー(空きなし)が起こっている。
2. 再現検証テスト
いろいろ調べましたが、問題は、「IRISTEMP のサイズがある値(240M、276M、282M あたり)以上に拡張されない」ことにあるのでないかと思います。以下、その簡単な検証テストです。
1) IRIS(インスタンス名=IRIS1)を停止
2)C:\InterSystems\IRIS1\mgr\iristemp\IRIS.DAT (現サイズ282.624KB) を削除
3) IRIS1 起動
4) ターミナル %SYS
%SYS>d ^DATABASE (管理ポータル > システムオペーレション > データベース > IRISTEMP の代わり) 1) Create a database 2) Edit a database 3) List databases 4) Delete a database 5) Mount a database 6) Dismount a database 7) Compact globals in a database 8) Show free space for a database 9) Show details for a database10) Recreate a database11) Manage database encryption12) Return unused space for a database13) Compact free space in a database14) Defragment a database15) Show background database tasks16) Manage multi-volume database properties Option? 9Database directories? C:\InterSystems\IRIS1\mgr\iristemp\
Directory: c:\intersystems\iris1\mgr\iristemp\MirrorDBName:MaxSize: 0Size: 1Status: マウント/RWBlockSize: 8192ClusterMountMode: 0ClusterMounted: 0ExpansionSize: 0LastExpansionTime:Mounted: 1NewGlobalCollation: IRIS standardNewGlobalGrowthBlock: 50NewGlobalIsKeep: 0GlobalJournalState: いいえNewGlobalPointerBlock: 16ReadOnly: 0ResourceName: %DB_IRISTEMPMountedReadOnly: 0EncryptedDB: 0EncryptionKeyID:NewVolumeThreshold: 0NewVolumeDirectory: c:\intersystems\iris1\mgr\iristemp\MultiVolume: 0Configured DB Name: IRISTEMPMount Required At Startup: Yes 8) Show free space for a databaseOption? 8Database directory to show free space for (*=All)? C:\InterSystems\IRIS1\mgr\iristemp\ Database Free Space Sep 01 2025 9:10 AMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 1MB 0.17MB 17 70.25GB IRIS.DATのエクスプローラサイズ 初期値 1M
5) ターミナル USER
テンポラリーグローバル ^||...に大量書き込み
USER>s d=$j(" ",1024*1024) try {f i=1:1:300 w:i#50=0 " ",i s ^||temp(i)=d} catch {w !,"$ze=",$ze,!!,"i=",i} 50 100 150 200 250$ze=<FILEFULL> ^||temp(273),c:\intersystems\iris1\mgr\iristemp\ i=273
同様 IRISTEMPで <FILEFULL> エラーi=300 まで行かない。IRISTEMPのサイズ拡張が止まり、空き領域なしでエラー?
6) ターミナル %SYS>d ^DATABASE
Database Free Space Sep 01 2025 9:16 AMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 276MB 0.62MB 0 <- 69.98GB %Free=0エクスプローラ IRIS.DAT サイズ 282,624KB
7) ターミナル USER HALT
空き領域は回復
8) ターミナル %SYS>d ^DATABASE
Database Free Space Sep 01 2025 9:18 AMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 276MB 275MB 100 69.98GB
9) %SYS で 実行
%SYS>s d=$j(" ",1024*1024) try {f i=1:1:300 w:i#50=0 " ",i s ^||temp(i)=d} catch {w !,"$ze=",$ze,!!,"i=",i} 50 100 150 200 250$ze=<FILEFULL> ^||temp(273),c:\intersystems\iris1\mgr\iristemp\ i=273
同様にエラー。%SYSでも、テンプグローバル ^||... は、IRISTEMを使っている。
Database Free Space Sep 01 2025 9:21 AMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 276MB 0.57MB 0 <- 69.98GB %SYS>k ^||temp %SYS>d ^DATABASE Database Free Space Sep 01 2025 9:22 AMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 276MB 275MB 100 69.98GB エクスプローラ IRIS.DAT サイズ 282,624KB 変わらず。
%SYSも含め、すべてのネームスペースのTemp Storageは、同じ IRISTEMP にマップされている。
3. その他テスト
3.1 管理ポータル/ローカルデータベースでサイズ拡大処理
管理ポータル > システム管理 > 構成 > システム構成 > ローカルデータベース
名前 IRISTEMPディレクトリ c:\intersystems\iris1\mgr\iristemp\ブロックサイズ 8192 バイトサイズ (MB) 現在 240 (>=240)拡張 0 デフォルトは0最大 0 0で無制限になりますリソース名 %DB_IRISTEMP
で、現在の値を、500等、より大きな値を入れるが、270 -> 276 になるが、これ以上大きくならない。拡張に10,100等を指定するが効果なし。ちなみに、IRIS.DATサイズの初期値が 1M の時は、現値に、500 入れると、一覧表示のステータスが 拡大中となる。しかし、276M で拡張が止まる。
3.2 新データベース MYTEMP を作成、Temp Storage にマップするが、マップされていない
通常のIRIS.DATの様に拡張可能性を期待してMYTEMPという別のデータベースを新規に作り、管理ポータル > ネームスペースで 既存別ネームスペース(USER2) のTemp Storageを IRISTEMP から MYTEMP に設定、テストしました。
管理ポータル > システム管理 > 構成 > システム構成 > ネームスペース
Namespace Globals Routines Temp Storage %SYS IRISSYS IRISSYS IRISTEMP グローバルマッピング ルーチンマッピング パッケージマッピング - (変更削除不可) USER USER USER IRISTEMP グローバルマッピング ルーチンマッピング パッケージマッピング 削除 USER2 USER2 USER2 MYTEMP グローバルマッピング ルーチンマッピング パッケージマッピング 削除 %SYS>d ^DATABASE Database Free Space Sep 01 2025 9:30 AMDatabase Max Size Size Available %Free Disk Freed:\intersystems\iris1\mytemp\ 無制限 240MB 239MB 100 155.09GB エクスプローラ IRIS.DAT サイズ 282,624KB
(管理ポータル > ローカルデータベースで 現在の値を、500に入れても、240Mのまま、無駄な?拡張は避けている模様?)
USER2 >s d=$j(" ",1024*1024) try {f i=1:1:300 w:i#50=0 " ",i s ^||temp(i)=d} catch {w !,"$ze=",$ze,!!,"i=",i} 50 100 150 200 250$ze=<FILEFULL> ^||temp(273),c:\intersystems\iris1\mgr\iristemp\ i=273
エラーから、Temp Strage が D:\InterSystems\IRIS1\MYTEMP\ でなく c:\intersystems\iris1\mgr\iristemp\Temp Storageが指定通りにマップされていない模様?
3.3 IRIS修理再インストール
c:\intersystems\iris1\mgr\iristemp\IRIS.DAT を削除後IRIS_Community-2024.3.0.217.0-win_x64.exeを修理再インストールするが、システム変更されていませんとなり、¥iristemp¥ には、何も作られない状態でした。
起動後
message.logに09/01/25-13:55:51:991 (6084) 0 [Utility.Event] Creating missing IRISTEMP database in C:\InterSystems\IRIS1\mgr\iristemp09/01/25-13:55:52:017 (6084) 0 [Database.MountedRW] Mounted database c:\intersystems\iris1\mgr\iristemp\ (SFN 3) read-write.09/01/25-13:55:52:021 (6084) 0 [Utility.Event] C:\InterSystems\IRIS1\mgr\iristemp\ initialized as IRISTEMPのログあり
管理ポータル > システムオペーレション > データベース > IRISTEMP
ディレクトリ: c:\intersystems\iris1\mgr\iristemp\ リソース名: %DB_IRISTEMP マウント: はい 読込専用: いいえ 読み取り専用の理由: 暗号化: いいえ 暗号化キーID: データベースサイズ ブロックサイズ: 8192 ブロック: 1408 最大サイズ: 無制限 サイズ: 11MB 拡張サイズ: システムデフォルト 利用可能空き容量: 9.9MB % 空き容量: 90% ディスク空き容量: 69.63GB 最終拡張時刻: 09/01/2025 13:56:24 フル: いいえ 新しいボリュームしきい値サイズ(MB): 0
でした。
%SYS>d ^DATABASE Database Free Space Sep 01 2025 1:57 PMDatabase Max Size Size Available %Free Disk Freec:\intersystems\iris1\mgr\iristemp\無制限 11MB 9.9MB 90 69.63GB USER>s d=$j(" ",1024*1024) try {f i=1:1:300 w:i#50=0 " ",i s ^||temp(i)=d} catch {w !,"$ze=",$ze,!!,"i=",i} 50 100 150 200 250$ze=<FILEFULL> ^||temp(273),c:\intersystems\iris1\mgr\iristemp\ i=273
4. 問題
問題1:IRISTEMP のサイズが拡張されない
管理画面や ^DATABASE で「無制限」と表示されていても、IRISTEMP の実際の物理ファイル(IRIS.DAT)は 276MB までで拡張が止まる。拡張サイズ設定(10MB、100MB)を変更しても意味がなかった。0 指定は、あるデフォルトの拡張サイズがある?このため、大容量処理(例:165MB の XML パース)で TEMP が不足し <FILEFULL> が発生する。
問題2:Temp Storage に MYTEMP を設定しても無視される
管理画面で名前空間の Temp Storage を MYTEMP に設定しても、実際には IRISTEMP にマップされている。IRISTEMPは、%SYS他のすべてのネームスペースで、Temp Storageとし共有されているため、特別な保護処置や制約等があるのでは?
確認してほしい事
a) IRISTEMP が物理的に 276MB 以上拡張されない理由 (設定は無制限、拡張サイズも十分、ディスク空きもあるにもかかわらず)
b) Temp Storage に別データベース(MYTEMP)を指定しても、IRISTEMP が使用される理由
c) TEMP 領域が大量に必要となる処理(例:XML パース)への対応策
d) IRISTEMP の安全な拡張手順または再作成方法
よろしくお願いします。 @ima さん、こんにちは。
同じバージョンで確認してみました(IRIS_Community-2024.3.0.217.0-win_x64.exe をインストールした環境で試しました)。
インストール直後に、同じコマンドを USER ネームスペースで実行したところ、サイズは異なりますが、同様に FILEFULL エラーが発生しました。
USER>s d=$j(" ",1024*1024) try {f i=1:1 w:i#50=0 " ",i s ^||temp(i)=d} catch {w !,"$ze=",$ze,!!,"i=",i}
50 100 150 <一部省略> 10000
$ze=<FILEFULL> ^||temp(10047),c:\intersystems\iris1\mgr\iristemp\
i=10047
この時、メッセージログ(管理ポータル > システムオペレーション > システムログ > メッセージログ)の末尾を参照すると以下エラーが記録されていました。
09/08/25-14:40:24:013 (3644) 1 [Generic.Event] License limit restricts expansion of c:\intersystems\iris1\mgr\iristemp\ to 58112 additional blocks09/08/25-14:40:24:014 (3968) 0 [Database.StartExpansion] Starting Expansion for database c:\intersystems\iris1\mgr\iristemp\. 454 MB requested.09/08/25-14:40:24:014 (3968) 0 [Database.ExpLimited] License restrictions limit the expansion of database c:\intersystems\iris1\mgr\iristemp\ to 454MB.09/08/25-14:40:24:603 (3644) 1 [Generic.Event] License limit restricts expansion of c:\intersystems\iris1\mgr\iristemp\ to 49920 additional blocks09/08/25-14:40:27:895 (3968) 0 [Database.FullExpansion] Expansion completed for database c:\intersystems\iris1\mgr\iristemp\. Expanded by 454 MB.09/08/25-14:40:31:322 (3644) 3 [Generic.Event] License limit prevents expansion of c:\intersystems\iris1\mgr\iristemp\
このエラーの原因ですが、コミュニティエディションでは、データーベース全体のサイズに制限があり 10GB までとされています。
そのため、全体で 10GB を迎えるとデータベースの拡張ができず、FILEFULL エラーが発生し途中で処理が停止してしまった状況と考えられます。
最新バージョンのドキュメントの制限事項の説明👉「InterSystems IRIS Community Edition Limitations」
処理を継続させるためには、他のユーザ作成データベースのサイズを縮小するなど行っていただく必要があります。
ご参考:データベースファイルのサイズを圧縮する方法
次に、
「b) Temp Storage に別データベース(MYTEMP)を指定しても、IRISTEMP が使用される理由」 についてですが、プロセスプライベートグローバル(実行例の ^||temp)は必ず IRISTEMP に格納されるため、格納場所を IRISTEMP から作成された仮ストレージのデータベースに変更できないようでした。
「d) IRISTEMP の安全な拡張手順または再作成方法」についてですが、大きくなりすぎてしまった IRISTEMP を安全に縮小する方法を以下記事でご紹介しています。
IRISTempデータベースの縮小方法
以下補足です。
全体のデータベースサイズの制限を超えての利用はできないのですが、現在ご利用いただいている %XML.TextReader の ParseFile() の 8 番目の引数にテンポラリグローバルのデフォルト名が設定されています(^||IRIS.Temp)。
8番目の引数に任意のグローバル変数名を指定することで IRISTEMP ではない場所に記録することもできます。
final classmethod ParseFile(Filename As %String, Output TextReader As %XML.TextReader, Resolver As %XML.SAX.EntityResolver = $$$NULLOREF, Flags As %Integer = $$$SAXDEFAULTS, Mask As %Integer = $$$SAXCONTENTEVENTS, SchemaSpec As %String = "", KeepWhiteSpace As %Boolean = 0, GlobalName As %String = "^||IRIS.Temp") as %Status
@Iijimaさん
コミュニティエディションの制限、了解しました。ありがとうございました。
記事
Mihoko Iijima · 2022年4月8日
これは、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)はすべて同じ値が返っています。
Dumping result #1
DatabaseName Directory MaxSize Size ExpansionSize AvailableFreeDiskFreeSpace Status SizeInt AvailableNum DiskFreeSpaceNum ReadOnly
IRISSYS c:\intersystems\irishealth3\mgr\ 無制限 159MB システムデフォル ト 18MB 11.32 245.81GB マウント/RW 159 18 2517050
ENSLIB c:\intersystems\irishealth3\mgr\enslib\ 無制限 226MB システムデフォル ト 19MB 8.4 245.81GB マウント/R 226 19 2517051
<一部省略>
IRISTEMP c:\intersystems\irishealth3\mgr\iristemp\ 無制限 51MBシス テムデフォルト 49MB 96.07 245.81GB マウント/RW 51 49251705 0
USER c:\intersystems\irishealth3\mgr\user\ 無制限 31MB システムデフォル ト 8.5MB 27.41 245.81GB マウント/RW 31 8.5 2517050
参照したいデータベースディレクトリを指定したい場合は、以下のように実行します。
// 参照したいデータベースディレクトリのフルパスを $LISTBUILD() 関数を使用して用意します。
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set rset=stmt.%Execute(dbdir)
do rset.%Display()
指定のデータベースディレクトリのデータベース名(DatabaseName)、現在サイズ(Size)MB、利用可能空き容量(Available)MB、空きサイズ(Free)%、ディスクの空き容量サイズ(DiskFreeSpace)GB のみを取得したい場合は以下の流れで実行します(VSCodeやスタジオで %SYSネームスペースに接続した状態でルーチン/クラスを作成し、コードを記述してください)。
Class ZMyClass.Utils
{
ClassMethod GetDiskFreeSpace()
{
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute(dbdir)
while(rset.%Next()) {
write rset.%Get("DatabaseName")," - ",
rset.%Get("Size")," - ",rset.%Get("Available")," - ",
rset.%Get("Free"),"% - ",rset.%Get("DiskFreeSpace"),!
}
}
}
メモ:%SYSネームスペースにユーザ定義のルーチンやクラスを置く場合、Zから始まる名称で作成することで、アップグレードインストール後にもユーザ定義のソースコードが残ります。
実行例は以下の通りです。
USER>zn "%SYS"
%SYS>do ##class(ZMyClass.Utils).GetDiskFreeSpace()
IRISSYS - 159MB - 18MB - 11.32% - 245.81GB
USER - 31MB - 8.5MB - 27.41% - 245.81GB
%SYS>
この記事の関連記事もあります。以下ご参照ください。
データベースのあるディスクの空き容量を確認し、指定サイズを下回る場合に通知する方法の例
記事
Minoru Horita · 2020年7月28日
この連載記事では、InterSystemsデータプラットフォーム用の[Python Gateway](https://openexchange.intersystems.com/package/PythonGateway)について説明します。 また、InterSystems IRISからPythonコードなどを実行します。 このプロジェクトは、InterSystems IRIS環境にPythonの力を与えます。
- 任意のPythonコードを実行する
- InterSystems IRISからPythonへのシームレスなデータ転送
- Python相互運用アダプタでインテリジェントな相互運用ビジネスプロセスを構築する
- InterSystems IRISからのPythonコンテキストの保存、調査、変更、復元
# その他の記事
現時点での連載計画です(変更される可能性があります)。
- [パート I:概要、展望、紹介](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0i%EF%BC%9A%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
- [パート II:インストールとトラブルシューティング](https://jp.community.intersystems.com/post/python%C2%A0gateway%C2%A0%E3%83%91%E3%83%BC%E3%83%88%C2%A0ii%EF%BC%9A%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%C2%A0)
- [パート III:基本機能](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88iii%EF%BC%9A%E5%9F%BA%E6%9C%AC%E6%A9%9F%E8%83%BD)
- [パート IV:相互運用アダプタ](https://jp.community.intersystems.com/post/python-gateway-%E3%83%91%E3%83%BC%E3%83%88-iv%EF%BC%9A%E7%9B%B8%E4%BA%92%E9%81%8B%E7%94%A8%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)
- パート V:Execute関数
記事
Mihoko Iijima · 2022年7月13日
これは InterSystems FAQ サイトの記事です。
管理ポータルメニュー [Interoperability] > [構成] > [システムのデフォルト設定] で設定したデータを移行する場合、設定値が格納されているグローバル変数をエクスポートし、移行先システムでインポートします。
画面で登録した以下のような情報は、
グローバル変数 ^Ens.Config.DefaultSettingsD に格納されています。
認証情報については、グローバル変数 ^Ens.SecondaryData.Password に格納されます。
InterSystems IRIS をご利用の場合は、このグローバルは xxxSECONDARY(xxx はネームスペース名)のデータベースに格納されます。
InterSystems IRIS for Health をご利用の場合は、このグローバルはネームスペースのデフォルトデータベースに格納されます。
xxxSECONDARYデータベースについて詳細は、以下ドキュメントをご参照ください。
InterSystems IRIS のパスワード資格情報の格納場所
【関連トピックのご紹介】
xxxENSTEMP、xxxSECONDARYは何のデータベースですか?
記事
Mihoko Iijima · 2022年8月25日
これは InterSystems FAQ サイトの記事です。
メモ:xxx にはネームスペース名が入ります。
xxxENSTEMPは、プロダクション実行中に作成される一時データが保存されるデータベースです。^IRIS.Temp.Ens* のグローバルがこのデータベースにマッピングされています。なお、xxxENSTEMPはジャーナルにかかれない設定のデータベースです。
xxxSECONDARYは、プロダクションで使用される資格情報を保存するデータベースです。^Ens.SecondaryData* のグローバルがこのデータベースにマッピングされています。
注意:InterSystems IRIS for Health、HealthShare ではこれらデータベースは作成されません
詳細は以下ドキュメントをご覧下さい。
InterSystems IRIS の一時プロダクション・データの格納場所
InterSystems IRIS のパスワード資格情報の格納場所
関連する記事もご参照ください。
プロダクション:システムのデフォルト設定と認証情報の移行方法について
記事
Tomoko Furuzono · 2025年1月17日
これはInterSystems FAQサイトの記事です。
質問:
データベースファイルが存在するフォルダ全体をコピーしたとき、コピーしたデータベースファイルをマウントできません。なぜですか?
回答:
コピーした データベースファイル(iris.dat / cache.dat)のあるフォルダに、拡張子lck(iris.lck / cache.lck)のファイルが存在していないでしょうか?InterSystems製品を停止せずに(もしくは、ディスマウントせずに)データベースファイルをコピーした場合、コピー前の情報を保持したままの lckファイルが残ってしまい、コピー後にマウントできない状況になります。また、InterSystems製品を停止せずにコピーしたデータベースファイルは正しい状態ではないので、問題が生じる可能性があります。コピー元のInterSystems製品を停止(もしくはディスマウント)した後、再度データベースファイルををコピーし直してください。
お知らせ
Seisuke Nakahashi · 2023年10月18日
InterSystems IRIS® と InterSystems IRIS for HealthTM 2023.3 の開発者プレビュープログラムの一環として、3番目の開発者プレビューを公開いたします。
今後のプレビューリリースは、2週間ごとの発表を予定しており、新機能が完成次第、プレビュー版に追加されていきます。
みなさまとよりよい製品にできるよう、ぜひ開発者コミュニティにみなさまのフィードバックをお寄せください。ドキュメントは以下のリンクからご覧いただけます。本バージョンが正式公開 (General Availability - GA) されるまで、数週間かけてドキュメントは更新される予定です。
InterSystems IRIS
InterSystems IRIS for Health
本リリースの注目点
2023.3 では、HL7® FHIR® version R5 のサポートや IBM FHIR® Validator のインテグレーション といった注目の新機能が含まれる予定です。 また ObjectScript の実行パフォーマンス向上もはかられる予定です。なお、これらの新機能は最終的に公式リリースに含まれる見込みですが、変更となる可能性もございます。
非推奨の機能について
(1) InterSystems IRIS NLP (旧 iKnow) が非推奨となりました。詳細は次の記事をご確認ください。
https://jp.community.intersystems.com/node/550586
(2) InterSystems Cloud Manager (ICM) が非推奨となりました。詳細は次の記事をご確認ください。
https://jp.community.intersystems.com/node/551616
キットについて
これまでと同じく、継続的デリバリ (CD) リリースは、すべてのサポート対象プラットフォーム向けに、従来のインストーラ形式と Docker コンテナ形式の両方でご提供します。
サポート対象プラットフォーム一覧は、 こちらのドキュメント をご覧ください。インストーラとプレビュー用ライセンスキーは、WRC のプレビューダウンロードページ もしくは 評価サービスページ (2023.3を入手するには、"Show Preview Software" フラグをチェックしてください) から入手いただけます。
InterSystems IRIS / IRIS for Health の Enterprise Edition ならびに Community Edition、また関連コンポーネント、それら全てのコンテナイメージは、新しくなった InterSystems コンテナレジストリ (ICR) ページから入手いただけます。
✅ 今回の開発者プレビューのビルド番号は 2023.3.0.239.0 です。ICRでは、本イメージは 2023.3-preview とタグ付けされています。
お知らせ
Seisuke Nakahashi · 2021年8月6日
開発者の皆様、 InterSystems IRIS for Health の日本語オンラインドキュメントを、一時的にご用意しました。
こちらをご覧ください。日本語 2020.1 になります。 InterSystems IRIS for Health のドキュメントはInterSystems IRIS のドキュメントを包含しています。
一時的な英語版ドキュメントについては、以下の記事をご参照ください。
※2021年8月13日追記
ドキュメントサーバが復活したため、通常のドキュメントページをご確認くださいませ。長時間ご迷惑をおかけし、申し訳ございませんでした。
IRIS / IRIS for Health 2020.1 日本語ドキュメントインターシステムズ製品 ドキュメント一覧
記事
Toshihiko Minamoto · 2024年5月7日
VS Code に焦点を当てた 2 つの現地ウェビナー(ヘブライ語による「Intro」および「Beyond Basics」)に続き、フォローアップとして参加者向けに送信した関連リソースのリンクを用意しました。 コミュニティのために、ここでもそれを共有しています。便利なリソースをぜひさらに追加してください。
VS Code の全般的なリソース
Install and Use ObjectScript Extensions for VS Code(動画、4 分)
Working with ObjectScript Classes in VS Code for Client-Side Editing(動画、4 分)
Configuring VS Code Workspaces for Multiple ObjectScript Connections(動画、6 分)
Developing on an InterSystems Server Using VS Code(学習パス、2 時間)
VS Code Introduction(「VS Code の導入」ドキュメント)
Introducing VS Code – (動画、ヘブライ語による録画ウェビナー、1 時間)
Developer Community Videos on VS Code(YouTube チャンネル再生リスト)
ターミナル / CLI
WebSocket ターミナル
Using the WebSocket Terminal(「WebSocket ターミナルの使用」ドキュメント)
VS Code の統合ターミナルで ObjectScript コマンドを実行する方法(「VS Code の統合ターミナルで ObjectScript コマンドを実行する方法」コミュニティ記事、読了目安 2 分)
Web ターミナル *
Launch From InterSystems Server Manager(Open Exchange アプリケーション)
Web Terminal(Open Exchange アプリケーション)
Web Terminal for InterSystems Products(プロジェクトページ)
デバッグ
Running and Debugging(「実行とデバッグ」ドキュメント)
VSCode を使った ObjectScript コードのデバッグ(「VSCode を使って ObjectScript コードをデバッグする」コミュニティ記事、読了目安 9 分)
Using the VS Code Debugger for InterSystems ObjectScript(動画、6 分)
サーバーサイド開発
Server-side Editing(「サーバーサイド編集」ドキュメント)
ソース管理
クライアントサイドのソース管理
Using Git source control VS Code(VS Code ドキュメント)
サーバーサイドのソース管理
サンプル Git ソースプロジェクト
共有開発環境にてGitを使用する(開発者コミュニティ)
Git for Shared Development Environments(Open Exchange アプリケーション)
コードスニペット
Adding your own snippets to VS Code(「VS Code に独自のスニペットを追加する」コミュニティ記事、読了目安 1 分)
Load Studio Snippets Command(「Load Studio Snippets(Studio スニペットを読み込む)コマンド」ドキュメント)
Share VS Code snippets as IPM / ZPM packages(「IPM / ZPM パッケージとして VS Code スニペットを共有」コミュニティのお知らせ)
OEX VS Code Snippets Template(Open Exchange アプリケーション)
How to provide VS Code settings, snippets and debug configurations to everyone working server-side in a shared namespace(「サーバーの共有ネームスペースにて作業する皆さんに VS Code の設定、スニペット、およびデバッグ構成を提供する方法」)
VS Code per Namespace Settings(Open Exchange アプリケーション)
Snippets in Visual Studio Code(VS Code ドキュメント)
Studio からの移行
Migrate from Studio(「Studio からの移行」ドキュメント)
その他の InterSystems 関連拡張機能 *
Testing Manager
InterSystems Testing Manager - %UnitTest フレームワーク向けの新しい VS Code 拡張機能(開発者コミュニティ)
InterSystems Testing Manager for VS Code(Open Exchange アプリケーション)
InterSystems Testing Manager(VS Code Marketplace)
Web ターミナルランチャー
Launch WebTerminals from InterSystems Server Manager(VS Code Marketplace)
SQLTools
SQLTools
SQLTools Driver for InterSystems
Deltanji
Deltanji(VS Code Marketplace)
Deltanji Source Control(製品ホームページ)
Demo of Deltanji: source control tailored for InterSystems IRIS(動画、録画ウェビナー、57 分)
objectscriptQuality
objectscriptQuality(VS Code Marketplace)
CachéQuality for VSCode now available(「VSCode 用 CachéQuality が公開されました」コミュニティのお知らせ)
OnwObjectScriptExtension
OwnObjectScriptExtension(VS Code Marketplace)
Boost your ObjectScript Development with the OwnObjectScriptExtension(「OwnObjectScriptExtension で ObjectScript 開発を強化」コミュニティ記事、読了目安 3 分)
その他の一般機能関連の拡張機能 *
REST API
OpenAPI (Swagger) Editor
Thunder Client
DevOps
Docker
Kubernetes
YAML
医療データ標準規格
HL7Tools
FHIR Shorthand (FSH)
* サードパーティ製エクステンションはサポートされません