TASK() と ADMIN() (Cheetah)
IDS Cheetahには、TASK()とADMIN()という新しい組み込み関数が用意されています。これを使って、データベース・サーバーに対する管理操作を実行できます。例えば、dbaccess のSQL問い合わせ画面から、
EXECUTE FUNCTION TASK( 'CHECK EXTENTS' );
を実行すると、画面には、
oncheck -ce
と同等の結果が出力されます。
使っていて、いくつか注意しなければいけないことに気づきました。
1. ユーザー informix ( または DBSAメンバー) として実行
2. データベース sysadmin を現行データベースにした状態で実行
これらを守らないと、
674: Routine (task) can not be resolved.
というエラー ( TASK を実行した場合。) が発生します。
便利だと思ったのは、DB領域の作成です。
EXECUTE FUNCTION TASK ( 'CREATE DBSPACE', 'newspc',
'c:\ifmxdata\ol_xp1\newspc.000
'0MB', '40MB');
-- 以下の onspaces コマンド実行と同等
-- onspaces -c -d newspc -p c:\ifmxdata\ol_xp1\newspc.000 \
-- -o 0 -s 40000
で新しいDB領域 newspc を作成できるのですが、クックドDB領域 ( ファイルシステム上に作成するDB領域 ) を作成する際、事前にそのファイルを作成しておく必要はありません ( Windows 版で試した結果です)。onspaces で作成する場合、事前に
touch newdbs; chown informix newdbs; chgrp informix newdbs; chmod 660 newdbs
を実行しておかないとエラーになりますよね。
なので、データベースサーバーに対して、dbaccess で接続できれば、telnet する必要なしにDB領域の作成が出来ます。複数のデータベースサーバーを管理している場合にはかなり便利だと思います。
なお、TASK() と ADMIN() の違いは、実行結果のメッセージ出力などが、SQLの結果として返ってくるかどうかです。どちらの関数も、実行結果は sysadminデータベースのcommand_history表に格納されます。TASK() の場合には、実行結果がSQL ( EXECUTE FUNCTION ) の結果としても返ってきます。dbaccess の場合には画面に表示されます。ADMIN() の場合には、画面には整数値 ( command_history表の、実行結果が格納されている行のID ) が返ってきます。
TASK()とADMIN()で扱える SQL ADMINISTRATION API (コマンド ) の一覧は、SQL Syntax Guide にあります。
(以上の記述は、Windows XP上での結果に基づいています)
関連記事