これはInterSystems FAQ サイトの記事です。
^BACKUP ユーティリティを使用して、DBリストアする方法をご紹介します。
添付のドキュメントでは、オンラインバックアップ と レガシー並行外部バックアップ の2種類のバックアップからのリストア処理の方法を紹介しています。
リストア処理の詳細は、下記ドキュメントページを参照してください。
オンライン・バックアップ・リストア・ユーティリティ【IRIS】
Caché オンライン・バックアップ・リストア・ユーティリティについて
これはInterSystems FAQ サイトの記事です。
^BACKUP ユーティリティを使用して、DBリストアする方法をご紹介します。
添付のドキュメントでは、オンラインバックアップ と レガシー並行外部バックアップ の2種類のバックアップからのリストア処理の方法を紹介しています。
リストア処理の詳細は、下記ドキュメントページを参照してください。
オンライン・バックアップ・リストア・ユーティリティ【IRIS】
Caché オンライン・バックアップ・リストア・ユーティリティについて
これはInterSystems FAQ サイトの記事です。
ファイルサイズを取得する専用メソッドはありませんが、%Net.FtpSession クラスの sendCommand() メソッドを通してFTPのSIZEコマンドを呼び出し、サイズを取得できます。
簡単な利用例をご紹介します。
まず、以下の様なクラスを定義します。
ClassExtends%Net.FtpSession上記で作成したクラスを使用したサンプルコードです。
※ sendCommand() メソッドは [Internal] 属性が付与されているため将来変更される可能性があります。
開発者の皆さん、こんにちは。
いつも使用しているユーザでアプリケーションや InterSystems 製品(IRIS/Caché/Ensemble/HealthShare) にアクセスしたとき、セキュリティ設定変更などの影響で急にアクセスできなくなった!という場合に、調査に便利な監査ログの参照方法をご紹介します。
ここでは、%Allロールを持つシステム管理ユーザ( _system や SuperUser )で管理ポータルにアクセスできる状態での確認方法をご紹介します。
監査ログですが、まずはシステムで監査が取られる設定になっているかご確認ください(通常無効化されている場合は、調査の時だけ有効に変更してください)。
管理ポータル > システム管理 > セキュリティ > 監査 > 監査を有効に
.png)
次に、アクセスできなくなった原因を探るため、以下のシステムイベントの監査を取得できるように変更します。
管理ポータル > システム管理 > セキュリティ > 監査 > システムイベントを構成
以下のイベントの「状態変更」をクリックし、 Enabled に はい と表示されるようにします。
これはInterSystems FAQ サイトの記事です。
ネットワーク共有フォルダ/ネットワークプリンタにアクセスしたい場合、以下の2つの方法があります。
A. net use コマンドを使用する方法
B. IRISの起動ユーザを変更する方法
詳細は以下をご覧ください。
------------------------------------------------------------------------------------------
【方法A】net use コマンドを使用する方法
------------------------------------------------------------------------------------------
1) IRIS からネットワーク共有フォルダへのアクセスを許可する場合、以下のコマンドを実行するように SYSTEM^%ZSTART に記述します。
※^%ZSTART または従来の ^ZSTU は、ユーザのスタートルーチンです。
詳細は以下のページをご参照下さい。
これは InterSystems FAQ サイトの記事です。
ターミナルでルーチンを実行し、プログラム上でエラーが発生した時に、エラートラップを適切に設定していない場合、以下のようなデバッグモードになります。
この状態から、ルーチン起動の前の状態に戻るにはQuitコマンドを入力します。
またエラーが発生したルーチン内でトランザクション処理を行なっている場合には、以下のような表示のプロンプトになります。
このようにプロンプトの先頭にTL+数字が表示されている場合には完了していないトランザクションがあることを示しています。
この状態ではQuitコマンドを入力しても元のプロンプトには戻りません。
最初にTrollbackコマンドを入力し、その後でQuitコマンドを実行することで元のプロンプトに戻ります。
これは InterSystems FAQ サイトの記事です。
ジャーナルレコードの「時間」には、ジャーナルバッファを初期化したときの時間が登録されています。
ジャーナルレコードの時間は、ジャーナルバッファ毎に記録されているため、同じジャーナルバッファ内のジャーナルレコードはすべて同じ時間になります。
なお、ジャーナルバッファは、64KBのサイズで255個存在していて、1つのジャーナルバッファが満杯になった場合、次のジャーナルバッファへレコードを追加するように順番に使用されます。
ジャーナルレコードの時間は、次のバッファへレコードを追加する前に行われる初期化の時間が記録される仕組みになっています。
これは InterSystems FAQ サイトの記事です。
Web/CSPゲートウェイ管理ページは、通常クライアントマシンからアクセスできないように構成されています。
クライアントからその管理ページにアクセスすると、以下の様なメッセージが返ってきます。
システム管理 このシステムを使用する権限がありません。
Not authorized to use this facility.
You are not authorized to use this facility.
任意のクライアントからアクセスするためには以下の操作を行います。
Web/CSPゲートウェイ管理ページにアクセス可能なシステムからブラウザを起動し、管理ポータルにアクセスします。
管理ポータル>システム管理>構成>の所でCSPゲートウェイ管理をクリックします。
表示されるページの左ペインに表示されるデフォルトパラメータをクリックします。
システム管理マシンの所に*.*.*.*と入力し、設定を保存ボタンを押下げます。
しかしながら任意のクライアントから管理ページにアクセスできるようにするのはセキュリティの観点からはあまりお勧めできません。
アクセスできるクライアントはなるべく限定することをお勧めします。
クライアントアドレスの指定方法としては、以下のような指定形式があります。
これは InterSystems FAQ サイトの記事です。
IRIS.DAT/CACHE.DATのタイムスタンプ更新は、データベースの内容の更新後のディスマウント時 (明示的なディスマウント処理または停止処理の際、 または、 データベースファイルのサイズ拡張時に発生します。
これは InterSystems FAQ サイトの記事です。
こちらでは、タスクスケジュールを登録・参照するサンプルコードをご紹介します。
①タスクスケジュール登録のサンプル
※毎日 am1:00に do ^TEST を実行するタスクを作成します。
set task=##class(%SYS.Task).%New()
set task.Name="MyTask1"
set taskDescription="毎日夜中1:00に^xxx実行" // 任意
set task.NameSpace="USER"
set task.TimePeriod=0
set task.DailyFrequency=0
set task.DailyFrequencyTime=""
set task.DailyIncrement=""
set task.DailyStartTime=$ZTimeh("01:00:00")
set task.DailyEndTime=""
set task.TaskClass="%SYS.Task.RunLegacyTask"
set task.Settings=$LB("ExecuteCode","do ^TEST") // RunLegacyTask の場合は ExecuteCode を設定
write task.
これは InterSystems FAQ サイトの記事です。
インターシステムズは、特定のオペレーティングシステムのバージョンの特定リリースに対して、製品の検証は実施しておりません。
特定リリースとは、例えば、Windows Server 2003 R2やWindows Server 2008 R2などを指します。
これらの保証については、オペレーティングシステムベンダーが互換性を保証する限りにおいて、提供されます。
特別な状況の詳細は、下記弊社ホームページのサポート情報に明記しています。
明記されていない場合には、オペレーティングシステムベンダーが互換性を保証する限りにおいて、特定リリースもサポート対象となります。
以下の関連トピックもあわせてご覧ください。
これは InterSystems FAQ サイトの記事です。
リストコレクション(Property XXX As list of %String;)で定義したプロパティは、SQL関数: $LISTBUILD() 、$LISTFROMSTRING() を使用して操作できます。
各SQL関数については、下記ドキュメントページをご参照ください。
InterSystems SQL リファレンス - $LISTBUILD() 【IRIS】
IRIS SQL リファレンス - $LISTFROMSTRING() 【IRIS】
Caché SQL リファレンス - $LISTBUILD()
SQL文実行例は以下の通りです。
これは 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パッケージ以下クラスは $system 特殊変数を利用してメソッドを実行できます。
set rset=$system.SQL.Execute("ここにSQL文",1)これは InterSystems FAQ サイトの記事です。
レコード・マップは、区切り文字付きのレコードや固定幅のレコードを含むファイルをInteroperability機能で使用するメッセージクラスへマッピングしたり、Interoperability機能のメッセージクラスからテキストファイルへマッピングする作業を効率的に行うための機能です。
レコードマップのマッピング定義は管理ポータルで作成でき、CSVファイルを読み込ませながら定義するCSVレコードウィザードも提供しています。
プロダクションでレコードマップを利用する場合は、レコードマップ用ビジネス・サービス、またはビジネス・オペレーションを追加し、作成したレコードマップ定義クラスを指定すれば完成です。
使用例は、以下から取得できます。
レコードマップの詳細な説明は、以下のドキュメントをご参照ください。
これは InterSystems FAQ サイトの記事です。
タスクスケジュールを別環境にコピー(エクスポート/インポート)するには、以下の2つの方法があります。
1.個別にエクスポート/インポートする場合 管理ポータルから行うことが可能です。
個別のスケジュールを開くと、エクスポートボタンがあるので、そちらからエクスポートしてください。
インポートも同じく管理ポータルから行えます。
2.複数のタスクスケジュールをエクスポート/インポートする場合 タスクスケジュールのエクスポートには、%SYS.TaskSuper クラスの ExportTasks() メソッドをお使いいただけます。
実行例は以下のようになります。
エクスポートするタスクID を $LB形式で指定します。複数指定する場合は、$lb(1,2,3,4,5) のようにカンマ区切りで指定します。
これは InterSystems FAQ サイトの記事です。
%IndexBuilder クラスを使用して、複数プロセスを利用してインデックス再構築を行うことができます。
Sample.Person の Home_State(連絡先住所の州情報)カラムに対して標準インデックス HomeStateIdx を定義する目的での例で記載します。
手順は以下の通りです。
1、追加/再構築予定のインデックス名をクエリオプティマイザから隠します。
2、新インデックスを定義するクラス定義のスーパークラスに %IndexBuilder を一番右端に追加します。
3、クラス定義の INDEXBUILDERFILTER パラメータに再構築予定のインデックス名を登録します。
これは InterSystems FAQ サイトの記事です。
Windowsのグループセキュリティポリシーに停止コマンドを記述したバッチファイルを登録する事により可能です。
手順は以下のとおりです。
1.Windowsのローカルコンピュータ・ポリシーのシャットダウンスクリプトに停止コマンドを登録します。
停止コマンドを含んだbatファイルを作成します。
CacheStop.bat ※InterSystems Caché の場合
c:\intersystems\cache\bin\ccontrol stop CACHEIRISStop.bat ※InterSystems IRIS の場合
c:\intersystems\IRIS\bin\iris stop IRIS
2.[ファイル名を指定して実行(R) ]で mmc と入力し、管理コンソールを起動します。
3.管理コンソールから[スナップインの追加と削除]を選択します。
4.スナップインの追加と削除で「グループ ポリシー オブジェクト エディタ」を選択し、追加します。
5.グループ ポリシー オブジェクトの選択画面で完了ボタンを押します。
6.OKをクリックして完了します。
7.シャットダウンスクリプトを登録します。
これは InterSystems FAQ サイトの記事です。
Excelのマクロ機能を使ってVBAからREST/JSON経由でアクセスすることが可能です。
REST/JSONを使用したInterSystems製品との連携の簡単なサンプルを以下のGitHubサイトから入手できます。
マクロサンプルは Solution/activityreport.xlsm をご覧ください。
サンプルは、コンテナを利用しています。READMEに記載の方法でコンテナを開始し、Solution/activityreport.xlsm の「データ取得」ボタンをクリックすると以下の結果が得られます。
.png)
マクロの中では、以下のGET要求を実行しています。
以下の図例は、RESTクライアントでGET要求を行った結果です( Basic 認証でアクセスしています)。
上記GET要求により、ベースURL(/pm)の指定で、RESTディスパッチクラス(PM.Broker)が起動し、要求されたパス(例では /getactivities)から、の GetActivities() メソッドを実行しています。
Class PM.Broker Extends %CSP.REST
{
Parameter CONVERTINPUTSTREAM = 1;
XData UrlMap
{
<Routes>
これは InterSystems FAQ サイトの記事です。
※ IRIS Data Platformのサーバーライセンス(プロセッサーコア単位の課金)では以下の内容は適用されませんので、ご注意お願いします。
2012.1以降のバージョンより、ライセンス管理が厳格化されたために、管理ポータルでもライセンスを消費するようになりました。
デフォルトでは、管理ポータルは独立したID(CSPセッション)単位でライセンスを消費するために同一ユーザが複数ライセンスを消費するようになります。
スタジオ、ターミナル、管理ポータル全ての消費ライセンスをに同一ユーザにまとめる方法は以下になります。
これは InterSystems FAQ サイトの記事です。
答え:必要ありません。
InterSystems 製品では、クライアント機能用に特別なライセンスを設けておりません。
通常のサーバーライセンス(サブスクリプションを含む)を保有していれば、そのサーバーライセンスで許容しているキャパシティに応じて、複数のクライアントシステムにクライアント機能をインストールして利用することができます。
これは InterSystems FAQ サイトの記事です。
管理ポータルの SQL 画面(管理ポータル > システムエクスプローラ > SQL)で、任意の SQL を実行した後、結果の行数などが表示されいる行の右端にある「印刷」のリンクから、CSVファイル出力を選択できます。
「クエリ印刷」画面で「ファイルにエクスポート」をチェックすると「ファイル形式」の欄が表示されます。
形式に「CSV」を指定し、出力ファイル名を指定したあと「エクスポート」ボタンをクリックすると出力できます。
注意:古いバージョンでは正しくCSV出力が行えない場合もあります。新しいバージョンをぜひご利用ください。
プログラムでCSV出力を行いたい場合は、関連記事をご参照ください。
この連載の第1回では、リレーショナルデータベースにおけるEAV(Entity-Attribute-Value)モデルを取り上げ、テーブルにエンティティ、属性、および値を保存することのメリットとデメリットについて確認しました。 このアプローチには柔軟性という点でメリットがあるにもかかわらず、特にデータの論理構造と物理ストレージの基本的な不一致などによりさまざまな問題が引き起こされるという深刻なデメリットがあります。
こういった問題を解決するために、階層情報の保存向けに最適化されたグローバル変数を、EAVアプローチが通常処理するタスクに使用できるかどうかを確認することにしました。
パート1では、オンラインストア向けのカタログをテーブルを使って作成し、その後で1つのグローバル変数のみで作成しました。 それでは、複数のグローバル変数で同じ構造を実装してみることにしましょう。
最初のグローバル変数^catalogには、ディレクトリ構造を保存します。 2つ目のグローバル変数^goodには、店の商品を保存します。 ^indexグローバルには、店のインデックスを保存します。 プロパティは階層的なカタログに関連付けられているため、プロパティ用の個別のグローバル変数は作成しません。
特定文字列が含まれるグローバルを検索する時、どのように行われているでしょうか?
管理ポータルでグローバルを表示して Ctrl+F で検索することもできますが、サイズが大きなグローバルでは表示に時間がかかり難しい場合もあります。
もちろん、$ORDER や $QUERY 関数でループして含まれる文字列を検索することは可能です。
しかし、もっと簡単で便利な方法があります。
管理ポータルで行える、グローバル文字列検索機能 を使う方法です。
こちら、管理ポータルの [システムエクスプローラ] > [グローバル] :検索 から簡単に行えます
例えば、^%ISCLOGグローバルの中から「CSP error cleaning up after page」というエラーが含まれるグローバルを検索するときは以下のようになります。
.png)
↓
どうしても $ORDER や $QUERY 関数を使用してプログラムで行いたい、という場合は以下のようになります。
※サブスクリプトが複数あるときは、 $QUERY 関数で複数階層ループします。
これは InterSystems FAQ サイトの記事です。
システムクラス Config.MapGlobals を使用して登録することができます。
ネームスペース USER からデフォルトデータベース以外のデータベース SAMPLES にある ^Sample.PersonD をグローバルマッピングする方法は以下の通りです(ターミナルでの実行例)。
Config.MapGlobals クラスを使用する方法以外に、インストールマニフェストクラスを利用して定義することもできます。
インストールマニフェストクラスの作成方法詳細については添付をご参照ください。
以下例は、インストールマニフェストでの定義例です(クラス定義は添付内に含まれています)。

この連載の最初の記事では、リレーショナルデータベースのEAV(Entity–Attribute–Value)モデルを見て、それがどのように使用されて、何に役立つのかを確認しましょう。 その上で、EAVモデルの概念とグローバル変数と比較します。
原則として検索する必要のある、フィールド数、または階層的にネストされたフィールドの数が不明なオブジェクトがある場合があります。
たとえば、多様な商品群を扱うオンラインストアを考えてみましょう。 商品群ごとに固有の一意のプロパティセットがあり、共通のプロパティもあります。 たとえば、SSDとHDDドライブには共通の「capacity」プロパティがありますが、SSDには「Endurance, TBW」、HDDには「average head positioning time」という一意のプロパティもあります。
場合によっては、同じ商品でも別のメーカーが製造した場合には、それぞれに一意のプロパティが存在します。
では、50種の商品群を販売するオンラインストアがあるとしましょう。 各商品群には、数値またはテキストの固有のプロパティが5つあります。
実際に使用するのは5個だけであっても、各商品に250個のプロパティがあるテーブルを作成するのであれば、ディスク容量の要件が大幅に増える(50倍!
これは InterSystems FAQ サイトの記事です。
Windows システムにインストールされた InterSystems 製品を削除するには、コントロールパネルにあるプログラムの追加と削除(Windows 10の場合は、Windows の設定からアプリを選択)を使用します。
システムに変更を加えますので、管理者権限を持ったユーザでログインして作業を行う必要があります。
1) 管理者(Administrator)でシステムにログインします。
2) システムトレイから、アンインストールを行う InterSystems 製品インスタンスのランチャーを終了します(ランチャークリック → 終了)。
3)コントロールパネルにある プログラムの追加と削除 (Windows 10の場合は、Windows の設定からアプリを選択)で
<InterSystems製品> instance [xxxx] ( xxxx にはインスタンス名が表示されています) を削除します。
例:InterSystems IRIS instance [IRIS]
4) InterSystems 製品インストールディレクトリ(既定では C:\InterSystems\<InterSystems製品> )を Windows エクスプローラ等を使用して削除します。
これは InterSystems FAQ サイトの記事です。
%SYSTEM.License クラスのメソッド利用すると、ライセンス情報を取得できます(実行時は、$SYSTEM.License.メソッド名() と記述します)。
%SYSTEM.License クラスは、ライセンスユーティリティ用システムオブジェクトです。
ユーティリティの詳細については、添付資料をご参照ください。
(クラス詳細については、クラスリファレンス内 %SYSTEM パッケージ以下 License クラスも併せてご覧ください。)
また、ライセンス情報は、管理ポータルからも確認できます。
ライセンスキー情報:
[システム管理] > [ライセンス] 以下
ライセンス使用状況:
[システムオペレーション] > [ライセンス使用量] 以下
これは InterSystems FAQ サイトの記事です。
$ZSTRIPコマンドは、指定された文字列から文字のタイプと文字を削除します。
このコマンドを使用することで文字列から数値部分のみを抽出することが可能です。
$ZSTRIP(string,action,remchar,keepchar)
第1引数(string) :対象文字列
第2引数(action) :string から削除する対象。アクションコードとマスクコードで構成。
第3引数(remchar) :削除する特定の文字を指定。第2引数のマスクコードに含まれない文字も指定可能。【オプション】
第4引数(keepchar):削除しない特定の文字を指定。【オプション】
以下はその例です。
これは InterSystems FAQ サイトの記事です。
$ZF(-100) のコマンドは、以下のフォーマットで使用します。
$ZF(-100, フラグ, コマンド名, コマンドの引数)
OSコマンドを実行する場合は、「/shell」フラグが必要です。
例えば mkdir であれば、次のように使用します。
コマンドの引数が複数ある場合は、以下の例のように引数の数だけ二重引用符で括ってカンマ区切りで指定します。
また、同期・非同期実行は以下のように使用します。
これは InterSystems FAQ サイトの記事です。
InterSystems製品のクラスクエリにはSQL文を利用する方法と、ユーザコードによる記述が選択できます。
スタジオメニューの [クラス] >[追加] > [クエリ] を選択すると、クエリウィザードが起動します。
.png)
画面に、「実装」を選択する項目があり、「このクエリはユーザコードで定義されている」を選択すると SQL文ではなく、ユーザコードによりクエリ定義が行えます。
次画面以降では、必要な情報として、入力パラメータ、結果セットの選択カラムの指定を行います。 ウィザード終了後、ユーザコードのひな型として、以下のメソッドがクラス定義に追加されます。
{QueryName}Execute()
{QueryName}Fetch()
{QueryName}Close()
({QueryName}はクエリウィザードで指定するクエリ名です。)
これらのメソッドに実際に実行したいユーザコードを記述していきます。
以下に、詳細記述とJavaから呼び出すサンプルがございますのでご参照ください。
これは InterSystems FAQ サイトの記事です。
24時間停止しないシステムの場合、「ジャーナルファイルの削除設定」に合わせて 0時30分 に古いジャーナルファイルを削除します。
「ジャーナルファイルの削除設定」より古いジャーナルファイルが残っている原因として、オープンされたままのトランザクションが存在していることが考えられます。
その場合、トランザクション実行中プロセスを探し、トランザクションを確定させることでジャーナルファイルを削除できるようになります。
以下のサンプルは、オープンされたままのトランザクションの存在確認と、存在する場合は対象ファイル名とジャーナルレコード情報が出力されます。
(サンプルは、https://github.com/Intersystems-jp/CheckOpenTransaction からダウンロードできます)
※注意※
確認対象のジャーナルファイルサイズが大きい場合、ジャーナルファイルが多数ある場合は、実行に時間がかかるため、弊社サポートセンターまでご連絡ください。
Class ISJ.JournalUtility
{
ClassMethod GetOpenTransaction() As %Status
{
set status=$$$OK
#dim ex As %Exception.AbstractException
#dim rset As %ResultSet
try {
//現在のジャーナルファイル
write !,"現在のジャーナルファイル名:",
##class(%SYS.Journal.System).GetCurrentFileName(),!! // Open中トランザクション調査
// WIJに記録されているジャーナルの情報を取得
$$$ThrowOnError(##class(%SYS.Journal.System).GetImageJournalInfo(.filename,.jrnoffset,.jrnfilecount,.opentranoffset,.opentranfilecount))
if $get(opentranoffset)="" {
write !,"オープン中トランザクションはありません",!
return status
} //ファイルカウントに差(jrnfilecount-opentranfilecount>0 )がある場合
// 古いジャーナルファイルにオープン中トランザクションがあるため、対象ファイル名を探す
if jrnfilecount-opentranfilecount>0 {
set loopcnt=jrnfilecount-opentranfilecount
for i=1:1:loopcnt {
set currentfile=filename
$$$ThrowOnError(##class(%SYS.Journal.File).GetPrev(currentfile,.filename))
}
} write "〇〇 オープン中の対象ジャーナルレコード一覧 〇〇",!
set rset=##class(%ResultSet).%New("%SYS.Journal.Record:List")
do rset.%Execute(filename,,,,$LB("Address","=",opentranoffset))
write !,"=== File Name : ",filename," ===",!
write "Address : TimeStamp : ProcessID : RemoteSystemID : TypeName : Transaction",!
while rset.%Next() {
write rset.%Get("Address")," : ",
rset.%Get("TimeStamp")," : ",
rset.%Get("ProcessID")," : ",
rset.%Get("RemoteSystemID")," : ",
rset.%Get("TypeName")," : ",
rset.%Get("InTransaction"),!
}
}
catch ex {
set status=ex.AsStatus()
}
return status
}
}