1 フォロワー · 373 投稿

InterSystems Ensembleはユーザー、プロセス、およびアプリケーションを記録的な速さで接続する使いやすい総合的な統合プラットフォームです。

詳細はこちらをご覧ください

ドキュメント

記事 Megumi Kakechi · 9月 3, 2024 2m read

これは InterSystems FAQ サイトの記事です。
HTTPレスポンスヘッダ情報を取得したい場合、以下のような方法があります。
開発中などに、送られてきたヘッダの項目名、そのデータを確認したい場合に、是非ご活用ください。
 

*CSPまたはRESTでヘッダ情報を取る場合

set var=""
 for {
   set var=$order(%request.CgiEnvs(var))
   if var="" quit
   set val=$get(%request.CgiEnvs(var))
   write var_": "_val,"<BR>"
 }

%request オブジェクトについて


*ターミナルで情報を取る場合

%Net.HttpRequest クラスの Head メソッドを使用します。

 set http = ##class(%Net.HttpRequest).%New()
 set http.Server = "localhost"
 set http.Port = 80
 do http.Head("/csp/user/menu.csp")         // ヘッダ情報をリクエストするURL
 do http.HttpResponse.
0
0 158
記事 Megumi Kakechi · 8月 15, 2024 2m read

通常、Caché でエクスポートしたクラスやルーチンをIRISにインポートすることは可能ですが、IRISよりエクスポートしたクラスやルーチンを Caché にインポートすることはできません。

Caché にインポートしようとすると、以下のようなエラーになります。

USER>do $system.OBJ.Load("C:\temp\test.xml")
 
ロード開始 07/23/2024 16:50:42
ファイル C:\temp\test.xml を xml としてロード中
ERROR #6301 行: 2 オフセット: 117 これはCacheエクスポートファイルではありません。インポートできません。
読込時に 1 個のエラーを検出しました。
 


どうしても、古いバージョンにインポートする必要がある場合、「/exportversion」というエクスポート修飾子を使用することが可能です。

使用方法は以下のようになります。/exportversion には、エクスポートしたルーチンをインポートしたい環境のCacheバージョンを指定します。

USER>write $SYSTEM.OBJ.Export("test.mac","c:\temp\test2.xml","/exportversion=cache2018.
2
0 202
記事 Tomoko Furuzono · 8月 4, 2024 1m read

これは、InterSystems FAQサイトの記事です。

管理ポータルのグローバル変数表示ページでは、サブスクリプトレベルの範囲を指定して表示することが可能です。

各サブスクリプトレベルで、 <開始値>:<終了値> のように指定します。
開始値を省略すると先頭から終了値まで、終了値を省略すると指定値から最後までのグローバル変数を表示します。

《例》

(グローバル全体)

 

(第2サブスクリプトが"b"のデータだけを表示)
 

 

(第3サブスクリプトが300以上のデータを表示)
 

 

(第3サブスクリプトが50以下のデータを表示)
   

 

下記ドキュメントページも併せてご確認ください。
【ドキュメント】グローバル・データの表示
 

0
0 93
記事 Tomoko Furuzono · 8月 4, 2024 1m read

これは、InterSystems FAQサイトの記事です。

区切り識別子は、区切り文字で囲まれた一意の識別子です。
InterSystems SQL は、その区切り文字として二重引用符 「"」 をサポートしています。
一方、リテラル値を区切る場合は、一重引用符「'」を使用します。
例えば、下記のSQLにおいて、
①は、Nameの値が「AAA」という文字列である、という検索条件と解釈されますが、
②は、Name列 = AAA列、という結合条件と解釈されます。※実際にAAA列が無ければエラーとなります。

select * from Samle.Person
where Name = 'AAA'


select * from Sample.Person
where Name = "AAA"


リテラル値(文字列、数値)を示す区切り文字として二重引用符「"」を使用したい場合は、
下記を実行し、この区切り識別子サポートするためのオプションを無効にします。

//現在の状態を確認する
USER> write $SYSTEM.SQL.Util.GetOption("DelimitedIdentifiers")
1
//0=「無効」にセット
USER>do $SYSTEMSQL.Util.
0
0 92
記事 Tomoko Furuzono · 8月 4, 2024 1m read

これは、InterSystems FAQサイトの記事です。

既定では、InterSystems製品で表すことのできる日時の最小値は、1840年12月31日 0時0分0秒 です。

USER>write $ZDATETIME("0,0")
12/31/1840 00:00:00

 ですが、アプリ内での用途や、他DBからの登録などで、それよりも前の日付時刻を登録する必要がある場合があります。
その場合には、日付日時のプロパティに、MINVAL(最小値)を設定することでサポートできます。
下記は、%DateTime型、%TeimaStamp型のプロパティに、最小値:西暦1年1月1日0時0分0秒と設定したものです。

Property TestDateTime As %DateTime(MINVAL = "0001-01-01 00:00:00");
Property TestTimeStamp As %TimeStamp(MINVAL = "0001-01-01 00:00:00");

※2023.3および2024.1以降のバージョンでは、%DateTime型のMINVALの設定は必要なく、1840年12月31日 0時0分0秒より前の日時でも問題なく登録できます。%TimeStamp型の場合は、引き続き設定が必要です。

0
0 82
記事 Megumi Kakechi · 7月 28, 2024 2m read

これは InterSystems FAQ サイトの記事です。
通常SQLCODE -114(一致する行が既に別のユーザにロックされています)のエラーはロックが競合した場合に発生します。

こちらはレコードロック競合があったり、ロック閾値を超える更新を行いテーブルロックに昇格した際に、そのテーブルレコードに対して別のプロセスよりSelectを行い共有ロックを取ろうとして失敗した(ロック待ちがタイムアウトとなった)場合に発生します。

Selectで共有ロックを取る場合というのは、IRIS の ISOLATION LEVEL がREAD COMMITTED(デフォルトはREAD UNCOMMITTED)で、Selectを行った場合です。

例:Sample.Personテーブルにテーブルロックがかかった状態で以下を実行する場合

USER>:sql
SQL Command Line Shell
----------------------------------------------------
 
The command prefix is currently set to: <<nothing>>.
Enter <command>, 'q' to quit, '?' for help.
0
0 191
記事 Mihoko Iijima · 7月 16, 2024 9m read

これは InterSystems FAQ サイトの記事です。

管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。

以下シナリオに合わせたセキュリティ設定例をご紹介します。

シナリオ:RESTアプリケーション用設定を作成する

事前準備

シナリオの中で使用するソースを2種類インポートします。

アプリケーション用RESTディスパッチクラスをインポートします。

Class Test.REST Extends %CSP.REST
{

Parameter CHARSET = "utf-8";
Parameter CONTENTTYPE = "application/json";
Parameter CONVERTINPUTSTREAM = 1;
XData UrlMap [ XMLNamespace = "http://www.intersystems.
0
0 162
InterSystems公式 Seisuke Nakahashi · 7月 15, 2024

2024年10月15日をもって、MacOS での Caché および Ensemble のサポートが非推奨となります。

Caché および Ensemble 2018.1.9 のサポートは続きますが、MacOS 向けのメンテナンスバージョンは今後リリースされません。つまり、MacOS 向け製品としては、Caché および Ensemble 2018.1.9 が最後のバージョンとなる予定です。 

あらためてのお知らせですが、その他のプラットフォームにおいても、Caché および Ensemble のメンテナンスバージョンは 2027年3月31日をもってリリース終了となる予定です。詳細は昨年発表の記事をご参照ください

0
0 110
記事 Mihoko Iijima · 7月 11, 2024 4m read

これは InterSystems FAQ サイトの記事です。

管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。

ユーザ設定については、Security.UsersクラスCreate()メソッドを使えば作成できますが、ユーザを作成するだけでは適切な権限が付与されずに目的のデータにアクセスできない状況もあります。

例)testAユーザ作成

    %SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
    
    %SYS>write st
    1

    上記メソッドで作成した結果は以下の通りです。(ロール付与無し、テーブルに対する権限の割り当てもなしの状態)

     

    以降の解説では、以下のシナリオをもとにした設定を行っていきます。

    シナリオ:アプリケーション開発者用ロールとユーザを作成する

    1) アプリケーション開発者のtestAは、USERネームスペースにログインするアプリケーション開発者です(=%DevelopmentリソースのUse許可を与えます)。

    0
    0 121
    記事 Mihoko Iijima · 7月 9, 2024 2m read

    これは InterSystems FAQ サイトの記事です。

    メッセージログ(messages.log)/コンソールログ(cconsole.log) に以下のようなメッセージが表示される場合があります。

    03/22/18-14:27:34:624 (1851) 2 [SYSTEM MONITOR] WriteDaemon Alert: Write Daemon still on pass 320186

     

    このメッセージ出力は、ライトデーモンのデータベースファイルへの書き込み処理の遅延を示しています。
    その原因としては、ディスクI/O負荷が高く、そのI/O要求量に対してディスク処理性能が不足していることが考えられます。

    ディスクI/O負荷の原因としては以下が考えられます。

    • アプリケーションによるデータへの更新や参照処理が集中した
    • アンチウイルスソフトのスキャンやデータベースバックアップソフト等によるディスクへのI/O負荷

    もしアンチウイルスソフトがインストールされている場合は、「アンチウイルスソフト(セキュリティソフト)のスキャンから除外してほしいリスト」に記述している情報を参考に、InterSystems製品の対象ファイルをスキャンの対象外に設定変更してください。

    0
    0 130
    記事 Mihoko Iijima · 7月 7, 2024 4m read

    これは InterSystems FAQ サイトの記事です。

    監査ログはシステムDB内テーブル(%SYS.Audit)に記録されていますので、そのテーブルに対するクエリを実行して抽出したり、%SYS.Auditテーブルに用意されていストアドプロシージャを利用して情報を取得しファイル出力するようにプログラムを用意することもできます。

    以下にご紹介する内容は「監査ログをプログラムで出力(ユーザやイベント指定など)する方法」に関連した内容で、監査ログのファイル出力を管理ポータルの機能を利用した例とプログラムを利用した例でご紹介します。

     

    1. 管理ポータルの印刷機能を使う

    管理ポータル > [システムエクスプローラ] > [SQL]を開き、%SYSネームスペースに接続します。

    システムのチェックを入れ、スキーマに%SYSを指定した後、プロシージャの階層を展開するとプロシージャリストが参照できます。

    %SYS.Audit_ で始まるプロシージャが監査ログに対して実行できるプロシージャです。

    SQL文例)InterSystems製品内ユーザのSuperUserに対する監査ログをストアドプロシージャ:%SYS,Audit_ListByUser を利用して出力しています。

    call %SYS.Audit_ListByUser(,,,,,'SuperUser')

    引数については、クラスリファレンス:%SYS.

    0
    0 160
    記事 Mihoko Iijima · 7月 4, 2024 2m read

    これは InterSystems FAQ サイトの記事です。

    InterSystems製品のサーバサイドでファイル入出力を行うと、文字列はシステムで設定されたファイル入出力用文字コードに自動変換され、文字単位でREADします。

    ファイルから入力する文字をバイト単位で操作するためには、自動変換を行わない無変換の状態でファイル入力を行い指定バイトずつ読みながら読んだ分だけUnicodeに手動で変換していく必要があります。

    変換には$ZCONVERT()関数を使用します。($ZCONVERT()には省略形があり$ZCVT()でも同様の操作が行えます。)

    なお、READした指定バイトを変換する際、文字の全バイトが含まれない場合もあるため、途中までの読み取りになった文字列を第4引数に指定する変数に設定できるようになっています。
    次回読み取り時に途中だった文字を自動的に先頭に追加し、$ZCONVERT()の処理を実行します。

    《メモ》ファイル入出力の文字コードについては、以下管理ポータルの画面で確認できます。
    管理ポータル > 構成 > 国際言語設定 > 構成したデフォルト値
     入力/出力テーブルの表の「ファイル」

    以下の文章がファイルにUTF8で保存されているとします。

    2024/4/19:強風でしたが良い天気でした

     

    無変換でファイル入力を行うには、%Stream.

    0
    0 155
    記事 Mihoko Iijima · 5月 20, 2024 2m read

    InterSystems製品のバックアップ方法の中の4つの目方法は「コールドバックアップ」です。

    InterSystems製品を停止できるときに利用できるバックアップ方法です。別サーバに環境を移植するときや、コミュニティエディションから製品版キットのインストール環境にデータベースを移植する場合などにもお使いいただけます。

     

    バックアップ手順

    1. InterSystems製品を停止する

    2. バックアップしたいデータベースを退避する

    3. InterSystems製品を開始する

     

    既存環境から新環境へ移植する場合などの手順

    1. 既存環境のInterSystems製品を停止する。

    既存環境の設定など含めて全てを新環境に移植する場合は、以下記事の退避内容をご確認いただき、ご準備ください。

    2. 新環境にInterSystems製品をインストールする。

    1. の手順でコピーしていた情報をもとに、新環境の構成を設定します。

    3. 新環境のInterSystems製品を停止する。

    4. 既存環境のデータベースファイル(.DAT)を新環境の対象となるデータベースディレクトリに配置する(置換する)

    対象:ユーザ用DB

    5.

    0
    0 160
    記事 Mihoko Iijima · 5月 20, 2024 5m read

    InterSystems製品のバックアップ方法の中の3つの目方法は、「並行外部バックアップ」についてです。

    この方法は外部バックアップと異なり、スナップショットなどのストレージ機能がない環境に向いている方法でオンラインバックアップよりも高速にバックアップできます。(古いバージョンのInterSystems製品でも利用できるバックアップ方法です。)

    ただし、バックアップやリストア手順が複雑になります。

    並行外部バックアップの利用を検討される際は、事前にリストア手順についてもテスト環境などでご確認いただくことを推奨します。

     

    並行外部バックアップ概要

    データベースファイル(.DAT)を通常のコピーコマンドなどで退避します。

    データベースファイルのサイズによってはコピー時間が長くなります。外部バックアップの方法を利用するとライトデーモン凍結時間のタイムアウトを迎えてしまうため、バックアップを正しく完了できません。

    そのため並行外部バックアップでは、ライトデーモンの凍結を行わずデータベースのダーティコピーを行う方法を採用しています。

    ダーティコピーのバックアップファイルだけでは不完全であるため、最後にオンラインバックアップの差分バックアップを行うことで完全なバックアップを取得します。

    最後の手順に差分バックアップを行うため、オンラインバックアップと同様にデータベースリストを事前に作成する必要があります。

    0
    0 230
    記事 Mihoko Iijima · 5月 16, 2024 27m read

    この記事は、「インターシステムズ製品をバックアップする前に確認したいこと」に続く記事で、InterSystems製品のバックアップの手法の中の「オンラインバックアップ」の仕組みと、バックアップ・リストア手順について解説します。

    オンラインバックアップは、InterSystems製品が用意するバックアップ機能を利用する方法で、バックアップ対象に設定した全データベースの使用済ブロックをバックアップする方法です。

    InterSystems製品のデータベースには、サーバ側で記述したコード、テーブル定義/クラス定義、データ(レコード、永続オブジェクト、グローバル)が格納されていますので、これらすべてが1つのファイルにバックアップされます。

    データ量が増えればバックアップファイルサイズも大きくなります。 また、データ量の増加に伴いバックアップ時間も長くなります。

    バックアップ時間に制限のない環境や、ユーザからのアクセスがない環境(例:ディザスタリカバリの目的で配置しているミラーリングの非同期メンバ)のバックアップ方法としては最適ですが、バックアップ時間に制限がある場合は不向きです。

    バックアップ時間をできるだけ短くしたい場合は、推奨方法である「外部バックアップ」や、手順が少し複雑になりますが「並行外部バックアップ」を取り入れるなどご検討ください。

    0
    0 431
    記事 Mihoko Iijima · 5月 16, 2024 26m read

    開発者の皆さん、こんにちは。

    この記事は、「インターシステムズ製品をバックアップする前に確認したいこと」に続く記事で、InterSystems製品のバックアップの手法の中の「外部バックアップ」の仕組みと、バックアップ・リストア手順について解説します。

    まず、「外部バックアップ」とは、InterSystems製品の専用ルーチン使用せず、InterSystems製品以外のバックアップソリューションを使用してデータベースをバックアップする方法で、現時点の推奨されるバックアップ方法です。

    詳細な説明、手順については、ドキュメント「外部バックアップ」をご参照ください。

    外部バックアップでは、主に、論理ディスク・ボリュームの有効な "スナップショット" を迅速に作成するテクノロジと共に使用します。

    例えば、

    • Windowsサーバの場合は、VSS(ボリューム・シャドウ・コピー・サービス)と組み合わせて利用する
    • AWSのEBS Snapshotと組み合わせて利用する

    スナップショット・テクノロジが使用できないシステムであっても、後述する「特別な考慮」で対応できればご利用いただけます。

    それでは早速、外部バックアップの前後で必要となるIRIS側の手続きと、バックアップとリストアについて確認していきましょう!

    0
    0 431
    記事 Mihoko Iijima · 5月 16, 2024 9m read

    開発者の皆さん、こんにちは。

    この記事では、InterSystems製品のバックアップ方法(4種類)のご紹介と、バックアップを行う前に確認しておきたい内容について解説します。

    また、この記事に続くシリーズ記事では、それぞれのバックアップの仕組みと操作例を交えたバックアップとリストア手順を解説していきます。

    シリーズ記事の中で行っているバックアップ練習、リストア練習の内容については、インターシステムズの講師付きトレーニングコースの中でも取り入れている内容で、一人1環境の演習環境内で実際にお試しいただいています。

    参加者の皆さんと一緒に演習を進めて行きますと、データベースリストアの後に行うジャーナルリストアについては、ユーティリティから出力される確認項目が多いため、皆さん慎重に確認されながらリストアの指示を入力されています。そのため、リストア開始前の手続きや準備に意外と時間がかかっています。

    0
    0 176
    記事 Megumi Kakechi · 5月 6, 2024 4m read

    前回、LinuxでODBC接続を行う方法 をご紹介しました。

    今回は、LinuxでJDBC接続を行う方法 をご紹介します。作業は、root ユーザ で行います。

    はじめに、Linuxのバージョンを確認します。

    $ cat /etc/os-release
    NAME="Red Hat Enterprise Linux"
    VERSION="9.4 (Plow)"
    :


    1. yumパッケージのアップデートを行います

    $ su -
    Password:
    Last login: Tue May  7 01:04:35 UTC 2024 on pts/0
    # yum update


    2. Java をインストールします

    今回は、Adoptium OpenJDK の Version 8 - LTS を使用してテストします。
    ※ *.tar.gz は、/usr/java 以下にダウンロードします。

    # cd /usr/java
    # ls
    OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz
    # tar zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz
    :
    # ls
    jdk8u412-b08  OpenJDK8U-jdk_x64_linux_hotspot_8u412b08.tar.gz


    3.

    0
    0 1371
    記事 Megumi Kakechi · 5月 2, 2024 3m read

    こちらの記事では、LinuxでODBC接続の設定を行う方法をご紹介します。


    はじめに、Linuxのバージョンを確認します。

    $ cat /etc/os-release
    NAME="Red Hat Enterprise Linux"
    VERSION="9.4 (Plow)"
    :


    1. yumパッケージのアップデートを行います

    $ sudo yum update


    2. unixODBCをインストールします

    $ sudo yum install unixODBC

    確認します

    $ which odbcinst
    /usr/bin/odbcinst
    $ which isql
    /usr/bin/isql
    $ odbcinst -j
    unixODBC 2.3.9
    DRIVERS.: /etc/odbcinst.ini
    SYSTEM DATA SOURCES: /etc/odbc.ini
    FILE DATA SOURCES.: /etc/ODBCDataSources
    USER DATA SOURCES.: /home/ec2-user/.odbc.ini
    SQLULEN Size.: 8
    SQLLEN Size.
    0
    0 940
    記事 Megumi Kakechi · 4月 25, 2024 2m read

    大きなサイズのデータを持つフィールドに対してインデックスを作成すると、<SUBSCRIPT>エラーとなることがあります。

    これは、グローバルの添え字(サブスクリプト)のサイズには制限があり、制限を超えるとエラーとなるためです。

    例えば、以下のようなインデックスの場合、

    ^Sample.PersonI("NameIdx"," xxx...xxx",1)       =       ""

    グローバル名+サブスクリプト部(=の左側)が、エンコード文字数で最長 511 文字を超えるとエラーとなります(日本語の場合はもっと小さな文字数です)。

    ※ご参考:グローバル参照の最大長


    大きいデータを持つカラムに対してインデックスを設定したい場合の回避策としては、こちらの ドキュメント にありますように
    「該当のプロパティのインデックス照合文字列を任意の文字数(例:128文字)に制限した照合を定義」
    する方法があります。


    具体的には、以下の2つの方法になります。
    ※クラス定義の変更/保存/コンパイル+インデックスの再構築が必要です。

    0
    0 156
    記事 Megumi Kakechi · 3月 24, 2024 2m read

    これは InterSystems FAQ サイトの記事です。

    クエリパフォーマンスを左右するクエリプランは、テーブルチューニングを行った結果の統計情報を元に生成されます。

    ある環境で期待したプランになったけれど、他の環境では意図したプランにならない場合、(期待したプランとなる)既存環境からテーブル統計情報をエクスポートして別の環境にインポートし、同じ統計情報をもとにしたクエリプランで実行することができます。
     


    既存環境からテーブル統計情報をエクスポートして、対象環境にインポートする方法

    新規環境にてテーブルチューニングをしても思うようなパフォーマンスが出ない場合に、パフォーマンスの出ていたテスト環境と、もう一つの別の環境で同じクエリプランでの実行を試してみたい場合があるかと思います。
    そんな時は、テーブル統計情報である選択性(Selectivity)とデータ数(ExtentSize)情報等をエクスポートして、対象環境にインポートする方法が使用できます。
    もちろん、データの偏りによってクエリオプティマイザが適切だと判断して作成したプランが最適だと考えられますが、どうしても思うようなパフォーマンスが出ない場合に、原因調査も含めてこちらの方法をお試しください。

    以下のように統計情報をエクスポート/インポートすることで、同じテーブル統計情報=同じクエリプラン で実行することが可能となります。

    0
    0 290
    記事 Megumi Kakechi · 3月 20, 2024 14m read

    %Installerという特別なツールを使用すると、目的のIRIS構成を記述するインストールマニフェストを定義できることはご存じでしょうか?
    インストールマニフェストに作成したい IRIS 構成を記述すると、インストール中、またはターミナルやコードからマニフェストを実行した際に、構成設定が適用されます。

    インストールマニフェストについては、以下の記事でご紹介しておりますので是非ご覧ください(Cachéの記事になりますがIRISでも同様です)。
    %InstallerでInterSystems Cachéにアプリケーションをデプロイする


    こちらの記事では、実際にマニフェストで追加できる主な項目について、サンプルコードとあわせてご紹介します。
    今回は、以下の機能の設定例をご紹介します。

    1. ライセンスファイルのコピーと適用
    2. ネームスペース・データベースの作成
    3. 構成情報(ポートやデータベースキャッシュ・メモリ設定など)の適用
    4. セキュリティ情報(ユーザ・サービスなど)のインポート ※同一バージョンのみ
    5. セキュリティ情報(ユーザ・ロールなど)の作成
    6. SQL情報の作成
    7. ジャーナル情報の作成
    8. ユーザ作成クラスやグローバルのインポート、メソッドの実行
    9.

    0
    0 212
    記事 Hiroshi Sato · 3月 18, 2024 6m read

    これは InterSystems FAQ サイトの記事です。
     

    インスタンスの開始が失敗し、コンソールログに"There exists a MISMATCH.WIJ file"が記録されている場合、何らかのシステム障害の影響でデータベースの整合性に関して問題が生じていることを示しています。

    このような状況が発生した際にインスタンスの開始ができるようにするためには、以下の手順を実施します。

    (1) a. インスタンスをNOSTUモードで起動       注1:
    (2) b. データベースの整合性チェック

    ◆(2)の整合性チェックでエラーを検出しなかった場合、
     (3) d. MISMATCH.WIJ ファイルのリネーム
     (4) e. インスタンスの再起動
    を実施します。

    ◆(2)の整合性チェックでエラーが検出された場合は、
     (3) c. MISMATCH.WIJファイルの適用
     (4) b. データベースの整合性チェック
     (5) d. MISMATCH.WIJファイルのリネーム
     (6) e. インスタンスの再起動
    を実施します。 

    以下に各手順の詳細を説明します。 

    a. インスタンスをNOSTUモードで起動します。

    以下に記載の手順の内、1)および2)の手順まで実行します。

    3)以降は実施する必要はありません。

    0
    0 135
    記事 Hiroshi Sato · 3月 18, 2024 1m read

    これは InterSystems FAQ サイトの記事です。
     

    UTF-8(BOM付)のテキストファイルは以下のようにして作成可能です。

     

     set f=##class(%Stream.FileCharacter).%New()
     set f.TranslateTable="UTF8"
     set f.BOM=($char($zhex("EF"))_$char($zhex("BB"))_$char($zhex("BF")))
     set f.Filename="D:\TEST\test.txt"
     set cr = $char(13)
     do f.Write("1行目"_cr)
     do f.Write("2行目"_cr)
     set ret=f.%Save()
    0
    0 245
    記事 Hiroshi Sato · 3月 18, 2024 1m read

    これは InterSystems FAQ サイトの記事です。
     

    $ZF(-100)で外部コマンドを実行する場合、その外部コマンドの子プロセスからの応答が返らない限り、$ZF(100)コマンドを発行したIRISプロセスはその応答を待って残り続けます。

    従ってIRISプロセスを終了させるためにはその応答がない子プロセスを強制終了させる必要があります。

    0
    0 151
    記事 Tomoko Furuzono · 3月 18, 2024 3m read

    これは、InterSystems FAQサイトの記事です。

    【任意のXMLドキュメントの読み込み】
    任意のXMLドキュメントの読み込みを行うには、%XML.TextReaderクラスを使用します。
    Parseメソッド(※ドキュメントがファイルの場合はParseFile())を使用してドキュメントをパースし、各ノードのプロパティを取得します。

    例えば、下記のXMLの場合、

     <emp empid="1">
        <name>Suzuki</name>
        <address>Tokyo</address>
     </emp>

     
    各赤枠が、"ノード"の単位となり、


     下記のようなイメージで取得することができます。

    0
    0 237
    記事 Megumi Kakechi · 3月 11, 2024 2m read

    これは InterSystems FAQ サイトの記事です。

    SQLのINSERT/UPDATE/DELETE文で大量のデータを更新する際に、高速化する方法をご紹介します。
    以下の2つの手順を実行することで、更新処理のパフォーマンスを向上させることが可能です。

    1.INSERT/UPDATE/DELETE時にインデックスを作成せず、あとでまとめて作成する

    2.INSERT/UPDATE/DELETE時にジャーナルをOFFにする

    1は、%NOINDEX キーワードを指定してインデックスの生成を後でまとめて行うことで、インデックスの構築を抑制しパフォーマンスを向上させる方法です。

    クエリ実行例は、以下のようになります。

    例:
    UPDATE %NOINDEX tablename …
    INSERT %NOINDEX INTO tablename …
    DELETE %NOINDEX FROM tablename ...


    更新後、あとでまとめてインデックスを再構築する場合は管理ポータルで行う方法と、コマンドで行う方法の2種類があります。

    ◆ 管理ポータルの場合...

    [システムエクスプローラ] > [SQL]
     (ネームスペース指定&テーブルを選択して) アクション - テーブルのインデックスを再構築...

    ◆ コマンドの場合...

    Set sc = ##class(Schems.
    0
    0 923
    記事 Mihoko Iijima · 3月 6, 2024 2m read

    これは InterSystems FAQ サイトの記事です。

    Ens.Directorクラスのクラスメソッドを使用して取得できます。

    プロダクション名(FAQSample.Interop.Production)とホスト名(FAQSample.Interop.FileOperation)を指定して設定リストを取得する方法は以下の通りです。

    Set status=##class(Ens.Director).GetHostSettings("FAQSample.Interop.Production||FAQSample.Interop.FileOperation",.tSettings)

     以下、出力結果です。

    USER>zwite tSettings
    tSettings("AlertGroups")=""
    tSettings("AlertOnError")=0
    tSettings("AlertRetryGracePeriod")=0
    tSettings("ArchiveIO")=0
    tSettings("BusinessPartner")=""
    tSettings("FailureTimeout")=15
    tSettings("InactivityTimeout")=0
    tSettings("OutputFileName")="test.
    0
    0 121
    記事 Mihoko Iijima · 3月 4, 2024 9m read

    これは InterSystems FAQ サイトの記事です。

    永続クラス定義(またはテーブル定義)に対してオブジェクト操作でデータの参照・更新を行うとき、オブジェクトオープンで使用する%OpenId()、オブジェクトの削除に使用する%DeleteId()の第2引数を使用して並行処理の制御方法を選択できます。

    ご参考:オブジェクト同時処理のオプション

    既定値は1です。(永続クラスのDEFAULTCONCURRENCYクラスパラメータでデフォルト値を指定できます。特に変更していない場合は 1を使用します)

    並行処理の基本事項は以下の通りです。

    • アトミックな書き込みを保証したい場合は並行処理の値は0より大きい値を指定する必要があります。
    • 並行処理の値が0より大きい場合、オブジェクトの保存や削除処理中は、ロックの取得と解放を実施します。

    並行処理の値別の動作の違いは以下の通りです。(ドキュメントの「並行処理の値」に表がありますので併せてご覧ください)

    • 値1の場合は、新規にオブジェクト生成したときにはロックを取得しません。既存オブジェクトを開く際に複数グローバルノードがある場合のみ共有ロックを取得し、開くのが終わったら開放します。(複数グローバルノードを持たないオブジェクトを開く場合はロックしません。)オブジェクトの保存時はロックを取得して保存処理が完了するとロックを解放します。
    0
    0 214
    記事 Mihoko Iijima · 2月 29, 2024 5m read

    これは InterSystems FAQ サイトの記事です。

    新しいインデックスを定義した後、インデックスの再構築が完了する前にクエリを実行するとデータが存在しているにもかかわらず「検索結果0件」や検索結果数が徐々に増えるような状況が発生します。

    インデックスを永続クラス定義(またはテーブル定義)に追加しコンパイルすることで今まで使用していたクエリ実行経路が削除され、再度同じクエリを実行するタイミングで新しいインデックス定義を含めた実行経路が作成されるためです。(この時にインデックス再構築が完了していないとインデックスデータが存在しない、または不完全であるため0件や徐々に検索結果数が増えるような状況を起こします。)

    これを起こさなために、新しいインデックスの再構築が終了するまでクエリオプティマイザにインデックスを使用させないように指定する方法が用意されています。

    ※ 2024/8/2: 2024.1以降から利用できる方法を追加しました。

     

    2024.1以降

    CREATE INDEXのDEFERオプションを使用します(オプションを付けないCREATE INDEX文では、作成時にインデックスの再構築も同時に行われます)。

    1
    0 362