概要 (SMO)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

SQL Server管理オブジェクト (SMO) は、Microsoft SQL Serverのプログラムによる管理用に設計されたオブジェクトです。 SMO を使用して、カスタマイズされたSQL Server管理アプリケーションを構築できます。 SQL Server Management Studioは、SQL Serverを管理するための強力で広範なアプリケーションですが、SMO アプリケーションによってより適切に提供される場合があります。

たとえば、SQL Server管理タスクを制御するユーザー アプリケーションは、新しいユーザーのニーズを満たし、トレーニング コストを削減するために簡略化する必要がある場合があります。 カスタマイズされたSQL Server データベースを作成するか、インデックスの効率を作成および監視するためのアプリケーションを作成する必要がある場合があります。 また、サード パーティ製のハードウェアやソフトウェアをデータベース管理アプリケーションにシームレスに含めるために、SMO アプリケーションを使用する場合もあります。

SMO は SQL Server 2005 (9.x) 以降のバージョンと互換性があるため、マルチバージョン環境を簡単に管理できます。

SMO の機能には、次のようなものがあります。

  • キャッシュされたオブジェクト モデルおよび最適化されたオブジェクト インスタンスの作成。 オブジェクトは、参照されている場合にのみ読み込まれます。 オブジェクト プロパティは、オブジェクトが作成された場合にのみ部分的に読み込まれます。 残りのオブジェクトおよびプロパティは、直接参照される場合に読み込まれます。

  • Transact-SQL ステートメントのバッチ実行。 ステートメントがバッチ化されて、ネットワーク パフォーマンスが向上します。

  • Transact-SQL ステートメントをキャプチャします。 任意の操作をキャプチャしてスクリプトを作成できるようになります。 Management Studio では、この機能を使用して、操作をすぐに実行する代わりにスクリプトを作成します。

  • WMI プロバイダーを使用したSQL Server サービスの管理。 SQL Serverサービスは、プログラムで開始、停止、一時停止できます。

  • 高度なスクリプティング。 Transact-SQL スクリプトを生成して、SQL Serverのインスタンス上の他のオブジェクトとの関係を記述するSQL Server オブジェクトを再作成できます。

  • URN (Unique Resource Name) の使用。 URN を使用すると、SMO オブジェクトのインスタンスを作成して、それを参照することができます。

SMO は、SQL Server 2005 (9.x) で導入された多くの機能やコンポーネントを新しいオブジェクトまたはプロパティとして表します。 これらの新しい機能およびコンポーネントには次のものがあります。

  • パーティション構成にデータを格納するためのテーブルおよびインデックスのパーティション分割。 詳細については、「 Partitioned Tables and Indexes」を参照してください。

  • SOAP 要求を管理するための HTTP エンドポイント。 詳細については、「エンドポイントの 実装」を参照してください。

  • コンカレンシーを高めるためのスナップショット分離と行レベルのバージョニング。 詳細については、「スナップショット分離を使用した作業」を参照してください。

  • XML スキーマ コレクション、XML インデックス、および XML データ型は、XML データの検証と保存を提供します。 詳細については、「XML スキーマ コレクション (SQL Server)」および「XML スキーマの使用」を参照してください。

  • データベースの読み取り専用コピーを作成するためのスナップショット データベース。

  • メッセージ ベースの通信に対する Service Broker サポート。 詳細については、「Service Broker のSQL Server」を参照してください。

  • SQL Server データベース オブジェクトの複数の名前に対するシノニムのサポート。 詳細については、「 シノニム (データベース エンジン)」を参照してください。

  • SQL Serverで電子メール サーバー、電子メール プロファイル、電子メール アカウントを作成できるデータベース メールの管理。 詳細については、「データベース メール」を参照してください。

  • 接続情報登録のための登録サーバーのサポート。 詳細については、「サーバーの 登録」を参照してください。

  • SQL Server イベントのトレースと再生。 詳細については、「SQL Server ProfilerSQL トレースSQL Server 分散再生拡張イベント」を参照してください。

  • セキュリティ コントロールのための証明書およびキーのサポート。 詳細については、「 暗号化階層」を参照してください。

  • DDL イベント発生時に機能を追加するための DDL トリガー。 詳細については、「 DDL トリガー」を参照してください。

SMO の名前空間は、Microsoft.SqlServer.Management.Smo です。 SMO は Microsoft .NET Framework アセンブリとして実装されます。 つまり、SMO オブジェクトを使用する前に、Microsoft .NET Framework バージョン 2.0 の共通言語ランタイムをインストールする必要があります。 SMO アセンブリは、既定で SQL Server SDK オプションを使用してグローバル アセンブリ キャッシュ (GAC) にインストールされます。 アセンブリは C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies にあります。 詳細については、Visual Studio .NET Frameworkドキュメントを参照してください。

SMO クラス

SMO クラスには、インスタンス クラスおよびユーティリティ クラスの 2 つのカテゴリがあります。

インスタンス クラス

インスタンス クラスは、サーバー、データベース、テーブル、トリガー、ストアド プロシージャなどのSQL Server オブジェクトを表します。 クラスはServerConnection、SQL Serverのインスタンスへの接続を確立し、それに送信されるコマンドのキャプチャ モードを制御するために使用されます。

SMO インスタンス オブジェクトは、データベース サーバーの階層を表す階層を形成しています。 上部にはSQL Serverのインスタンスがあり、その下にはデータベースがあり、テーブル、列、トリガーなどを使用してに続きます。 1 つまたは複数の列を持つテーブルなど、1 つの親から複数の子へのリレーションシップが論理的に存在している場合、子はオブジェクトのコレクションによって表されます。 それ以外の場合、子は 1 つのオブジェクトで表されます。

ユーティリティ クラス

ユーティリティ クラスとは、特定のタスクを実行するために明示的に作成されたオブジェクトのグループです。 これらは、関数に基づいて、次のように異なるオブジェクト階層に分割されています。

  • 転送クラス。 スキーマおよびデータをその他のデータベースに転送するために使用されます。

  • バックアップおよび復元クラス。 データベースのバックアップおよび復元のために使用されます。

  • スクリプター クラス。 オブジェクトとオブジェクトの依存関係を再生成するためのスクリプト ファイルを作成するために使用されます。

SMO の機能

最適化されたパフォーマンス

オブジェクトは最初は部分的にしかインスタンス化されておらず、最小限のプロパティ情報がサーバーから要求されるため、SMO アーキテクチャはメモリの面で効率的です。 オブジェクトの完全なインスタンス化は、オブジェクトが明示的に参照されるまで行われません。 最初に取得されるプロパティのセットにはないプロパティが要求されたり、そのようなプロパティを要求するメソッドが呼び出された場合に、オブジェクトの完全なインスタンス化が行われます。 部分的にインスタンス化されたオブジェクトと完全にインスタンス化されたオブジェクトの間での移行は、ユーザーに対して透過的です。 また、大量のメモリを使用するプロパティは、明示的に参照されない限り取得されません。 この例として、Size オブジェクト プロパティの Database プロパティがあります。 ただし、部分的なインスタンス化では、より多くのネットワーク ラウンド トリップが必要になるため、使用しているアプリケーションに対して最適なパフォーマンス オプションではない可能性もあります。

インスタンス化を制御すると、システム環境を最適化することができます。 プロパティの参照時に大量のサーバー要求がトリガーされる場合がありますが、遅延インスタンス化の手法を使用することで、アプリケーションが必要とするメモリ量が最小化されます。

実際のデータベース オブジェクトを表したオブジェクトであるインスタンス クラスには、インスタンス化の 3 つのレベルがあります。 最小インスタンス化 (必要な最小限のプロパティのみが 1 つのブロックに読み取られる)、部分的インスタンス化 (比較的大量のメモリを使用するすべてのプロパティが 1 つのブロックに読み取られる)、および完全インスタンス化の 3 つです。 インスタンス化されず、完全にインスタンス化されるのは、インスタンス化の従来の状態です。 部分的にインスタンス化されたオブジェクトには、オブジェクト プロパティの完全なセットに対する値が格納されていないため、部分的インスタンス化の状態は効率性の向上に役立ちます。 部分的インスタンス化は、直接参照されないオブジェクトの既定の状態です。 これらのプロパティの 1 つが参照されると、オブジェクトの完全インスタンス化を要求するフォールトが生成されます。

キャプチャの実行

直接実行は、通常の実行方法です。 ステートメントは、発生したSQL Serverのインスタンスに直接送信されます。 キャプチャ実行は、これに代わる方法です。

キャプチャ実行を使用すると、通常実行される Transact-SQL バッチをキャプチャできます。 これにより、SMO プログラマは、スクリプトの保留、後で実行するための格納、エンドユーザーへのプレビューの提供を行うことができます。 たとえば、データベースの 作成、テーブルの 作成、インデックスの 作成 ステートメントを 1 つのバッチで送信し、3 つの連続した手順として実行できます。 この機能は、Server オブジェクトを使用して、ユーザーによって制御されます。

WMI プロバイダー

WMI プロバイダー オブジェクトは、SMO によってラップされます。 これにより、SMO プログラマは、名前空間で表されるプログラミング モデルと、SQL Server WMI プロバイダーの詳細を理解する必要なく、SMO クラスに近い単純なオブジェクト モデルを提供します。 WMI プロバイダーを使用すると、SQL Serverサービス、エイリアス、クライアントとサーバーのネットワーク ライブラリを構成できます。

スクリプトの作成

SMO では、スクリプトが強化され、 Scripter クラスに移動されました。 Scripter クラスは依存関係を検出し、オブジェクト間の関係を理解し、依存関係階層の操作を可能にします。 メイン スクリプト オブジェクトは Scripter オブジェクトです。 また、依存関係を処理したり、進行中のイベントやエラー イベントに応答するサポート オブジェクトもいくつかあります。

Scripter オブジェクトは、次の高度なスクリプト作成オプションをサポートしています。

  • 簡単な 1 フェーズ スクリプティング (スクリプトを 1 つの手順で作成)

  • 高度な 3 フェーズ スクリプト作成 (依存関係検出、リスト生成、スクリプト生成の 3 つの手順でスクリプトを作成します)

  • 2 方向の依存関係検索 (依存関係または依存の検索の許可)

  • 進行中イベントへの応答

  • エラー イベントへの応答

一意のリソース名

SMO オブジェクト ライブラリを使用するうえでの鍵となる概念の 1 つが URN (Unique Resource Name) です。 URN は、XPath と同様の構文を使用します。 XPath は、各レベルで修飾子と関数を持つオブジェクトを指定するために使用される階層パスです。 SMO では、URN には、パス、および制限された機能を持つ属性名の 2 つの要素があります。 パスはオブジェクトの場所を指定するために使用され、属性名によってある程度のフィルター操作が可能になります。

データベースの URN の例は次のようになります。

/Server/Database[@Name='AdventureWorks2022']  

オブジェクトの URN は、URN プロパティを参照することで取得することができます。 Scripter オブジェクトは、オブジェクト参照を Scripter オブジェクトの メソッドに渡すパラメーターとして URN も使用します。 さらに、Server オブジェクトの GetSmoObject メソッドに URN を指定することもできます。 これは、SMO オブジェクトのインスタンスを作成するために使用します。

SMO で表されるSQL Server機能

テーブルとインデックスのパーティション分割

インデックス テーブル パーティション分割によって、ファイル グループにまたがるテーブルとインデックスのデータの分散を管理することができます。 SMO オブジェクトには、この新機能が反映されています。

エンドポイント

SOAP およびデータベース ミラーリング要求は、Endpoint オブジェクトを使用して、エンドポイントによって処理されます。

スナップショット分離 / 行レベル バージョン

スナップショット分離 (行レベル バージョン) は、新しい Database オブジェクト プロパティで表現されます。

XML スキーマ名前空間、XML インデックス、および XML データ型

XML スキーマ名前空間は、SMO ではオブジェクトのコレクションで表現されます。 XML インデックスは、 Index オブジェクト プロパティによって SMO で表されます。

フルテキスト検索の機能強化

SMO には、フルテキスト検索の機能強化を反映した新しいオブジェクトが提供されています。

[ページ確認]

PageVerify オブジェクトは、データベース ページ確認オプションを表します。

スナップショット データベース

スナップショット データベースは、特定の時点における、指定されたデータベースの読み取り専用のコピーです。 スナップショット データベースは、IsDatabaseSnapshot オブジェクトの Database プロパティを使用して指定することができます。

Service Broker

Service Broker とその機能は、オブジェクトのグループによって表されます

インデックスの機能強化

SQL Serverインデックスの拡張は、 オブジェクトの新しいプロパティによってIndex表されます。

参照

レプリケーション管理オブジェクトの概念