クリアフィルター
お知らせ
Toshihiko Minamoto · 2020年12月13日
コミュニティの皆さん、こんにちは!
[InterSystems のグローバルマスターズ・ゲーミフィケーションプラットフォーム](https://intersystems.influitive.com)にすべての DC メンバーを招待いたします。最新情報を把握し、DC への貢献によるポイントや賞品をゲットしていただけます! 本記事を読んで参加方法と概要をご確認ください!
[](https://intersystems.influitive.com/users/sign_in)
▶️ グローバルマスターズとは?
グローバルマスターズはゲーミフィケ―ションプラットフォームで、ISC テクノロジーに関するチャレンジ (タスク) を完了させたり、バッジやポイントを獲得したり、そのポイントを様々な賞品に交換したりすることができます。
毎週新しいチャレンジが 5~10 個作成され、DC で最も興味深い記事やベストプラクティス、ビデオ、InterSystems の公式ニュース、学習素材、楽しいタスクなどが発表されます。 最新情報を把握するには最適です!
▶️ どのような内容ですか? 以下はチャレンジと賞品のサンプルです。

▶️ レベル、バッジ、権限
グローバルマスターズには 6 つのレベルがあります。 **到達するレベルが高いほど、賞品の価値と権限も上がります。** 最高レベルに到達できるよう、開発者コミュニティと Open Exchange (オープンエクスチェンジ) に貢献し、グローバルマスターズにも積極的に参加しましょう!
**次のレベルに上がるのに役立つ[レベルおよびバッジの一覧](https://jp.community.intersystems.com/node/485861) **
▶️ 参加方法は? ここからスタート!
1. [globalmasters.intersystems.com](https://intersystems.influitive.com/users/sign_in) にアクセスし、「SIGN IN with your InterSystems login」ボタンをクリックしてから、[WRC](https://wrc.intersystems.com/) の認証情報を使って参加します。
2. ログインしたら、**「Customize your program! START HERE!」と題したチャレンジを見つけます**。 この最初のチャレンジにより、賞品や毎週作成される新しいチャレンジのロックが解除されます。 このチャレンジをスキップしたら、グローバルマスターズ・ハブをフル活用できなくなります!
すべての開発者の皆さんがグローバルマスターズ・ハブに参加してくださるのを待ちしています!
また、フィードバックやアイデアもどしどしお寄せください。 いつでもお気軽にお問い合わせください!
インターシステムズグローバルマスターズでお会いしましょう! 😉
記事
Mihoko Iijima · 2021年7月15日
これは InterSystems FAQ サイトの記事です。
InterSystems 製品は複数の SQL 文を一度に受け付けませんので、SQL 文での複数結果セットのサポートはありませんが、ストアドプロシージャを作成して複数の結果セットを返すことができます。
以下、ストアドプロシージャの中では、 %SQL.Statement クラスを利用して SQL を実行し、結果セットを作成し、結果セットを呼び出し元に返すため、ストアドプロシージャ実行時に自動生成されるプロシージャ・コンテキスト(=%sqlcontext 変数に格納)の中に、結果セットを登録しています。
結果セットの登録は、%Library.ProcedureContext クラスの AddResultSet() メソッドを使用します。
メモ:ストアドプロシージャ実行時に自動生成されるプロシージャ・コンテキストは %Library.ProcedureContext のインスタンスで %sqlcontext 変数に自動的に設定されます。
サンプルコードでは、Sample.Employee と Sample.Company を利用して SELECT 文を実行し、%Execute() 実行後に作成される結果セットを %sqlcontext に追加しています。 この操作を 5 回繰り返しているため、5 個の結果セットが呼び出し元に戻される予定です。
メモ:IRIS を利用されている場合、Sample.Employee と Sample.Company はインストール時に用意されていないため、以下のサンプルコードを試す場合は、「サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について」をご参照ください。
ClassMethod getMultipleResultSets(pMax As %Library.Integer = 2) As %Status [ ReturnResultsets, SqlName = getMultipleResultSets, SqlProc ]
{
#dim sqlEx,tSC as %Exception.StatusException
#dim tRS as %SQL.StatementResult
#dim tIdx as %Integer
#dim tFields,tSQL as %String
#dim tSystemError as %SYSTEM.Error
#dim %sqlcontext as %Library.ProcedureContext
try
{
set tFields = $lb("ID","Name","DOB","Company->Name as Company")
set tSC = $$$OK
for tIdx = 1 : 1 : 5
{
set tSQL = "SELECT TOP 20 {Fields} FROM Sample.Employee ORDER BY ID {Order}"
set tSQL = $replace(tSQL,"{Fields}",$listtostring($list(tFields,1,1+$random($ll(tFields)))))
set tSQL = $replace(tSQL,"{Order}",$select($random(2)=0:"ASC",1:"DESC"))
set stmt =##class(%SQL.Statement).%New()
set tSC = stmt.%Prepare(tSQL)
$$$THROWONERROR(sqlEx,tSC)
set tRS= stmt.%Execute()
if ($data(%sqlcontext))
{
set tSC = %sqlcontext.AddResultSet(tRS)
}
}
}
catch (sqlEx)
{
set %sqlcontext.%SQLCODE=sqlEx.AsSQLCODE()
set %sqlcontext.%Message=sqlEx.AsSQLMessage()
set tSC = sqlEx.AsStatus()
}
quit tSC
}
Java から実行する例は以下の通りです(サンプルはこちら)。
※ IRISへ接続する例で記載しています。
/*
* MultiResultSet
*
*/
import java.sql.*;
public class MultiRS {
public static void main(String[] args) throws Exception{
String url="jdbc:IRIS://localhost:51773/USER";
String username="_SYSTEM"; // null for default
String password="SYS"; // null for default
Class.forName ("com.intersystems.jdbc.IRISDriver");
Connection dbconnection = DriverManager.getConnection(url, username, password);
CallableStatement cstmt = dbconnection.prepareCall("{? = call devcon2008.getMultipleResultSets(?) }");
cstmt.registerOutParameter(1,java.sql.Types.BINARY);
cstmt.setInt(2,5);
boolean ok = cstmt.execute();
int count=1;
do {
if (ok) {
ResultSet rs = cstmt.getResultSet();
out("\n\n\nresultset #" + count++);
int row = 1;
while (rs.next())
{
out("row #" + row++);
int columns = rs.getMetaData().getColumnCount();
for (int col=1; col <= columns; col++)
{
out( "\t" +
rs.getMetaData().getColumnName(col) + "\t=\t"
+ rs.getString(col));
}
out("");
}
out("\n");
}
} while (cstmt.getMoreResults());
dbconnection.close();
}
static void out(Object o) {
System.out.println(o);
}
}
サンプルコード一式: https://github.com/Intersystems-jp/MultipleResultSetSample
記事
Tomoko Furuzono · 2020年11月24日
これは、InterSystems FAQサイトの記事です。
MaxIRISTempSizeAtStartという構成パラメータを設定することにより、IRIS起動時のIRISTempデータベースの最大サイズを設定できます。
システムは、設定後、次のIRIS起動時に、設定された値(MB)にIRISTempの切り捨てを行います。 指定した MaxIRISTempSizeAtStart よりも現在サイズが小さい場合は、切り捨ては行われません。また、0 を指定すると切り捨てが行われないため、サイズは変わらないまま起動します。(デフォルト) 設定は、以下メニューから行います。
管理ポータル[システム管理]>[構成]>[追加の設定]>[開始]>"MaxIRISTempSizeAtStart"
詳細は下記ドキュメントページをご確認ください。MaxIRISTempSizeAtStart
記事
Mihoko Iijima · 2020年12月15日
これはInterSystems FAQ サイトの記事です。
デフォルトでは、セキュリティ脆弱性対応の観点でウェブサービス用テストページの実行を許可していません。
テスト目的等で利用する場合は、テストページへのアクセスを有効にする必要があり、以下グローバル変数のセットを %SYS ネームスペースで実行する必要があります。
set ^SYS("Security","CSP","AllowClass",0,"%SOAP.WebServiceInvoke")=1
set ^SYS("Security","CSP","AllowClass",0,"%SOAP.WebServiceInfo")=1
詳細については、以下のドキュメントもご参照下さい。
カタログおよびテスト・ページについて【IRIS】
カタログおよびテスト・ページについて
記事
Mihoko Iijima · 2021年4月15日
これは InterSystems FAQ サイトの記事です。
クラスに定義されたプロパティの情報については、以下システムクラスを利用して情報を取得できます。
%Dictionary.ClassDefinetion
%Dictionary.PropertyDefinition
コード記述例は以下の通りです。
Class ISJ.Sample
{
ClassMethod getPropInfo(classname As %String)
{
set cls=##class(%Dictionary.ClassDefinition).%OpenId(classname,,.status)
if $$$ISERR(status) {
write "指定クラスは存在しません",!
quit // または return
}
set x=cls.Properties
for i=1:1:x.Count() {
// プロパティ情報を取得(%Dictionary.PropertyDefinition)
set prop=x.GetAt(i)
if prop="" {
continue
}
set propname=prop.Name // プロパティ名
set proptype=prop.Type // プロパティタイプ
if propname="" {
continue
}
write propname," ",proptype,!
}
}
}
実行例は以下の通りです。
USER>do ##class(ISJ.Sample).getPropInfo("Taxi.Driver")
DriverID %String
Name %String
Phone %String
関連記事:指定のテーブルの全フィールドをSQLで取得する方法
記事
Megumi Kakechi · 2021年11月15日
これは InterSystems FAQ サイトの記事です。
SELinuxの機能が有効になっているとファイルアクセス時にセキュリティコンテキストのチェックで permission エラーになります。
CSP のページについても同様に permission エラーになっているため、Apache にて 403 Forbidden エラーになります。
以下の設定でSELinuxの機能を無効にすることで回避できます。
設定ファイル /etc/selinux/config の SELINUX=disableに設定し、OS の再起動を行います。
例:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values:< # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted
記事
Tomoko Furuzono · 2025年4月17日
これは、InterSystems FAQサイトの記事です。
メソッドの実装に使用する言語を明示する場合は、下記のようにメソッドキーワードで「Language=~~~」と指定します。
Method name(formal_spec) As returnclass [ Language = language ]
{ //implementation }
指定できるLanguageの値は下記のとおりです。
objectscript (既定) — ObjectScript
python — 組み込み Python
tsql — Transact-SQL
ispl — Informix ストアド・プロシージャ言語
ドキュメント:Language (メソッド・キーワード)
上記の通り、ObjectScriptで記載する場合は、「Language=objectscript」と指定します。但し、CSP内の<SCRIPT>タグ内で指定する場合は、下記の通り、「LANGUAGE=’cache’」と指定することにご注意ください。
<SCRIPT LANGUAGE='cache', ~~~>
ドキュメント:<SCRIPT>
※CSPページは、IRISでは非推奨の機能です。
記事
Minoru Horita · 2020年7月21日
この連載記事では、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:基本機能 InterSystems IRIS
PythonからInterSystems IRISに変数の値を渡す方法は、シリアル化の必要性に応じて4種類から選べます。
- `String` は単純なデータ型とデバッグに使用します。
- `Repr` は単純なオブジェクトの保存とデバッグに使用します。
- `JSON` はInterSystems IRIS側でデータを処理しやすくするために使用します。
- `Pickle` はオブジェクトを永続化するために使用します。
以下のメソッドを使用すると、Pythonから変数を文字列またはストリームとして取得できます。
- `GetVariable(variable, serialization, .stream, useString)` - `variable` の `serialization` を`stream` に取得します。 `useString` が1で、変数をシリアル化したものが文字列に収まる場合、ストリームの代わりに文字列が返されます。
- `GetVariableJson(variable, .stream, useString)` - 変数をJSONでシリアル化した結果を取得します。
- `GetVariablePickle(variable, .stream, useString, useDill)` - 変数をPickle(またはDill)でシリアル化した結果を取得します。
`y` 変数を取得してみましょう。
```
set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
w val
>6
```
### InterSystems IRIS -> Python
そして最後に、InterSystems IRISから一部のデータをPythonに読み込みます。
- `ExecuteQuery(query, variable, type, namespace)` - SQLクエリから結果セット(pandasの `データフレーム` または `リスト`)を作成し、`variable` に設定します。 `isc.py` パッケージは `namespace` でアクセスできなければなりません。
- `ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)` - `global` のデータ(`start` から `end` まで)を、 `type`(タプルの `list` または pandas の `dataframe`)を持つPython変数に転送します。 `mask`および ` labels` 引数の仕様については、クラスのドキュメントと[データ転送のドキュメント](DataTransfer.md)を確認してください。
- `ExecuteClass(class, variable, type, start, end, properties, namespace)` - クラスデータをPythonのタプルリスト、またはpandasのデータフレームに転送します。 `properties` - データフレームを構成するプロパティをカンマで区切ったリストです。 * および ? ワイルドカードを使用できます。 デフォルトは *(すべてのプロパティ)です。 %%CLASSNAME プロパティは無視されます。 保存されているプロパティのみを使用できます。
- `ExecuteTable(table, variable, type, start, end, properties, namespace)` - クラスデータをPythonのタプルリスト、またはpandasのデータフレームに転送します。
`ExecuteQuery` は汎用的です(有効なSQLクエリはPythonに転送されます)。 ただし、`ExecuteGlobal` とそのラッパーである `ExecuteClass` と `ExecuteTable` の動作にはいくつかの制限があります。 その代わり、はるかに高速に動作します(ODBCドライバーより3〜5倍高速で、`ExecuteQuery` より20倍高速です)。 詳細は、[データ転送のドキュメント](DataTransfer.md)を確認してください。
これらのメソッドはすべて、任意のローカルネームスペースからのデータ転送をサポートしています。 `isc.py` パッケージは `namespace` でアクセスできなければなりません。
## ExecuteQuery
`ExecuteQuery(query, variable, type, namespace)` - 有効なSQLクエリの結果をPythonに転送します。 これは最も遅いデータ転送方法です。 `ExecuteGlobal` とそのラッパーが利用できない場合に使用してください。
引数:
- `query` - SQLクエリ。
- `variable` - Python側のターゲット変数。
- `type` - `list` または Pandasの `dataframe` を指定します。
## ExecuteGlobal
`ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)` - グローバルデータをPythonに転送します。
引数:
- `global` - `^`を含まないグローバル名。
- `variable` - Python側のターゲット変数。
- `type` - `list` または Pandasの `dataframe` を指定します。
- `start` - 最初のグローバルキー。 整数でなければなりません。
- `end` - 最後のグローバルキー。 整数でなければなりません。
- `mask` - グローバル値のマスク(文字列)です。 マスクはグローバル値のフィールドの数よりも短い場合があります(この場合、最後のフィールドはスキップされます)。 マスクの書式を以下に記載します。
- `+` フィールドをそのまま使用します。
- `-` フィールドをスキップします。
- `b` - ブール値(0 - False、それ以外 - True)。
- `d` - 日付($horologから起算。Windowsでは1970年以降、Linuxでは1900年以降の日付。詳細は注意事項を参照してください)。
- `t` - 時間($horolog、午前0時からの秒数)。
- `m` - (現在)「年-月-日 時間:分:秒」形式のタイムスタンプ文字列。
- `labels` - カラム名の%リストです(最初の要素がキーとなるカラム名です)。 したがって、リストの長さはマスク文字列の長さより1つ長くなければなりません。
## ExecuteClass
`ExecuteGlobal` のラッパーです。 コンパイルされたクラス定義を効果的に解析し、`ExecuteGlobal` 引数を作成して呼び出します。
`ExecuteClass(class, variable, type, start, end, properties, namespace)` - クラスデータをPythonのタプルリスト、またはpandasのデータフレームに転送します。 `properties` - データフレームを構成するプロパティをカンマで区切ったリストです。 * および ? ワイルドカードを使用できます。 デフォルトは *(すべてのプロパティ)です。 %%CLASSNAME プロパティは無視されます。 保存されているプロパティのみを使用できます。
引数:
- `class` - クラス名。
- `variable` - Python側のターゲット変数。
- `type` - `list` または Pandasの `dataframe` を指定します。
- `start` - 最初のオブジェクトID。 整数でなければなりません。
- `end` - 最後のオブジェクトID。 整数でなければなりません。
- `properties` - データフレームを構成するプロパティをカンマで区切ったリストです。 * および ? ワイルドカードを使用できます。 デフォルトは `*`(すべてのプロパティ)です。 `%%CLASSNAME` プロパティは無視されます。 保存されているプロパティのみを使用できます。
特定のタイプ(`%Date`、`%Time`、`%Boolean`、`%TimeStamp`)のプロパティを除き、すべてのプロパティはそのまま転送されます。 これらはそれぞれのPythonデータ型に変換されます。
## ExecuteTable
`ExecuteClass` のラッパーです。 テーブル名をクラス名に変換し、`ExecuteClass` を呼び出します。 署名:
`ExecuteTable(table, variable, type, start, end, properties, namespace)` - クラスデータをPythonのタプルリスト、またはpandasのデータフレームに転送します。
引数:
- `table` - テーブル名。
その他の引数はそのまま `ExecuteClass` に渡されます。
## 注意事項
- `ExecuteGlobal`、`ExecuteClass`、`ExecuteTable` の実行速度は概して同じです(クラス定義の解析にはごくわずかな時間しかかからないため)。
- `ExecuteGlobal` は測定可能なワークロード(0.01秒超)で、`ExecuteQuery` よりも最大20倍高速です。
- `ExecuteGlobal`、`ExecuteClass`、`ExecuteTable` は、`^global(key) = $lb(prop1, prop2, ..., propN)` の構造を持つグローバルでのみ機能します(`key` は整数でなければなりません)。
- `ExecuteGlobal`、`ExecuteClass`、`ExecuteTable` の場合、サポートされている `%Date` の範囲は `mktime` の範囲([Windows](https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/mktime-mktime32-mktime64?view=vs-2019):1970-01-01、[Linux](https://linux.die.net/man/3/mktime):1900-01-01、[Mac](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/mktime.3.html))と同じです。 この範囲から外れた日付を転送するには、`%TimeStamp` を使用してください。 または、pandas データフレームを使用してください(これはリストの制限であるため)。
- `ExecuteGlobal`、` ExecuteClass`、`ExecuteTable` の場合、ソース(グローバル、クラス、テーブル)および変数以外のすべての引数は省略可能です。
## 例
仮に [isc.py.test.Person](https://github.com/intersystems-community/PythonGateway/blob/master/isc/py/test/Person.cls) クラスがあるとしましょう。 この場合、次のようにすべてのデータ転送メソッドを使用できます。
```
// すべてのデータ転送方法
set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"
// 共通の引数
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)
// 方法0:引数なしのExecuteGlobal
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)
// 方法1:引数付きのExecuteGlobal
// グローバル転送の場合、ラベルは自動的に計算されません
// globalKey - グローバル添え字です
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")
// "globalKey" はグローバル添え字ラベルであるため、マスクはラベルより1要素短くなります
// ここでは %%CLASSNAME フィールドをスキップします
set mask = "-+dmt+++b"
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)
// 方法2:ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)
// 方法3:ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)
// 方法4:ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)
```
`do ##class(isc.py.test.Person).Test()` を呼び出すと、これらのデータ転送メソッドの動作を確認できます。
## 補助
補助的なメソッドです。
- `GetVariableInfo(variable, serialization, .defined, .type, .length)` - 変数に関する情報(定義の有無、型、シリアライズ後の長さ)を取得します。
- `GetVariableDefined(variable, .defined)` - 変数定義の有無を取得します。
- `GetVariableType(variable, .type)` - 変数のFQCNを取得します。
- `GetStatus()` - Pythonで最後に発生した例外を返し、それをクリアします。
- `GetModuleInfo(module, .imported, .alias)` - モジュールのエイリアスを取得し、現在インポートされているかどうかを取得します。
- `GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)` - 関数の情報を取得します。
# 要約
Python Gatewayを使用すると、InterSytems IRISとPythonをシームレスに統合できます。 これを使用することで、コードを実行してデータを双方向に転送できます。
# リンク
- [Python Gateway](https://openexchange.intersystems.com/package/PythonGateway)
- [Python 3.6.7(64ビット版)のインストール](https://www.python.org/downloads/release/python-367/)
- [Pythonのドキュメント/チュートリアル](https://docs.python.org/3.6/tutorial/index.html)
# イラスト付きガイド
ML Toolkitユーザーグループには、イラスト付きのガイドもあります。 ML Toolkitユーザーグループは、InterSystems社のGitHub組織の一部として設定されている非公開GitHubリポジトリです。 このリポジトリは、Python Gatewayを含むML Toolkitコンポーネントをインストール、学習、またはすでに使用している外部ユーザーを対象としています。 ML Toolkitユーザーグループに参加するには、以下の内容を含む簡単なメールを [MLToolkit@intersystems.com](mailto:MLToolkit@intersystems.com?subject=MLToolkit%20user%20group&body=Hello.%0A%0APlease%20add%20me%20to%20ML%20Toolkit%20user%20group%3A%0A%0A-%20GitHub%20username%3A%20%0A%0A-%20Name%3A%20%0A%0A-%20Company%3A%20%0A%0A-%20Position%3A%0A-%20Country%3A%20%0A%0A) 宛に送信してください(グループメンバーが議論中にあなたを認識して特定するために必要です)。
- GitHubのユーザー名
- 氏名(英文字表記の名前、姓の順)
- 組織(勤務先、通学先、または在宅勤務)
- 役職(組織での実際の役職、「学生」、または「無所属」)
- 国(本拠地としている国)
記事
Megumi Kakechi · 2022年8月22日
InterSystems IRIS で使用できるユーティリティの一部を一覧でご紹介します。
以下の表の各ユーティリティ名をクリックすると、ユーティリティの詳細情報をご覧いただけます。
ユーティリティ名
概要
^BACKUP
バックアップやリストア処理を行います
^DATABASE
データベースの作成・編集・削除など、データベースの管理を行います
^DATACHECK
2つのIRIS.DAT の内容が一致しているかを確認します
^DBSIZE
データベースサイズを計測します
^GBLOCKCOPY
データベース内のグローバルデータを別データベースまたはネームスペースにコピーします
^GETPPGINFO
IRISTEMPデータベースでどのような一時グローバルを使用しているかを確認します
^%GCMP
2つのグローバルの内容を単純比較します
^%GSIZE
ネームスペース内の各グローバルのデータサイズを確認します
^INTEGRIT
データベースのセット、またはデータベース内のグローバルのサブセットの構造的な整合性を検証します
^JOBEXAM
プロセス一覧を表示します。各プロセス詳細情報の表示や停止も行えます
^JOURNAL
ジャーナリングを構成します
^LOCKTAB
現在使用しているロック情報の表示と削除を行います
^mgstat
サンプリング周期単位でグローバルアクセスのカウンター情報を連続してファイルに記録します
^MIRROR
ミラーリング構成、管理、およびステータスの操作などを行います
^MONMGR
メッセージログ(messages.log)を監視して通知を生成したり電子メールを送信します
^SECURITY
IRISセキュリティが適切に機能するのに必須のデータの設定とメンテナンスを実行します
^%SS
プロセス一覧を表示します(参照のみ)。
^SYSLOG
共有メモリの一部分に記録している、IRIS内部のエラーログ情報を出力します
^SystemCheck
IRISが使用しているプロセスの状態や共有メモリなどの情報収集を行います
^SystemPerformance
IRISおよびインスタンスが稼働するプラットフォームに関する詳細なパフォーマンスデータを収集します
^TASKMGR
タスクのスケジュールや管理を行います
※%付きのユーティリティ以外はすべて %SYS ネームスペースで実行する必要があります。※管理ポータル: は、管理ポータルから実行できる対象機能になります。※★<ユーティリティ名> をクリックすると製品ドキュメントの説明をご覧いただけます(一部記載なし)
★^BACKUP
バックアップやリストア処理を行います。^BACKUPユーティリティには以下のようなメニューがあります。
%SYS>do ^BACKUP
1) Backup // データベースのバックアップを行います
2) Restore ALL // すべてのデータベースのリストアを行います
3) Restore Selected or Renamed Directories // 選択したデータベースのリストアを行います
4) Edit/Display List of Directories for Backups // バックアップに必要なディレクトリ・リストの編集/表示を行います
5) Abort Backup // 実行中のバックアップを中止します
6) Display Backup volume information // バックアップ・ボリュームに関する情報を表示します
7) Monitor progress of backup or restore // バックアップまたはリストアの進行状況を監視します
管理ポータル:システムオペレーション > バックアップ【ご参考】データベースのバックアップについて(InterSystems Symposia 2014)累積バックアップと差分バックアップの違いについて稼働中のインスタンスを停止せずにバックアップを行う方法データベースのバックアップ方法について
★^DATABASE
データベースの作成・編集・削除など、データベースの管理に使用します。^DATABASEユーティリティには以下のようなメニューがあります。
%SYS>do ^DATABASE
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 database // 指定されたデータベースの詳細情報を表示します
10) Recreate a database // 既存のデータベースのパラメータに基づいて、新しい空のデータベースを作成します
11) Manage database encryption // データベース暗号化の管理を行います
12) Return unused space for a database // データベースの未使用領域を解放します
13) Compact free space in a database // データベースの空き容量を圧縮します。この機能は使用可能バージョンに制限(※)ががあります。
14) Defragment a database // データベースのデフラグを行います。この機能は使用可能バージョンに制限(※)ががあります。
15) Show background database tasks // バックグラウンドのデータベースタスクを表示します
※制限:圧縮やデフラグの機能は、ご利用のバージョンによって使用できない場合がありますのでご注意ください。 詳細はこちらをご覧ください。管理ポータル:システム管理 > 構成 > システム構成 > データベース 【ご参考】データベースファイルのサイズを圧縮する方法ターミナルやAPIを使用してネームスペースやデータベースを作成する方法プログラムでデータベースを マウント/ディスマウント する方法
★^DATACHECK
2つのIRIS.DAT の内容が一致しているかを確認します。
【ご参考】2つのデータベースにある複数のグローバルやルーチンを比較する方法
★^DBSIZE
データベースサイズを計測します。例えば、バックアップを実行する直前に、バックアップに必要なディスク領域を計算するのに使用します。
【ご参考】オンラインバックアップでのバックアップサイズを見積もる方法
★^GBLOCKCOPY
データベース内のグローバルデータを、別データベース・またはネームスペースにコピーします。その際、余計なサイズ(Killされて空いたサイズ)はコピーされないので、データベースの縮小が可能です。
【ご参考】【FAQ】データベースファイル IRIS.DAT のサイズを小さくするにはどうすればいいですか?
★^GETPPGINFO
現在の全てのプロセスプライベートグローバルの名前およびそれらのスペース割り当てをブロック単位で表示します。
【ご参考】IRISTEMPデータベースでどの一時グローバルがサイズ消費しているかを特定する方法プロセス・プライベート・グローバルとは
★^%GCMP
2つのグローバルに違いがないか内容を比較をします。
【ご参考】2つのグローバルの内容を比較する方法
★^%GSIZE
ネームスペース内の各グローバルのデータサイズを確認します。
管理ポータル:システム管理 > 構成 > ローカルデータベース > グローバル
【ご参考】各グローバルのデータサイズを調べる方法^%GSIZE で出力される各項目の意味
★^INTEGRIT
データベースのセット、またはデータベース内のグローバルのサブセットの構造的な整合性を検証します
管理ポータル:システムオペレーション > データベース > 整合性チェック
★^JOBEXAM
プロセス一覧を表示します。各プロセス詳細の表示や停止も行えます。
管理ポータル:システムオペレーション > プロセス
★^JOURNAL
ジャーナリングを構成します。^JOURNALユーティリティには以下のようなメニューがあります。
%SYS>do ^JOURNAL
1) Begin Journaling (^JRNSTART) // ジャーナリングの開始
2) Stop Journaling (^JRNSTOP) // ジャーナリングの停止
3) Switch Journal File (^JRNSWTCH) // ジャーナルファイルの切り替え
4) Restore Globals From Journal (^JRNRESTO) // ジャーナルファイルのリストア
5) Display Journal File (^JRNDUMP) // ジャーナルファイルの表示
6) Purge Journal Files (PURGE^JOURNAL) // ジャーナルファイルの削除
7) Edit Journal Properties (^JRNOPTS) // ジャーナルオプションの変更
8) Activate or Deactivate Journal Encryption (ENCRYPT^JOURNAL()) // ジャーナルファイル暗号化の Activate/Deactivate
9) Display Journal status (Status^JOURNAL) // 現在のジャーナル状態の表示
10) -not available-
11) -not available-
12) Journal catch-up for mirrored databases (MirrorCatchup^JRNRESTO) // ミラーデータベースのジャーナルキャッチアップ
13) -not available-
管理ポータル:システム管理 > 構成 > システム構成 > ジャーナル設定システムオペレーション > ジャーナル
★^LOCKTAB
現在使用しているロック情報の表示と削除を行います。
管理ポータル:システムオペレーション > ロック 【ご参考】プログラム内でロック情報を取得する方法
★^mgstat
サンプリング周期(既定は2秒)単位でグローバルアクセスのカウンター情報を連続してファイルに記録します。^mgstat は、^SystemPerformance ユーティリティを実行した場合にも実行され、HTML パフォーマンスレポートに含められます。
【ご参考】Grafana ベースの mgstat(InterSystems Caché / Ensemble / HealthShareのシステム監視ツール)用 GUI
★^MIRROR
ミラーリング構成、管理、およびステータスの操作などを行います。
管理ポータル:システム管理 > 構成 > ミラー設定【ご参考】データベースミラーリングを使用した HA および DR の構成例パフォーマンス101ミラージャーナルファイルの削除のタイミングと要件ミラーリングの機能について
★^MONMGR
IRISインスタンスのメッセージログ(messages.log)を監視して、システムからレポートされたアラートを検出し、通知を生成したり(alert.log)、電子メールを送信します。
【ご参考】メッセージログ(messages.log) のログ深刻度が 2 以上でメールを送るようにする方法
★^SECURITY
IRISセキュリティが適切に機能するのに必須のデータの設定とメンテナンスを実行します。^SECURITYユーティリティには以下のようなメニューがあります。
%SYS>do ^SECURITY
1) User setup // ユーザ定義の表示、追加、編集を行います
2) Role setup // ロール定義の表示、追加、編集を行います
3) Service setup // サービス定義を表示または編集します
4) Resource setup // リソース定義の表示、追加、編集を行います
5) Application setup // アプリケーション定義の表示、追加、編集を行います
6) Auditing setup // 監査ログの閲覧や、エクスポートを行います
8) SSL configuration setup // SSL/TLS 構成の表示、追加、編集を行います
9) Mobile phone service provider setup // 携帯電話サービスプロバイダ定義を表示または編集します
10) OpenAM Identity Services setup // OpenAM ID サービスを設定します
11) Encryption key setup // データベース暗号化キーファイルの作成や管理を行います
12) System parameter setup // システムワイドセキュリティパラメータの参照と編集を行います
13) X509 User setup // ウェブサービスセキュリティで使用する X.509 認証情報の表示、追加、編集を行います
14) KMIP server setup // KMIP(Key Management Interoperability Protocol) サーバの管理・構成を行います
15) Exit
管理ポータル:システム管理 > セキュリティ【ご参考】CSP/RESTアプリケーションに接続できません。どのように調査すれば良いですか?セキュリティ設定のエクスポートとインポートに関するTips
★^%SS
現システムでアクティブな各プロセスの状態の情報を一覧表示します(参照機能のみ)。各プロセスの詳細情報を表示したり、プロセスを終了したい場合は ^JOBEXAM を使用します。
管理ポータル:システムオペレーション > プロセス
★^SYSLOG
共有メモリの一部分に記録している、IRIS内部のエラーログ情報を出力します。このログには、システムに何らかの問題が生じている場合の重要な診断情報が含まれることがあります。
1) 実行方法は以下のようになります。
USER>zn "%SYS"
%SYS>do ^SYSLOG
Device: // Enter 押下、または出力ファイルパスを入力
Right margin: 80 => // Enter 押下
Show detail? No => Yes // Yes + <Enter> 押下
InterSystems IRIS System Error Log printed on May 19 2023 at 11:53 AM
--------------------------------------------------------
Printing the last 8 entries out of 8 total occurrences.
Err Process Date/Time Mod Line Routine Namespace
3 30848 05/19/2023 09:01:02AM 91 1304 BF0+1373^SYS.Datab %SYS
:
※上記は Err = 3 なので、オペレーティングシステムエラーの「指定されたパスが見つかりません」のエラーになります。 Errは必ずしもオペレーティングシステムのエラーとは限りません。詳細はサポートセンターまでお問い合わせください。
C:\>net helpmsg 3
指定されたパスが見つかりません。
2) SYSLOG情報は共有メモリに保存される情報であるため、IRISを停止すると失われます。 以下のIRIS構成パラメータ設定することにより、IRIS停止時に内部エラーログ情報をmessages.log に記録します。
管理ポータル: システム管理 > 構成 > 追加の設定 > 互換性 ShutDownLogErrors 偽(既定値) -> 真
【ご参考】syslog-その正体と意味するもの
★^SystemCheck
IRISが使用しているプロセスの状態や共有メモリなどの情報収集を行います。トラブル発生時には、まずこちらの診断レポート情報(^SystemCheck)を取得していただきます。※Caché/Ensemble では ^Buttons というユーティリティ名でした
実行方法は以下のようになります。
%SYS>do ^SystemCheck
Diagnostic Report Build # 087 Evidence Logging Tool
This reporting tool provides the information required for InterSystems
Technical Support to analyze most issues. Please send the resulting file with
each and every new problem sent to Support.
This process will take approximately 5 minutes to complete. Please be patient.
Continue (Y)? y // Enter 押下または yes(y) を指定します
Report Interoperability-specific info? [No] n //no(n) を指定します
Collecting information, please do not interrupt this process.
Please wait approximately 30 seconds for %SS snapshots.
Please wait approximately 1 minute for "irisstat" snapshots.
GloStat information now being collected.
Please wait approximately 1 minute and 40 seconds.
FTP the following files to ISC Support:
c:\intersystems\iris\mgr\***202208260909.html in text mode - 579,486 bytes
%SYS>
// <インストールディレクトリ>\mgr 下にhtmlファイルが出力されます。***部分は使用されているライセンスにより異なります
システムがハング状態になるなどしてターミナルが開けない場合は、Windowsコマンドプロンプトより IRISHung.cmd (Linux系は IRISHung.sh) を実行します。数分後、<IRISインストールディレクトリ>\mgr 下に、IRISHung_mmss.html ファイルが生成されます。
C:\>cd /intersystems/iris/bin // <インストールディレクトリ>\bin に移動
C:\InterSystems\IRIS\bin>IRISHung.cmd
Full name of InterSystems IRIS directory: C:\InterSystems\IRIS // IRISインストールディレクトリを入力
Writing information to "C:\InterSystems\IRIS\Mgr\IRISHung_mmss.html"
Please wait...
Log file saved to:
"C:\InterSystems\IRIS\Mgr\IRISHung_mmss.html"
File size is ***** bytes long
C:\InterSystems\IRIS\bin>
【ご参考】InterSystems IRISトラブル対応ガイド~情報収集編~(^SystemCheck/IRISHungの使い方)※P.7 (1).診断レポート(^SystemCheck)の実行
【IRISベース】トラブル発生時の情報収集方法(IRIS / IRIS for Health / UCR 編)
★^SystemPerformance
IRIS インスタンスおよびインスタンスが稼働するプラットフォームに関する詳細なパフォーマンスデータを収集します。※Caché/Ensemble では ^pButtons というユーティリティ名でした。【ご参考】InterSystemsデータプラットフォームとパフォーマンス – パート1InterSystemsデータプラットフォームとパフォーマンス – パート2 InterSystemsデータプラットフォームとパフォーマンス –パート3: CPUに注目
★^TASKMGR
ジャーナルのパージや、バックアップの自動実行などのタスクのスケジュールや管理を行います。
管理ポータル:システムオペレーション > タスク【ご参考】タスクの起動でエラーが発生した時にメールで通知する方法 ユーティリティ一覧に、^%GCMP を追加しました。 ユーティリティ一覧に、^SYSLOG を追加しました。
^SYSLOG ユーティリティは、共有メモリの一部分に記録している IRIS内部のエラーログ情報を収集します。このログには、システムに何らかの問題が生じている場合の重要な診断情報が含まれることがあります。
記事
Hiroshi Sato · 2021年3月3日
これは InterSystems FAQ サイトの記事です。
InterSystems製品を停止しないバックアップ方法は、3種類あります。
① 外部バックアップ② オンライバックアップ③ レガシー並行外部バックアップ
各詳細については、以下ドキュメントをご参照ください。
バックアップ方法について【IRIS】バックアップ方法についてそれぞれの特徴について、簡単に解説します。
① 外部バックアップ外部バックアップでは、SANシステム等のストレージ機能を利用して、データベースファイル(InterSystems IRIS の場合は IRIS.DAT、Caché/Ensemble/HealthShareの場合は CACHE.DAT)のスナップショットを作成する間だけ、データベースへの書き込みを停止させます。スナップショット作成中は、データベースへの書き込みは停止されますが、ユーザ・プロセスによるメモリ内の更新は引き続き実行できます。しかし、スナップショット機能がなく、バックアップ対象のデータベースを、退避エリアにコピーするような場合、データベースファイル(*.DAT)のファイルサイズが大きければ大きい程、コピーに時間がかかります。コピーに時間がかかれば、データベースへの書き込み停止時間も長くなります。また停止時間が長時間に及ぶことで、ユーザからの更新量も増え、データベースキャッシュが一杯になる事も予測され、その結果、ユーザプロセスが停止してしまいます。データベースへの書き込み停止状態が、長時間に及ぶ事が予測できるような場合は、③のレガシー並行外部バックアップを利用したほうが、書き込み停止時間を短くできます。
② オンラインバックアップオンラインバックアップでは、データベース内でデータに割り当てられているブロック全てがバックアップされます。オンラインバックアップ中も、データベース内のブロックが更新されることがあるため、更新が継続する限り、繰り返し更新ブロックのバックアップを行います。 最終的には、完全なバックアップを取る必要があるため、必ずどこかの時点で静止状態を作る必要があります。このためオンラインバックアップでは、データベースへの書き込みを停止する状態が、何度か続きます。データベースへの書き込み停止については、①の外部バックアップと同様で、ユーザ・プロセスによるメモリ内の更新は引き続き実行できます。しかし、オンラインバックアップの場合、バックアップ対象のデータベース容量が大きければ大きいほど、バックアップにかかる時間は長くなるため、「書き込み停止」合計時間が長くなります。できるだけ、書き込み停止時間を短くしたい場合には、①の外部バックアップ、または、③のレガシー並行外部バックアップを利用します。
③ レガシー並行外部バックアップレガシー並行外部バックアップは、InterSystems製品のユーティリティを利用して、データベースファイル(*.DAT)のスナップショットの作成(または、バックアップエリアへの退避)と、オンラインバックアップの差分バックアップを組み合わせたバックアップ方法です。方法は、以下の通りです。
================================================================(1) バックアップ開始のフラグをデータベースにセットし、(2) データベースファイル(*.DAT)をコピーし、(3) そのコピー時間中に変更されたデータに対して、「オンラインバックアップ」の差分バックアップを実行する================================================================データベースへの書き込み停止状態になるのは、(3)の差分バックアップの最終処理のみです。
この時のバックアップ対象データは、データベースファイル(*.DAT)コピー中に変更されたデータのみであるため、フルバックアップを行う時間と比べ、停止時間は極端に短くなります。
実際の利用方法は以下の通りです。
詳細については、ドキュメントもご参照ください。
バックアップのリストアについて【IRIS】バックアップのリストアについて===============================================================(1) バックアップ開始のフラグをデータベースにセット
set ^ClearOK=$$CLRINC^DBACK("QUIET")
(2) OS上で データベースファイル(*.DAT)をコピー (3) 外部バックアップユーティリティを使用したことを示すための実行
set x=$$BACKUP^DBACK("","E","dirty backup","","","")
(4) 差分バックアップを実行
set x=$$BACKUP^DBACK("","I","incremental",bckfile,logfile,"QUIET","Y","Y","Y","")
===============================================================
上記、InterSystems製品内の処理をルーチンやクラスメソッド化し、バッチ処理と組み合わせることで、運用できます。
以下は、Caché2009.1以降で動作するサンプルルーチンです。InterSystems IRIS でお試しいただく場合には、データベースファイルを退避する箇所を「IRIS.DAT」に変更してからお試しください。
Backupサンプルルーチン
レガシー並行外部バックアップで利用する^DBACKルーチンについて詳細は、以下ドキュメントをご参照ください
^DBACKルーチンについて^DBACKルーチンについて【IRIS】^DBACKルーチンについて^DBACKルーチンについて
記事
Megumi Kakechi · 2022年1月12日
これは、InterSystems FAQサイトの記事です。ミラージャーナルファイルの削除(パージ)のタイミングは以下のようになります。
・プライマリ・フェイルオーバー・メンバ
以下の期限のうち長い方に該当するもの -ローカルジャーナルファイルの削除条件が満たされたとき ("ジャーナル設定の構成" を参照) -バックアップメンバとすべての非同期メンバに受信されたとき ただし、非同期メンバが14日間(既定値)を経過してもジャーナルファイルを受信しない場合は、そのジャーナルファイルは削除対象になります。 「既定の14日間」は、以下のコマンドで設定が可能になります。 この保持期間を過ぎると、ジャーナルが削除されてしまいその非同期メンバでは同期が取れなくなるのでご注意ください。
%SYS>write ##class(SYS.Mirror).JrnPurgeDefaultWait(10) // 引数で保持期間を渡す
・バックアップ・フェイルオーバー・メンバ およびすべての災害復旧 (DR) 非同期メンバ
以下の期限のうち長い方に該当するもの -ローカルジャーナルファイルの削除条件が満たされたとき -そのメンバで完全にデジャーナルされたとき -すべての非同期メンバに受信されたとき ただし、非同期メンバが14日間(既定値)を経過してもジャーナルファイルを受信しない場合は、そのジャーナルファイルは削除対象になります。
・レポート非同期メンバ
-既定では、ミラージャーナルファイルがデジャーナルされ、トランザクションロールバックで不要になったとき 管理ポータル:[システム管理] > [構成]> [ミラー設定] > [非同期の構成を編集] にて変更可能 ("非同期メンバの編集または削除" を参照)
ミラーではデジャーナリングが完了したジャーナルファイルは逐次システムが削除するので、手動でのミラージャーナルファイルの削除は行わないようにしてください。もし、プライマリ側で未完了トランザクションが存在する場合、そのトランザクションのデータを含むジャーナルファイルは削除されずにトランザクション終了まで保持されます。現在開いているトランザクションを含むミラージャーナルファイルはどのミラーメンバでも削除されません。どのジャーナルファイルまでデジャーナリングが完了しているかは、管理ポータルで確認することができます。 [システム オペレーション] > [ミラーモニタ] で各データベース毎にどのジャーナルファイルまで処理したかを確認できます。
ミラーリングではジャーナルデータの不整合/更新データの欠落を防ぐため、ジャーナルファイルへの書き込みができなくなった場合にデータベースへの更新アクセスをフリーズする動作となっています(この動作は変更できません)。ジャーナルファイルのディスクの空き容量不足により、業務がその復旧まで停止することとならないよう、代替えディレクトリの設定をするようにしてください。("ジャーナリングの最善の使用方法 "を参照)
詳細は、以下のドキュメントをご覧ください。ミラー・ジャーナル・ファイルの削除
どうしても手動で削除したい場合
ディスク容量が逼迫しどうしても手動で削除する必要がある場合、緊急の処置として以下のユーティリティまたはクラスメッソドにてジャーナルファイルのパージを行うことができます。ただし、バックアップ取得以降のジャーナルファイルも削除されますので早急にデータベースのバックアップを行うようにしてください。
トランザクションのロールバックに必要なジャーナルファイルを除き全てのジャーナルを削除する場合は、以下の2つの方法があります。
(1) PURGE^JOURNAL ユーティリティ
%SYS>do PURGE^JOURNAL
1) Purge any journal NOT required for transaction rollback or crash recovery
2) Purge journals based on existing criteria (2 days or 2 backups)
Option? 1
(2) %SYS.Journal.File クラス の PurgeAll() クラスメソッド
Set RET=##class(%SYS.Journal.File).PurgeAll()
ジャーナルファイルの日付・番号を指定し、指定されたファイルより過去のジャーナルファイルを削除する場合は以下の方法になります。
(3) SYS.Mirror クラス の PurgeJournalFiles() クラスメソッド
%SYS>set CheckOnly=1 // 1の場合はP urge対象のファイルをリストするだけ、 0 の場合は削除%SYS>set StartFile="c:\intersystems\18p\mgr\journal\MIRROR-NAME-20210714.001" // 開始ファイル、これより古いファイルが削除対象%SYS>write ##class(SYS.Mirror).PurgeJournalFiles(CheckOnly,StartFile,,,.PurgeCount,.PurgeMB,.PurgeRange,.PurgeFiles)1%SYS>zwritePurgeCount=4PurgeFiles("NAME")=4PurgeFiles("NAME",1)="c:\intersystems\18p\mgr\journal\MIRROR-NAME-20210708.001"PurgeFiles("NAME",2)="c:\intersystems\18p\mgr\journal\MIRROR-NAME-20210712.001"PurgeFiles("NAME",3)="c:\intersystems\18p\mgr\journal\MIRROR-NAME-20210713.001"PurgeFiles("NAME",4)="c:\intersystems\18p\mgr\journal\MIRROR-NAME-20210714.001"PurgeMB=9PurgeRange=" 66 69"
あわせて、以下の関連記事も是非ご覧ください。
Cache Mirroring 101:簡単なガイドとよくある質問 ミラーリングの機能について
記事
Hiroshi Sato · 2021年9月26日
これは InterSystems FAQ サイトの記事です。リストコレクション(Property XXX As list of %String;)で定義したプロパティは、SQL関数: $LISTBUILD() 、$LISTFROMSTRING() を使用して操作できます。
各SQL関数については、下記ドキュメントページをご参照ください。
InterSystems SQL リファレンス - $LISTBUILD() 【IRIS】IRIS SQL リファレンス - $LISTFROMSTRING() 【IRIS】Caché SQL リファレンス - $LISTBUILD()Caché SQL リファレンス - $LISTFROMSTRING()
/// クラス定義例Class ISJ.ListOfData Extends %Persistent{Property listdata As list Of %String;}
SQL文実行例は以下の通りです。
USER>do $system.SQL.Shell()--- 表示省略 ---USER>>insert into ISJ.ListOfData (listdata) values($LISTBUILD('あ','い','う'))10. insert into ISJ.ListOfData (listdata) values($LISTBUILD('あ','い','う'))1 Row Affected--- 表示省略 ---↓次は $LISTFROMTOSTRING()を使用した例↓USER>>insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('か,き,く'))12. insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('か,き,く') )1 Row Affectedstatement prepare time: 0.0180s, elapsed execute time: 0.0001s.---------------------------------------------------------------------------USER>>quitUSER>set obj=##class(ISJ.ListOfData).%OpenId(1) // オブジェクトで確認USER>write obj.listdata.Count()3USER>write obj.listdata.GetAt(1)あUSER>write obj.listdata.GetAt(2)いUSER>write obj.listdata.GetAt(3)うUSER>set obj=##class(ISJ.ListOfData).%OpenId(2)USER>for i=1:1:obj.listdata.Count() {write obj.listdata.GetAt(i),!}かきく
ODBC形式でアクセスするとカンマ区切りデータとして取り扱えます。
※表示形式変更方法は、DATE型やTIME型カラムに対する方法と同じです。
詳細は関連トピックをご参照ください。
USER>do $system.SQL.Shell()-- 表示省略 --USER>>set selectmode = odbc // ←ODBCモードへの切り替えselectmode = odbcUSER>>select * from ISJ.ListOfData14. select * from ISJ.ListOfDataID listdata1 あ,い,う2 か,き,く2 Rows(s) Affectedstatement prepare time: 0.0003s, elapsed execute time: 0.0006s.---------------------------------------------------------------------------USER>>update ISJ.ListOfData set listdata='さ,し,す' where ID=115. update ISJ.ListOfData set listdata='さ,し,す' where ID=11 Row Affectedstatement prepare time: 0.0007s, elapsed execute time: 0.0003s.---------------------------------------------------------------------------USER>>select * from ISJ.ListOfData16. select * from ISJ.ListOfDataID listdata1 さ,し,す2 か,き,く2 Rows(s) Affectedstatement prepare time: 0.0003s, elapsed execute time: 0.0005s.USER>>quit---------------------------------------------
記事
Megumi Kakechi · 2021年6月16日
これは InterSystems FAQ サイトの記事です。
InterSystems製品のシステムモニタが色々なリソースの使用状況を監視しています。
そしてその使用状況に応じてアラートやワーニング情報をコンソールログ(message.log/cconsole.log)に出力します。
アラート情報が表示するCPUのリソースについては、以下のものが定義されています。
ECP* ECP関連システムプロセスLICENSESRV ライセンスサーバシステムプロセスSLWDTYPE (WDSLAVE) スレーブライトデーモンシステムプロセスWDTYPE (WRTDMN) ライトデーモンシステムプロセスJDTYPE (JRNDMN) ジャーナルデーモンシステムプロセスGCTYPE (GARCOL) ガベージコレクタシステムプロセスCSPDMNTYPE (CSPDMN) CSPシステムプロセスCSPSRV CSPシステムプロセスODBCSRV ODBCシステムプロセスMirror* Mirroring関連システムプロセス
表示される数値は、各システムプロセス生成以降のCPU使用時間をmsecで算出、前回計測時との差分で集計期間の使用時間の割合(%)を算出しています。
(ただし、2015.1 より前のバージョンでは、CPU使用時間の集計に正確さが欠け、100%を上回る場合があります。)
Alertの場合:ある期間のセンサの読み取り値が 3 回連続してセンサの最大値を上回った場合にアラート (深刻度 2 の通知) を生成します。
Warningの場合:ある期間のセンサの読み取り値が 5 回連続してセンサの警告値を上回った場合にワーニング (深刻度 1 の通知) を生成します。
以下ドキュメントをご参照ください。
ヘルスモニタについて【IRIS】
Caché ヘルスモニタについて
記事
Mihoko Iijima · 2021年8月30日
これは InterSystems FAQ サイトの記事です。
InterSystems 製品には、テーブルのコンテンツに関する統計を収集し、クエリの最適化に役立てる「テーブルチューニング機能」があります。
設定方法は、以下のドキュメントをご参照ください。
テーブルのチューニングについて【IRIS】
テーブルのチューニングについて
ターミナルでは次のコマンドを実行します。
Do $system.SQL.TuneTable("<テーブル名>",0,1)
また、以下の資料もご参照ください。
1) パフォーマンス調査の基礎知識として必要なグローバル構造の解説やSQLの動作の仕組みからクエリプランの見方の解説
インターシステムズ・シンポジア2011の資料
2) パフォーマンスチューニングの例(P13~)
インターシステムズ・シンポジア2012の資料
3) ビットマップ・インデックスの圧縮やオプティマイザ・ヒントなど、Caché SQLのパフォーマンスを最大限に引き出すための情報について
インターシステムズ・シンポジア2014の資料
4) パフォーマンスに困ったときにどこに着目し、どのツールで調べていくか、お客様から日々ご相談をいただくカスタマーサポートから、解決に向かうアプローチの「イロハ」をご紹介するビデオ
動画:Performance 101
5) 開発者コミュティのパフォーマンス関連情報(performanceタグ)
performanceタグ
関連する以下記事、FAQトピックも併せてご参照ください。
クエリプランの見方を教えてください
外れ値について
選択性の数値について
記事
Toshihiko Minamoto · 2022年6月7日
Postgres から IRIS にデータとデータスキーマを転送または移行する必要がある場合があります。 これを現時点で実行するにはいくつかのオプションがありますが、最も一般的なオプションは、DBeaver(https://openexchange.intersystems.com/package/DBeaver)または SQLGateway を使用する 2 つの方法です。 最初のオプションはこの記事で紹介しますが、2 つ目のオプションは Robert Cemper が書いた「SQLgateway を使ったデータベース移行」(https://community.intersystems.com/post/db-migration-using-sqlgateway)という優れた記事で紹介されています。この記事では、DBeaver を使った移行の実行方法を説明します。
## 移行プロセスにサンプルデータを取得
GitHub では、2 つのデータベースをビルドして実行する docker compose プロジェクトをダウンロードできます。
* **ソースデータベース**: サンプルデータベースを含む Postgres データベースの Docker インスタンス。
* **ターゲットデータベース**: ソースデータベースを受け取る準備のできたスキーマを含む InterSystems IRIS データプラットフォームの Docker インスタンス。
サンプルを取得して実行するには、以下の手順に従います。
1. https://github.com/yurimarx/migration-pg-iris に移動し、[Download]をクリックして git リポジトリに移動します。
2. プロジェクトを Clone します。git clone https://github.com/yurimarx/migration-pg-iris.git
3. migration-pg-iris プロジェクトフォルダに移動します。
4. ビルドを実行します: docker-compose build
5. コンテナを実行します: docker-compose up -d
6. Docker のデスクトップでインスタンスが OK であることを確認します。
.png)
## 移行するデータについて
移行されるデータは以下の通りです。
.png)
PostgreSQL から IRIS への移行プロセスによって以下が移行されます。
* 8 個のテーブル
* sale の 1000000 行
* users の 250000 行
* product の 300 行
* store の 500 行
* country の 100 行
* city の 30 行
* status_name の 5 行
移行先は、InterSystems IRIS データベースの USER ネームスペース内にある dc_test スキーマです。
## PostgreSQL から IRIS に移行するためのオープンソースツール: DBeaver
DBeaver は、市販の主要データベース製品に接続し、データオブジェクトを作成、ドロップ、選択、更新、および削除するデータベースツールです。 https://openexchange.intersystems.com/package/DBeaver からダウンロードできます。 インストール手順に従って、この優れた製品をノートパソコンかデスクトップにインストールしてください。
DBeaver は、データベースのメーカーやバージョンが異なる場合であっても、データベース接続間でデータを移行するために使用できます。
## DBeaver を使って、ソースデータベースとターゲットデータベースを接続
移行するデータベース接続を設定します。
**DBeaver への PostgreSQL 接続を設定するには:**
1. DBeaver で、[ファイル]>[新規作成]に移動します。
2. [データベース接続]を選択して、[次へ]をクリックします。
.png)
3. [SQL]タブ >[PostgreSQL]を選択して、[次へ]をクリックします。
.png)
4. 以下の図のように、PostgreSQL 接続のフィールドに入力します。
ホスト: localhost、ポート: 5438、データベース: postgres、ユーザー名: postgres、パスワード: postgres、と入力し、[終了]をクリックします。
**DBeaver への InterSystems IRIS 接続を設定するには:**
1. DBeaver で、[ファイル]>[新規作成]に移動します。 2. [データベース接続]を選択して、[次へ]をクリックします。
.png)
3. [SQL]タブ >[InterSystems IRIS]を選択して、[次へ]をクリックします。
.png)
4. DBeaver が InterSystems IRIS ドライバーのダウンロードを要求したら、[はい]または[OK]を押します。
5. 以下の図のように、InterSystems IRIS 接続のフィールドに入力します。
ホスト: localhost、データベース/スキーマ: user、ユーザー名: _SYSTEM、パスワード: SYS、と入力し、[テスト接続]と[終了]をクリックします。
6. 接続(postgres と user)がデータベースナビゲーターで利用できるようになります。
.png)
## 移行を行う
**移行を行うには、以下の手順に従います。**
1. postgres 接続 > public を展開し、すべてのテーブルを選択します。 以下の図のように、選択されたテーブルを右クリックして[データをエクスポート]を選択します。
.png)
2. 以下の図のようにデータベースを選択して、[次へ]をクリックします。
.png)
3. [選択]ボタンをクリックします。
.png)
4. dc_test を選択して、[OK]をクリックします。
.png)
5. ターゲットデータベースのデータ型構成を変更する必要があります。IRIS と PostgreSQL では、整数値と10進値で異なるデータ型を使用するためです。
public.country テーブルを展開し、最初のフィールド(country_id)を選択して[列...]をクリックします。
.png)
7. [ターゲットの型]を int4 から integer に変更し、[OK]をクリックします。
.png)
8. 以下のテーブルでこのプロセスを繰り返します。
a. public.productb. public.status_namec. public.usersd. public.city(city_id と country_id の型を integer に変更します)e. public.store(store_id と city_id の型を integer に変更します)f. public.sale(amount の型を double に、product_id、user_id、store_id の型を integer に変更します)
.png)
g. public.order_status(status_name_id を integer に変更します)
9. ターゲットデータ型の変更が完了したら、[次へ]をクリックします。
.png)
10. [フェッチサイズ]を 1000000 に設定して、[次へ]をクリックします。
.png)
11. データ読み込み設定のデフォルト値を受け入れて、[次へ]をクリックします。
.png)
12. [確認]で[続行]をクリックします。
.png)
13. データベースナビゲーターで、InterSystems IRIS dc_test スキーマ内にすべての PostgreSQL テーブルが表示されます。
.png)
テーブルの移行プロセスは非常に単純でしたが、ビュー、関数、トリガー、およびストアドプロシージャについては、ObjectScript か SQL で SQL ソースコードを書き直す必要があります。
IRIS に移行するメリット
以下は、IRIS で得られる機能を要約したリストです。
* API 管理
* 視覚的レポート(IRIS レポート)
* AutoML(IntegratedML)
* 多言語アプリケーション/データ開発(Python、Java、.NET、JavaScript)
* ESB
* BI/分析
* NLP
* マイクロサービス開発
* マルチモデルデータベース(SQL、JSON、分析キューブ、オブジェクト指向)
* シャーディング
まとめると、IRIS に移行するというのは、データベースしかなかった状態からデータプラットフォームに移行できるということです。