Distributed Tuning Objects の概要
 
このページをシェアする                  
Distributed Tuning Objects の概要
Zen 管理 API への COM インターフェイス
以下のトピックでは、Zen Distributed Tuning Objects を構成する機能について説明します。
DTO とは
DTO オブジェクト モデルとオブジェクトの関係
DTO の使用を始める
DTO オブジェクトの概要
DTO コレクションを使った作業
DTO サンプルの参照場所
以下のトピックへ直接移動して、Zen で DTO を使用する方法の詳細を参照することもできます。
DTO セッションの確立
DTO を使用した Zen サーバーの設定
DTO を使用した Zen サーバーの監視
DTO を使用したカタログと辞書の作成および管理
Distributed Tuning Objects 列挙
DTO とは
Distributed Tuning Objects(以降、このドキュメントでは DTO と表記します)は、Zen 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 クラスを以下の機能のカテゴリ別に分類しています。
接続
データベース エンジンの動作を構成および監視できるようにするには、ユーザーは最初にそのエンジンに接続する必要があります。このカテゴリでは、データベース エンジンへの接続および接続の切断に必要な機能を提供します。
DtoSession オブジェクトがデータベース エンジンへの接続を管理します。
監視と診断
このカテゴリでは、Zen サーバーとクライアントを監視する機能および診断情報を提供します。
DtoMonitor オブジェクトとその従属オブジェクトによって、サーバーの監視機能および診断情報を提供します。また、DtoEngineInformation オブジェクトを使って DtoSession からエンジン情報を直接取得することもできます。
構成
このカテゴリでは、ユーザーが Zen エンジンやクライアントを構成することができます。DtoCategories コレクションとその従属オブジェクトによって、この機能を提供します。
また、DtoLicenseMgr オブジェクトを使用すれば製品ライセンスの追加と削除も行えます。
カタログと辞書
このカテゴリでは、グループ化された機能によって、ユーザーはデータベース、データ辞書を新規作成することができます。また、テーブル、列およびインデックスの定義や削除も行えます。
DtoDictionary クラスとその従属オブジェクトによって、カタログ機能を提供します。
DTO オブジェクト ツリー
多くの DTO オブジェクトがその他の DTO オブジェクトのプロパティとして公開されています。この関係によって、開発者はオートメーション コントローラーを使用するプログラミングを簡略化する論理的なツリー形式の構造を使用することができます。多くのオブジェクトは、プロパティやメソッドにアクセスする場合に使うドット表記を使用して参照することができます。
DTO オブジェクト ツリーには 3 つの主要なブランチがあり、設定、監視、およびカタログ用のオブジェクトが論理的にグループ化されています。
DTO バージョン
次の表は、2 つの異なるバージョンの DTO の使用に関する情報を示しています。
 
Item
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
Zen V8 SDK では新しい DLL がリリースされました。この DLL には新しいオブジェクトや既存のオブジェクトへの新しいプロパティが追加されています。下位バージョンとの互換性を保つために、以前の DTO.DLL に互換性を追加するのではなく、新しい DLL が作成されました。両方の DLL がインストールされ Zen SDK で登録されるので、どちらの DLL を使用しても DTO アプリケーションを開発できます。新しい DLL を使用するためにアプリケーションを再コンパイルできない場合は、以前の DTO.DLL を使用する必要があります。ただし、以前の DTO.DLL を使用していると、新しいオブジェクトや既存のオブジェクトに追加された新しいプロパティを使用することができません。DTO2.DLL は、.NET Framework を含む 32 ビット開発環境をサポートします。
W64DTO2
Zen 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 ビット プロセス
読み込み
読み込み
BadImageFormatException
X86.EXE
32 ビット プロセス
読み込み
読み込み
BadImageFormatException
X64.EXE
BadImageFormatException
表 2 64 ビット マシンのプロセス
アプリケーション実行可能ファイル
実行形態
DTO.DLL
DTO2.DLL
W64DTO2.DLL
ANYCPU.EXE
64 ビット プロセス
BadImageFormatException
BadImageFormatException
読み込み
X86.EXE
32 ビット プロセス
読み込み
読み込み
BadImageFormatException
X64.EXE
64 ビット プロセス
BadImageFormatException
BadImageFormatException
読み込み
DTO の使用を始める
このセクションでは、Visual Basic、Active Server Pages(ASP)および Delphi DTO を使用するためのセットアップ方法を説明します。
Visual Basic
Active Server Pages
Delphi
Visual Basic
DTO は デュアル インターフェイス COM オブジェクトのライブラリなので、Visual Basic ではこれらのオブジェクトを使って作業する 2 つの方法があります。Active Server Pages を使用している場合、2 番目の方法を使う必要があります。第一にお勧めする方法は、プロジェクトにタイプ ライブラリを追加する方法です。この方法を使用すれば、VB で型のチェックを行うことができ、オブジクトの作成や関数のパラメーターに対して便利なドロップダウン オプション(Intellisense 機能)を開発者に提供することができます。
もう 1 つの方法は、CreateObject 関数を使用する方法です。これは実行時にオブジェクトを作成するため、型のチェックと Intellisense 機能がありません。
プロジェクトへの DTO の追加
Visual Basic プロジェクトに 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 を使用する
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 直接呼び出しを使用する例
Example:
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 の中核的なオブジェクトです。アプリケーションから Zen サーバーへ接続する場合は、DtoSession オブジェクトを介して行います。特定のデータベース サーバーでセッションが要求された場合、DTO アプリケーションでは DtoSession オブジェクトを作成し、Connect メソッドを使用します。
設定関連オブジェクト
DtoCategory
DtoCategory オブジェクトと DtoCategories コレクションはデータベース エンジンの設定をグループ化しており、ユーザーはより詳細な設定を対象にして DtoSetting オブジェクトにアクセスすることができます。
DtoSetting
DtoSetting オブジェクトと DtoSettings コレクションは、データベース エンジン、通信マネージャーおよびローカル リクエスター コンポーネントの特定の設定を公開しており、ユーザーはこれらの設定を変更することができます。通常、各カテゴリは設定のコレクションを公開します。
DtoSelectionItem
DtoSelectionItem オブジェクトと DtoSelectionItems コレクションには選択が可能な設定に対する全項目が含まれます。DtoSetting.AllPossibleSelections では、指定した設定に対する可能なすべての値のコレクションを返します。
DtoServices
DtoServices オブジェクトを使用すれば、ユーザーは Zen データベース サービスを開始、停止したりサービスの現在の状態を照会したりすることができます。
DtoLicenseMgr
DtoLicenseMgr(DTO2)オブジェクトを使用すれば、ライセンスを追加、削除できるほかに、製品情報を見ることができます。
監視関連オブジェクト
DtoMonitor
DtoMonitor オブジェクトを使用すれば、ユーザーはデータベース エンジンやその他関連するサービスに関するステータス情報をリアルタイムで取得することができます。
また、DtoMonitor オブジェクトでは、ファイル ハンドル、開いているファイルおよびライセンスの現在値、ピーク値、最大値などのリソース使用状況に関する情報も公開しています。ピーク値とは、そのエンジンを最後に再起動してから現在に至るまでの最大値です。
DtoOpenFile
DtoOpenFile オブジェクトと DtoOpenFiles コレクションにはアクティブ ファイルに関する情報が含まれます。 これを使用すれば、ユーザーは、開いているファイル数、それらのファイルを開いているユーザーおよびその他の関連情報を調べてファイル アクセスを監視することができます。
DtoFileHandle
DtoFileHandle オブジェクト DtoFileHandles コレクションは、ユーザー名またはエージェント ID、接続番号、タスク番号、サイト、ネットワーク アドレス、オープン モード、レコード ロック タイプ、待ち状態、トランザクション状態を公開します。
DtoMkdeClient
DtoMkdeClient オブジェクトと DtoMkdeClients コレクションは、アクティブ クライアントに関する情報を公開します。特定のクライアントの場合、そのクライアントのアクティブ セッションがあるかどうかを調べ、アクティブ セッションがあった場合はそのセッションに関するデータを取得することができます。また、オプションでそのクライアントを終了することもできます。
DtoMkdeClientHandle
DtoMkdeClientHandle オブジェクトと DtoMkdeClientHandles コレクションは、各ファイルの名前や関連情報が含まれるハンドル情報を公開します。
DtoMkdeVersion
DtoMkdeVersion(DTO2)では、Zen エンジンのメジャー バージョンとマイナー バージョン、ビルド番号およびターゲット オペレーティング システムを公開します。
DtoEngineInformation
DtoEngineInformation(DTO2)では、メジャー バージョンとマイナー バージョン、DTI API バージョンおよびサーバーとクライアントのその他の情報を公開します。
DtoSqlClient
DtoSqlClient オブジェクトと DtoSqlClients コレクションは、アクティブ SQL ユーザーの数や一覧および各クライアントに関する詳細情報など、SQL アクティブ ユーザーに関する情報を公開します。
DtoCommStat
DtoCommStat オブジェクトは、通信統計情報を公開します。適切な場合、現在値、ピーク値および最大値を照会することができます。
DtoProtocolStat
DtoProtocolStat オブジェクトと DtoProtocolStats コレクションは、サーバーで実行している各ネットワーク プロトコルに関する情報を公開します。
データベースおよび辞書関連オブジェクト
DtoDatabase
DtoDatabase オブジェクトと DtoDatabases コレクションは、データベース名、データベース フラグ、セキュリティ、テーブル定義などのデータベース カタログ情報の管理を担当します。
DtoDSN
DtoDSN オブジェクトと DtoDSNs コレクションは、サーバーにある Zen DSN を表します。これらを使用して、新しい DSN を作成したり、既存の Zen 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
'Connect メソッドのエラー処理
end if
 
'オブジェクトまたはコレクションが値を返すタイプの場合は
'Set を使用する
 
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 の構文を以下に示します。
'Categories コレクションを取得する
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
Zen の設定のカテゴリ一覧を表示する ASP のサンプル コードを以下に示します。
<%
Set Session("my_session") = Server.CreateObject("DTO.DtoSession.2")
result = Session("my_session").Connect("myserver", "username", "pw")
'Connect メソッドのエラー処理は表示しない
 
Set my_categories = Session("my_session").Categories
'次に、HTML の箇条書きリスト(<UL></UL>)内のカテゴリをループして出力する
%>
 
<ul>
<% For each category in my_categories %>
 
<% '等号(=)は HTML ストリーム内の変数を表示します。 %>
<% 'これは、VBScript 組み込みの Response.Write() %>
<% ' メソッドのショートカットです。%>
 
<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")
'Connect メソッドのエラー処理は表示しない
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")
'Connect メソッドのエラー処理は表示しない
Set my_databases = Session("my_session").Databases
num_items = my_databases.Count
'出力を HTML ストリームに書き込む
Response.Write("<p>Number of databases = " & num_items)
%>
特定のメンバーの取得
Visual Basic と ASP
Item プロパティを使用して、コレクション内の特定のメンバー オブジェクトを取得します。
コレクション内のメンバー(要素)には序数を使ってアクセスすることができます。コレクションによっては、要素の一意のプロパティ(名前など)を使用して各要素にアクセスすることができます。すべての序数は 1 から始まります。
Item プロパティはコレクション オブジェクトのデフォルト プロパティなので、次の 2 つのステートメントは同一です。
Collection.Item(index)
Collection(index)
DTO サンプルの参照場所
Zen SDK には Visual Basic による完全な DTO サンプルがあります。このサンプルは、SDK のサンプルとヘッダー ファイルをインストールした次の場所にあります。
SDK のコンポーネント、コード スニペット、およびサンプルは、Actian Web サイトから入手できます。
Zen ファイルのデフォルトの保存場所については、『Getting Started with Zen』のファイルはどこにインストールされますか?を参照してください。
DTO アクセス方法に関するその他の開発者情報およびリソースについて、Actian Web サイトもご覧ください。