SQL-DMOの紹介
Microsoft SQL Serverは現在、人気のあるデータベース管理システムです。 SQL Serverの継続的な改善と開発と、Microsoft独自のWindowsシリーズオペレーティングシステムとの完璧な組み合わせにより、Windowsプラットフォームでのパフォーマンスと使いやすさが向上するため、ますます評価されています。 SQL-DMOのフルネームは、SQL分散管理オブジェクトです。デュアルインターフェイスを備えた一連のCOMを含むコレクションです。 SQL-DMOを介して、SQL Serverを操作するデータベースエンジンと複製管理を制御できます。 SQL-DMOはCOMのセットであるため、VB、Delphi、VC、BCB、ASPなどを含むCOMを使用できる任意の開発ツールで使用できます。これは、Windowsプラットフォームのほぼすべての開発ツールです。
SQL-DMOが使用します
SQL-DMOを使用してデータベースを管理する必要があるのはなぜですか?エンタープライズマネージャーとT-SQLスクリプトを使用してデータベースを管理するだけでは不十分ですか? SQL-DMOは、柔軟でカスタマイズ可能で効率的なデータベース管理アクティビティを実行できます。 SQL-DMOはSQL Serverに管理インターフェイスを提供しているため、プログラミングを通じて、ニーズに応じて管理アクティビティをカスタマイズできます。たとえば、多くのSQL Serverインスタンスを備えた大規模な組織を管理している場合。これで、ユーザーを組織内のすべてのSQL Serverインスタンスに追加する必要がありますSQL-DMOプログラミングを使用して通話を実装します。1つのサイクルで簡単かつ効率的に完了できます。著者の意見では、より重要なのは、MSDEをSQL-DMOを使用して管理できることです。 MS SQL Serverは高価ですが、MSDEは無料です。いくつかの中小規模のアプリケーションでは、MSDEで十分です。ただし、MSDEはデータベースエンジンのみを提供するが、視覚管理インターフェイスを提供しないため、MSDEのデータベースを定期的に管理することは不可能であり、MSDEの適用範囲が制限されます。この時点で、SQL-DMOを使用する場合、独自のデータベース管理インターフェイスを提供できるため、MSDEのデータベースの特定の定期的な管理を実行できます。時間とコストが考慮されない場合は、エンタープライズマネージャーと同様の管理インターフェイスを作成できます。実際、Enterprise Managerの機能のほとんどは、SQL-DMOを使用して実装されています。 (SQL-NSが使用されます(SQL-NamesPace、これもCOMオブジェクトコレクションであり、SQL Serverのオブジェクト名スペースへのアクセスを提供します)が、SQL-NS自体はSQL-DMOでも構築されています)
SQL-DMOホストと構成
SQL-DMOのホストは、X:/プログラムファイル/Microsoft SQL Server/80/Tools/binnの下にあるSQLDMO.DLLです。さらに、次のファイルも必要です。LSQLDMO.DLL
(メインタイプライブラリ) L
SQLDMO.RLL(言語リソースファイル) L
SQLSVC.DLL(データベース管理のためのタイプライブラリ) L
SQLSVC.RLL (言語リソースファイル) .dll(Unicode Redirection Layer) l
sqlrsld.dll(リソースロード用) L
ODBC( ODBC32.dll、sqlsrv32.dll、odbcbcp.dllなど)ここに通話構造の説明があります(図1):
| アプリケーションは、ここでSQL-DMOを使用してオブジェクトを作成します |
図1 SQL-DMOコール構造
SQL-DMOオブジェクトツリー
まず、SQL-DMOの巨大で複雑なオブジェクトツリーを見てみましょう(図3を参照):SQLServerオブジェクトはこのオブジェクトツリーのバックボーンであり、このバックボーンの下には3つの主要な分岐があります:Lデータベースブランチと一連のオブジェクト実装がありますその下で、SQLServerのデータベースアーキテクチャとメンテナンスタスク。 L Joberver Branch、ITの一連のオブジェクトは、SQL Server Agent(Agent)サービスを実装しています。 Lレプリケーションブランチ、ITの一連のオブジェクトは、SQL Serverの複製サービスを実装しています。また、注意すべきこともあります。Lオブジェクトツリーはアプリケーションオブジェクトをリストしていませんが、これは実際には比較的重要なオブジェクトです。 SQL-DMOオブジェクトには、アプリケーションオブジェクトを指すプロパティがあります。アプリケーションオブジェクトは、サーバーとサーバーグループの2つのコレクションオブジェクトを含むグローバルアプリケーションを表します。図2に示すように:図2アプリケーションオブジェクトLオブジェクトツリーは、SQL-DMOの構造のみを表し、NAMELISTオブジェクト、サーバーグループオブジェクトなど、すべてのオブジェクトを一覧表示しません。 SQL-DMOオブジェクトのツリーには、各オブジェクトを導入して説明することができません。 図3 SQL-DMOオブジェクトツリー
Delphiカプセル化SQL-DMOの実装
以下は、Delphiを使用して著者によって実装されたSQL-DMOカプセル化のコンポーネントTDBCTRLの説明です。特定のプロジェクトで無料のデータベースエンジンが必要だったため、最終的にMSDEを選択しましたが、MSDEには管理インターフェイスがなく、単なるエンジンです。したがって、MSDEにシンプルで明確な管理インターフェイスを提供する必要があります。エンタープライズマネージャーと同じくらい多くの管理機能を提供する必要はありません。最も一般的に使用される機能を提供するだけです。使いやすさとスケーラビリティを考慮すると、コンポーネントの形で提供することが決定されます。実装されたコンポーネントは、SQL-DMOのパッケージ層を提供し、一般的に使用される機能をカプセル化し、使用を簡素化します。このコンポーネントをコンパイルするには、SQL-DMOタイプライブラリを導入し、対応する説明コードを生成する必要があることに注意してください。コードには、Delphiの多くの定期的な使用法とCOMオブジェクトの慣用表記が含まれています。ここでDelphiがどのようにcomを使用するかについては説明しません。読者は関連する本を参照できます。このコンポーネントには、次のプロパティが含まれています。プロパティホスト:文字列読み取りfhost書き込みfhost; ogin:string flogin write flogin;プライベートデータメンバー:保存するSQLServer。そのタイプは_sqlservrです。このコンポーネントの破壊者も非常に簡単です。コンストラクターは、接続してSQLServerオブジェクトを作成することです。 Destructorは、SQLServerオブジェクトの破壊を完了するためだけです。 Constructor tdbctrl.create(aowner:sqlserver:cosqlserver;その後、Delphiは舞台裏でCOMオブジェクトの破壊を完了します。継承;終了;特定のSQL Serverインスタンスを管理および操作する場合は、まずこのインスタンスに接続する必要があります。次のConnectToserver関数は、SQL Serverインスタンスに接続する方法の関数を実装しています。関数TDBCTRL.CONNECTTOSERVER:begin sqlserver.loginsecure; // nt検証モードを設定します。結果:eolexceptionはshowmessageを開始します。ログインしているユーザー許可に応じて)。以下にリストされている方法のいくつかは、いくつかの機能を示しています。 getTableListメソッドは、データベースのすべてのテーブル名を取得し、tstringListに戻します。関数TDBCTRL.GETTABLERIST(dbname:var tablelist:tstringlist):_database:_table; .database.item(dbname、sqlserver); // i:= 1 to nowdb.tables.countに基づいてデータベースオブジェクトを取得しますd(nowtable);データベース(ビュー)内のすべてのビュー、テーブルまたはビューのすべてのフィールド(列)、データベースのすべてのデータファイルグループ、およびデータファイル(ファイルグループ、dbfiles)など。これらは、オブジェクト構造ツリーを明確に参照できます。 SQL-DMO。 SQL-DMOオブジェクトの使用は、次の基本的な手順に従うことができます。上層オブジェクトを介してオブジェクトまたはコレクションオブジェクトを取得し、オブジェクトを使用するか、使用する前にコレクションオブジェクトのオブジェクトを取得します。一般的に言えば、それがコレクションオブジェクトの場合、アイテム方法があり、コレクションメンバーオブジェクトはインデックスまたは名前に基づいて返すことができます。インデックスは0ではなく1から始まることに注意する必要があります。上記のメソッドは、次にデータベースから情報を実証する方法を示します。この方法は、データベースを維持する方法を示しています。関数tdbctrl.backupdb(dbname、backupfile:string):boolean;デバイスオブジェクトは、バックアップを設定してください(backupfile)。 = dbname+'bak backupdrv.type_:= backupfile;ここでは、バックアップセットが既に存在するため、例外が追加されていると思います。 = dmoback.sqlserver:= eolexception; nil; e nd; end;さらに、最初に言及されたアプリケーションオブジェクトの使用方法を説明する例を示したいと思います。この方法は、利用可能なすべての名前(つまり、到達可能で接続可能な)SQL Serverインスタンスの名前を取得することです。関数TDBCTRL.GETSERVERLIST(VAR SERVERLIST:TSTRINGLIST):var App:_Application:nameListはSQL-dmo:integere:= coaplication.createのオブジェクトです; nlist:= listavailablesqlservers;オブジェクトエンド;もちろん、TDBCTRLコンポーネントには多くのメソッドがありますが、バックアップに対応する回復方法や接続に対応する切断方法は類似しています。読者は、サンプルコードとSQL Serverのオンラインブックを参照して、1つの例から学び、必要な機能を実装できます。このコンポーネントにすべてのコードが必要な場合は、私にそれを尋ねることができます。
その他の指示
SQL-DMOのバージョン2000は、SQL Server7.0およびSQL Server 2000と完全に互換性があります。ただし、SQL Server 2000の新機能をサポートするために、80を超える新しいインターフェイスが提供されています。これらの新しいインターフェイスはすべて「2」で終わります。これは、元のSQL Server 7.0のこれらのインターフェイスのスーパーセットです。つまり、SQL Server 2000の新機能を使用する場合は、最後に「2」のインターフェイスを使用する必要があります。
書誌
L MicrosoftMSDNL Microsoft SQL Server Online Bookl "Delphi Com In-Depth Programming"(US)Eric Harmon Machinery Industry Press