【IRIS/Cache】データベースの操作をコマンドで行う

はじめに

色々作業をしていると、管理ポータル画面を起動して操作するのが面倒になってきます。
その時は、ターミナルからコマンドでポンッと実行したいものですよね。

今回は、データベース周りでの色々なコマンドをご紹介いたします。

マウント/ディスマウント

データベースのコピー等、一番使うコマンドだと思います。
ネームスペース「%SYS」で使用します。

インスタンスメソッド・クラスメソッドの両方で実行可能なので、その時の状況によって使い分けて下さい。

インスタンスメソッド版

zn "%SYS"
s db=##class(SYS.Database).%OpenId("D:\IRISDB\SAMPLE-DATA")
w db.Dismount() // ディスマント
w db.Mount() // マウント

クラスメソッド版

s path="D:\IRISDB\SAMPLE-DATA" // データベースのフォルダパス
w ##class(SYS.Database).DismountDatabase(path) // ディスマウント
w ##class(SYS.Database).MountDatabase(path) // マウント

データベースの作成

新しいデータベースを作成します。
引数は、第1第2引数に作成フォルダと初期サイズ(MB)を指定しますが、他にも色々と引数を渡す事でカスタマイズが可能です。

s path = "D:\IRISDB\NEWDB"
w ##class(SYS.Database).CreateDatabase(path, 1)

「SYS.Database.cls」をインスタンス化してから「%Save」でも作成可能です。

s db = ##class(SYS.Database).%New()
s db.Directory = path // データベースのフォルダパス 
w db.%Save()

作成した段階では、ローカルデータベースとして認識していない為、一覧には表示されません。

下記コマンドで、ローカルデータベースとして認識させます。

s dbName = "NEWDB" // データベース名
s prop("Directory") = path // データベースのフォルダパス
w ##Class(Config.Databases).Create(dbName,.prop)

無事認識しましたね。

「Config.Databases」を利用して、別のデータベースに切り替える事も可能です。
 ※下記コマンドになります。

w ##class(Config.Databases).Get(dbName, .prop)
s p("Directory") = path 
w ##class(Config.Databases).Modify(dbName, .p)

設定を変数「prop」で受け取って、ディレクトリのみ変更する形になります。

各種マッピング

ついでなので、各種マッピングもコマンドで登録しちゃいましょう。
基本的な操作は、グローバル・ルーチン・パッケージどれも変わりません。
操作するクラス名が変わる程度です。

グローバルマッピング

設定

s prop("Database")="NEWDB" // データベース名
s namespace = "SAMPLE" // ネームスペース名
s mask = "TestNewDt.*" // グローバル
w ##Class(Config.MapGlobals).Create(namespace , mask, .prop)

削除

s namespace = "SAMPLE"
s mask = "TestNewDt.*"
w ##Class(Config.MapGlobals).Delete(namespace, mask)

検索

s namespace = "SAMPLE"
s rs=##class(%ResultSet).%New("Config.MapGlobals:List")
d rs.Execute(namespace)
while( rs.%Next() ){ w !,rs.Name }
d rs.Close() k rs

ルーチンマッピング

設定

s prop("Database")="NEWDB" // データベース名
s namespace = "SAMPLE" // ネームスペース名
s mask = "Test*"
s sts=##Class(Config.MapRoutines).Create(namespace, mask,.prop)

削除

s namespace = "SAMPLE"
s mask = "Test*"
w ##Class(Config.MapRoutines).Delete(namespace, mask)

検索

s namespace = "SAMPLE"
s rs=##class(%ResultSet).%New("Config.MapRoutines:List")
d rs.Execute(namespace)
while( rs.%Next() ){ w !,rs.Name }
d rs.Close() k rs

パッケージマッピング

設定

データベースに該当のパッケージが無くても設定できてしまいます。
 ※打ち間違えにご注意ください。

s prop("Database")="NEWDB" // データベース名
s namespace = "SAMPLE" // ネームスペース名
s packageNm = "sample" // パッケージ名
w ##Class(Config.MapPackages).Create(namespace, packageNm, .prop)

削除

s namespace = "SAMPLE"
s packageNm = "sample"
w ##Class(Config.MapPackages).Delete(namespace, packageNm)

検索

s namespace = "SAMPLE"
s rs=##class(%ResultSet).%New("Config.MapPackages:List")
d rs.Execute(namespace)
while( rs.%Next() ){ w !,rs.Name }
d rs.Close() k rs

状態の確認

対象のデータベースが、現在どのような状態にあるかを確認します。

s db = ##class(SYS.Database).%OpenId("D:\IRISDB\NEWDB")
w db.GetStatus()
> Mounted/RW

戻り値は下記リストになります。

  • Unmounted
  • Dismounted
  • Expanding
  • ClusterMounted/R
  • ClusterMounted/RW
  • Mounted/R
  • Mounted/RW

おわりに

データベースを操作するコマンドは、まだまだたくさんあります。
 ※詳しくはドキュメントを参照して下さい。

今回上げたコマンドは、管理ポータル上でもよく操作するコマンドではないでしょうか。
これらをコマンドで操作する事で、定期的なデータベースの切り替え等がコマンドで簡単に行えるようになります。

工夫次第でかなり便利になるコマンドです。
是非活用してみて下さい!