クリアフィルター
記事
Hiroshi Sato · 2021年9月23日
これは InterSystems FAQ サイトの記事です。%IndexBuilder クラスを使用して、複数プロセスを利用してインデックス再構築を行うことができます。
Sample.Person の Home_State(連絡先住所の州情報)カラムに対して標準インデックス HomeStateIdx を定義する目的での例で記載します。
手順は以下の通りです。
1、追加/再構築予定のインデックス名をクエリオプティマイザから隠します。
>write $system.SQL.SetMapSelectability("Sample.Person","HomeStateIdx",0)1
2、新インデックスを定義するクラス定義のスーパークラスに %IndexBuilder を一番右端に追加します。
///クラス定義文は以下の通りです(一番右端に追加します)Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor, %Library.IndexBuilder)
3、クラス定義の INDEXBUILDERFILTER パラメータに再構築予定のインデックス名を登録します。
Index HomeStateIdx On Home.State;Parameter INDEXBUILDERFILTER = "HomeStateIdx";
4、クラスをコンパイルします。5、%ConstructIndicesParallel() メソッドを使用して、並列処理でインデックスの再構築を行います。
set st=##class(Sample.Person).%ConstructIndicesParallel()
6、インデックス再構築が終わったら、追加したインデックスをオプティマイザに公開します。
>write $system.SQL.SetMapSelectability("Sample.Person","HomeStateIdx",1)1
詳細は以下ドキュメントをご参照ください。
インデックス再構築をアプリケーション実行中に行う方法について【IRIS】
インデックス再構築をアプリケーション実行中に行う方法について
記事
Mihoko Iijima · 2021年6月4日
これは InterSystems FAQ サイトの記事です。
ユーザーが作成したクラス定義は、クラス定義クラスの中に格納されます。
クラス定義一覧をプログラムから取得する方法として、「クラス定義クラス」を利用することができます。
メモ:クラス定義クラスとは、%Dictionary パッケージに含まれるクラス全般のことをさします。
以下サンプルコードでは、%Dictionary.ClassDefinitionQuery クラスの Summary クエリを利用してクラス定義一覧を取得しています。
Class ISJ.Utils
{
ClassMethod ClassInfo()
{
#dim ex As %Exception.AbstractException
try {
set currentNS=$NAMESPACE
while (1) {
read "ネームスペースを指定してください : ",x
if x'="" quit
}
set $NAMESPACE=x // ネームスペースの移動
write !! // 見やすくするために2回改行
Set statement = ##class(%SQL.Statement).%New()
Do statement.%PrepareClassQuery("%Dictionary.ClassDefinitionQuery","Summary")
set rs = statement.%Execute()
while rs.%Next() {
set name=rs.%Get("Name")
if name["%" continue // %つきのクラスは飛ばす
if $extract(name,1,3)="csp" continue // csp.*は飛ばす
if $extract(name,1,3)="csr" continue // csr.*は飛ばす
write name,!
}
set $NAMESPACE=currentNS
}
catch ex {
write "エラー発生 : ",ex.DisplayString(),!
set $NAMESPACE=$get(currentNS)
}
}
}
実行例は以下の通りです。
クラスメソッドを実行すると、「ネームスペースを指定してください」と出るので、参照したいネームスペース名を指定してください。
USER>do ##class(ISJ.Utils).ClassInfo()
ネームスペースを指定してください : USER
CSPX.Dashboard.BarChart
CSPX.Dashboard.Chart
CSPX.Dashboard.ChartSeries
CSPX.Dashboard.FuelGauge
<省略>
INFORMATION.SCHEMA.VIEWTABLEUSAGE
ISJ.Utils
Test.JSONTest
Test.Person
Test.REST
Test.VSCode.REST
USER>
関連記事:ルーチン一覧をプログラミングで取得する方法
記事
Toshihiko Minamoto · 2021年9月20日
開発者の皆さん、こんにちは!
CSVまたはURLからCSVデータをプログラムでInterSystems IRISにインポートしなければならない場合があります。 そして、適切なデータ型でクラスが作成され、そのデータがインポートされることを期待するでしょう。
それを実現する[csvgen](https://openexchange.intersystems.com/package/csvgen)モジュールをOpen Exchangeに公開しました。
IRISにCSVファイルをインポートするだけであれば、次のようにすることができます。
USER>do ##class(community.csvgen).Generate("/usr/data/titanic.csv",,"Data.Titanic")
Class name: Data.Titanic
Header: PassengerId INTEGER,Survived INTEGER,Pclass INTEGER,Name VARCHAR(250),Sex VARCHAR(250),Age INTEGER,SibSp INTEGER,Parch INTEGER,Ticket VARCHAR(250),Fare MONEY,Cabin VARCHAR(250),Embarked VARCHAR(250)
Records imported: 891
USER>
または、[GitHubのCOVID-19 Data](https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_daily_reports/05-29-2020.csv)のように、インターネット上にCSVがある場合は、次のようにしてデータを取得できます。
USER>d ##class(community.csvgen).GenerateFromURL("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/05-29-2020.csv",",","Data.Covid19")
Class name: Data.Covid19
Header: FIPS INTEGER,Admin2 VARCHAR(250),Province_State VARCHAR(250),Country_Region VARCHAR(250),Last_Update DATE,Lat MONEY,Long_ DOUBLE,Confirmed INTEGER,Deaths INTEGER,Recovered INTEGER,Active INTEGER,Combined_Key VARCHAR(250),Incidence_Rate DOUBLE,Case-Fatality_Ratio DOUBLE
Records imported: 3522
USER>
##
## インストール
パッケージはZPMを使ってインストールできます。
USER>zpm
zpm:USER>install csvgen
csvgenモジュールは単なる [CSV2CLASSメソッド](https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?APP=1&CLASSNAME=%25SQL.Util.Procedures)のラッパーです。
ObjectScriptの品質プロファイルについて。
あまり理想的な品質ではないため、ご協力、大歓迎です!
記事
Megumi Kakechi · 2022年7月31日
これは InterSystems FAQ サイトの記事です。TRYブロック内で任意のカスタムエラーを発生させたい場合、以下のように throw で例外を渡すことが可能です。
以下のサンプルでは、Stcount が 1 より小さい場合にカスタムエラーを発生させています。
Class User.Test
{
ClassMethod ExceptionTest()
{
try
{
// : some codes
if (Stcount<1) {
throw ##class(%Exception.General).%New(" ユーザ定義エラー","5001","ロケーション","エラー時のデータ")
// ユーザ作成エラーは5001以降
}
}
catch ex
{
write "エラー #", ex.Code, ": ", ex.Name, " : ", ex.Location, " ", ex.Data
return
}
}
}
上の例では、Stcount が 1 より小さい場合、以下のようなエラーが出力されます。
USER>do ##class(User.Test).ExceptionTest()
エラー #5001: ユーザ定義エラー : ロケーション エラー時のデータ
詳細は以下のドキュメントをご覧ください。ObjectScriptコマンド_THROW
また、任意のステータスコードを作成したい場合は以下のように行います。
USER>set st = ##class(%SYSTEM.Status).Error(5001,"これはユーザ定義エラーです")
USER>zwrite st
st="0 "_$lb($lb(5001,"これはユーザ定義エラーです",,,,,,,,$lb(,"USER",$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0"))))/* エラー #5001: これはユーザ定義エラーです */
USER>do $SYSTEM.Status.DisplayError(st)
エラー #5001: これはユーザ定義エラーです
以下の関連トピックもあわせてご覧ください。
【FAQ】ユーザ定義のエラーを定義したいのですが、どのようにすればいいですか?【FAQ】プログラミングを行う際のエラー処理方法を教えてください。
記事
Hiroshi Sato · 2022年8月28日
これは InterSystems FAQ サイトの記事です。
実行ログデータなどトランザクション中にロールバックが発生しても前の状態に戻ってほしくないデータがあります。
それらのデータをロールバックされないデータベースIRISTEMPに配置することで上記の要件に対応できます。
一時グローバルと IRISTEMP データベース
ロールバックさせたくないテーブルの実体をこのデータベースにマッピングすることでロールバック後に情報を残すことができます。
ただし、このデータベースはIRIS再起動で内容がクリアされますので、永続的に保持したい場合には、いずれかのタイミング(ロールバック後等)で永続テーブルにコピーを行う必要があります。
また、これとは別に、トランザクション対象外としたいテーブル操作の前にプロセスのジャーナル記録を停止し、操作完了後にジャーナル記録を再開することで、その操作をトランザクション対象外にすることもできます。
ただしこの方法は、ミラーリングをお使いいただく際にはご使用いただけません。
%NOJRN を使用したプロセス・レベルでのジャーナリングの管理
デベロッパーコミュニティの記事
お知らせ
Rie Tokue · 2023年3月29日
開発者の皆さん、こんにちは。インターシステムズジャパン、マーケティング担当・徳江です。
弊社は4月26日(水)13時30分~14時「Pythonでデータベースプログラミング」と題し、
オンラインセミナーを開催いたします。
【概要】
本セミナーでは、InterSystems IRIS Data Platformの機能であるEmbedded Pythonをご紹介し、IRISのデータベースを扱う
Pythonプログラムの基本的な書き方をご説明します。デモもお見せする予定です。
Embedded Pythonは、IRISのサーバサイドのロジックをPythonで記述するための仕組みです。Embedded Pythonによって、
・ IRISの開発者が、Pythonの豊富なライブラリを簡単に活用することが可能になります。
・ Pythonプログラマが、IRISの高性能なデータベースを利用するプログラムを容易に開発することができます。
【アジェンダ】
プログラミング言語Pythonの特長
Embedded Pythonの概要
PythonのプログラムからIRISのデータベースを使う方法
IRISのObjectScriptからPythonのプログラムを活用する方法
【対象者】
IRISに関わる技術者の方
データベースプログラムを開発するPythonプログラマの方
Pythonに興味がある方
【以下の方にお勧め】
データ分析などでPythonを活用したいとお考えの方
ObjectScriptを学ばずにIRISを活用したい方
ご登録はこちらからお願いいたします(参加費無料)。
皆様のご参加をお待ちしております!
お知らせ
Rie Tokue · 2023年5月8日
開発者の皆さん、こんにちは。
ご好評をいただいております弊社主催・開発者向けオンラインセミナーを
5月30日(火)13時30分~14時に開催いたします。今回のテーマは「ワークフローコンポーネントの使い方」です。
(参加費無料・事前登録制)
【概要】
本ウェビナーでは、InterSystems IRIS Data Platform が持つ Interoperability(相互運用性)機能を利用してシステム連携を行う際、自動的な連携の流れにユーザからの指示を介入できる「ワークフローコンポーネント」の使い方についてご紹介します。
ワークフローコンポーネントは、IRISの標準機能でワークフロータスク担当者が指示を行うための専用ポータルも標準で用意されています。
ウェビナーでは、ワークフローコンポーネントの使い方についてご理解いただくため、以下の内容をご説明します。
動作の仕組み
開発手順
ユーザポータルの操作
コミュニティサポートのREST APIを利用したワークフローAPIの紹介
※Interoperaiblity(相互運用性)機能概要ついてもご説明に含める予定です。
【対象者】
Interoperaiblity(相互運用性)機能に興味がある方
IRISに関わる技術者の方
ユーザからの指示を介入できるシステム連携に興味がある方
ご登録はこちらから。
ご多用中とは存じますが、皆様のご参加をお待ちしております。
記事
Mihoko Iijima · 2025年1月6日
これは 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' データ ''"
}
POST要求時に送付するBodyの中身は、RESTディスパッチクラスの中では %request.Content を使用して操作でき、%request.Content.Read()とした場合、JSON文字列が取り出せます。
%request.Content.Read()の結果(=POST要求で受信したBodyの長さ)が32KBを超える場合に、上記エラーが発生します。
メモ:変数%requestは%CSP.Requestクラスのインスタンス
JSON文字からダイナミックオブジェクトに変換する際使用する%FromJSON()メソッドの引数には、JSON文字列かJSON文字列が含まれるストリームを指定することができます。
%FromJSON()の引数に32KBを超えるJSON文字列を渡した場合、上記エラーが発生してしまいますので、以下の例のようにJSON文字を引数に指定するのではなく
set bodyjson={}.%FromJSON(%request.Content.Read())
JSON文字を含むストリームを%FromJSON()に渡す以下例の方法を使用することでエラーを回避できます。
set bodyjson={}.%FromJSON(%request.Content)
記事
Tomoko Furuzono · 2025年3月27日
これは、InterSystems FAQ サイトの記事です。
システムログ(messages.log/cconsole.log)に出力される、
[Utility.Event] %SYS.Task.FeatureTracker failed to transfer data
というログは、機能トラッカというタスクが出力しているメッセージです。このタスクは、弊社がユーザ使用状況の統計を取得する為のデータ送信タスクになります。エラーは弊社と通信が行われてない為に発生しています。
機能トラッカの詳細については下記ドキュメントをご確認ください。機能トラッカによる使用量統計の収集
このタスク自体は、アプリケーションやシステムの動作自体に関連はありませんので、メッセージが出ていても影響はありませんが、タスクを無効にすることもできます。機能トラッカのタスクを無効にする手順は以下の通りです。
1. 管理ポータルで、[システム操作]→[タスクマネージャ]→[タスクスケジュール] を選択2. 機能トラッカの行を見つけて、[機能トラッカ] を選択3. タスク詳細のページが表示されたら、[一時停止]4. [タスク実行が一時停止された場合にタスクを再スケジュールしますか?] という質問に適切に回答 → いいえ5. [このアクションをすぐに実行する] を選択、タスクを停止
記事
Toshihiko Minamoto · 2022年12月31日
YASPEはYAPE(Yet Another pButtons Extractor)の後継機種です。YASPEは、メンテナンスと拡張を容易にするために、多くの内部変更を行い、一から書き直しました。
YASPEの機能は以下の通りです。
- 「InterSystems Caché pButtons」 および 「InterSystems IRIS SystemPerformance」 ファイルを解析してグラフ化し、オペレーティング・システムおよび IRIS のメトリックを迅速にパフォーマンス解析します。
- アドホックチャートを作成したり、「Pretty Performance」オプションでOperating SystemとIRISの指標を組み合わせたチャートを作成することで、より深く掘り下げることが可能です。
- 「System Overview」 オプションを使用すると、システムの詳細や一般的な設定オプションについて SystemPerformance ファイルを検索する手間を省くことができます。
YASPEはPythonで書かれています。ソースコードはGitHubで公開されており、Dockerコンテナ用には以下で公開されています。
> - https://github.com/murrayo/yaspe
---
> YASPEは、現在のOperating SystemとIRISのバージョンに重点を置いています。古いバージョンを実行してYASPEに問題がある場合、YAPEを介してパフォーマンスファイルを正常に実行するかどうかを確認することができます。問題がある場合は、遠慮なくGitHubを通じて私に連絡してください。
---
## 例
### 出力ファイル
オプションは以下の通りです:
- mgstat と vmstat または windows perfmon の全カラムの HTML または PNG チャートと、フォルダへの出力。
- iostatのチャート作成は、大きなディスクリストがある場合、時間がかかることがあるため、オプションとします。
- Excelなどでさらに手作業で加工するためのCSVファイルなどです。

### Pretty Performance
以下はカスタムチャートの例で、Glorefs (mgstat) とTotal CPUの使用率 (vmstat)です。
[](https://github.com/murrayo/yaspe/blob/main/images/Glorefs_and_CPU_Utilisation_-_Sample_site_name_Monday_17_Jan_2022.png)
下の画像は、指定した時間へのズームを含むデフォルト画像の1つです(デフォルトは13:00-14:00)。
[](https://github.com/murrayo/yaspe/blob/main/images/CPU_Utilisation_1000_1100.png)
### システム概要
_yaspe_ は、システムの概要と基本的な設定のチェックを含みます (`-s`)
このチェックは、システムの詳細を探すために SystemPerformance ファイルを探し回る手間を省くためのものです。以下は `overview.txt` の例です。
```text
サイト名称のSystem Summary
ホストネーム : YOURHOST
インスタンス : SHADOW
オペレーティングシステム : Linux
プラットフォーム : N/A
CPUの数 : 24
プロセッサー : Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
メモリ : 126 GB
共有メモリ : globals 71680 MB + routines 1023 MB + gmheap 1000 MB = 73,703 MB
バージョン : Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2018.1.4 (Build 505_1U) Thu May 28 2020 10:11:16 EDT
収集日 : プロファイル実行「24hours」は、2021年11月22日16時15分00秒に開始されました。
注意:
- エラー発生時のジャーナルフリーズは使用できません。ジャーナルIOエラーが発生した場合、この期間に発生したデータベースアクティビティは復元できません。
- swappinessのパラメータは10です。データベースの場合、Linuxカーネルがメモリページをディスクにスワップする積極性を調整するために、5を推奨します。
- Hugepagesが設定されていない。パフォーマンス、メモリ効率、および共有メモリのページアウトを防ぐために、巨大なページメモリ空間を使用します。HugePagesを共有メモリ量よりはるかに大きく指定することはお勧めしません。なぜなら、未使用のメモリが他のコンポーネントで使用できなくなるからです。
- dirty_background_ratioのパラメータは10 です。InterSystems では、このパラメータを 5 に設定することを推奨しています。この設定は、pdflush がダーティページの書き込みを開始する前に、ダーティページで埋められるアクティブなメモリの最大パーセンテージです。
- dirty_ratio のパラメータは 30 です。インターシステムズでは、このパラメータを 10 に設定することを推奨しています。この設定は、タイムスライス中にプロセスがより多くの書き込みを許可される代わりに、ダーティバッファを自ら書き込むように強制される前に、ダーティページで満たすことができる総メモリの最大割合を示します。これらの変更により、Linuxのpdflushデーモンは、ストレージに大量の更新が殺到する可能性のあるキューを作成するのではなく、より頻繁にダーティページを書き出すように強制されます。
お勧め:
- 上記の注意を見直し、修正してください。。
- HugePagesを設定し、IRISのドキュメントを参照してください: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GCI_prepare_install#GCI_memory_big_linux
- 総メモリ量は128,755MB、総メモリ量の75%は96,566MBです。
- 共有メモリ(グローバル+ルーチン+gmheap)は73,703MBです。(総メモリの57%)です。
- ( 73,703 MB + 5% バッファ = 77,388 MB ) のページサイズ 2048 KB の HugePages 数は、38694 です。
このホストのすべてのインスタンスは:
- >SHADOW 2018.1.4.505.1.a 56772 /cachesys
```
---
記事
Toshihiko Minamoto · 2021年4月28日
数年ほど前、Caché Foundationsの講座(現「[Developing Using InterSystems Objects and SQL](https://www.intersystems.com/support-learning/learning-services/classroom-learning/course/developing-with-intersystems-objects-and-sql/)」)において、%UnitTestフレームワークの基礎を講義していたことがあります。 その時、ある受講者から、ユニットテストを実行している間に、パフォーマンス統計を収集できるかどうかを尋ねられました。 それから数週間後、この質問に答えるために、%UnitTestの例にコードを追加したのですが、 ようやく、このコミュニティでも共有することにしました。
Processクラスの%SYSTEMには、プロセスについて収集可能なメトリクスが(所要時間以外に)いくつか提供されています。
所要時間
実行された行
グローバル参照
システムCPU時間
ユーザーCPU時間
ディスク読み取り時間
上記の統計を収集する任意のユニットテストを有効にするには、%UnitTest.TestCaseのサブクラスを作成してプロパティを追加します。
Class Performance.TestCase Extends %UnitTest.TestCase
{
Property Duration As %Time;
Property Lines As %Integer;
Property Globals As %Integer;
Property SystemCPUTime As %Integer;
Property UserCPUTime As %Integer;
Property DiskReadTime As %Integer;
}
作成する特定のユニットテストは、%UnitTest.TestCaseではなく、新しいサブクラスから継承されている必要があります。
サブクラスではOnBeforeOneTest()を使って、各ユニットテストの統計データを初期化します。 DiskReadTime以外、現在値でプロパティを初期化します。
/// パフォーマンス統計を初期化します
Method OnBeforeOneTest(testname As %String) As %Status
{
// 現在の値で初期化します
set ..Duration = $zh
set ..Lines = $system.Process.LinesExecuted()
set ..Globals = $system.Process.GlobalReferences()
set ..SystemCPUTime = $piece(CPUTime, ",", 1)
set ..UserCPUTime = $piece(CPUTime, ",", 2)
// ディスク時間を0にリセットし、カウントを開始します
do $system.Process.ResetDiskReadTiming()
do $system.Process.EnableDiskReadTiming()
return $$$OK
}
OnAfterOneTest() を使って、各ユニットテストの統計データを確定します。 DiskReadTime以外、現在の値から初期値を減算します。
/// パフォーマンス統計を確定します
/// ここに、分析用にカウンターを別のテーブルに保存するためのコードを追加できます。
Method OnAfterOneTest(testname As %String) As %Status
{
set ..Duration = $zh - ..Duration
set ..Lines = $system.Process.LinesExecuted() - ..Lines
set ..Globals = $system.Process.GlobalReferences() - ..Globals
set CPUTime = $system.Process.GetCPUTime()
set ..SystemCPUTime = $piece(CPUTime, ",", 1) - ..SystemCPUTime
set ..UserCPUTime = $piece(CPUTime, ",", 2) - ..UserCPUTime
// ディスク読み取り時間を取得し、カウントを停止します
set ..DiskReadTime = $system.Process.DiskReadMilliseconds()
do $system.Process.DisableDiskReadTiming()
// ユニットテストログにメッセージを追加します
set msg = "Performance: " _
"Duration: " _ ..Duration _
", Lines: " _ ..Lines _
", Globals: " _ ..Globals _
", System CPU Time: " _ (..SystemCPUTime / 1000) _
", User CPU Time: " _ (..UserCPUTime / 1000) _
", Disk Read Time: " _ (..DiskReadTime / 1000)
do $$$LogMessage(msg)
return $$$OK
}
ちょっとした技がもう1つあります。 統計を収集するかしないかを指定して、ユニットテストを実行したほうが良いかもしれません。 したがって、ユニットテストを呼び出すコードに引数(%Boolean 1または0)を追加し、何らかの方法で渡す必要があります。 テストを実際に実行するメソッド(RunTest() またはほかのRun*() メソッドの1つ)は、第3引数に配列を取り、参照形式で渡します。 次は、そのサンプルコードです。
// logging引数(1または0)を保持する配列を作成し、それを参照で渡します
set p("logging") = logging
do ##class(%UnitTest.Manager).RunTest(test, qualifiers, .p)
配列に渡す値は、OnBeforeOneTest() と OnAfterOneTest() でアクセスできます。 これを両方のメソッドの最初の行に追加します。
if (..Manager.UserFields.GetAt("logging") = 0) { return $$$OK }
以上です! 皆さんのご質問、コメント、その他のアイデアをぜひお聞かせください。
記事
Megumi Kakechi · 2021年4月16日
これは InterSystems FAQ サイトの記事です。
ジャーナル切り替えのタスクが実行時にエラー(例:FILEFULL)となり、その原因となるエラーを解消後も一時停止(Suspend Leave)状態となっているのであれば、以下の操作により復旧可能です。
管理ポータル: [システムオペレーション] > [タスクマネージャ] > [タスクスケジュール表示] より、以下の操作を行います。
ジャーナル切り替え(Switch Journal) "詳細" をクリック
"一時停止" をクリック
タスク実行が一時停止された場合にタスクを再スケジュールしますか? はい
"すぐに実行する" をクリック
"再開" をクリック
"すぐに実行する"
タスク詳細にて "一時停止:"が空欄になり、"次回スケジュール時刻:" が再開後の次のスケジュール(例えば2021-04-17 00:00) になっていれば、復旧完了です。
こちらの方法で一時停止状態が解消しない場合は、診断レポート※(^SystemCheck/^Buttons)とタスクの情報(以下の手順で取得)をサポート宛てにお送りいただいた上、ご連絡ください。
※InterSystems IRISトラブル対応ガイド~情報収集編~(^SystemCheck/IRISHungの使い方)Caché/Ensembleトラブル対応ガイド~情報収集編~(Buttons/CacheHungの使い方)
%SYS>do ^TASKMGR 1) タスク作成2) タスク編集3) タスク一覧4) タスク削除5) タスク一時停止6) タスク再開7) タスク実行8) タスクリポート9) タスクマネージャオプション10) 終了 オプション?8 // 8 を入力して <Enter> 1) タスクスケジュール2) タスク詳細3) タスク履歴4) タスク履歴詳細5) 実行予定タスク6) 終了 オプション?2 // 2 を入力して <Enter> どのタスクの詳細を表示しますか? (*=すべて)? // ? を入力して <Enter> ID タスク名 タスクタイプ一時停止 1) ジャーナル切り替え System 2) ジャーナルファイル削除 System 3) タスク削除 System 4) 整合性チェック System Suspend Reschedule 5) セキュリティスキャン System 6) 診断レポート System 7) 監査データベースのパージ System 8) インベントリスキャン System 9) エラーとログファイルを削除 System 10) ロギングアクティビティチェックSystem 11) バックアップログの削除 System 12) ZEN レポートの一時ファイルを削除System 13) 機能トラッカー System 14) SQL クエリ統計情報を更新 System 15) 凍結プランをスキャン System 16) SQL ステートメント・インデックスをクリーンアップSystem 1000) Mirror Monitor Launch Task User どのタスクの詳細を表示しますか? (*=すべて)1 ジャーナル切り替え // 1 を入力して <Enter> ------------------タスク名: ジャーナル切り替え説明: 毎日零時にジャーナルファイルの切り替えを行いますタスクタイプ: Systemネームスペース: %SYSタスククラス: %SYS.Task.SwitchJournalバッチモード: 0優先度: Normal一時停止:開始時に再スケジュール:1Suspend on Error*: 0タスク実行: 日次、 毎日実行間隔: 00:00:00 に一度MirrorStatus*: Any次のスケジュール日付: 2021-04-11次のスケジュール時間: 00:00:00開始日付: 2021-02-16終了日付: None最終開始: 2021-04-10 05:30最終完了: 2021-04-10 05:30最終状態: 最終結果: curfile^JRNSWTCH%ER 日付: 04/10/2021%ERエラー#: 61217ID: 1
記事
Mihoko Iijima · 2021年9月24日
これは InterSystems FAQ サイトの記事です。
システムユーティリティクラスを利用したプログラムを作成することで出力できます。
【注意1】出力データの区切り文字がカンマではなくタブで出力されます点、ご注意ください。
【注意2】エクセルでタブ区切りのファイルを開くため、エクセルの開くメニューから出力したファイルを開いてください。
処理概要は以下の通りです。
1) %SYSTEM.SQL クラス(※)の Execute() メソッドを使用します。
第1引数:SQL文を指定します。
第2引数:内部日付が格納されている場合 yyyy-mm-dd で出力されるように表示モードを切り替えます。(1:odbcモード)
詳細は下記ドキュメントページおよびクラスリファレンスをご参照ください。
ドキュメント - $SYSTEM.SQL.Execute()【IRIS】クラスリファレンス - $SYSTEM.SQLクラス - Execute()メソッド【IRIS】
ドキュメント - $SYSTEM.SQL.Execute()クラスリファレンス - $SYSTEM.SQLクラス - Execute()メソッド
※ %SYSTEMパッケージ以下クラスは $system 特殊変数を利用してメソッドを実行できます。
set rset=$system.SQL.Execute("ここにSQL文",1)
2) 実行結果は %SQL.StatementResult クラスのインスタンスで返ります。
%DisplayFormatted() メソッドを使用して検索結果のファイル出力を実行します。
// 第1引数:出力形式の指定
// 0:XMLファイル出力
// 1:HTMLファイル出力
// 99:タブ区切りのテキストファイル出力)
// 100:CSVファイル出力《注意:タブ区切りで生成されます》 【注意3】参照
// 第2引数:出力ファイル名の指定(ファイルの拡張子を付けずにフルパスで指定)
// 【注意】Caché/Ensembleサーバ上に出力されます
// 第3引数:実行結果の取得用変数(参照渡しのため、先頭にピリオド付与)
do rset.%DisplayFormatted(99,"c:\kit\test",.pMessages)
上記 1) 2) の処理をまとめてストアドプロシージャとして利用できるサンプルをご用意しています。
https://github.com/Intersystems-jp/FAQ-SQLtoCSVUtility
検索対象テーブルが存在するネームスペースにインポートしてご利用ください。
サンプル実行例は以下の通りです(ターミナルでの実行例)。
// 実行したいSQLを変数に設定
set sql="SELECT OrderID, ItemName, Quantity, OrderDate FROM Test.FruitsOrder"
// インポートしたクラスメソッドを実行します。1が返れば成功です
write ##class(ISJSQL.Utils).ToCSV(sql,,"c:\kit")
メソッドの引数詳細は、クラスメソッドの説明文(Utils.cls 4~12行目) をご参照ください。
出力結果は、第3引数に指定したディレクトリ以下に yyyymmddhhmmss.拡張子 の形式で出力されます(拡張子は、メソッドの第2引数で指定する形式により異なります)。
ストアドプロシージャの実行を管理ポータルから行う手順は以下の通りです。
管理ポータル > システムエクスプローラー > SQL の画面を開きサンプルをインポートしたネームスペース移動後、ISJSQL.Utils_ToCSV()を実行します。
出力結果は、第3引数に指定したディレクトリ以下に yyyymmddhhmmss.拡張子 の形式で出力されます(拡張子は、メソッドの第2引数で指定する形式により異なります)。
関連記事
管理ポータルから任意のSQL実行結果をCSVファイルに出力する方法
記事
Mihoko Iijima · 2023年3月3日
開発者の皆さん、こんにちは!
IRISのRESTディスパッチクラスのデバッグがVSCodeで簡単にできるようになりましたので、利用手順についてご紹介します。
ObjectScriptエクステンション バージョン2.4.0 に追加されています。 のアイコンクリック時に表示されるエクステンション一覧でObjectScriptエクステンションに「Update」と表示されている場合は、更新を行ってください。
事前準備
まずは、RESTディスパッチクラスが保存されているIRISのネームスペースにVSCodeから接続する必要があります。
接続方法は以下2種類あります。
その1:ワークスペース単位に設定するsettings.jsonにIRISのサーバ情報と接続情報を設定する
設定詳細:VSCode を使ってみよう!
ビデオでの解説:InterSystems IRIS で開発をはじめよう!(22:35頃~)
ワークスペース単位にIRISのサーバ情報(ホスト名、ポート番号、接続ユーザ名)と、IRISへの接続情報(サーバ情報で作成したサーバ名、ネームスペース)を指定します。
その2:ユーザ単位に設定するsettings.jsonにIRISのサーバ情報を設定し、ワークスペース単位に設定するsettings.jsonに使用するサーバ情報のみを指定する。
設定詳細:VSCode を使ってみよう (2021年4月20日版)
VSCodeを使用するユーザ単位でIRISのサーバ情報(ホスト名、ポート番号、接続ユーザ名)を固定情報として設定します。ワークスペースに設定するsettings.jsonには、IRISへの接続情報(サーバ情報で作成したサーバ名、ネームスペース)のみを設定します。
デバッグ方法
ObjectScriptエクステンションで提供される「Debug REST Service」メニューでデバッグが実行できます。
図解のクラスでお試しいただく場合は、こちら👉https://github.com/Intersystems-jp/RESTDebug-VSCode をご利用ください。
※ObjectScriptエクステンションの最新をご利用ください。
手順は以下の通りです。
1) デバッグ対象メソッドにブレークマークを設定します。
上の図例では、ワークスペース上のソースコードに対してブレークマークを設定していますが、 をクリックしサーバ側コードに対してブレークマークを設定しデバッグを開始することもできます。
2) ソースコード上で右クリック→「Debug REST Service」を選択 します。
3) HTTPメソッドとURLを指定します。
4) クエリパラメータがあれば「QUERY PARAMETERS」タブで指定します。
3) の画面のURLに ? を使用してクエリパラメータを追加できません。「QUERY PARAMETERS」をご利用ください。
5) Bodyの指定が必要であれば「BODY」タブで指定します。
6) Start Debuggingボタンをクリックしてデバッグを開始します。
開始後は、以下のボタンを利用してデバッグを進めます。 デバッグ終了時は「Stop」を押して終了してください。
ぜひ皆さんのお手元でも試してみください!
次の記事では、VSCodeの「Debug REST Service」を使わずに、外部クライアント(RESTクライアントなど)からHTTP要求を実行し、処理中のIRIS内プロセスにアタッチしながらデバッグを行う方法をご紹介します。
記事
Hiroshi Sato · 2020年11月23日
これはInterSystems FAQ サイトの記事です。
1. エクスポートAPI
a. ルーチンを個別に指定してエクスポートする場合は、$system.OBJ.Export() を使用します。
例:
do $system.OBJ.Export("TEST1.mac,TEST2.mac","c:\temp\routines.xml",,.errors)
指定する形式は ルーチン名.拡張子 で、拡張子は mac,bas,int,inc,obj を指定します。
エクスポート中のエラーは errors に格納されます。
$system.OBJ.Export() の詳細はクラスリファレンス %SYSTEM.OBJ を参照してください。
b. ワイルドカードを使用してエクスポートする場合にも、$system.OBJ.Export() を使用します。例:
do $system.OBJ.Export("*.mac",c:\temp\allmacroutines.xml")
※バージョン2008.1より前では、$system.OBJ.ExportPattern() を使用します。
2. インポート方法
a. ファイルに含まれる全ルーチンをインポートする
ファイルに含まれる全ルーチンをインポートするには $system.OBJ.Load() を使用します。
例:
do $system.OBJ.Load("c:\temp\routines.xml",,.errors)
b. ファイルに含まれるルーチンのうち一部のみをインポートする
XMLファイルに含まれる一部のルーチンのみ選択してインポートする場合、一旦$system.OBJ.Load() で、第5引数の listonly を 1 に設定してXMLファイルを読み込み、第4引数(出力引数)で得られたリストからインポート対象を選択して第6引数で指定します。例:
Set file="c:\temp\routines.xml" // まずXMLに含まれるアイテム一覧を取得 Do $system.OBJ.Load(file,,.errors,.list,1 /* listonly */) Set item=$Order(list("")) Kill loaditem While item'="" { If item["Sample" Set loaditem(item)="" { // Sample を含むもののみインポート Set item=$Order(list(item)) } } // 作成されたリストでインポート処理実行 Do $system.OBJ.Load(file,,.errors,,,.loaditem)