これはInterSystems FAQ サイトの記事です。
連番を生成する関数($INCREMENT)を使用してユニークな番号を自動付番することができます。
SQLのSELECT文で使用する場合には OracleのSequence相当の機能を実装したクラスを利用する方法があります。
サンプルを以下のGitHubリポジトリより取得することができます。
これはInterSystems FAQ サイトの記事です。
連番を生成する関数($INCREMENT)を使用してユニークな番号を自動付番することができます。
SQLのSELECT文で使用する場合には OracleのSequence相当の機能を実装したクラスを利用する方法があります。
サンプルを以下のGitHubリポジトリより取得することができます。
これは、InterSystems FAQサイトの記事です。
$SYSTEM.Process.TerminalPrompt() を使用してターミナルのプロンプトを変更できます。
プロンプトの表示形式は、以下情報の組み合わせで指定できます。
例えば、Do $SYSTEM.Process.TerminalPrompt(1,3) ではホスト名と構成名をターミナルのプロンプトとして表示します。
*実行例は、ホスト名="HOST1"、構成名="IRIS"*
USER>Do $SYSTEM.Process.TerminalPrompt(1,3) HOST1:IRIS>
これは、InterSystems FAQサイトの記事です。
SELECT ... FOR UPDATE は明示的な行ロック取得の方法として多くの RDBMS で実装されているため、この機能を使われているケースも多いと思います。
このシンタックスは InterSystems 製品ではエラーにはなりませんが、期待されるような行ロックの取得は行われません。
この記事では同等の機能を実現する方法をご紹介します。
DECLARE CURSOR C1 IS SELECT Name FROM Person WHERE Name LIKE 'A%' FOR UPDATE OPEN C1 LOOP FETCH C1 INTO name ... name を表示 ... 終了ならLOOPをEXIT END LOOP CLOSE C1
上記のようなSQL文は、下記のSQL文で代替可能です。
※下記2行目のUPDATE文の実行により対象行に対して排他ロックがかかるため、他DBの動作と異なる点ご注意ください。
&SQL(START TRANSACTION ISOLATION LEVEL READ COMMITTED) &SQL(UPDATE Person SET ID=ID Where Name like 'A%') &SQL(DECLARE C1 CURSOR FOR SELECT
以前の記事では Arduino を使い始め、最終的には気象観測所のデータを表示できるようになりました。 この記事ではさらに掘り下げ、InterSystems Caché アプリケーションに対して RFID カードと Arduino を介した認証をセットアップします。
みなさん、こんにちは。
数日前、SOAP(Web)サービスを使用して、REST に基づく新しいアプリケーション API と同じ認証を使用できるように、既存のレガシーアプリケーションを拡張したい、とお客様から伺いました。 新しいアプリケーションは OAuth2 を使用しているため、課題は明らかでした。SOAP リクエストを含むアクセストークンをどのようにしてサーバーに渡すか、ということです。
Google でしばらく調べてみたところ、SOAP エンベロープにヘッダー要素を追加してから、アクセストークンを検証するために必要なことを Web サービス実装が実行できるようにするのが 1 つの実現方法であることがわかりました。
皆さん、こんにちは。
ストリームデータをデータベースに格納する場合、ファイルなどから読み取る際に漢字コード変換を行い、Unicode形式で%GlobalCharacterStreamに格納されるかと思いますが、時々、バイナリのままで読み込んでしまい、漢字コード変換を行わないといけない状況があるかと思います。
ファイルストリームでしたら%FileCharacterStreamクラスのTranslateTableプロパティに元の漢字コードを指定すれば、以下のようにコード変換しながら読みだすことは可能です。
0010: 82 80 E6 96 87 E5 AD 97 E5 88 97 E3 81 8C E3 81 ..æ..å.å..ã..ã.
%Net.SSH.Session クラスを使用すると、SSH を使ってサーバーに接続することができます。 一般的にはSFTP、特に FTP インバウンドアダプタとFTPアウトバウンドアダプタで使用されています。
この記事では、簡単な例を示しながら、このクラスを使用して SSH サーバーに接続する方法、認証のオプションを記述する方法、そして問題が発生した場合のデバッグ方法について説明します。
次は接続を行う例です。
Set SSH = ##class(%Net.SSH.Session).%New()
Set return=SSH.Connect("ftp.intersystems.com")
上記のコードは新しい接続を作成してから、ftp.intersystems.com の SFTP サーバーにデフォルトのポートで接続します。 この時点で、クライアントとサーバーは暗号化アルゴリズムとオプションを選択済みですが、ユーザーはまだログインしていません。
接続したら、認証方法を選択できます。 選択できるメソッドには次の 3 つがあります。
上記はそれぞれ異なる認証方式です。 各方式を簡単に説明します。
これは、InterSystems FAQサイトの記事です。
以下の例では Test.Class2 クラスの Images プロパティに画像ファイルが保存できるように定義しています。
input() メソッドを利用して画像ファイルを Images プロパティに登録し、データベースに保存したとします。
Class Test.Class2 Extends %Persistent{Property Images As %Stream.GlobalBinary;///引数には画像ファイルのフルパスを指定ClassMethod input(in As %String) As %Status{ //画像ファイル格納用ストリームのインスタンスを用意 set filestream=##class(%Stream.FileBinary).%New() //画像ファイルをストリームのインスタンスにリンクさせる do filestream.LinkToFile(in) //Test.Class2クラスのインスタンス生成 set o=..%New() //画像のストリームをTest.Class2のインスタンスにコピー do o.Images.CopyFrom(filestream) //インスタンスをデータベースに保存 quit o.%Save(これは、InterSystems FAQサイトの記事です。
プログラムでロック情報を取得するには以下2種類の方法があります。
#dim rset As %SQL.StatementResult set stmt=##class(%SQL.Statement).%New() set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List") set rset=stmt.%Execute() while rset.%Next() { write !,rset.%Get("FullReference") write !,rset.%Get("Owner") write !,rset.%Get("DelKey"),! }より詳細なロック情報を取得する場合には List クエリではなく Detail クエリを使用します。
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List") を
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","Detail
これはInterSystems FAQ サイトの記事です。
InterSystemsの製品には同時ユーザー数でライセンスの容量を決定する製品とサーバーのCPUコア数で容量を決定する製品の2種類があります。
同時ユーザー数ライセンスタイプの場合、CPUコア数により使用可能なライセンスのグレードに制限があります。
物理サーバーの場合には、そのサーバーが保持しているCPUコア数の総数をカウントします。
そして、その総数が該当グレードの最大CPUコア数を超えている場合には、その上位グレードを使用しなければなりません。
サーバー仮想化ソフトウェア(VMWare、Hyper-Vなど)を利用する場合には、その仮想サーバーに割り当てられたCPUコア数をカウントします。
同様にその総数が該当グレードの最大CPUコア数を超えている場合には、その上位グレードを使用しなければなりません。
CPUコア数ライセンスタイプの場合、コア数によりライセンスの容量が決まります。
CPUコア数の数え方は、同時ユーザーライセンスタイプと同じです。
物理サーバーの場合は、そのサーバーが保持しているCPUコア数の総数をカウントします。
サーバー仮想化ソフトウェアを利用する場合には、その仮想サーバーに割り当てられたCPUコア数をカウントします。
【関連情報】(コミュニティ/FAQトピックをリンクしています
これは、InterSystems FAQサイトの記事です。
以下に当てはまる場合、差分バックアップではなくフルバックアップが取られます。
・リストの中に1つでもフルバックアップを取っていないデータベース(DB)が含まれるとき
・リストの中に読み込み専用のDBが含まれるとき
→読込専用DBはバックアップが取れないため、対象リストのDBは毎回フルバックアップが取られます
ReadOnlyマウントしたDBをバックアップしようとすると、以下のようなログが出力されます。
WARNING - the following directories could not be backed up c:\intersystems\ensemble\mgr\xxx\ (Database is readonly)
読込専用DBはバックアップリストから除く必要があります。
もし、読込専用DBをバックアップする場合は、別途バックアップする必要があります。
最近、InterSystems 内で PHP から Caché ベースの Web サービスに接続が必要になる事例がいくつかありました。 これらの最初の事例とは、実はこの開発者コミュニティそのものであり、他の InterSystems サイト/アプリケーションとのシングルサインオンに Web サービスを使用しています。 次の例は、パスワード認証を使用して PHP から Caché ベースの Web サービス(具体的には SAMPLES ネームスペースの Web サービス)に接続する方法を示しています。
(注意: この例は、/csp/samples に対してパスワード認証が有効になっていることを前提としています。)
<?php
// ユーザー名/パスワード用の標準 SOAP ヘッダー
// 出典元: http://stackoverflow.com/questions/13465168/php-namespaces-in-soapheade…
class WSSESecurityHeader extends SoapHeader {
publicfunction __construct($username, $password)
{
$wsseNamespace = 'http://docs.oasis-open.org/wss/200
これは、InterSystems FAQサイトの記事です。
[管理ポータル] > [システムオペレーション] > [ライセンス使用量] ページで表示される各項目の意味は以下のとおりです。
① 現在使用中のライセンス数:現時点のライセンスユニット使用数です。
② 最大ライセンス使用:インスタンスが起動した後、現在に至るまでで最もライセンス使用の大きかった時点の
"現在使用中のライセンス数"です。
③ 許可されたライセンス数(Cache.Key/iris.keyの値):該当システムで許可されている最大ライセンスユニット数です。
④ 現在の接続:現時点のクライアントからの接続数です。
⑤ 最大接続:インスタンスが起動した後、現在に至るまでで最も接続数の大きかった時点の"現在の接続"です。
(A) ローカル:表示しているサーバのインスタンスで消費しているライセンスの情報です。
(B) リモート:マルチサーバライセンスを使用して複数インスタンスでライセンス共有している場合の、共有している全インスタンスで消費しているライセンスの合計値の情報です。
※ライセンス共有を行うには、ライセンスサーバの設定が必要です。詳細は下記トピックをご参考になさってください。
複数インスタンスでライセンスを共有する場合に必要な設定
これは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() を使用します。
例:
※バージョン2008.1より前では、$system.OBJ.ExportPattern() を使用します。
2. インポート方法
a. ファイルに含まれる全ルーチンをインポートする
ファイルに含まれる全ルーチンをインポートするには $system.OBJ.Load() を使用します。
例:
doこれはInterSystems FAQ サイトの記事です。
変数等命名規約に関して、InterSystems自体が定めている規則の様なものはありません。
しかし、チームで開発を行う際には、何らかの命名規約を作ることをお勧めします。
一般的には、変数名から使用目的が容易に想像できる様な名前付けが好ましいです。
名前の長短で、実行性能には有意な差はないと考えて結構ですので、一目見て内容が理解しやすく、他の名前と明確な区別ができるよう、ある程度の長さを持った命名を心がけることをお勧めします。
また、先頭のアルファベットを大文字にする、単語の先頭は大文字にするというのが一般的です。
しかし、昨今は、Javaで良く使われる、先頭は小文字で初めて、途中の単語の始まりを大文字にするという命名規約を使う開発者も増えてきました。
さらに変数のタイプ(一時変数、パラメータなど)がわかるように、先頭の文字で表現する方法もよく使われます。
(例: tSC,pLengthなど)
この記事では、OData API 標準に基づいて開発された RESTful API サービスを利用するための IRIS クライアントの開発について説明します。
HTTP リクエストを作成し、JSON ペイロードの読み取りと書き込みを行い、それらを組み合わせて OData 用の汎用クライアントアダプタを構築する方法を確認するため、多数の組み込み IRIS ライブラリを説明します。 また、JSON を永続オブジェクトに逆シリアル化するための新しい JSON アダプタについても説明します。
RESTful API の操作
REST は World Wide Web の標準化に関する作業から作成された一連の設計原則です。 これらの原則はあらゆるクライアントサーバー通信に適用でき、HTTP API が RESTful であることを説明するためによく使用されます。
REST はステートレスなリクエスト、キャッシュ処理、統一した API 設計など、さまざまな原則を網羅しています。 ただし、詳細な実装については網羅していません。また、これらのギャップを埋めるための一般的な API 仕様は存在しません。
この曖昧さは、RESTful API に幾分かの理解、ツール、より厳密なエコシステムを中心によく構築されるライブラリが不足している原因となっています。
これはInterSystems FAQ サイトの記事です。
バックアップには、以下4種類の方法があります。
詳細は、以下ドキュメントをご参照ください。
バックアップの方法について【IRIS】
バックアップの方法について
1、2、4は、インスタンスを停止せずにバックアップが行えます(末尾の関連情報もご参照ください)。3 は、インスタンスを停止した後でバックアップを行う方法です。
またシステム構成や障害バターンを基にバックアップを設計、計画する上での注意点、自動化のサンプルやバックアップを実施する上で役立つ各種関連技術についてはInterSystems Symposia 2014 発表資料 をご参照ください(※1)。
※1:InterSystems Symposia 2014でご紹介した内容で、Cachéと記載がありますがバックアップ方法についてはIRISも同様です。
【関連情報】(コミュニティ/FAQトピックをリンクしています)
これはInterSystems FAQ サイトの記事です。
(2025/2/17更新)担当される役割や学習目的に合わせた最適なラーニングパス(学習経路)を確認できるページ :InterSystems ラーニングパス をご利用ください(ページの使い方については、記事「学習目的に合わせた最適なラーニングパス(学習経路)を確認できるページ」をご参照ください)。
また、現在ご覧いただいている開発者コミュニティの中では、初心者(beginner)タグ があり、下記セルフラーニング用資料/ビデオをご用意しています。ぜひご参照ください。
セルフラーニングビデオ以外にも、過去に開催したウェビナーアーカイブビデオも公開しています👉「開発者向けウェビナー:アーカイブビデオ一覧」
ぜひご参照ください。
FTP ファイルを Intersystems Caché からダウンロードするメソッドを以下に示します。ご質問がある場合はメッセージをお寄せください。
メソッド : 再利用可能
作成者 : Sanjib Raj Pandey、30/03/2018 に作成
downLoadFile = ファイル数またはすべてのファイル ...... ダウンロードしたいファイルを指定します、デフォルト値は 1 です。
= 1,3,7,100 ファイルなどの値を指定します。
= すべてのファイルをダウンロードするには "*" を指定します。
SourceFileDel
これはInterSystems FAQ サイトの記事です。
Config.Configurationクラス、SYS.Databaseクラスのメソッドを使用して、ネームスペース・データベースの作成及び登録をターミナルから実行することができます。
以下はデータベースファル/CacheDB/AAA/cache.datを作成し、構成ファイル(cache.cpf)にデータベース AAA、及び、ネームスペースAAAの登録を行う一連の実行例です。
*実行は、%SYSネームスペースで行って下さい。*
リモートデータベースからネームスペースを作成する場合は、以
これはInterSystems FAQ サイトの記事です。
InterSystems ObjectScript言語では引数の異なる同名のメソッドを定義することはできません。
InterSystems ObjectScript言語は一般的に動的言語と呼ばれるプログラミング言語に分類されます。
ObjectScriptではメソッド実行時にどの引数を使用するかどうかは自由に制御可能ですので、動的プログラミング言語ではないJava等の言語と異なり、コンパイルの段階で厳密に引数の数でメソッドを区別する必要がありません。
従って ObjectScript言語は、オーバーロードと一般に呼ばれる言語仕様を含んでいません。
Java等で記述されたプログラムを移植する際にオーバーロード相当の機能を実現するには、
のように引数の後ろに ... を付加します。
これにより、可変長引数を渡すことが可能です。
このメソッドに複数の引数が渡された場合は、args(1)=第一引数 args(2)=第二引数というように順次設定されます。
これを使用して、メソッドコード中で渡された引数の個数を取得して処理を分岐させることができます。
※ただし、引数のデータタイプを判別することはできません。
これはInterSystems FAQ サイトの記事です。
システムルーチン ^DBSIZE を利用するとバックアップファイルサイズを見積もることができます(メモ1もご参照ください)。
^DBSIZE は、データベース・バックアップ・リストに選択されたデータベースを対象に、フルバックアップ/累積バックアップ/差分バックアップそれぞれのファイルサイズを見積もります。
なお、データベース・バックアップ・リストは、管理ポータルの [システム管理] > [構成] > [データベースバックアップ] > [データベース・バックアップ・リスト] から作成します。
.png)
詳細については、下記ドキュメントもご参照ください。
^DBSIZEによるバックアップ・サイズの見積もり【IRIS】
実行例は、以下の通りです。
1. 2. 3.
こんにちは! この記事は「Prometheus で InterSystems Caché を監視する」の続きになります。 ここでは ^mgstat ツールの動作結果を視覚化する方法を見ていきます。 このツールを使用すると、Caché のパフォーマンス統計、具体的なグローバルとルーチンの呼び出し数(ローカルおよびECP 経由)、書き込みデーモンのキュー長、ディスクに保存されるブロックと読み取られるブロックの数、ECP トラフィックの量などを取得できます。 ^mgstat は(対話的に、またはジョブによって)単独で起動したり、別のパフォーマンス測定ツールである ^pButtons と並行して起動したりできます。
ここでは 2 つのパートに分けて説明したいと思います。最初のパートでは ^mgstat によって収集された統計を図示し、2 番目のパートではこの統計を正確に収集する方法を集中して取り上げます。 手短に言えば、ここでは $zu関数 を使用しています。 ただし、SYS.Stats パッケージのクラス経由で収集できる大部分のパラメーターに対応したオブジェクトインターフェースがあります。 ^mgstat に表示されるのは、収集できるパラメーターのほんの一部です。 その後、Grafana ダッシュボードですべてのパラメーターを表示してみましょう。
これはInterSystems FAQ サイトの記事です。
インデックスが複数定義されているクラス/テーブルへ csv 形式等のシーケンシャルファイルから大量データをデータベースに登録する際、推奨される登録方法として、データ登録時インデックスを生成させず、登録完了後に一括でインデックスを生成する 方法があります。
この方法は、新規に大量のレコードを一括登録する際に最も有効な手段となります。
<メモ>
大量のデータを追加登録する際には、既存のデータ量と新規データ量のバランスにより、この手法が有効でないケースもあります。その場合は、インデックスの再構築を範囲指定で行うこともできます。
説明に使用するクラス定義例は以下の通りです。
Class ISJ.QL2 Extends %Persistent
{
Property Name As %String;
Property Title As %String;
Property Sex As %String;
Property Company As %String;
Property Phone As %String;
Property City As %String;
Property State As %String;
Property Zip As %String;
Index最近行われたディスカッションの中で、Caché ObjectScript における for/while loop のパフォーマンンスが話に出ましたので、意見やベストプラクティスをコミュニティの皆さんと共有したいと思います。 これ自体が基本的なトピックではありますが、他の点では合理的と言える方法のパフォーマンスが意味する内容を見逃してしまうことがよくあります。 つまり、$ListNext を使って$ListBuild リストをイテレートするループ、または $Order を使ってローカル配列をイテレートするループが最も高速な選択肢ということです。
興味深い例として、コンマ区切りの文字列をループするコードについて考えます。
そのようなループをできるだけ手短に書くと、次のようになります。
For i=1:1:$Length(string,",") {
Set piece = $Piece(string,",",i)
//piece を使って何らかの処理を実行する...
}
とても分かりやすいですね。でも、多くのコーディングスタイルガイドラインは次のようなコードを提案するかもしれません。
Set n = $Length(string,",")
For i=1:1:n {
Set piece = $Piece(string,",",i)
//pieceこれはInterSystems FAQ サイトの記事です。
SELECT のみを実行できるユーザを作成するには、ユーザかロールに対してテーブルへのアクセス権限を設定することで対応できます。
設定は、管理ポータルか、GRANT 文を実行することで設定できます。GRANT 文については、以下ドキュメントもご参照ください。
InterSystems SQL リファレンス - GRANT【IRIS】
CachéSQLリファレンス - GRANT
管理ポータルでの設定は、ユーザまたはロールの編集画面内「SQLテーブル」タブを使用します。
ユーザに直接設定する場合は以下のメニューを利用します。
[ホーム] > [システム管理] > [セキュリティ] > [ユーザ] > [ユーザ編集]
.png)
ロールに設定する場合は、以下のメニューを使用します。
[ホーム] > [システム管理] > [セキュリティ] > [ロール] > 新規ロール作成
※ ロール名を指定し、保存するまで詳細設定画面が表示されません。
※ 作成したロールをユーザに付与することで、テーブルへのアクセス権限をロールで一元管理できます。 SQLテーブルでの権限設定
.png)
手順は以下のとおりです。
これはInterSystems FAQ サイトの記事です。
テーブルチューニングを行った際に、フィールドに値がほとんど登録されていない(Null)場合や、特定の値がほとんどを占める場合、その値を[外れ値] として除外して選択性計算を行います。 また、外れ値が全レコードの何 % を占めているかの値は [外れ値の選択性] として記録されます。
InterSystems 製品のクエリオプティマイザは、選択性数値とエクステントサイズを使用してクエリの経路を決定しますが、クラスクエリ、埋め込み SQL に使用しているクエリに外れ値が含まれる場合は、外れ値の選択性が自動的に考慮され、インデックスの使用有無を決定しています。
ダイナミック SQL 、ODBC/JDBC 経由でのクエリについては、外れ値が Null である場合、自動的に外れ値の選択性が考慮されますが、Null 以外の特定の値が外れ値に検出される場合は、明示的に指示を与えるまで考慮しません。
詳細は、ドキュメント(異常値に対する述語条件【IRIS】/異常値に対する述語条件【Caché/Ensemble】)をご参照ください。
SAMPLES ネームスペースの Sample.Person テーブルの FavoriteColors には、好きな色が複数格納されていますが未登録(NULL)の値も多く含まれています(インストール直後の状態で
データベースシステムには非常に特殊なバックアップ要件があり、企業のデプロイメントでは、事前の検討と計画が必要です。 データベースシステムの場合、バックアップソリューションの運用上の目標は、アプリケーションが正常にシャットダウンされた時と同じ状態で、データのコピーを作成することにあります。 アプリケーションの整合性バックアップはこれらの要件を満たし、Cachéは、このレベルのバックアップ整合性を達成するために、外部ソリューションとの統合を容易にする一連のAPIを提供しています。
Caché パターンマッチングと同様に、Caché では正規表現を使ってテキストデータのパターンを特定することができますが、後者の場合はより高い表現力を利用できます。 本記事では正規表現を簡単に紹介し、Caché での活用方法について解説します。 本記事の情報は、主に Jeffrey Friedl 氏著作の「Mastering Regular Expressions (詳説 正規表現)」に加え、もちろん Caché のオンラインドキュメンテーションなど、様々なリソースを基に提供しています。 本記事は正規表現のあらゆる可能性や詳細について解説することを意図したものではありません。 更なる詳細にご興味のある方は、チャプター 5 に記載のソースを参照してください。 オフラインで読む場合は、PDF バージョンをダウンロードしていただけます。
これはInterSystems FAQ サイトの記事です。
起動時に、 CTELNETD startup error: bind(sock) failed Telnet23ポートは別ソフトでは使用していません。というエラーが発生する場合の対処法です。
現在、InterSystems製品と以下のソフトの組み合わせで、この現象が発生することがわかっています。
これらがインストールされていると、InterSystems製品の起動も、各GUIツールも正しく動作しません。
上記ソフトウェアについては、アンインストールをお願いいたします。
※1 IMONで、InterSystems製品の全実行ファイルを監視をしないように指定することで、正常に動作します。
※2. McAfee Version6以降は、問題なく動作します。
※