Distributed Tuning Objects の概要
Pervasive PSQL 管理 API への COM インターフェイス
この章では、Pervasive Distributed Tuning Objects を構成する機能について説明します。
DTO とは
Distributed Tuning Objects(以降、このマニュアルでは DTO と表記します)は、Pervasive Distributed Tuning Interface(以降、このマニュアルでは DTI と表記します)の COM ラッパーです。DTO は DTI をカプセル化するオブジェクトのコレクションです。また、DTO にはデータベース エンジンの起動および停止など DTI よりも優れた機能がいくつかあります。
DTO を使用すれば、開発者はカスタマイズされたサーバー管理ツールやインターフェイスを多岐にわたり迅速かつ簡単に開発することができます。DTO の強力な機能や柔軟性は、データベースの作成やパフォーマンスのチューニングおよびメタデータの管理など、データベース管理やデータベース定義のタスク全般に幅広く利用することができます。
DTO はデュアル インターフェイスとして処理中のサーバーに実装されます。開発者は、OLE オートメーション コントローラーを使用することも、あるいは以下に挙げる多くのプログラム言語などを使用して COM クライアントを作成することもできます。
•Microsoft Visual Basic
•Microsoft Active Server Pages(ASP)
•Microsoft Visual C++
•Embarcadero Delphi
•Embarcadero C++ Builder
DTO オブジェクト モデルとオブジェクトの関係
このマニュアルでは、DTO クラスを以下の機能のカテゴリ別に分類しています。
接続
Pervasive PSQL エンジンの動作を構成および監視できるようにするには、ユーザーは最初にそのエンジンに接続する必要があります。このカテゴリでは、Pervasive PSQL データベース エンジンへの接続および接続の切断に必要な機能を提供します。
DtoSession オブジェクトがデータベース エンジンへの接続を管理します。
監視と診断
このカテゴリでは、Pervasive PSQL エンジンとクライアントを監視する機能および診断情報を提供します。
DtoMonitor オブジェクトとその従属オブジェクトによって、サーバーの監視機能および診断情報を提供します。また、DtoEngineInformation オブジェクトを使って DtoSession からエンジン情報を直接取得することもできます。
構成
このカテゴリでは、ユーザーが Pervasive PSQL エンジンやクライアントを構成することができます。DtoCategories コレクションとその従属オブジェクトによって、この機能を提供します。
また、DtoLicenseMgr オブジェクトを使用すれば製品ライセンスの追加と削除も行えます。
カタログと辞書
このカテゴリでは、グループ化された機能によって、ユーザーはデータベース、データ辞書を新規作成することができます。また、テーブル、列およびインデックスの定義や削除も行えます。
DtoDictionary クラスとその従属オブジェクトによって、カタログ機能を提供します。
DTO オブジェクト ツリー
多くの DTO オブジェクトがその他の DTO オブジェクトのプロパティとして公開されています。この関係によって、開発者はオートメーション コントローラーを使用するプログラミングを簡略化する論理的なツリー形式の構造を使用することができます。多くのオブジェクトは、プロパティやメソッドにアクセスする場合に使うドット表記を使用して参照することができます。
DTO オブジェクト ツリーには 3 つの主要なブランチがあり、設定、監視、およびカタログ用のオブジェクトが論理的にグループ化されています。
DTO バージョン
次の表は、2 つの異なるバージョンの DTO の使用に関する情報を示しています。
項目 | DTO2 | DTO1 |
| x86 | x64 | x86 |
DLL 名 | DTO2.DLL | w64DTO2.DLL | DTO.DLL |
ライブラリ | DTOLib2 | DTOLib |
DtoSession のプログラム ID | DTO.DtoSession.2 | DTO.DtoSession.1 |
DtoDatabase のプログラム ID | DTO.DtoDatabase.2 | DTO.DtoDatabase.1 |
DtoDictionary のプログラム ID | DTO.DtoDictionary.2 | DTO.DtoDictionary.1 |
DTO2
Pervasive PSQL V8 SDK では新しい DLL がリリースされました。この DLL には新しいオブジェクトや既存のオブジェクトへの新しいプロパティが追加されています。下位バージョンとの互換性を保つために新しい DLL が追加されます。以前の DTO.DLL に 新しい DLL が追加されるわけではありません。両方の DLL がインストールされ Pervasive PSQL SDK で登録されるので、どちらの DLL を使用しても DTO アプリケーションを開発できます。新しい DLL を使用するためにアプリケーションを再コンパイルできない場合は、以前の DTO.DLL を使用する必要があります。ただし、以前の DTO.DLL を使用していると、新しいオブジェクトや既存のオブジェクトに追加された新しいプロパティを使用することができません。DTO2.DLL は、.NET Framework を含む 32 ビット開発環境をサポートします。
W64DTO2
Pervasive PSQL v11 SP1 SDK では、.NET Framework を含む 64 ビット開発のための 64 ビット サポートが追加されました。
64 ビット アプリケーションで DTO を利用するためには、作成した 64 ビット アプリケーションと一緒に 64 ビット サーバーまたはクライアントをインストールする必要があります。前の表で示されているとおり、64 ビット サーバーまたはクライアントをインストールすると、64 ビット バージョン(W64DTO2.DLL)がインストールされ、32 ビット サーバーまたはクライアントをインストールすると、32 ビット バージョン(DTO2.DLL または DTO.DLL)がインストールされます。
アプリケーションと DLL の相互作用に関する理解
アプリケーションと DLL がどのように相互作用するかをより良く理解するために、次のようなシナリオを検討します。
次の 3 つの DLL を持っていると仮定します。
•DTO.DLL
•DTO2.DLL
•W64DTO2.DLL
そして、次のようなアプリケーションの実行可能ファイルがあるとします。
•ANYCPU.EXE
•X86.EXE
•X64.EXE
以下の表は、アプリケーションの実行可能ファイルと DLL を一緒に、32 ビット マシンおよび 64 ビット マシン上で実行してみた場合の結果を示しています。
表 1 32 ビット マシンのプロセス
アプリケーション実行可能ファイル | 実行形態 | DTO.DLL | DTO2.DLL | W64DTO2.DLL |
ANYCPU.EXE | 32 ビット プロセス | 読み込み | 読み込み | BadImageFormat Exception |
X86.EXE | 32 ビット プロセス | 読み込み | 読み込み | BadImageFormat Exception |
X64.EXE | BadImageFormatException |
表 2 64 ビット マシンのプロセス
アプリケーション実行可能ファイル | 実行形態 | DTO.DLL | DTO2.DLL | W64DTO2.DLL |
ANYCPU.EXE | 64 ビット プロセス | BadImageFormat Exception | BadImageFormat Exception | 読み込み |
X86.EXE | 32 ビット プロセス | 読み込み | 読み込み | BadImageForma tException |
X64.EXE | 64 ビット プロセス | BadImageFormat Exception | BadImageFormat Exception | 読み込み |
DTO の使用を始める
このセクションでは、Visual Basic、Active Server Pages(ASP)および Delphi DTO を使用するためのセットアップ方法を説明します。
Visual Basic
DTO は デュアル インターフェイス COM オブジェクトのライブラリなので、Visual Basic ではこれらのオブジェクトを使って作業する 2 つの方法があります。Active Server Pages を使用している場合、2 番目の方法を使う必要があります。第一にお勧めする方法は、プロジェクトにタイプ ライブラリを追加する方法です。この方法を使用すれば、VB で型のチェックを行うことができ、オブジクトの作成や関数のパラメーターに対して便利なドロップダウン オプション(Intellisense 機能)を開発者に提供することができます。
もう 1 つの方法は、CreateObject 関数を使用する方法です。これは実行時にオブジェクトを作成するため、型のチェックと Intellisense 機能がありません。
プロジェクトへの DTO の追加
Visual Basic プロジェクトに Pervasive Distributed Tuning Library を追加するには、以下の手順に従います。
1 [プロジェクト]メニューの[参照設定]をクリックします。
2 参照可能なエントリをスクロールして、[
Pervasive Distributed Tuning Library 1.0]または[
Pervasive Distributed Tuning Library 2.0]チェック ボックスを選択します。これらの違いについては、
DTO2 を参照してください。
3 [OK]をクリックします。
これで VB では DTO に含まれるすべてのオブジェクトを認識することができます。すべてのオブジェクトが参照可能になります。使用可能なオブジェクトを表示するには、以下の手順に従います。
1 [表示]メニューの[オブジェクト ブラウザー]を選択します。この代替手順として、F2 キーを押すこともできます。
2 使用可能なライブラリのリストから、DTO バージョン 1 の場合は[
DTOLib]を、DTO バージョン 2 の場合は[
DTOLib2]を選択します。これらの違いについては、
DTO2 を参照してください。
CreateObject 関数の使用
ASP でオブジェクトのインスタンスを作成する場合は、この方法を使用する必要があります。CreateObject の構文は次のようになります。
Dim my_session as Object
'DTO バージョン 2 の場合
Set my_session = CreateObject("DTO.DtoSession.2")
'旧バージョンの DTO アプリケーションとの互換性を保つ場合は、
'DTO バージョン 1 を使用する
'previous DTO applications
Set my_session = CreateObject("DTO.DtoSession.1")
ほとんどの DTO オブジェクトは、後でセッション オブジェクトから取得することができます。
Active Server Pages
ASP で DTO を使用するために必要な初期化は特にありません。ただし、次の点に注意してください。
デフォルトで、ASP は呼び出し間の状態の情報を保存しません。Microsoft IIS の組み込みオブジェクトである Session オブジェクトを使用して、オブジェクト参照と変数の状態を保存する必要があります。
たとえば、DTO バージョン 2 の DtoSession オブジェクトを初期化するには以下のように記述します。
Set Session("my_session") = Server.CreateObject("DTO.DtoSession.2")
Delphi
Delphi で COM オブジェクトを使用するには、2 つの方法があります。Visual Basic と同様、第一にお勧めするセットアップ方法は Delphi プロジェクトにタイプ ライブラリをインポートする方法です。
もう 1 つの方法では、CreateOleObject 関数を使って直接 COM インターフェイスを呼び出すことができます。この関数は Automation オブジェクトの単一のインスタンスをインスタンス化します。
Delphi プロジェクトへの DTO タイプ ライブラリのインポート
タイプ ライブラリをインポートし、必要な Pascal 宣言を生成するには、以下の手順に従います。
1 [プロジェクト]メニューの[タイプ ライブラリの取り込み]を選択します。
2 [タイプライブラリの取り込み]ダイアログ ボックスでは、システムに登録されているタイプ ライブラリを表示します。[Pervasive Distributed Tuning Library 1.0]または[Pervasive Distributed Tuning Library 2.0]を選択します。
3 [ユニットディレクトリ名]フィールドに Pascal ユニットの場所を入力し、[ユニットの作成]をクリックします。DTOLib_TLB.pas ファイル(DTO バージョン 1 を使用時)または DTOLib2_TLB.pas ファイル(DTO バージョン 2 を使用時)が作成され、プロジェクトに取り込まれます。
4 次に、以下のコードを組み込んで、生成した Pascal ユニットをメイン ファイルに取り込みます。
uses DTOLib2_TLB; // Dto Version 2
uses DTOLib_TLB; // Dto Version 1
Pascal 宣言を使用する例
var
Result:DTOResult;
Session:DTOSession;
MySettings:DTOSettings;
MyCategories:DTOCategories;
MyCategory:DTOCategory;
i:integer;
begin
Session:=CoDTOSession.Create;
Result:=Session.Connect
('ServerName','UserName','Password');
MyCategories:=Session.Categories;
for i:=1 to MyCategories.Count do
MyCategory:=MyCategories.Item[i];
end;
COM 直接呼び出しを使用する例
var
Session, Categories, Category:Variant;
I:Integer;
begin
Session := CreateOleObject('DTO.DtoSession');
Session.Connect('ServerName','UserName','Password');
Categories := Session.Categories;
for I := 1 to Categories.Count do
Category := Categories.Item[I];
end;
DTO オブジェクトの概要
Distributed Tuning Objects のリファレンスは、機能別に 4 つの章に分かれています。このセクションでは、各章のオブジェクトの一覧を表示します。
接続関連オブジェクト
DtoSession
DtoSession オブジェクトは DTO の中核的なオブジェクトです。アプリケーションから Pervasive PSQL サーバーへ接続する場合は、DtoSession オブジェクトを介して行います。特定のデータベース サーバーでセッションが要求された場合、DTO アプリケーションでは DtoSession オブジェクトを作成し、Connect メソッドを使用します。
設定関連オブジェクト
DtoCategory
DtoCategory オブジェクトと DtoCategories コレクションはデータベース エンジンの設定をグループ化しており、ユーザーはより詳細な設定を対象にして DtoSetting オブジェクトにアクセスすることができます。
DtoSetting
DtoSetting オブジェクトと DtoSettings コレクションは、データベース エンジン、通信マネージャーおよびローカル リクエスター コンポーネントの特定の設定を公開しており、ユーザーはこれらの設定を変更することができます。通常、各カテゴリは設定のコレクションを公開します。
DtoSelectionItem
DtoSelectionItem オブジェクトと DtoSelectionItems コレクションには選択が可能な設定に対する全項目が含まれます。DtoSetting.AllPossibleSelections では、指定した設定に対する可能なすべての値のコレクションを返します。
DtoServices
DtoServices オブジェクトを使用すれば、ユーザーは Pervasive PSQL データベース サービスを開始、停止したりサービスの現在の状態を照会したりすることができます。
DtoLicenseMgr
DtoLicenseMgr(DTO2)オブジェクトを使用すれば、ライセンスを追加、削除できるほかに、製品情報を見ることができます。
監視関連オブジェクト
DtoMonitor
DtoMonitor オブジェクトを使用すれば、ユーザーはデータベース エンジンやその他関連するサービスに関するステータス情報をリアルタイムで取得することができます。
また、DtoMonitor オブジェクトでは、ファイル ハンドル、開いているファイルおよびライセンスの現在値、ピーク値、最大値などのリソース使用状況に関する情報も公開しています。ピーク値とは、そのエンジンを最後に再起動してから現在に至るまでの最大値です。
DtoOpenFile
DtoOpenFile オブジェクトと DtoOpenFiles コレクションにはアクティブ ファイルに関する情報が含まれます。これを使用すれば、ユーザーは、開いているファイル数、それらのファイルを開いているユーザーおよびその他の関連情報を調べてファイル アクセスを監視することができます。
DtoFileHandle
DtoFileHandle オブジェクト DtoFileHandles コレクションは、ユーザー名またはエージェント ID、接続番号、タスク番号、サイト、ネットワーク アドレス、オープン モード、レコード ロック タイプ、待ち状態、トランザクション状態を公開します。
DtoMkdeClient
DtoMkdeClient オブジェクトと DtoMkdeClients コレクションは、アクティブ クライアントに関する情報を公開します。特定のクライアントの場合、そのクライアントのアクティブ セッションがあるかどうかを調べ、アクティブ セッションがあった場合はそのセッションに関するデータを取得することができます。また、オプションでそのクライアントを終了することもできます。
DtoMkdeClientHandle
DtoMkdeClientHandle オブジェクトと DtoMkdeClientHandles コレクションは、各ファイルの名前や関連情報が含まれるハンドル情報を公開します。
DtoMkdeVersion
DtoMkdeVersion(DTO2)では、Pervasive PSQL エンジンのメジャー バージョンとマイナー バージョン、ビルド番号およびターゲット オペレーティング システムを公開します。
DtoEngineInformation
DtoEngineInformation(DTO2)では、メジャー バージョンとマイナー バージョン、DTI API バージョンおよびサーバーとクライアントのその他の情報を公開します。
DtoSqlClient
DtoSqlClient オブジェクトと DtoSqlClients コレクションは、アクティブ SQL ユーザーの数や一覧および各クライアントに関する詳細情報など、SQL アクティブ ユーザーに関する情報を公開します。
DtoCommStat
DtoCommStat オブジェクトは、通信統計情報を公開します。適切な場合、現在値、ピーク値および最大値を照会することができます。
DtoProtocolStat
DtoProtocolStat オブジェクトと DtoProtocolStats コレクションは、サーバーで実行している各ネットワーク プロトコルに関する情報を公開します。
データベースおよび辞書関連オブジェクト
DtoDatabase
DtoDatabase オブジェクトと DtoDatabases コレクションは、データベース名、データベース フラグ、セキュリティ、テーブル定義などのデータベース カタログ情報の管理を担当します。
DtoDSN
DtoDSN オブジェクトと DtoDSNs コレクションは、サーバーにある Pervasive PSQL DSN を表します。これらを使用して、新しい DSN を作成したり、既存の Pervasive PSQL ODBC DSN を管理したりすることができます。
DtoDictionary(非推奨)
DtoDictionary オブジェクトは、辞書ファイルに関連するすべての操作のルート オブジェクトです。このオブジェクトを使用して、辞書のオープン、辞書の作成、テーブル情報の取得、テーブルの追加または削除を行うことができます。
Tables コレクションにアクセスするには、DtoDatabase オブジェクトを使用する方法をお勧めします。
DtoTable
DtoTable オブジェクトと DtoTables コレクションは、テーブル名、列およびインデックスなどのテーブル情報の管理を担当します。
DtoColumn
DtoColumn オブジェクトと DtoColumns コレクションは、列に関する情報の管理を担当します。
DtoIndex
DtoIndex オブジェクトと DtoIndexes コレクションは、テーブルのインデックス定義を公開します。
DtoSegment
DtoSegment オブジェクトと DtoSegments コレクションには、テーブル内で指定したインデックスのセグメントに関する情報があります。
DTO コレクションを使った作業
コレクションとは、ほかの複数オブジェクトを含むオブジェクトです。
コレクションのインスタンス化
Visual Basic
Set キーワードを使用して変数をコレクション オブジェクトに設定します。
Dim result as DtoResult
Dim my_session as New DtoSession
Dim my_databases as DtoDatabases
result = my_session.Connect("myserver", "username", "pw")
if not(result=0) Then
end if
Set my_databases = my_session.Databases
ASP
ASP を使用する場合、通常は DtoSession と DtoDictionary という 2 つのオブジェクトのインスタンスのみを直接作成する必要があります。Active Server Pages でオブジェクトのインスタンスを作成する場合、IIS の組み込みオブジェクトである Server オブジェクトの CreateObject 構文を使用します。
Set my_session = Server.CreateObject("DTO.DtoSession.2")
メモ: 複数の HTTP 呼び出しの間でオブジェクトを存在させたい場合、以下のコード例のように ISS の組み込みオブジェクトである Session オブジェクトを使用してオブジェクトの状態を保持する必要があります。
Set Session("my_session") = Server.CreateObject("DTO.DtoSession.2")
ただし、データベース、DSN、テーブル、列、インデックスまたはセグメントなどのオブジェクトを新規作成する場合は、この同じ構文を使用します。各オブジェクトのプログラム ID は、前述の例で示す規則に従います。
その他のコレクションについては、前述の Visual Basic の Set 構文を使用することができます。
コレクション内のループ
Visual Basic
Visual Basic でコレクション内をループするには、For ループの使用とカウンターの使用という 2 つの方法があります。
For/Next ステートメントを使ってコレクション内をループする Visual Basic の構文を以下に示します。
Dim my_categories as DtoCategories
Dim category as DtoCategory
Set my_categories = my_session.Categories
For Each category In my_categories
settings = category.Settings
Next
カウンターを使ってコレクション内をループする Visual Basic の構文を以下に示します。
Dim column as DtoColumn
Dim table as DtoTable
Set table = dictionary.Tables("Billing")
Dim i as long
for i=1 to table.Columns.count
set column=table.Columns(i)
next i
ASP
Pervasive の設定のカテゴリ一覧を表示する ASP のサンプル コードを以下に示します。
<%
Set Session("my_session") = Server.CreateObject("DTO.DtoSession.2")
result = Session("my_session").Connect("myserver", "username", "pw")
Set my_categories = Session("my_session").Categories
%>
<ul>
<% For each category in my_categories %>
<% %>
<% %>
<% %>
<li><%=cat.CategoryId> - <%=cat.Name%></li>
<% Next %>
</ul>
メンバー数の取得
Visual Basic
Count プロパティを使用してコレクション内のオブジェクトの数を調べます。
Dim num_items as Integer
Dim my_session as New DtoSession
Dim result as DtoResult
result = my_session.Connect("myserver", "username", "pw")
Set my_databases = my_session.Databases
num_items = my_databases.Count
ASP
Count プロパティを使用してコレクション内のオブジェクトの数を調べます。
<%
Set Session("my_session") = Server.CreateObject("DTO.DtoSession.2")
result = Session("my_session").Connect("myserver", "username", "pw")
Set my_databases = Session("my_session").Databases
num_items = my_databases.Count
Response.Write("<p>Number of databases = " & num_items)
%>
特定のメンバーの取得
Visual Basic と ASP
Item プロパティを使用して、コレクション内の特定のメンバー オブジェクトを取得します。
コレクション内のメンバー(要素)には序数を使ってアクセスすることができます。コレクションによっては、要素の一意のプロパティ(名前など)を使用して各要素にアクセスすることができます。すべての序数は 1 から始まります。
Item プロパティはコレクション オブジェクトのデフォルト プロパティなので、次の 2 つのステートメントは同一です。
Collection.Item(index)
Collection(index)
DTO サンプルの参照場所
Pervasive PSQL SDK には Visual Basic による完全な DTO サンプルがあります。このサンプルは、SDK のサンプルとヘッダー ファイルをインストールした file_path\PSQL\SDK\SAMPLES\DTI\VBASIC にあります。SDK のコンポーネント、コード スニペット、およびサンプルは、Pervasive PSQL Web サイト http://www.pervasivedb.com から入手できます。
Pervasive PSQL ファイルのデフォルトの保存場所については、『
Getting Started with Pervasive PSQL』の
Pervasive PSQL ファイルはどこにインストールされますか?を参照してください。