概要 (SMO)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure 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 のサポート。 詳細については、「 SQL Server Service Broker」を参照してください。

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

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

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

  • SQL Server イベントのトレースと再生。 詳細については、「SQL Server プロファイラーSQL TraceSQL Server 分散再生、および Extended Eventsを参照してください。

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

  • 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 オブジェクトの新しいプロパティによって表されます。

参照

Replication Management Objects Concepts