スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(Windows(R)用)
付録E.2 UOCを作成する場合の注意事項
(1) pdload及びpdrorgの共通規則
- 作成言語はC言語だけです。
- UOCは,ダイナミックリンクライブラリの形式で作成してください。
- 作成したダイナミックリンクライブラリには,読み込み,実行の権限を与えてください。書き込み権限は与えないでください。誤って書き込み権限を与えた場合,UOCの実行時間が長くなり処理性能が悪くなります。
- データベースにアクセスした関数は,グローバルバッファを占有します。また,バッファの占有データベースにアクセスした関数もグローバルバッファを占有します。バッファの占有時間が長いと,HiRDBはシステムの不具合と認識するため,UOC側での処理は必要最小限にして,早めにpdload側又はpdrorg側に制御を戻すようにしてください。
- UOC内で異常終了した場合,pdload又はpdrorgも異常終了します。異常終了時のデータベースの状態とその回復方法については,「5.12 エラー時のデータベースの状態とその回復方法」又は「8.13 エラー時のデータベースの状態とその回復方法」を参照してください。
- UOCインタフェース領域や記号定数を宣言した,UOC作成用のヘッダファイル(pdutluoc.h)は%PDDIR%\include下にあります。インタフェース領域を参照又は更新する場合は,UOCのコンパイル時に引き込んで使用することをお勧めします。なお,変数名称の設定などで,UOC作成用のヘッダファイルを使用できないで独自に定義する場合,テーブルの構造に違いがあるので注意してください。
- グローバル変数及び関数名には,次の文字で始まる名称を使用しないでください。
- 大文字の「SQL」,「Y」,又は「Z」
- 小文字の「p_」,「pd」,「yy」,又は「z」
プラグイン及びJavaTMストアドルーチンを使用する場合は,更に次の文字で始まる名称も使用しないでください。
- プラグインを使用する場合:
- 小文字の「_p」
- Javaストアドルーチンを使用する場合:
- 小文字の「da」
- 小文字の「dbr」
- 小文字の「dp」
- UOCのリターン値は,void型にしてください。
- UOCで環境変数の設定,変更処理はしないでください。
- UOC内では,SQLは発行できません。
- シグナル操作はしないでください。
- main関数はUOCとして使用できません。
- リカーシブルな関数としないでください。
- スタック不足の場合は,UOC内で異常終了することがあります。
- スレッドは生成しないでください。
- 次の関数以外は使用しないでください。
- ファイル操作関数
- 文字処理関数
- メモリ取得・解放関数
- 次の関数は使用しないでください。
- fork(),exit(),abort(),exec()などのプロセス操作関数
- sleep(),select(),wait()
- スタック操作関数(setjmp(),longjmp()など)
- 共用メモリ操作関数
- セマフォ操作関数
- ソケット操作関数
- システム資源操作関数(setrlimitなど)
- mmap(),munmap()
- gethostent(),sethostent(),endhostent(),gethostbyname(),gethostbyaddr(),herror()
- tempnam(),tmpnam()
- pstat()
- system()
- UOCが動作しているプロセスのプロセスIDは,UOC内では使用しないでください。
- ファイルの操作について,次の点に注意してください。
- HiRDBインストールディレクトリ,及びHiRDB運用ディレクトリ下のファイルは操作しないでください。
- OSのファイルは操作しないでください。
- ファイルを作成する場合は,絶対パス名で指定してください。絶対パス名で指定しないと,カレントディレクトリ下にファイルが作成されます。HiRDBのプロセスのカレントディレクトリは,%PDDIR%\tmp\home下のディレクトリとなっているため,ここにはファイルを作成しないでください。
- UOC内でファイルを作成する場合は,ファイルのパーミッションを明示的に設定してください。
- UOCが一時的に作成したファイルは,必ず削除(unlink)してください。
- PIPEなどのスペシャルファイルを使用しないでください。
- 標準入力,標準出力,及び標準エラー出力を使用しないでください。
- ユティリティを複数実行すると,UOCも同時に複数実行されます。このため,UOCがファイル資源に対して排他を掛ける場合は,同時に実行されるほかのUOCが排他待ちにならないように注意してください。
- UOCが出力したファイルは,ユーザが管理してください。
(2) pdload固有の規則
- HiRDB/パラレルサーバの場合,UOCを格納したダイナミックリンクライブラリはsource文に指定したサーバがあるホストに用意してください。
- pdloadがバイナリ形式の入力デ−タファイルを入力して,UOCへ1行分のデータを渡す場合に,可変長文字列の長さが不正なために1行に編集できないときは,処理を打ち切ります。
- pdloadの応答がなくなった場合,pdloadとUOCのどちらに制御があるかを調べるには,pdls -d rpcコマンドを実行します。この結果のUSR_EVENTが0x00052601の場合は,UOCに制御があることになります。
- pdrorg用アンロードファイルの場合,UOCを利用したデータロードはできません。
- エンディアンが異なるpdrorg出力バイナリ形式ファイルを入力データファイルとする場合,次の点に注意してください。
- UOCでデータを入力するとき
データを入力後,エンディアン変換はしないため,入力データはpdloadを実行するプラットフォームのエンディアンで渡してください。
- UOCにデータを渡すとき
option文のsrcendianオペランドを指定して,エンディアン変換後のデータをUOCに渡します。
(3) pdrorg固有の規則
- UOCを格納したダイナミックリンクライブラリはUOCを呼び出すサーバがあるホストに用意してください。UOCを呼び出すサーバとホストについては,「8.10.2 オプションと制御文の関係」を参照してください。
- UOCで操作できるファイルは,UOCデータファイルだけです。
- UOC内で,mallocなどのOS関数でメモリ領域を取得した場合,次の呼び出し方法で必ず解放してください。
- 開始処理でリターンコードに0以外を返す
- 終了処理
- 中止処理
- pdrorgの応答がなくなった場合,pdrorgとUOCのどちらに制御があるかを調べるには,pdls -d rpcコマンドを実行します。この結果のUSR_EVENTが0x00051601の場合は,UOCに制御があることになります。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.