...

4D Server 2004 入 門 編

by user

on
Category: Documents
3

views

Report

Comments

Transcript

4D Server 2004 入 門 編
4D Server 2004
入 門 編
本コースの内容
タイトル
導入編
開発編
運用編
2
ページ
データベースメニュー
動作環境 4th Dimension
4
クライアント/サーバの仕組み
6
4D から 4D Server への移行
8
4D Server/4D Client 起動手順
10
4D Server/4D Client 終了手順
11
ユーザ&グループ
14
プロセス
20
マルチプロセス
21
レコードロック
ロードとアンロード
23
レコードロック
ロックされたレコード
24
レコードロック
補足資料 サブフォーム
26
サブフォーム
セマフォ
27
セマフォ
ストアドプロシージャ
35
ストアドプロシージャ
クライアント登録
42
クライアント登録
データベースメソッド
48
データベースメソッド
トリガ
51
トリガ
補足資料 クエリ
54
クエリ
補足資料 ランタイムエクスプローラ
58
補足資料 デバッグログ
62
デバッグ
環境設定
65
環境設定
キャッシュ
73
スタック
74
動的キャッシュサイズの計算
75
バックアップ
78
バックアップ
ログファイル
87
ログ
ロールバック
87
4D Tools にする修復
91
トラブルシューティング
92
サービスとして登録する
93
クライアント自動アップグレード
94
ユーザ&グループ
自動アップグレード
動作環境 4th Dimension 2004
4D Server /4D Client の動作環境
4D Server
Windows 2000 SP4、Windows XP SP2
Windows 2003 Server SP1/R2
Mac OS X 10.2.8※、10.3.9、10.4.6/Rosetta
4D Client
Windows 2000 SP4、Windows XP SP2
Windows 2003 Server SP1/R2
Mac OS X 10.2.8※、10.3.9、10.4.6/Rosetta
Windows
Pentium II以上
800 x 600モニタ
RAM 256MB以上(512MB以上推奨)
Macintosh
iMac以上
800 x 600モニタ
RAM 256MB以上(512MB以上推奨)
※Mac OS X 10.2.8 の場合、QuickTime バージョン 6.5.2 以上をインストールする。
Server /4D Client のバージョン
4D Server および 4D Client のバージョンは小数点以下まで一致しなくてはならない。
アプリケーションバージョンの確認方法
Windows
:アプリケーションを右クリックしてプロパティを表示する。
Macintosh
:アプリケーションを選択してCommand+Iで情報を表示する。
Windowsの場合、バージョン2004.4は「8.0.4」と表記される。
DEP(Data Execution Prevension/データ実行防止)
Windows XP SP2、Windows 2003 Server SP1 および特定のプロセッサ対象。
4D Server、4D Client 2004 を実行するとデータ実行防止エラーが発生することがある。
詳細および対策:http://www.4d-japan.com/sales_faq/help/help0024.html
3
動作環境 4th Dimension 2003
4D Server /4D Client の動作環境
4D Server
Windows 2000、Windows XP
Mac OS 9.2.2※1、10.2.8※2、10.3.9、10.4.5
4D Client
Windows 2000、Windows XP
Mac OS 9.2.2※1、10.2.8※2、10.3.9、10.4.5
Windows
Pentium II 以上
800 x 600 モニタ
RAM 128MB 以上(256MB 以上推奨)
Macintosh
iMac 以上
800 x 600 モニタ
RAM 128MB 以上(256MB 以上推奨)
※1 Mac OS 9.2.2 の場合、CarbonLib バージョン 1.4 以上をインストールする。
※2 Mac OS X 10.2.8 の場合、QuickTime バージョン 6.5.2 以上をインストールする。
最新情報の確認方法
4D-OS バージョン対応表 Certification Matrix に記載されている。
http://www.4d-japan.com/products/download/documentation.html
対応関係の等級
Certified
当該の環境で、動作確認が行なわれたことを意味する。
Compatible
論理的には動作するが、一部の製品機能については、動作確認が行な
われていないことを意味する。何らかの問題に直面する場合、Certified
級の環境へ移行することが勧められている。
Not Compatible
製品の誤動作を招く恐れのある環境であることを意味する。
この環境が原因で生じる問題については今後対応する予定がない。
灰色
4
該当する製品が存在しないことを意味する。
シングルユーザ/ファイル共有の仕組み
ローカルアクセス
シングルユーザ版
インデックステーブルページ読み込み
QUERY
ハ
ー
ド
デ
ィ
ス
ク
キ
ャ
ッ
シ
ュ
インデックステーブル内におけるレコード位置を特定
レコードの数だけ繰り返し
アドレステーブルページを読み込み
レコードをロック
レコードを表示
マルチユーザ版(ファイル共有)
ネットワーク通信
QUERY
インデックステーブルペ...
インデックステーブル内に...
レコードの数だけ繰り返し
アドレステーブルページ...
レコードをロック
レコードを表示
ハ
ー
ド
デ
ィ
ス
ク
ネットワーク通信
インデックステーブルペ...
QUERY
インデックステーブル内に...
レコードの数だけ繰り返し
アドレステーブルページ...
レコードをロック
レコードを表示
ファイル共有のデメリット
キャッシュが使用できないため、ネットワーク通信、ディスクアクセスが多発。
各クライアントマシンにデータベースエンジンを含む完全なアプリケーションが必要。
キャッシュ
ハードディスクに保存されたデータファイルに直接アクセスする代わりに、一時的な置き
場所であるメモリブロック(キャッシュ)にアクセスすることによって、データアクセスの高
速化が計られている。キャッシュの内容は、定期的にデータファイルに書き込まれる。
(FLUSH BUFFERS)
ショートカット= Alt+Ctrl(Windows)/option+command(Macintosh)+Shift+S
5
クライアント/サーバの仕組み
マルチユーザ版(クライアント-サーバ)
QUERY
要求を送信
サ
ー
バ
結果を受信
ローカルアクセス
インデックステーブルペ...
インデックステーブル内に...
レコードの数だけ繰り返し
ネットワーク通信
ハ
ー
ド
デ
ィ
ス
ク
キ
ャ
ッ
シ
ュ
アドレステーブルページ...
レコードをロック
QUERY
要求を送信
レコードを表示
結果を受信
ネットワーク通信
クライアント/サーバのメリット
データベースエンジンは一カ所に集約され、キャッシュが使用できるので高速。
ネットワークの使用効率が良い。
マルチユーザ版(4D Client/4D Server)
4D 独自のデータベース言語
レコードを要求
要求を処理
結果を受信
結果を送信
レコードを表示
4D 独自のデータベース言語
画面表示範囲を考慮したデータ量
データ
随時:フォーム、メニュー、リスト、メソッド etc.
ローカルリソース
6
接続時:extras フォルダ、プラグイン etc.
ストラクチャ
4D から 4D Server への移行
4D フォルダ
開く
データベースフォルダ
データベースフォルダ
ストラクチャファイル(.4DB)、データファイル(.4DD)、それぞれのリソースファイル
(.RSR、.4DR)など、4D.exe が使用するファイルが置かれている。
プラグインフォルダ
Plugins フォルダは、4D.exe と同じ階層(Windows)またはアプリケーションパッケージの
中(Macintosh)およびデータベースフォルダに配置する。
4D フォルダ
ライセンス(Licenses)、マクロ(Macros)、最近使用したデータベースの履歴、最近使用し
たサーバの履歴、4th Dimension の設定ファイルなどが置かれている。
※マクロ:メソッドエディタ用のスクリプトファイル。
4D フォルダの場所(Get 4D folder)
Windows
Macintosh
C: 㻿documents and Settings㻿All Users㻿Application Data㻿4D
Macintosh HD:Library:Application Support:4D
7
4D から 4D Server への移行
4D フォルダ
データベースフォルダ
ローカルリソース
ローカルリソース
4D Server が使用するファイルはサーバマシンのデータベースフォルダに置かれている。
4D Client が 4D Server に接続すると、ファイルがダウンロードされ、クライアントマシ
ンにローカルリソースが作成される。データファイルはダウンロードされない。4D Client
は 4D Server を介してデータファイルにアクセスする。
ローカルリソースの場所
Windows
C: 㻿documents and Settings㻿ログインユーザ名¥ Application Data㻿4D
Macintosh
Macintosh HD:Users:ログインユーザ名:Library:Application Support:4D
8
4D Server/4D Client 起動手順
4D Server のアイコンをダブルクリックする。
画面左側のデータベースを開くボタンをクリックする。
最近使用したデータベースで受注管理.4DB データベースを選択する。
インタプリタモードで開くボタンをクリックする。
最近使用したデータベースのリストは、4Dフォルダの中にある4D Recent Databases.xml
に記録されている。(シングルユーザ版の4th Dimensionと共有)
データベースを開くときのオプション
ストラクチャファイルの検査
Ctrl(Windows)/command(Macintosh)+開く
ローカルリソースを強制的に更新
データファイルを選択 Alt(Windows)/option(Macintosh)+開く
9
4D Server/4D Client 起動手順
4D Client のアイコンをダブルクリックで起動する。
中央の TCP/IP タブをクリックする。
受注管理データベースをダブルクリックする。
サーバに接続するときのオプション
最近使用したサーバのリストでは、クライアントマシンの 4D フォルダの中、Favorites
2004 フォルダに保存されているデータベース名.PTH (パスファイル)が選択できる。
カスタムタブでは、ネットワークアドレス(またはドメイン名)でサーバを指定できる。
ポート番号 19813 以外で公開されているデータベース(リストには非表示)も指定できる。
(ポート番号はコロンに続けて入力)
※データベース名とは最近使用したサーバのリストに表示される名前、すなわち Favorites
2004 フォルダに保存されるパスファイルの名前。各クライアントで任意に設定できる。
ローカルリソースを強制的に更新
10
4D Server/4D Client 終了手順
サーバのファイル(Windows)/アプリケーション(Macintosh)メニューで終了を選択する。
終了までの待ち時間を入力する。(クライアントが接続していなければすぐに終了する)
接続中の 4D Client にはサーバ終了の通知メッセージが配信される。
11
ここまでのまとめ
バージョン
4D Server および 4D Client のバージョンは小数点以下まで一致しなくてはならない。
クライアント/サーバのメリット
データベースエンジンが一カ所に集約されるので効率が良い。
いろいろなフォルダの場所と役割
データベースフォルダ (サーバ)
ストラクチャファイル(.4DB)、データファイル(.4DD)などデータベースの本体。
プラグインフォルダ (サーバおよびクライアント)
データベースが使用する外部ルーチン(プログラム)。
4D フォルダ (サーバおよびクライアント)
ライセンス、マクロ、最近使用したデータベースなど、さまざまな設定ファイル。
ローカルリソース
フォーム、メソッド、ピクチャライブラリなど、再利用できるデータベース構成要素。
確実に最新の状態が欲しい場合、ローカルリソースを強制的に更新する。
起動手順
サーバを最初に起動し、ネットーワークに公開する。
終了手順
サーバで時間を設定するか、すべてのユーザの接続解除を待つ。
次章の内容
マルチユーザおよびマルチプロセスという概念に対する理解を深める。
クライアント/サーバを意識した開発に必要な技術および知識を習得する。
12
ユーザ&グループ
ユーザ&グループ
ユーザにはパスワード、グループにはアクセス権を設定する。
ユーザ名、グループ名はそれぞれ30バイト以内で設定する。
ユーザ&グループは、アクセス権を段階的に管理するためのメカニズム。
個人を判別することが目的ではない。
モジュール
アクセスを制限できるデータベースの構成要素(モジュール)は6種類ある。
プラグイン、メニュー、フォーム、メソッド、テーブル、実行モード。
ユーザのアクセス権
ユーザがグループに所属している場合、そのグループのアクセス権が付与される。
ユーザの所属するグループが別のグループに所属している場合、ユーザには両方のグルー
プアクセス権が付与される。例:
ユーザ名
パスワード
グループA
グループB
グループC
佐藤
sato
佐藤
グループA
グループB
小林
kobayashi
小林
山田
yamada
高橋
takahashi
モジュール名
アクセス権
デザインモード
グループA
ユーザモード
グループB
メニュー#1
グループC
山田
高橋
デザインモード
ユーザモード
メニュー#1
佐藤
○
○
○
小林
○
○
○
○
○
山田
高橋
○
13
ユーザ&グループ
ユーザの種類
Designer はすべての権限を持っている。Administrator はユーザを作成することができる。
通常、ユーザの追加、書き出し、読み込みは Administrator で実行する。
Designer もユーザを作成できるが、書き出し/読み込みはできない。
削除されたユーザは半透明になって残される。(削除された ID の再利用を防止するため)
Administrator が作成したユーザは空グループをインポートすることで完全に削除できる。
パスワード
Designer のパスワードが設定されていない場合、パスワードシステム全体が無効になる。
ユーザ認証画面を強制的に表示するには Shift を押しながらデータベースを開く。
パスワードは 15 バイト以内で設定する。(大文字と小文字を区別)
グループオーナー
グループにメンバーを入れたり抜いたりできるメンバー。
グループやメンバーを作成したり、削除したりすることはできない。
グループの種類
作成者によってDesignerグループとAdministratorグループがある。
グループの作成、削除、情報、読み込み、書き出し
グループの読み込み、書き出し、削除ができるのは Administrator グループ。
アクセス権の設定方法
データベースモジュール毎に、アクセス権を設定する方法(場所)が異なる。
プラグイン ツールボックス/グループ
メニュー
ツールボックス/メニュー
フォーム
フォームプロパティ
(エクスプローラまたはプロパティリスト)
メソッド
メソッドプロパティ
(エクスプローラまたはメソッドエディタ)
テーブル
インスペクタ
実行モード 環境設定/アプリケーション/アクセス
14
ユーザ&グループ
サンプルデータベース/4D Server 入門/ユーザ&グループ
サンプルデータベースのカレントユーザは Designer。
カレントユーザは自分のパスワードを変更できる。
現在のパスワードを入力する必要はない。
Designer のパスワードを設定するとパスワードシステムが有効になり、Designer 以外の
ユーザとしてログインしたり、CHANGE CURENT USER コマンドでユーザを切り替える
ことができるようになる。
ユーザを切り替えると、そのプロセスのアクセス権(カレントユーザ)が変わる。
15
ユーザ&グループ
サンプルデータベース/4D Server 入門/ユーザ&グループ
EDIT ACCESS を実行するとツールボックス(ユーザ&グル—プ)が表示される。
ユーザやグループの作成、変更、削除、グループのインポート/エクスポートができる。
練習問題;ユーザ「佐藤」「小林」「山田」「高橋」、グループ A、B、C を作成してみよう。
次のようにアクセス権を設定した場合「佐藤」のアクセス権はどうなる?
ユーザ名
パスワード
グループA
グループB
グループC
グループA
グループB
佐藤
sato
佐藤
小林
kobayashi
小林
山田
yamada
高橋
takahashi
山田
高橋
答:「佐藤」は「グループ A」のメンバーだが、「グループ A」は「グループ B」のメンバ
ーであり、「グループ B」は「グループ C」のメンバーなので、結局、「佐藤」はグループ
A B C すべての権限を持っていることになる。
16
ユーザ&グループ
サンプルデータベース/4D Server 入門/ユーザ&グループ
CHANGE CURRENT USER を実行するとログイン画面が表示される。
環境設定でユーザは自分のパスワードを変更可能に設定することができる。
(2003 以前のバージョンから変換されたデータベースはデフォルトでオプションが無効)
その他の項目:デフォルトユーザ、パスワードダイアログにユーザリストを表示する。
クライアント/サーバの場合、ログイン画面ではパスファイルを作成することもできる。
17
ユーザ&グループ
サンプルデータベース/4D Server 入門/ユーザ&グループ
CHANGE CURRENT USER を実行してログイン画面を表示する。
正しいパスワードを入力して保存ボタンをクリックする。
パスワードありボタンをクリックしてパスファイル(.PTH)を生成する。
(ユーザは自分のパスワードを変更可能ではない場合、ボタンは表示されない。)
パスファイルには、データベースの公開名、アドレス、ポート番号が記録されている。
パスファイルを 4D Client のアイコンにドロップすれば、ログイン画面がスキップできる。
最近使用したサーバのパスファイル
Favorites 2004 フォルダには最近使用したサーバのパスファイルが保存されている。
パスファイルが保存されているフォルダの場所
Windows C: 㻿documents and Settings㻿ログインユーザ名¥ Application Data㻿4D
Macintosh
18
Macintosh HD:Users:ログインユーザ名:Library:Application Support:4D
プロセス
プロセス
4th Dimension は複数のプロセスを実行することができる。プロセスごとのカレントセレ
クション、カレントレコード、プロセス変数は独立している。複数のユーザが存在する状
態は、複数のプロセスが存在する状態と基本的に同じである。
ユーザ/カスタムメニュープロセス
ユーザモード、またはカスタムモードの基本プロセス。
常に実行されており、これを終了することは 4D を終了することを意味する。
ローカルプロセス
プロセス名が$で始まるローカルプロセスはテーブルにアクセスできない特殊なプロセス。
例: ランタイムエクスプローラプロセス、4D Compiler プロセス。
カーネルプロセス
4D Client のユーザ/カスタムメニュープロセスとデザインプロセス、4D Server のキャッ
シュマネージャ、クライアントマネージャ、ユーザインタフェースプロセスは 4D が管理
する基幹プロセス(カーネルプロセス)であり、勝手に停止、延期することはできない。
プロセス名
メニューから起動したプロセスの名前は M_プロセス番号または ML_プロセス番号。
メソッド実行ダイアログから起動したプロセスの名前は P_プロセス番号。
New process 関数で起動したプロセスの名前はコマンドで指定した名前または無名。
プロセス番号
プロセスの起動および終了はアプリケーションの負担が非常に大きい。
終了したプロセスの番号は、次に起動するプロセスによって再利用される。
プロセスの状態
実行中、延期中、イベント待機中、I/O 待機中、セマフォ待機中、停止、アボートがある。
ランタイムエクスプローラ
プロセス名、状態、変数、セレクションなどはランタイムエクスプローラで監視できる。
19
マルチプロセス
サンプルデータベース/4D Server 入門/レコードロック
レコード更新ボタンを複数回クリックして複数のリストフォームを表示する。
各プロセスのカレントセレクションおよびカレントレコードは独立している。
別のプロセスが編集しているレコードは編集できない。(ロックされたレコード)
ロックされたレコードに遭遇するとアラートが表示される。
その場合、そのプロセスでは対象テーブルが READ ONLY に設定される。
テーブルが READ ONLY の場合、読込、追加はできるが、更新、削除はできない。
レコードの自動ロックシステムは、編集中のレコードを他のユーザ/他のプロセスに更新、
削除させないためのメカニズム。
20
マルチプロセス
サンプルデータベース/4D Server 入門/レコードロック
QUERY を実行し、氏名=@などの条件で適当なセレクションを作成する。
READ WRITE から READ ONLY に切り替える。この時点では Locked=False。
LOAD RECORD を実行する。READ ONLY なので Locked=True になる。
READ ONLY から READ WRITE に切り替える。この時点では Locked=True。
LOAD RECORD を実行する。READ WRITE なので Locked=False になる。
Locked=True とは「レコードの更新または削除ができない」状況。
レコードが他のユーザまたはプロセスによってすでに削除されている状況も含まれる。
一方、プロセス自身がレコードをロックしている状況は含まない。
21
ロードとアンロード
サンプルデータベース/4D Server 入門/レコードロック
ALL RECORDS を実行し、適当なセレクションを作成する。
このときのほんとうのカレントレコードは、画面の表示とは対照的に空白である。
フォームがフォーカスを取得すると、画面上のカレントレコードも空白になる。
ほんとうのカレントレコードを得るためには LOAD RECORD を実行しなければならない。
詳細フォームにサブフォームが組み込まれている場合、あるいはリストフォームの場合、
フォーカスの取得などにより、頻繁にリストフォームの再描画(REDRAW)が発生する。
リストフォームの再描画が発生すると、カレントレコードの位置(カレントレコードポイン
タ)は変わらないもの、他のレコードが参照された関係でアンロードされているので、
ほんとうのカレントレコードを得るためには LOAD RECORD を実行しなければならない。
22
ロックされたレコード
サンプルデータベース/4D Server 入門/レコードロック
マルチプロセスデータベースでレコードを一括更新する場合、レコードが他のプロセスに
よってロックされているために更新できない場合があることを予期しなければならない。
ループ 1:単純なループで更新→SAVE RECORD
シングルユーザでは動作するが、マルチユーザではロックされたレコードが更新されない。
フォーミュラ 1:フォーミュラで更新(APPLY TO SELECTION)
ループ 1 と同じようにマルチユーザではロックされたレコードが更新されない。
その上クライアント/サーバでは非常に遅い。
23
ロックされたレコード
サンプルデータベース/4D Server 入門/レコードロック
フォーミュラ 2:フォーミュラで更新(APPLY TO SELECTION)→LockedSet をチェック
ロックされたレコードは更新されないが、LockedSet にロックされたレコードが収容され
ているため、その事実を知ることはできる。やはりクライアント/サーバでは非常に遅い。
ループ 2:トランザクションを開始→単純なループで更新→SAVE RECORD
トランザクションを使用すれば、一連の操作全体をキャンセルすることができる。
配列:4D Server 用に最適化されたコマンド(ARRAY TO SELECTION)を使用
似たようなコマンドでありながら、フォーミュラで更新するよりは飛躍的に速い。
C/S:ストアドプロシージャを使用
フォーミュラで更新するコマンドも、工夫次第で飛躍的に速くなる。
24
補足資料 サブフォーム
サンプルデータベース/補足資料/サブフォーム
直接クライアント/サーバには関係ないものの、レコードのロード/アンロードに関連し、
サブフォームの取り扱いには注意する必要がある。
複数選択タイプ
クリックでレコードがハイライトされるが、クリックとカレントレコードは無関係である。
単一選択タイプ
クリックし、ハイライトされたレコードがカレントレコードである。
いずれの場合も、フォーカスによってサブフォームが再描画された後にはカレントレコー
ドを LOAD RECORD しなければならない。
25
セマフォ
セマフォ
セマフォは、異なるプロセス(ユーザ)間で合図を交わすためのフラグ(信号)である。
セマフォの作成
セマフォを作成するにはSemaphore関数を使用する。
セマフォが作成できればFalseが返され、作成できなければTrueが返される。
Trueが返される場合、Falseが返されるようになるまで待機することもできる。
セマフォを作成したプロセスには常にFalseが返され、新たに作成されたものと昔に作成し
たものの区別はない。
セマフォの確認
セマフォの存在を確認するにはTest semaphore関数を使用する。
セマフォが存在しなければFalseが返され、存在すればTrueが返される。
セマフォを作成したプロセスがTest semaphore関数をコールした場合はFalseが返される。
セマフォの消去
セマフォは、作成したプロセスだけがCLEAR SEMAPHOREコマンドでクリアできる。
ただし、作成したプロセスが終了すればセマフォは消える。
セマフォの種類
グローバルセマフォは、全クライアントマシンの全プロセス間で通用する。
ローカルセマフォ($)は、ひとつのマシンの全プロセス間で通用する。
セマフォの役割
同一レコードに対する同時アクセスは、レコードの自動ロックシステムによって管理され
ているので特にセマフォで防止する必要はない。
セマフォで制御する必要があるのは、レコード以外に対するプロセス同士の競合である。
セマフォで管理することが望ましいもの
インタープロセス変数/配列やプロセス変数/配列に対するアクセス。
ドキュメントの書き込み。
その他、同時に複数のプロセス(ユーザ)が実行するべきではないメソッド。
26
セマフォ
サンプルデータベース/4D Server入門/セマフォ
インタープロセス変数/配列は、同一マシンであれば同時にアクセスされる可能性がある。
プロセス変数/配列は、SET PROCESS VARIABLE、VARIABLE TO VARIABLEを使用す
れば、他のプロセスから書き込みができ、やはり同時にアクセスされる可能性がある。
サーバのインタープロセス変数/配列は、上記コマンドを使用すれば、クライアントから書
き込みができ、やはり同時にアクセスされる可能性がある。
27
セマフォ
サンプルデータベース/4D Server入門/セマフォ
セマフォは、作成したプロセスがクリアしない限り、存在している。
たとえばユーザ/カスタムメニュープロセスは常に存在しているので、起動時に作成したセ
マフォは終了するまで残っていることになる。
28
セマフォ
サンプルデータベース/4D Server入門/セマフォ
新規プロセスを起動する。
メイン画面のインタープロセス変数に適当な文字を入力する。
新規プロセス側でもインタープロセス変数が更新されているが、画面は更新されていない。
CALL PROCESS(-1)を実行すると新規プロセス側の変数値が画面上でも更新される。
新規プロセス側でプロセス変数にフォーカスを移動する。(セマフォが作成される)
メイン画面でプロセス変数に適当な文字を入力する。
メイン画面でボタン(SET PROCESS VARIABLEを実行)をクリックし、新規プロセスのプ
ロセス変数を更新しようとしても、セマフォが存在するので更新できない。
新規プロセス側でプロセス変数のフォーカスを移動する。(セマフォが削除される)
メイン画面でボタンをクリックする。今度は変数が更新できる。
29
セマフォ
サンプルデータベース/4D Server入門/セマフォ
Semaphore関数の第二引数を使用することにより、セマフォがFalseになるまで一定時間、
待機することができる。
30
セマフォ
サンプルデータベース/4D Server入門/セマフォ
SET PROCESS VARIABLE、VARIABLE TO VARIABLEコマンドの第一引数に-1 (あるい
は適当な負の数)を指定すれば、サーバのインタープロセス変数を更新することができる。
31
セマフォ
サンプルデータベース/4D Server入門/セマフォ
同一のドキュメントに対して同時に書き込みが実行されないようにセマフォで管理する。
32
ここまでのまとめ
ユーザ&グループ
ユーザにはパスワード、グループにはアクセス権を設定する。
ユーザのアクセス権
ユーザの所属するグループすべてを統合したアクセス権が付与される。
管理者権限
Designer はすべての権限を持っている。Administrator はユーザを作成することができる。
プロセス
プロセスごとのカレントセレクション、カレントレコード、プロセス変数は独立している。
レコードの自動ロックシステム
編集中のレコードを他のユーザ/他のプロセスに更新、削除させないためのメカニズム。
ロックされたレコード
他のユーザまたはプロセスによってロックされた、あるいはすでに削除されたレコード。
セマフォ
セマフォは、異なるプロセス(ユーザ)間で合図を交わすためのフラグ(信号)である。
セマフォの役割と用途
(インター)プロセス変数の書き込みなど、同時に実行すべきでない処理を制御する。
次章の内容
サーバでメソッドを実行する方法、他のクライアントでメソッドを実行する方法など、
クライアント/サーバシステム特有のプログラミング技法の基本を習得する。
33
ストアドプロシージャ
ストアドプロシージャ
メ ソ ッ ドを サー バの新規プロセス で実行すること。Execute on server 関数は 4th
Dimension で実行した場合、New process 関数として動作する。
ストアドプロシージャの特徴
ストアドプロシージャは独立したプロセスとして次のものを持つことができる。
カレントセレクション
カレントレコード
プロセス変数
デフォルトテーブル
ON ERR CALL メソッド
デバッガ
ストアドプロシージャの制限
ストアドプロシージャはウィンドウを開くことはできるが、サーバでデータ入力を受け付
けることはできない。
34
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
通常は Execute on server 関数でストアドプロシージャを起動する。
ただし On Server Startup、On Backup Startup、トリガなどはサーバのプロセスである
ので、そこで起動したメソッドは自動的にストアドプロシージャとなる。
ストアドプロシージャは、一般にデータファイルの大量更新、通信、監視に使用される。
35
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
BACKUP コマンドは、クライアントのプロセスで実行したとしても自動的にストアドプロ
シージャで実行される。
Current time(*)はクライアントで実行してもサーバの時間が取得できる。
その他、4D Server 用に最適化されている一部のコマンドは、クライアントで実行しても
クライアント/サーバ設定で効率的に大量のレコード処理ができる。
4D Server 用に最適化されていない一部のコマンドは、シングルユーザ版とは比較になら
ないほどレコード処理に時間を要する場合がある。
36
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
Execute on server 関数では、ストアドプロシージャで実行するメソッド名を指定するが、
自分自身をコールするようにすれば、メソッドをひとつにまとめることができ、サーバで
実行されるコードとクライアントで実行されるコードがひとつになるメリットがある。
(再帰メソッド)
コードが実行される場所は Count parameters、Application type などで判別する。
37
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
プ ロ セ ス変 数に 値を書き 込むコマ ンド(SET PROCESS VARIABLE 、 VARIABLE TO
VARIABLE)はクライアントからサーバという方向であれば、マシン間で使用できる。
プロセスを無限ループさせる場合、DELAY PROCESS コマンドまたは IDLE コマンドを使
用し、カーネルプロセスに制御を返すようにしないとアプリケーションがフリーズする。
ユーザ/カスタムメニュープロセスは処理をスケジューラに返すため、プロセスポップアッ
プウィンドウを表示すれば、インターセプトすることができる。
プロセスポップアップウィンドウを表示するショートカット
Alt+Shift+右クリック(Windows) /control+command +クリック(Macintosh)
38
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
Application file、Structure file、Data file、Log file など、データベース関係のファイル
パスを取得するコマンドは、クライアントで実行した場合、ファイル名だけが返される。
39
ストアドプロシージャ
サンプルデータベース/4D Server 入門/ストアドプロシージャ
Extras フォルダはクライアントが接続するたびにダウンロードされる共有目的フォルダ。
プ ロ セ ス 変 数 の 書 き 込 み コ マ ン ド (SET PROCESS VARIABLE 、 VARIABLE TO
VARIABLE)を使用すれば、ファイルをサーバにアップロードすることもできる。
もっとも、テーブルレコードを使用すれば、ストアドプロシージャやセマフォ、プロセス
間通信を使用しなくても、確実にデータが共有できる点を忘れてはならない。
40
クライアント登録
クライアント登録
クライアントを登録すると、定期的に (標準は 2 秒、最短は 1 秒) サーバと通信するプロ
セスが起動し、他のクライアントプロセスまたはサーバプロセスからの指示を受けてメソ
ッドを実行することができる。
この特殊なプロセスは、クライアントの登録を解除するまで存続する。
クライアントの登録方法
REGISTER CLIENT コマンドを使用する。
接続時にクライアントを登録する。(環境設定/クライアント-サーバ設定)
登録名とワイルドカード
クライアントの登録プロセスでメソッドを実行する場合、名前でクライアントを指名する。
このときワイルドカード(@)を使用すれば、まとめて複数のクライアントが指名できる。
メソッドのスタック
クライアントの登録プロセスは、メソッドの実行中であっても次の指令を受け付けるので、
順番待ちのメソッドが蓄積することになる。
メソッド名とワイルドカード
ワイルドカード(@)を使用すれば、多数のメソッド実行をクライアントに対してまとめてリ
クエストすることができる。
ストアドプロシージャとの比較
サーバのストアドプロシージャとは異なり、登録したクライアントでメソッドを実行する
場合、ユーザインタフェースで入力を受け付けることができる。
41
クライアント登録
サンプルデータベース/4D Server 入門/クライアント登録
登録クライアントでメソッドを実行することは広義のストアドプロシージャとされている。
(4th Dimension ドキュメントにおける用法)
42
クライアント登録
サンプルデータベース/4D Server 入門/クライアント登録
サンプルデータベースは、自動クライアント登録の環境設定が有効になっている。
登録名は、UNREGISTER CLIENT 実行後、REGISTER CLIENT で再登録できる。
登録されているクライアントを(複数)指名し、メソッドを実行することができる。
適当な文章を入力し、登録名を選択してボタンをクリックするとアラートが表示される。
43
クライアント登録
サンプルデータベース/4D Server 入門/クライアント登録
ストアドプロシージャのサンプルでは、GET PROCESS VARIABLE を使用してクライアン
トからサーバに処理の完了をループで問い合わせていた。
(サーバからクライアントに対して SET PROCESS VARIABLE を実行することはできない)
一方、EXECUTE ON CLIENT はサーバからクライアントに対する通信に利用できるため、
ストアドプロシージャに応用すれば、ループによる問い合わせが不要になる。
44
クライアント登録
サンプルデータベース/4D Server 入門/クライアント登録
45
データベースメソッド
サンプルデータベース/4D Server 入門/データベースメソッド
On Server Startup
データベースを 4D Server で開いた時にサーバで一度だけ実行されるメソッド。4D Server
セッションを通じて使用されるインタープロセス変数の初期化、設定ファイルやリソース
ファイルの読み込み、ストアドプロシージャを起動時に実行するためなどに使用する。
On Startup
サーバに対する接続が受け入れられた後、クライアントで一度だけ実行されるメソッド。
4D Client セッションを通じて使用されるインタープロセス変数の初期化などに使用する。
46
データベースメソッド
サンプルデータベース/4D Server 入門/データベースメソッド
On Server Shutdown
4D Server を終了する時にサーバの新規プロセスで実行されるメソッド。使用しない場合、
実行中のすべてのプロセスが一方的にアボートされる。このプロセス自体もやがて終了し、
その時まで残っているプロセスがあれば、それらのプロセスも終了する。
On Exit
4D Client を終了する時にクライアントの新規プロセスで実行されるメソッド。使用しな
い場合、実行中のすべてのプロセスが一方的にアボートされる。このプロセス自体もやが
て終了し、その時まで残っているプロセスがあれば、それらのプロセスも終了する。
47
データベースメソッド
サンプルデータベース/4D Server 入門/データベースメソッド
前ページの画面でテスト用プロセス(イベント待機中、一時停止、隠れている)を起動する。
終了メソッドボタンをクリックする。プロセスに一覧が表示される。
リスト右端の列をクリックすると、実行中のプロセスは CALL PROCESS、停止中のプロ
セスは RESUME PROCESS、隠れているプロセスは SHOW PROCESS にダブルクリック
されたときの反応アクションが切り替わる。
その他の列をダブルクリックすると、それぞれの設定されたとおりの結果になる。
終了フラグ<>QUIT_4D が True のときにコールされたプロセスは終了処理をし、最後に
<>QUIT_4D_LOG にメッセージを書き込む。
つまり、終了時にはそれぞれのプロセスに終了の合図を送り、その答えを受け取ることで
プロセスが不意にアボートされないことを見届けることができる。
終了フラグがチェックされた状態でボタンをクリックすればデータベースが終了する。
48
データベースメソッド
サンプルデータベース/4D Server 入門/データベースメソッド
On Server Open Connection、On Server Close Connection
4D Clientによって接続プロセス(4D Clientのプロセスに対応する4D Serverのプロセス)が
起動あるいは終了するたびにサーバで実行されるメソッド。具体的には、4D Clientが接続
した時(ユーザ/カスタムプロセスが起動するため)、デザインモードを開始した時(デザイン
プロセスが起動するため)、ローカルプロセスではない新規プロセスを起動した時に実行さ
れる。4D Openおよび4D Insiderの接続でも実行されるが、Web接続やストアドプロシー
ジャでは実行されない。LONGINT型の$0、$1、$2、$3が使用される。
$1
4D Serverの内部的なユーザID番号
$2
4D Serverの内部的な接続ID番号
$3
常に2または29
$0
未定義または 0 で接続を受け入れる。
49
データベースメソッド
サンプルデータベース/4D Server 入門/データベースメソッド
On Backup Startup
バックアップ開始前にサーバで実行されるメソッド。
保存先ボリュームの状態など、バックアップを開始する条件の判別に使用する。
On Backup Shutdown
バックアップ終了後にサーバで実行されるメソッド。
エラー解析など、特にバックアップが失敗した場合の始末に使用する。
50
トリガ
サンプルデータベース/4D Server 入門/トリガ
トリガはテーブルに対して定義されたメソッドで、不正なデータ処理を防ぐ役割がある。
トリガメソッドはサーバのプロセスで実行される。
新規レコード保存時、既存レコード保存時、レコード削除時、レコード読込時がある。
使用するトリガはストラクチャエディタのインスペクタで選択する。
メソッドはエクスプローラのメソッドページでテーブルを選択して作成する。
削除するときはエクスプローラのメソッドページでテーブルを選択して削除する。
リレートフィールドなどのユニークな ID は、詳細フォームの On Load イベントで定義す
るのが一般的だが、データの読み込み、
「サブレコード追加」
「リストに新規レコード追加」
標準アクションなど、On Load ではないタイミングで追加されるレコードもあるため、そ
のようなフィールドは新規レコード保存時トリガでも定義するのが望ましい。
51
トリガ
サンプルデータベース/4D Server 入門/トリガ
既存レコード保存時トリガは、保存するべきではない更新、たとえばレコードを編集して
いる間に元のデータが変わってしまったような場合の更新を防止するために活用できる。
リストフォーム(通常のレコード更新)の代わりにリストボックス(配列でレコード更新)を
使用する場合、自動ロックシステムが作動しないレコードがアンロードされた状態での処
理となるため、他のプロセスにレコードを更新される可能性がある。既存レコードを更新
するたびに値が増えるフィールドを用意しておけば、より新しいデータを誤って上書きし
なくて済む。
リレートテーブルには新規レコード保存時トリガで定義される倍長整数フィールド、頻繁
に更新されるテーブルには既存レコード保存時トリガで更新されるタイムスタンプ的なフ
ィールドを作成しておくとよい。
52
ここまでのまとめ
ストアドプロシージャ
メソッドをサーバの新規プロセスで実行すること。
ストアドプロシージャを開始する方法
Execute on server でコールする、On Server Startup などサーバのプロセスで起動する。
ストアドプロシージャの目的
一般にデータファイルの大量更新、通信、監視に使用される。
クライアント登録
メソッドをクライアントのプロセスで実行できるようにすること。
サーバで実行されるデータベースメソッド
On Server Startup、On Server Shutdown
On Server Open Connection、On Server Close Connection
On Backup Startup、On Backup Shutdown
クライアントで実行されるデータベースメソッド
On Startup、On Exit
トリガ
テーブルに対して定義されたメソッドで、不正なデータ処理を防ぐ役割がある。
トリガメソッドはサーバのプロセスで実行される。
新規レコード保存時、既存レコード保存時、レコード削除時、レコード読込時がある。
次章の内容
クエリ、プロセスなど、4D 独自のユニークなメカニズムの話。
他のデータベースあるいは開発環境に慣れているデベロッパ向けの内容。
53
補足資料 クエリ
サンプルデータベース/補足資料/クエリ
[受注]は [顧客]の n テーブルなので、自動 n 対 1 リレートが動作していれば、QUERY([受
注];[顧客]=...)というクエリが実行できる。
54
補足資料 クエリ
サンプルデータベース/補足資料/クエリ
QUERY BY FORMULA は結果がブール式を条件としてクエリを実行するコマンド。クラ
イアント/サーバ用に最適化されているコマンドではないので、時間がかかる。
55
補足資料 クエリ
サンプルデータベース/補足資料/クエリ
QUERY を実行する。命名セレクションが作成されるので、必要であればセレクションを
再現し、QUERY SELECTION で絞り込みクエリを実行することができる。
56
補足資料 クエリ
サンプルデータベース/補足資料/クエリ
QUERY を実行する。set1 と set2 が作成されるので集合演算を実行することができる。
または=UNION 以外=DIFFERENCE かつ=INTERSECTION
ユーザクリックで選択したセット(UserSet)はプロセスセット(サーバ側に存在)なので、集
合演算にはやはりプロセスセットが必要である。
セット
命名セレクション
並び順は含まない
並び順を含む
1 レコードにつき 1 ビット
1 レコードにつき 4 バイト
ディスクに保存できる
ディスクに保存できない
集合演算ができる
集合演算はできない
57
補足資料 ランタイムエクスプローラ
4D Server のランタイムエクスプローラ
プロセスメニューから選択して表示する。(Designer/Administrator権限)
4D Client のランタイムエクスプローラ
ユーザモードまたはデザインモードの実行メニューから選択して表示する。
またはショートカットCtrl+Shift+F9
4D Client側のランタイムエクスプローラに自身が作成したグローバルセマフォが表示さ
れることはない。(セマフォは作成者の観点からは常にFalseであるため)
58
補足資料 ランタイムエクスプローラ
選択されたプロセス
監視したいプロセスを選択するポップアップドロップダウンメニュー。
プロセスごとに式の値を調べることができ、式を追加することもできる。
更新時間
コンテキストメニューで動作状況モニタリングを有効にすると、表示される情報の種類が
増え、かつ一定間隔で情報が更新されるようになる。
式と値
デバッガのウォッチペインと同一のもの。新規式も追加できる。
59
補足資料 ランタイムエクスプローラ
ブレーク
メソッドエディタでは、メソッドの特定行、あるいは特定の条件でデバッガが起動するよ
うにブレークポイントを設定することができる。
ブレークポイントを Alt(Windows)/option(Macintosh)+クリックするとブレークポイント
プロパティが表示されるが、プロパティのひとつであるブレークの条件はランタイムエク
スプローラで入力することもできる。
ランタイムエクスプローラのブレークタブは、データベース内のすべてのブレークポイン
トをまとめて削除できる点も便利。
4D Server プロセスのデバッグ
サーバプロセスは、ブレークポイントではなくTRACEコマンドで確実にトレースする。
トレースしたときは、サーバの画面にデバッガが表示される。
プログラムカウンタの移動、式の入力、プロセスアボートはできるが、デザインモードが
サーバにはないため、メソッドを編集することはできない。
60
補足資料 ランタイムエクスプローラ
キャッチ
実行する直前にデバッガが起動するように特定のステートメントを予約できる。
On Statup に QUIT 4D が記述されたデータベースは通常の方法ではデバッグできないが、
4D Server で起動し、ランタイムエクスプローラで QUIT 4D をキャッチするように設定
すればトレースできる。
61
補足資料 デバッグログ
サンプルデータベース/補足資料/デバッグ
データベースエンジンの動作を記録したもの。
すべての動作が記録され、パフォーマンスが大幅するので運用時には使用しない。
ファイル名は固定で、起動するたびに新しく作成される。
62
補足資料 サーバログ
サンプルデータベース/補足資料/デバッグ
クライアントとサーバの間で交わされた通信の内容、入出力データ量が確認できる。
ファイル名には管理番号がつけられ、前回作成されたものは上書きされない。
リクスエト ID に関してはテクニカルノート 06-03、06-04 付録 Appendix 1 を参照。
63
補足資料 デバッグログ
サンプルデータベース/補足資料/デバッグ
On Server Open Connection、On Server Close Connection で使用される接続 ID(CID)、
ユーザ ID(UID)を記録したもの。
プロセス名、プロセス番号、IP アドレス(4D Internet Commands 使用)も記録されている。
64
環境設定
公開する
サーバを公開すると、4D Client 接続ダイアログの TCP/IP タブに名前が表示される。公開
しないと、TCP/IP タブには名前が出ないが、カスタムタブに名前と IP アドレスを入力す
れば接続できる。
クライアント-サーバ/公開/公開-拒否設定表
接続できる 4D Client の IP アドレスを特定するための設定表。ワイルドカードには*を使
用する。相反するエントリーがある場合、上位に表示されたものが優先される(並び替え可)。
最後にワイルドカードで補完すれば、許可と拒否のどちらを主体にしても構わない。
クライアント-サーバ接続の暗 号化
セキュリティを高めるため、4D Client と 4D Server の通信を SSL(Secured Socked Layer)
プロトコルで行なうことができる。安全性は向上するが、通信速度は低下する。
4DSLI.DLL(Mac 版は 4DSLI.bundle)はデフォルトで 4d Extensions の中に入っている。
65
公開-拒否設定表
次の条件を満たすように公開-拒否設定表を作成する。
クライアント A (例:192.168.10.201)と 219.118 から始まるアドレスを拒否
正解例:
次の条件を満たすように公開-拒否設定表を作成する。
クライアント A (例:192.168.10.201)だけを許可
正解例:
サーバの環境設定でポート番号を 19814 に変更する。
サーバの環境設定でデータベースを非公開にする。
サーバを再起動する。
クライアントの接続ダイアログで TCP/IP タブを確認する。(表示されない)
最近使用したデータベースタブで接続を試みる。(接続できない)
最近使用したデータベースタブでデータベースを選択する。
カスタムタブでコロン記号とポート番号を追加して接続する。
クライアント-サーバ接続の暗号化を有効にしてからサーバを再起動する。
最近使用したデータベースタブで接続を試みる。(接続できない)
カスタムタブでサーバ名に^記号をつけて接続する。
公開-拒否設定表の一番下のエントリーはすべてを拒否またはすべてを許可にする。
「公開する」
「公開ポート」設定は再起動後に有効になる。
非公開のサーバであっても、アドレス・公開名・ポート番号を入力すれば接続できる。
66
環境設定
公開名/ポート番号
公開名は 4D Client 接続ダイアログに表示される。デフォルトでストラクチャ名。ポート
番号はデフォルトで 19813 番(16 進数で 0x4D65)。複数の 4D Server を同じマシンで起動
する場合は別々のポート番号を割り当てる。
クライアント-サーバ接続タイ ムアウト
一定時間 4D Client からのリクエストがない場合、そのクライアントとの接続を閉じる。
クライアント-サーバ通信
4D Client との接続が突然、失われた場合に、1 度だけ自動的に再接続を試みるように設定
できる。この設定を利用するには、タイムアウトを 1 分以上に設定することが必要。自動
再接続に成功すると Windows タスクバーにアイコンが表示され、警告ダイアログボック
スが表示される。
67
環境設定
!
4D Open
4D Open とは、4D Client 以外のアプリケーションで 4D Server に接続するための API
(Application Programming Interface)のことである。たとえば 4D Server で 4D Server
に接続したり 4th Dimension で 4D Server に接続したりすることができる。
4D Open による接続は 4D Client の接続数を消費する。
4D Open の接続を許可するオプションは、4D Server の環境設定では無効にすることがで
きない。同じストラクチャを 4th Dimension で開くか、4D Client で操作すれば、設定を
変更することができる。
下記の 4D 製品も 4D Open の接続オプションの影響を受ける。
4D ODBC Driver for 4D Server
4D Open for JAVA
4D JDBC
68
環境設定
4D Server と 4D Runtime でキャッシュを物理メモリに置く
Macintosh では必要に応じてキャッシュがディスク上のバーチャルメモリに転送されるが、
4D Server と 4D Runtime でキャッシュを物理メモリに置くオプションにより、キャッシ
ュを強制的にメモリに常駐させてパフォーマンスを向上させることができる。
データをディスクに保存
キャッシュマネージャ(カーネルプロセスのひとつ)が一定期間に発生したデータ更新をま
とめてディスクに書き込む動作(フラッシュ)の周期を設定する。短すぎると頻度が増し、長
すぎると一回の処理に時間がかかる。
フラッシュウィンドウ表示
前述の動作を画像で通知するための設定。無効にすれば幾らかパフォーマンスが向上する。
WEDD
データファイルとストラクチャファイルに共通の符号を書き込んで、その組み合わせでし
かデータベースを使用できないように固定するオプション。
69
セグメント
セグメント
ファイルの最大サイズは 2GB だが、ファイルを分割(セグメント化)して管理することによ
り、それよりも大きなデータサイズを扱うことができる。記録ディスクの物理的な容量に
限界がある場合も、セグメントを利用すれば、データファイルを分散して保存することが
できる。セグメントの最大サイズは 2GB、セグメントの最大数は 64。
セグメントの追加
セグメントはデータファイルの作成時に任意の数が作成できる。
サーバのデータメニューでセグメントを追加することもできる。
環境設定で必要に応じて新しいデータセグメントを作成することもできる。
セグメントの整理
セグメントの再定義(整理)には 4D Tools を使用する。
セグメントの削除
データメニューのセグメントで新しいセグメントを作成した直後、ダイアログを閉じる前
ならば削除できる。ダイアログを閉じてしまったら、4D Tools による再構築が必要。
70
実習 5
セグメントの追加
データメニューからセグメントを選択し、追加ボタンでセグメントを追加する。
別のボリューム/フォルダなど、場所をフルパスで指定してセグメントを追加する。
OKボタンをクリックして確定し、4D Serverを終了する。
追加したセグメントファイル(.4DS)を移動し、4D Serverを起動する。
最初のセグメント(.4DD)
最初のセグメントファイルには、残りのセグメントの場所が記録されている。
セグメントをコピーした場合、元のパスにファイルを残していると、セグメントは隣にあ
るコピーではなく、記憶していた昔の第二セグメント以降を開いてしまう。
新しい第二セグメントを認識させるため、昔の場所からファイルを除かなければならない。
最大セグメントサイズは 2GB だが、最初のセグメントだけは残りのセグメントの場所など
の情報が書き込まれるため、1950MB 程度が実質的な最大サイズになる。
71
環境設定
必要に応じて新しいデータセグメントを作成する
4D Server/4D Client では、プログラムでセグメントを追加することができない。
代わりにこのオプションで自動的にセグメントを追加できるようになっている。
動的キャッシュの計算
利用できるリソースに基づいてキャッシュのサイズを減算法で自動決定するオプション。
予約する物理メモリ
OS や他のアプリケーションのために残しておく物理メモリ。
4D として手をつけないメモリ領域。
キャッシュに使用する率 キャッシュに利用できるメモリ(物理メモリ-予約するメモリ)の
中でキャッシュに使用する割合。
最大サイズ
希望するキャッシュのサイズ。物理的に無理な数字であれば、
可能な限り大きなサイズが使用される。
最小サイズ
72
これを満たすことができなければデータベースを起動しない。
キャッシュ
キャッシュされるデータ
キャッシュには 4D のデータベースエンジンが使用するアドレスアロケーションテーブル
が構築される。アドレスアロケーションテーブルには、重要度の高い順にビットテーブル、
インデックスアドレステーブル、レコードアドレステーブルの 3 種類がある。
キャッシュに余裕があれば、次にキャッシュされるのがインデックステーブルである。
それでもキャッシュに余裕があれば、レコードがキャッシュされる。
カレントセレクション、トランザクションなどの一時データもキャッシュされている。
レコード
インデックスページ
セレクション
トランザクション
レコードアドレステーブル
インデックスアドレステーブル
ビットテーブル
データファイルオブジェクト
レコードマーカ
一時的なオブジェクト
キャッシュのアンロード
キャッシュが不足すると、優先度の低いもの、つまりレコード、インデックスの順にキャ
ッシュオブジェクトがアンロードされ、同等もしくは優先度のより高いオブジェクトがロ
ードされる。典型的なキャッシュ不足では、レコードのロード/アンロードが頻繁に起きる。
キャッシュのフラッシュ
メモリの空き状況に関係なく、キャッシュされていたデータはいずれフラッシュ(ハードデ
ィスクに書き込み)されなくてはならない。フラッシュは手動、自動(一定時間ごと)あるい
は FLUSH BUFFERS コマンドで実行する。
キャッシュされているデータは、再利用されることに意義があるので、そのような定義に
はあてはまらないデータで一杯のキャッシュはフラッシュするべきである。
キャッシュサイズ
4D Server のプロセスウインドウにはデータベースキャッシュサイズが表示されている。
73
スタック
カーネルメモリ
4D Server、4D Client がローカル以外の変数、実行中メソッド、カレントレコードなどを
読み込むために使用するメモリがカーネルメモリである。
スタック
4D Server、4D Client がローカル変数、ローカル以外の変数へのポインタなどを読み込む
ために使用するメモリがスタックである。
スタックが小さすぎる場合、長いメソッド連鎖が実行できない、プラグインコールやシス
テムコールが実行できない、コンパイルモードで実行できない、などの問題が発生する。
スタックが大きすぎる場合、キャッシュや他のアプリケーションが犠牲になる。
OS が犠牲になれば、結局、4D のパフォーマンスも低下する。
スタックスペースの確認方法
ランタイムエクスプローラ、または 4D Pack のコマンド AP AVAILABLE MEMORY。
スタックスペース-キャッシュ-カーネルメモリの関係
キャッシュサイズはユーザが設定できる。(動的キャッシュの計算)
カーネルメモリ、スタックスペースをユーザが設定することはできない。
マシンに存在する物理メモリの総量
キャッシュ
カーネル
断片化していないメモリブロックを起動時に要求
4D が使用するメモリの総量
管理
74
スタック
自動管理
動的キャッシュサイズの計算
絶対値でキャッシュサイズを設定
環境設定/データベース/データ管理ページで動的キャッシュの計算オプションを無効にし、
キャッシュサイズをメモリ全部に設定して再起動する。
相対値でキャッシュサイズを設定
環境設定/データベース/データ管理ページで動的キャッシュの計算オプションを有効にし、
キャッシュサイズを次の条件に基づいて設定して再起動する。
条件:4D Serverはそのマシンでひとつだけ実行する。(キャッシュに使用する率100%)
OSおよび他のアプリケーション用に192MBを残しておく。(予約する物理メモリ)
事情が許せば640MBをキャッシュに使用する。(最大サイズ)
キャッシュ使用率
クライアントで接続し、レコードにアクセスする。
サーバのキャッシュヒット率バーをクリックする。
キャッシュの優先度
レコードを読み込むと、レコード/レコードアドレステーブル/インデックスアドレステー
ブルがキャッシュされる。レコードを追加/更新/削除すると、インデックスページ/ビット
テーブルがキャッシュされる。レコード以外のヒット率は、100%に近づくほうが良い。
レコードの理想的なヒット率は、データの性質によるため、一概にはいえない。
75
環境設定
サンプルデータベース/4D Server 入門/環境設定
環境設定でもアクセスできるが、低、中、高の 3 段階のみ。
高に設定した場合、フォームの描画などは明らかに高速化する。
最終的な最適値は、他のアプリケーションや OS との関係で決まる。
76
環境設定
サンプルデータベース/4D Server 入門/環境設定
パフォーマンスに影響を与える項目で、環境設定ダイアログではアクセスできないもの。
77
バックアップ
バックアップ
バックアップファイルは、デーファイル、ストラクチャファイルなどの根幹部分をはじめ、
データベースの実行の必要なすべてのファイルを圧縮し、まとめたものである。
バックアップの復元
圧縮ファイルであるバックアップを展開し、本来のファイルに戻すのが復元である。
ログファイル
ログファイルは、バックアップを実行した直後の何もデータが更新されていないタイミン
グで記録を開始し、次のバックアップが実行されるときまで、データファイルに対するア
クセスの内容(追加、更新、削除、トランザクション)を記録したものである。
ログファイルの統合
バックアップから展開されたデータベースに対し、ログファイルに記録されているアクシ
ョンを登録していくことで、当時の状態を再現するのが統合である。
バックアップとログファイルのファイル名
ログファイルを使用することに決定した場合、カレントログファイル(.4DL)が作成される。
最初のバックアップを実行すると、バックアップ#1 ([0001].4BK) が作成される。
カレントログファイルは閉じられ、ログバックアップファイル#0 ([0000].4BL)となる。
また新しいカレントログファイル(データベース名.4DL)が作成される。
空のデータファイル.4DD
ログバックアップ[0000].4BL
バックアップ[0001].4BK
ログバックアップ[0001].4BL
統合
バックアップ[0001].4BK
カレントログ.4DL
78
統合
バックアップ
サンプルデータベース/4D Server 入門/バックアップ
バックアップを実行する方法は 3 種類、それに加え、半強制的に実行される場合がある。
バックアップメニューの選択によるバックアップ。ダイアログを確定すると開始する。
BACKUP コマンドによるバックアップ。すぐに開始する。
スケジュールによる自動バックアップ。環境設定の再試行オプションが適用される。
ログファイル作成に伴う事前バックアップ。実行しなければ起動できない。
どうしても実行したくない場合、新規データファイルでデータベースを作成し、
ログファイルの使用を中止してから本来のデータファイルを選択する。
79
バックアップ
バックアップ内容
Extras、Plugins などのフォルダをバックアップの対象に含めることができる。
ユーザストラクチャファイル(.4DA)には、ユーザフォームが保存されている。
バックアップファイル保存先
デフォルトの保存先は、データファイルと同じ階層。通常は、データベースフォルダとは
別のハードディスクボリュームを選択する。
最後のバックアップ情報
Backup Journal.txt の内容、および最後のバックアップ。
サーバのプロセスウィンドウにも表示される。
ログ管理
カレントログファイルの場所。
ログファイルを使用しない場合、最後のバックアップよりも新しいデータを回復する方法
はないことになる。
80
バックアップ
一般設定
トランザクションおよびインデックス処理(クリティカルオペレーション)の最中は、バック
アップが実行できない。このオプションを使用すれば、バックアップを保留することがで
きる。指定時間経過後に再実行オプションは 0 分に設定するとタイムアウトしなくなる。
操作をキャンセル(2004.3 以降)で指定した回数の自動バックアップが失敗した場合、次に
手動でバックアップをするまで自動バックアップは実行されない。
アーカイブ
バックアップファイルを一定のセグメントサイズに分割することができる。700MB に設定
すれば、バックアップを CD-ROM に保存する際に便利。
圧縮率は、なしの場合、バックアップの速度が向上し、バックアップファイルサイズが大
きくなる。速度優先の場合、圧縮率・サイズとも標準的な結果になる。圧縮率優先の場合、
バックアップ速度が低下し、ファイルサイズが小さくなる。
インターレース率は、高いほどデータが分散されてセキュリティが向上し、メモリを多く
使用する。冗長率は、高いほど重複するデータを保存するのでセキュリティが向上し、サ
イズおよび時間を多く消費する。
81
自動バックアップ環境設定
データベースが壊れていたら最新バックアップから復元する
ディスクアクセス中に停電などが発生し、ファイルが使用できなくなると、データベース
が壊れる可能性がある。このオプションを有効にすると、次回の起動でバックアップファ
イルを展開してデータベースを復元する。
データベースが完全でない場合、最新のログを統合する
データアクセスはメモリにキャッシュされ、一定のタイミングでデータファイルが更新さ
れるが、予期しない理由でアプリケーションが終了したり、ハードドライブが使用できな
くなったりすると、データベースが完全ではなくなる。このオプションを有効にすると、
次回の起動でカレントログファイルに基づいてデータファイルを更新する。
自動復元の後、データベースを開始する
上記のオプションを使用し、さらに 4D Server をサービスとして登録することによって、
障害からの回復を自動化することができる。
82
バックアップ関連ファイル
バックアップファイル/.4BK
データファイル、ストラクチャファイル、ユーザストラクチャファイル、環境設定で指定
したフォルダの中身をバックアップした結果の圧縮ファイル。
ログファイル/.4DL
最後のバックアップから現在までのデータアクセス処理を記録したファイル。カレントロ
グファイルとも呼ばれる。バックアップを実行すると閉じられ、新たに作成される。
ログバックアップファイル/.4BL
過去のログファイル、つまりあるバックアップから次のバックアップまでのデータアクセ
ス処理を記録したファイル。
Backup Journal.txt
バックアップファイル、カレントログファイルの場所、バックアップファイルの中身、フ
ァイルサイズ、バックアップ実行時間を記録したファイル。
Backup.xml
環境設定のバックアップ項目で決められた設定を保存したファイル。デフォルトでは
Preferences フォルダの中にある Backup フォルダの中に作成される。
83
バックアップ
サンプルデータベース/4D Server 入門/バックアップ
バックアップジャーナル(Backup Journal.txt)は、データベースフォルダの中にあり、
バックアップの実績を記録したファイル。
作成されたファイル名、開始時刻、完了時刻などが記録されている。
最後のバックアップは、ジャーナルではなく、ストラクチャに記録されている。
84
バックアップ
サンプルデータベース/4D Server 入門/バックアップ
バックアップ設定ファイル(Backup.xml)は Preferences フォルダ(サーバ側)にあり、実行
スケジュール、タイムアウト、ファイルパスなど、すべてのバックアップ環境設定が保存
されているファイル。
クライアントの環境設定ではバックアップの項目を変更できないが、
このファイルをストアドプロシージャで更新すれば、事実上、設定を変更できる。
85
バックアップ
サンプルデータベース/4D Server 入門/バックアップ
トランザクション、インデックスの作成はクリティカル操作と呼ばれ、バックアップの開
始を妨害する。自動および手動のバックアップは、クリティカル操作が終了するまで待機、
それでも終わらない場合はバックアップの実行をあきらめる。
デフォルトでこの待機時間は 3 分に設定されており、その間はストラクチャファイルやデ
ータファイルの更新ができない。(操作が保留になる)
クリティカル操作の待機時間は、数秒間に設定しておくのが現実的である。
トランザクションタイムアウトを 1 分に変更、トランザクションを開始、バックアップ。
(ユーザ/カスタムメニュープロセスが 1 分間保留になる)
トランザクションタイムアウトを 3 秒に変更、トランザクションを開始、バックアップ。
(3 秒後にはバックアップがキャンセルになる)
86
バックアップ
サンプルデータベース/4D Server 入門/バックアップ
バックアップは、どのような方法で開始したとしても、関連するデータベースイベントが
起動する。インストールされていれば、エラー処理メソッドがエラー発生時に実行される。
処理を全自動化するためにも、エラー処理を作成することが望ましい。
スタートアップでバックアップをキャンセル→自作のエラーコードを$1 に代入する。
標準のエラーが発生→エラー処理メソッドで ERROR システム変数を保存する。
最終的に On Backup Shutdown で OK、ERROR、$1 を調べて結果に対処する。
87
ログファイル
サンプルデータベース/4D Server 入門/ログ
ログファイルを作成していれば、最新のバックアップを復元した後、最後のログファイル
が更新された瞬間、(通常は事故発生の数分前)まで状態を再現することができる。
ログファイルを作成できるのは、バックアップを実行した直後のみ。
ログファイルはサーバの環境設定、または SELECT LOG FILE コマンドで作成する。
(コマンドはサーバのプロセスで実行する必要がある)
カレントログファイルの名前は Log file 関数で取得できる。
(フルパスを取得するにはサーバのプロセスで実行する必要がある)
88
ログファイル
サンプルデータベース/4D Server 入門/ログ
ログファイルがある
起動時にデータファイルとログファイルを比較し、未統合のログが検出されたとき。
データベースが完全でない場合、最新のログを統合するオプションが有効であれば、
自動的にログファイルが統合される。
オプションが無効であれば、手動で統合する機会が与えられる。
統合しない場合、バックアップを実行して新規ログファイルを作成しなければならない。
バックアップを実行しない場合、データベースは起動できない。
ログファイルがない
ファイルが移動された場合など、予期した場所にログファイルがみつからないとき。
ログファイルの場所を指定する機会が与えられる。
指定しない場合、バックアップを実行して新規ログファイルを作成しなければならない。
バックアップを実行しない場合、データベースは起動できない。
89
ロールバック
ロールバックはサーバの画面で実行する。
実行できるのはDesignerまたはAdministrator。
ログファイルには、最後のバックアップ以降に実行された追加、更新、削除、そして
トランザクションが記録されている。
ロールバックの効果は時間を遡ってデータベースを元の状態に戻すことだが、実際に
はバックアップに戻り、指定した箇所までログを統合することによって実現している。
90
4D Tools による修復
4D Tools にできること
データファイルの断片化解消、ストラクチャの検査および修復、ストラクチャの圧縮。
データ構造を修復するのであり、データそのものを検査、修復するのではない。
インデックスおよびレコード
4D Tools には、データファイルのレコードおよびインデックスを検査、修復するためのオ
プションがある。
アドレステーブル
4D Tools には、各レコードのヘッダに書き込まれているタグを使用して、アドレステーブ
ルの復元を試みるオプション(タグによる修復)がある。(最後の手段)
91
トラブルシューティング
ファイアウォール(Windows)
Windows ファイアウォールで通信がブロックされている場合、4D Server や 4D Client
を使用することはできない。ファイアウォールの例外アプリケーションは、コントロール
パネル/Windows ファイアウォールの例外タブで設定する。
データ実行防止(Windows)
データ実行防止(Data Execution Prevension=DEP)が動作している場合、4D Server や 4D
Client を使用することはできない。データ実行防止の例外アプリケーションは、マイコン
ピュータ/プロパティの詳細設定タブにあるパフォーマンス-設定タブで追加する。
ローカルリソース
クライアントマシンのローカルリソースが破損している場合、4D Client は起動できない。
そのような場合、ログインダイアログでローカルリソースを強制的に更新する。
4D Client 接続ダイアログ
4D Server ようこそ画面
インデックス
インデックス情報は、データファイルの中に含まれている。
インデックスが破損している場合、次の手順でインデックスを再構築することができる。
ストラクチャファイルのコピーを作成する。
コピーしたストラクチャファイルとオリジナルのデータファイルを開く。
すべてのリレートを取り除く。
すべてのインデックス属性を解除する。(インデックスが破棄される)
データベースを終了する。
オリジナルのストラクチャファイルとオリジナルのデータファイルを開く。
92
サービスとして登録する
管理者権限が必要(Windows)。4D フォルダは All Users または起動ボリューム:Library。
4D Server のファイルメニューで現在のデータベースをサービスとして登録する。
サービスとして登録されるメカニズムは Windows と Macintosh で異なる。
Windows
コントロールパネル/管理ツール/サービスを確認する。
Macintosh
Library:StartupItems:にスクリプトが作成される。
#!/bin/sh
. /etc/rc.common
StartService()
{
ConsoleMessage "Starting 4D Server"
cd "/Applications/4D Server/4D Server 2004.3.app/Contents/MacOS"
"./4D Server" "/Users/admin/Desktop/受注管理.4DB" -d "/Users/admin/Desktop/受注管理.4DD" -s &
}
...
サーバを再起動する。
4D Server のファイルメニューで現在のデータベースの登録を解除する。
サービスは 4D Server で登録し、4D Server で解除する。
93
クライアント自動アップグレード
サンプルデータベース/補足資料/クライアント自動アップグレード
4D 標準のビルド画面でクライアント/サーバアプリケーションがビルドできる。
クライアントアプリケーションの自動更新を許可するオプションを有効にすれば、
Windows/Macintosh 版の 4D Client アプリケーションを接続時に自動更新できる。
標準のダイアログにはないオプションを設定するためにはプロジェクトファイルが必要。
ハードリンク
公開 IP アドレスおよびポート番号
データファイルのパス名
著作権情報
アイコンファイルのパス
94
インデックス
B-Tree
各ノード(分岐点)でふたつに分かれ、末端まで到達するツリー構造。
ルート
ノード
ノード
インデックスページ#1
インデックスページ#2
ノード
インデックスページ#3
インデックスページ#4
ノード
ノード
インデックスページ#5
インデックスページ#6
インデックスページ#7
インデックスの管理
レコードはアスキーコード順、同一値のレコードはレコード番号順に並び替えられ、一定
サイズのインデックスページに整理されている。辞書の見出しに相当する各インデックス
ページの最初レコードおよび最後レコードに関する情報が絞り込みを速める鍵となる。
インデックスページサイズ
ページサイズが大きいほど少ない回数でレコードを絞り込むことができる。(クエリ向き)
ページサイズが小さいほどメモリ占有量が少なく、毎回のインデックス更新も速い。
SET INDEX(Field;False;100)で最大サイズ、SET INDEX(Field;False;0)で最小サイズ。
インデックスページのサイズはレコードの追加・削除が繰り返されるうちに不均衡になる。
高速モードと従来モード
高速モードは SET INDEX コマンドおよび 1000 件以上のレコードが登録されたフィール
ドのインデックスを再構築する際に選択できるモード。作成されるインデックスは従来モ
ードと変わらない。また、日常のインデックス管理は常に従来モードで実行される。
インデックスのキャッシュ
インデックスページには実際のフィールド値が含まれるので、キャッシュされていればデ
ィスクアクセスが必要ない。DATABASE PARAMETER #4 は、キャッシュサイズの限界
に近づいたとき、インデックスページをアンロードする代わりに圧縮してスペースを確保
するオプション。再ロードするよりも圧縮したものを展開したほうが速いとされている。
95
セレクションの転送
セレクションの転送
セレクション、つまりレコード番号の配列を転送する場合、並び順は保証される。
1 レコード毎に 4 バイトを消費するので、大きなセレクションだと負担が大きい。
LONGINT ARRAY FROM SELECTION
CREATE SELECTION FROM ARRAY
※コンパイルモードにおいてテーブルをポインタで渡す場合、ダミーの第三引数が必要。
セットの転送
セット、つまりブールの配列を転送する場合、並び順は保証されない。
しかし 1 レコード毎に 1 ビットしか消費しないため、転送効率が良い。
BOOLEAN ARRAY FROM SET
CREATE SET FROM ARRAY / CREATE SELECTION FROM ARRAY
関係するフィールドの値だけを転送
通常、セレクションは、BLOB・ピクチャを含め、すべてのフィールドの値がサーバから
クライアントに転送される。したがってセレクションを作成する操作(クエリ、並び替え、
USE SET など)はストアドプロシージャで実行しないと非常に時間がかかる。これに対し、
次のコマンドは、関係するフィールドの値だけが転送されるため、クライアント/サーバで
も処理時間が短いという特徴がある。(「最適化されているコマンド」)
SELECTION TO ARRAY
ARRAY TO SELECTION
リストフォームに表示されているセレクションの転送
通常、セレクションは、BLOB・ピクチャを含め、すべてのフィールドの値がサーバから
クライアントに転送される。ただし、リストフォームが表示されているとき、セレクショ
ン全体ではなく、表示に必要なレコードのデータだけが転送されるようになっている。
96
リレート
リレート
4th Dimension では次の6種類のリレートが制御できる。
RELATE ONE (manyField;choiceField)
RELATE ONE (manyTable)
RELATE ONE SELECTION(manyTable;oneTable)
RELATE MANY (oneField)
RELATE MANY (oneTable)
RELATE MANY SELECTION(manyField)
自動 1 対 1 リレート
リストフォームの On Display Detail、詳細フォーム、クエリ、クイックレポート、および
SELECTION (RANGE) TO ARRAY で自動リレートが実行される。
自動 1 対 n リレート
詳細フォームに組み込まれたサブフォーム、および単一選択サブフォームとともに表示さ
れたサブフォームで自動リレートが実行される。
97
削除制御
環境設定
削除制御はデフォルトの設定でオフになっている。
インスペクタ
削除制御はリレートプロパティでリレート毎に設定する。
トリガ
削除制御を使用しない場合、トリガを使用して自分で制御する。
98
Fly UP