これまで Caché のリソースアクセスを制御する方法が存在するかどうかを疑問に思っていた方の悩みを解決しました。 バージョン 2014.2 では、開発者がセマフォを操作できるようにする特別なクラスが追加されました。
これは InterSystems FAQ サイトの記事です。
INFORMATION_SCHEMA スキーマを使用して取得できます。
INFORMATION_SCHEMA はシステム用スキーマのため、デフォルトでは管理ポータルの SQL メニューに表示されません。
表示させる方法は以下の通りです。
- 管理ポータル→システムエクスプローラ→SQL メニューを開きます。
- スキーマのプルダウン左にある「システム」をチェックします。
- スキーマのプルダウンから INFORMATION_SCHEMA を選択します。
指定のテーブル(Test.Person)に対するID、フィールド名(COLUMN_NAME)、データタイプ(DATA_TYPE)、説明(DESCRIPTION)を取得するSQLは以下の通りです。
SELECT ID,COLUMN_NAME,DATA_TYPE,DESCRIPTION
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA='Test' AND TABLE_NAME='Person'
関連するFAQトピックもご参照ください:「プログラムから、クラス定義に記述されたプロパティ定義を取得する方法はありますか?」
これは InterSystems FAQ サイトの記事です。
SYS.ApplicationError クラスの ErrorList クエリを使用します。
注意1:%SYS ネームスペースで実行します。
注意2:ストアド化していないユーティリティのため %SQL.Statement ではなく %ResultSet クラスを利用します。
コマンド実行例は以下の通りです。
弊社では、Cacheの時からExcel(VBA)を使用して、Cache側のクラス定義を抽出して画面に表示する、という開発サポートツールを作成して使用していました。
今回、IRISベースでの開発に移行するにあたって、このExcel(VBA)の動作確認をしました。
実施したことは、VBAのエディタ画面にあるメニューから「ツール」→「参照設定」へと進み、表示される選択リストの「CacheActiveX3.0[IRIS] Type Library」を選択しなおすことで、VBAのコードを変更することなく動作する事が確認できました。
このようなExcel(VBA)への対応はカットされたのではないかと不安がありましたが、流石ですね、ちゃんとカバーされていました。
なお、Type Libraryの名称が「CacheActiveX」で始まっていたのはご愛嬌でしょうか?Cache経験者であれば、問題ないと思いましたが、IRISから使い始めた方にとっては、少々困惑されるかも、と感じました。
Excel(VBA)でIRISに接続する事例がどの程度存在するのかは不明ですが、Excel(VBA)でIRISに接続できると便利だと感じています。今時ですから、ODBC を使った方が分かりやすいかも知れませんね。
これは InterSystems FAQ サイトの記事です。
永続クラス(=テーブル)定義に提供される %BuildIndices() メソッドの引数に、インデックスを再構築したい ID の開始値と終了値を指定することにより、その範囲内のインデックスのみが再構築できます。
例えば、Sample.Person クラスにある NameIDX インデックスと ZipCode インデックスを ID=10~20 のみ再構築する場合は、以下のように実行します(ID の範囲は、第5引数、第6引数に指定してます)。
set status = ##class(Sample.Person).%BuildIndices($LB("NameIDX","ZipCode"),1,,1,10,20)
$LB() は $ListBuild() 関数で、%BuildIndices() メソッドでは、インデックス名を指定するために使用しています。
インデックスの再構築方法については、ドキュメントもご参照ください。
2018.1 以下はこちらのドキュメントをご参照ください。
これは InterSystems FAQ サイトの記事です。
※ ここで説明するバックアップ方法は、外部バックアップ(##class(Backup.General).ExternalFreeze()を使用する方法)ではご利用いただけません。
その1(差分)
毎週日曜日1時にフルバックアップ、月曜日~土曜日の1時に差分バックアップを取得しているとします。
差分バックアップは、前日の1時に取得したバックアップからの更新ブロックが含まれるバックアップです。
その2(累積)
毎週日曜日1時にフルバックアップ、月~火曜日の1時に差分バックアップ、水曜日1時に累積バックアップ、木~土曜日の1時に差分バックアップを取得するとします。
累積バックアップは、前回のフルバックアップからの更新ブロックが含まれるバックアップで、水曜日に累積バックアップを取得した場合、月曜日と火曜日の差分バックアップは水曜日に累積バックアップに含まれるため、累積バックアップ成功後、月曜日と火曜日に差分バックアップは破棄できます。
オンラインバックアップ詳細については「データベースのバックアップ方法について」や、下記ドキュメントをご参照ください。
<Ubuntu-Docker>
https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d 手順を参照
手順2.1-2.5までを実行→Docker環境ができる
<Docker-IRIS>
1. 端末などでディレクトリ /home/usr/docker/iris2020.3 を作成(ディレクトリ名は任意)
2. 上記ディレクトリに、インターシステムズから送られるDLサイトからダウンロードしたirishealth_ml-2020.3.0.304.0-docker.tar.gz を置く
2.1 上記ディレクトリに、データベース・設定を保存するディレクトリを作成(/home/usr/docker/iris2020.3/mgrとする)
3. 上記ディレクトリに、ライセンスされたキーであるiris.keyを置き、端末コマンドcdで上記ディレクトリに移動
4. コマンド実行(tar.gzのままimageのload)
sudo docker load -i /home/usr/docker/iris2020.3/irishealth_ml-2020.3.0.304.0-docker.tar.gz
5. コマンドdocker imagesでREPOSITORY:TAG名称を確認
sudo docker images
カタカナ→ローマ字変換ができるサンプルクラスはありませんでしょうか?
マッピングの例
三連載で 4 記事目を書いてしまったら、これまでのハイライトとして 5 記事目を書かないわけにはいかないでしょう!
注意: 何年か前に Dan Shusman 氏が私に「グローパルのマッピングは芸術だ」と言いました。 そのやり方に正解も不正解もありません。 どのようなマッピングを行うかは、データをどう解釈するかで決まります。 例のごとく、最終的な結論を出す方法は 1 つに限られません。 ここでご紹介する例の中には、同じ型のデータを異なる方法でマッピングする例がいくつかあります。
この記事の最後には、私が長年お客様のために書いてきたマッピングの例をまとめた zip ファイルをご用意しています。 過去 4 つの記事で触れた内容をまとめたハイライトとして、いくつか例を挙げていきたいと思います。 この記事は単なるハイライトですので、過去 4 記事ほどの詳細はカバーいたしません。 不明な点があれば、遠慮なくご連絡ください。もっと詳しく説明させていただきます。
Row ID Spec: クラス例: Mapping.RowIdSpec.xml
これは InterSystems FAQ サイトの記事です。
InterSystems製品を停止しないバックアップ方法は、3種類あります。
① 外部バックアップ
② オンライバックアップ
③ レガシー並行外部バックアップ
各詳細については、以下ドキュメントをご参照ください。
バックアップ方法について【IRIS】
バックアップ方法について
それぞれの特徴について、簡単に解説します。
これは InterSystems FAQ サイトの記事です。
通常SQLCODE -110(Locking conflict in filing)のエラーはロックが競合した場合に発生します。
大量レコードが一度に更新された場合、その件数がロック閾値を超えてロックエスカレーションを起こしてテーブルロックとなる可能性があり、そのためにロックの競合が起きやすくなっていることが考えられます。
このロック閾値を上げることにより、この競合を回避できる可能性もあります。
しかしこの閾値を上げることにより、システムが必要とするロック管理用のメモリが増えるという副作用がありますので、慎重な検討が必要です。
あるいはテーブルロックになる可能性を排除できずに、更新タイミング等アプリケーションの仕様を見直す必要があるかもしれません。
またSQLCODE -110はロックテーブルの空き容量が不足した場合にも発生する可能性があります。
コンソールログファイル(※)をご確認いただき、「LOCK TABLE FULL!!!」のエラーが記録されているようであれば、ロックテーブルの容量不足が原因です。
※ InterSystems IRIS のコンソールログファイル名は messages.log、Caché/Ensemble/HealthShare コンソールログファイル名は cconsole.log
この場合は、
これは InterSystems FAQ サイトの記事です。
InterSystems Data Platform自身には、ソース管理を行う機能はありません。
2016.2以降のバージョンをご使用の場合、統合開発環境として VSCode をご利用いただくことで、VSCode でご利用いただけるソース管理機能をご使用いただけます。
VSCode で ObjectScriptの操作を行うためには、専用エクステンションのインストールが必要です。
使用方法については、コミュニティの記事「VSCode を使ってみよう!」をご参照ください。
また、「VSCodeでのソースコード管理について」についても併せてご参照ください。
2016.2より前のバージョンをご使用の方でも使用できる方法としては、InterSystems製品 のIDEであるスタジオに、外部のソース管理ツール、製品と連携するためのフック機能があります。
このフック機能は、複数のAPIで構成されており、お客様毎にご自身の環境に合わせて、作りこむことを前提に提供されております。
よく使われるマイクロソフトのVisual Source SafeとSubversion(SVN)については、テンプレートがあります。
このテンプレートを利用すると、作りこみの作業を短縮することが可能です。
今思えば、製品名に「M」が付いている時代は説明が楽でした。私が記憶している製品は、DTM(Data Tree Mumps:MS-DOS上で巨大なシステムを構築できていましたね)、DSM(Dec Standard Mumps)、MSM(マイクロネティック Standard Mumps あってますか?)、ISM(Intersystems Standard Mumps)、U-MUMPS(?)その他もあったかも知れませんが、M(Mumps)の実装環境です、という説明で何とかなっていました。すると、「へぇ~、MUMPSってまだあったんだね」という答えを頂くこともありました。これらの製品が統合されて「OpenM」となりましたが、まだ「M」の文字が入っており、MUMPSもSQL対応できるようになりました、などと説明していました。
ところが、製品名がCacheになり、趣が大きく変わり、製品の説明が難しくなりました。「データベースです。」→「RDBなの?」→「RDBとしても動作しますがKey-Value的で多次元データ管理もできます」→「OLAP用なの?」→「OLAP処理もできますが、基本はトランザクション処理用です」→「で、結局、何なの」という禅問答のような状況にはまって行きました。
これは InterSystems FAQ サイトの記事です。
管理ポータル:システムオペレーション > データベース にあるオプションボタン(ラジオボタン)「空き容量ビュー」で表示される内容は、システムクラス SYS.Database のFreeSpace クエリで取得可能です。
次のようなコードでクエリを実行します。
例:
(%SYSネームスペースにて作成、実行します)
/// ZISJ.mac
Set stmt=##class(%SQL.Statement).%New()
Set status=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
Set rs=stmt.%Execute()
While rs.%Next() {
Write !
For i=1:1:9 {
Write rs.%GetData(i),","
}
}
もしくは、以下のようにも行えます。
グローバルをクラスにマッピングする技術 (4/3)
三連載のはずが 4 記事目に突入してしまいました。『銀河ヒッチハイク・ガイド』のファンという方はいませんか?
古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。
上の内容に馴染みが無い方は、以下の記事を初めからお読みください。
この記事は Joel、あなたのために書きます! 前回の例で定義した親子関係を土台に、今度は孫クラスを作成し、^ParentChild グローバルに追加された季節情報を処理したいと思います。
前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。
グローバルをクラスにマッピングするステップ。
開発者の皆さん
こんにちは。
Windows共有しているリモートサーバに出力されたファイルでデータ連携する際、セキュリティ上、資格情報が必要となるケースが良くあるかと思います。いままでCachéで連携していた時には%ZSTARTルーチンや常駐プロセスのルーチンにて「net useコマンド」を実行されていたかと思いますが、IRISではInteroperability機能が使用できますので、前回の記事で作成したビジネスサービスクラスを元に、資格情報を使ってWindows共有フォルダにアクセスできる機能を追加したいと思います。
仕組み
ビジネスサービスが起動、停止する際に呼び出されるOnInit()、OnTearDown()メソッドにnet useコマンドを埋め込み、指定されている資格情報を使ってnet useコマンドで共有フォルダへの接続、切断を行います。
認証情報設定パラメータ追加
ビジネスサービスの設定画面で認証情報を選択できるよう、以下のようにCredentialsプロパティ、SETTINGSパラメータをTest.BS.ImportMasterクラスに設定します。
開発者のみなさん、こんにちは!
第10回 InterSystems グランプリ・プログラミングコンテストの投票が開始されました!
🔥 これだ!と思う一押し作品に投票お願いします! 🔥
投票期間:3月1日~7日 (1週間)
投票方法は?
コミュニティメンバーはどなたでも投票いただけます!
投票種別は、Expert Nomination と Community Nomination に分かれています。コミュニティメンバーは、Community Nomination を選択いただき、どの作品がどの順位になるかを指定しながら投票してください!
Community Leaderboard:
| 順位 | ポイント |
|---|---|
| 1位 | 3点 |
| 2位 | 2点 |
| 3位 | 1点 |
そして、エキスパートノミネーションからの投票は以下の通りです(エキスパートのレベルが上がると獲得できるポイントも増えます!)。
Experts Leaderboard:
|
エキスパートレベル |
順位 | ||
| 1位 | 2位 | 3位 | |
| GM、モデレーター、プロダクトマネージャーのVIPレベル | 9点 | 6点 | 3点 |
| グローバルマスターズのエキスパートレベル | 6点 | 4点 | 2点 |
| グローバルマスターズのスペシャリストレベル | 3点 | 2点 | 1点 |
これは InterSystems FAQ サイトの記事です。
%SYS.ProcessQuery クラスの AllFields クエリを使用すると取得できます。
詳細は、ドキュメント「プロセス(ジョブ)について【IRIS】 / プロセス(ジョブ)について」もご参照ください。
ターミナルでの実行例は以下の通りです。
これは InterSystems FAQ サイトの記事です
復旧を優先される場合を除き 【トラブル発生状態のまま】弊社サポートセンターまでご連絡ください。
その際、専用ツールを利用して情報収集いただくことで(所要時間約 5分)、サポートセンターによる状況確認がスムーズに行えます。
ツール使用方法については、PDF または以下ビデオでご紹介しています。
※ InterSystems IRIS / IRIS for Health をご利用の方は、こちらの記事をご参照ください。
ぜひ 1 度、テスト/開発環境で実行をお試しいただき、万が一の場合に備えていただければ思います。
ビデオの目次(YouTubeでもご覧いただけます)
0:00~1:40 情報収集ツールを使用する上での大事なポイント
1:41~2:15 ツールの種類について
2:15~3:45 どのツールを実行したらいいか困った時の考え方
3:45~5:04 管理ポータルの診断レポートの例
5:04~6:00 ^Buttonsの実行例(Cache)
6:00~7:12 ^Buttonsの実行例(Ensemble / Cacheベースの HealthConnect)
7:12~8:27 CacheHungスクリプトの実行例(Windowsの例)
8:27~9:30 CacheHungスクリプトの実行例(Linuxの例)
これは InterSystems FAQ サイトの記事です。
復旧を優先される場合を除き 【トラブル発生状態のまま】弊社サポートセンターまでご連絡ください。
その際、専用ツールを利用して情報収集いただくことで(所要時間約 5分)、サポートセンターによる状況確認がスムーズに行えます。
ツール使用方法については、PDF または以下ビデオでご紹介しています。
※ Caché/Ensemble/Caché ベースの HealthConnect をご利用の方は、こちらの記事をご参照ください。
ぜひ 1 度、テスト/開発環境で実行をお試しいただき、万が一の場合に備えていただければ思います。
ビデオの目次(YouTubeでもご覧いただけます)
0:00~1:40 情報収集ツールを使用する上での大事なポイント
1:41~2:24 ツールの種類について
2:24~3:45 どのツールを実行したらいいか困った時の考え方
3:45~5:04 管理ポータルの診断レポートの例
5:04~6:30 ^SystemCheckの実行例
6:30~7:50 IRISHungスクリプトの実行例(Linuxの例)
7:50~8:50 IRISHungスクリプトの実行例(Windowsの例)
8:50~9:52 ツールから生成されたHTMLのファイル名について
9:52~11:32 ツールから生成されたHTMLの中身について
11:32~ まとめ
はじめまして、皆さん。
windows telnetを使えば、VSCODEの統合ターミナルでIRISターミナルを使うことも出来ますが、ストレス無く使えるとは言い難い状態でした。
色々調べた結果、telnetよりは快適にIRISターミナルをVSCODEで使う設定が出来たので投稿します。
(※大量のキー連打や、大量表示で文字欠落がたまにあるけど、普通に使うなら大丈夫な感じです)
具体的には、powershellターミナルを文字コード:UTF-8に変更しIrisdb.exeを起動する様に設定するだけでOKです。
1.VSCODEの設定を開く
2.setting.jsonを開く
3.setting.jsonの最後に設定を追加する。
追加するテキスト
本件、すでに改修済みである場合にはご容赦願います。
IRIS2020.1のテストをしています。
新規ネームスペース画面に「相互運用プロダクション用にネームスペースを有効化」というチェックボックスがあります。デフォルトでチェックされていましたので、試しにチェックを外してみました。下記のようなメッセージが表示されるのですが、日本語のメッセージになると有り難いなぁ、と感じました。
(メッセージ)
Are you sure you do not want this to be 運用相互プロダクションのために有効?
古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。
上の内容に馴染みが無い方は、以下の記事を初めからお読みください。
この記事の例では、典型的な親子構造をマッピングする方法をお見せします。
前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。
グローバルをクラスにマッピングするステップ。
以下のドキュメントでご紹介しています通り、ECPは分散キャッシュ用のアプリケーションサーバーを並列に増設することで、処理量に応じてスケールアウトすることを主目的として設計されています。
従ってインターシステムズデータプラットフォーム上で稼働する複数のアプリケーション間の簡便なデータ交換手段としてECPをご使用いただくことは推奨していません。
以下その理由についてご説明します。
データ量の増加、処理量の増加に伴いスケーラビリティに関する要件も今後益々厳しくなる中、将来にわたってより良いスケーラビリティ性能を得られるようインターシステムズの開発部門は、より良いアルゴリズムの開発や処理のチューニングをECPに対して継続的に行っております。
その成果は順次最新バージョンに反映していきます。
従ってある時点での最高のECP性能を得る方法は、アプリケーションサーバーとデータベースサーバーのバージョンをその時点の最新版に揃えることになります。
一方でインターシステムズは、ECPを上記の用途以外で利用することを明確に非推奨とするなどの勧告を過去に行っていなかったため、複数のアプリケーション間でデータをピアツーピアで参照、更新する手段として使われているケースも多く見受けられます。
Java Business Host から PEX への移行
InterSystems IRIS 2020.1 および InterSystems IRIS for Health 2020.1 で PEX がリリースされ、Java Business Host を使うよりも優れたかたちで Java プログラムをプロダクション環境に取り込めるようになりました。 PEX は、相互運用性のコンポーネントを構築するための API をすべて提供するほか、Java と .NET の両方で使用できます。 Java Business Host は非推奨となり、今後のリリースで廃止される予定です。
PEX を使うメリット
- デベロッパーはプロダクションのすべてのコンポーネントを、Java と .Net のどちらでも構築できる
- コンポーネント間で一層複雑なメッセージ構造の受け渡しができる
- シンプルな設定
- 開発のワークフローがシンプルな上に、ObjectScript を使う必要がない
ここからは、既存の Java Business Host のコードを PEX に移行する方法に注目します。
概要
PEX で使用されるクラスとインターフェースは、Java Business Host (JBH) のものとは異なります。 本記事では、その相違点を要約して解説しますが、詳細は完全なドキュメントをご覧ください。
皆さん、こんにちは。
他のシステムとファイル連携を行う場合、Cachéでは、Jobコマンドを使った常駐プロセスやタスクを作成し、特定のディレクトリにあるファイルを定期的に監視、データを取り込むといった機能を手作りされていたかと思います。
これにはファイルの監視や、常駐プロセスの監視、プロセスの制御(起動、停止)を行う機能を用意する必要がありましたが、IRISではInteroperability機能が使えますので、そのようなプログラムを省略することが可能です。
今回は、既にファイル読込処理を行うルーチンが存在し、ルーチン呼出時の引数にファイル名があるという前提で、その処理をInteroperability機能を使ってどのように呼び出すかについて説明したいと思います。
手順
作業手順は以下の通りとなります。
- ビジネスサービスクラスの作成
- OnProcessInput()メソッドの実装
- プロダクションの作成
- ビジネスサービスの登録
- プロダクションの起動
ビジネスサービスクラスの作成
スタジオを起動し、ファイル読込処理を行うルーチンが存在するネームスペースに接続します。
「ファイル」「新規作成」メニューをクリックします。
以下のダイアログボックスが表示されますので、「プロダクション」カテゴリをクリックし「ビジネスサービス」アイコンをクリック、「OK」ボタンをクリックします。
これはInterSystems FAQ サイトの記事です。
HTMLからRESTを使って画像ファイルをアップロードする方法をご紹介します。
1.はじめに、以下のようなhtmlとクラスを作成してください。
*UploadTest.html
皆さんこんにちは!
VSCode の SQLTools エクステンションを使うと、VSCode から SQLTools に対応しているデータベースへ接続/クエリ実行が行えるようです。
1 つの IDE で 各種言語を操作でき、さらにクエリも発行できるなんて VSCode って便利ですね!👏👏
実は、まだプレビュー機能ではありますが、InterSystems IRIS も接続できます!🎊🎊
正式リリース前なのですが、どんな感じでご利用いただけるかをご紹介したいと思います。
解説ビデオ(4分ちょっと)もあります。ぜひご参照ください。
※ ObjectScript エクステンションの基本的な操作方法については、こちらの記事をぜひご参照ください。
手順1:SQLTools エクステンションをインストール
(ビデオでは、0:00~0:32 で解説しています)
図の手順でインストールします(右画面の SQLTools の説明文下の方に対応データベースリストがあり、「InterSystems IRIS」の文字も見えます!)。
手順2:SQLTools に対応するドライバをインストール(ここでは IRIS 用ドライバのインストール)
(ビデオでは、0:32~1:09 で解説しています)
SQLTools のインストールが終わると、VSCode の左端の黒いバーのところに
アイコンが見えるのでクリックします。
開発者の皆さん、こんにちは。
スペシャリストレベル以上の方へ、グローバルマスターズの新たな🎁賞品が加わりました!
➡️ Raspberry Pi 4 8GB + InterSystems IRIS Community Image セットの予約注文
このセットには、Ubuntu 18.04 64 bit + Docker + InterSystems IRIS Community Editionが入った64GB MicroSD カードと Raspberry Pi 4 8GB、 紅白ケースが入っています。
開発者の皆さん、こんにちは!
VSCode の ObjectScript エクステンションで、プロセスにアタッチしてデバッグする方法についてご紹介します。
ObjectScript エクステンションの基本的な操作方法については、こちらの記事をぜひご参照ください。
解説ビデオ(4分ちょっと)もあります。ぜひご参照ください。
手順1:launch.json の用意
VSCode のデバッグ実行に関連する各種の構成情報を記述するための launch.json に ObjectScript エクステンション用の設定を記述します。
(ビデオだと、最初~1:31 で解説しています)
プロセスにアタッチするデバッグ設定例は以下の通りです。

