Übersicht (SMO)

SQL Server Management Objects (SMO) sind für die programmgesteuerte Verwaltung von MicrosoftSQL Server vorgesehene Objekte. Sie können SMO verwenden, um benutzerdefinierte SQL Server-Verwaltungsanwendungen zu erstellen. Wenngleich SQL Server Management Studio eine leistungsstarke und umfassende Anwendung zur Verwaltung von SQL Server ist, sind Sie in manchen Fällen mit einer SMO-Anwendung möglicherweise besser beraten.

Beispielsweise müssen die Benutzeranwendungen zur Steuerung der SQL Server-Verwaltungsaufgaben eventuell vereinfacht werden, um den Anforderungen neuer Benutzer zu entsprechen und um die Schulungskosten zu senken. Oder Sie müssen benutzerdefinierte SQL Server-Datenbanken bzw. eine Anwendung zum Erstellen und Überwachen der Indexeffizienz erstellen. Eine SMO-Anwendung kann auch verwendet werden, um Hard- oder Software anderer Hersteller nahtlos in die Anwendung zur Datenbankverwaltung einzubinden.

Das SMO-Objektmodell erweitert und ersetzt das DMO-Objektmodell (SQL Distributed Management Objects). Verglichen mit SQL-DMO bietet SMO eine bessere Leistung, Steuerung und Benutzerfreundlichkeit. SMO unterstützt die meisten SQL-DMO-Funktionen und enthält verschiedene neue Klassen zur Unterstützung neuer Features in SQL Server. Das Objektmodell ist intuitiv und verwendet, soweit möglich, die SQL-DMO-Terminologie, um Ihnen ein erneutes Einarbeiten zu ersparen.

Da SMO mit SQL Server 2000, SQL Server 2005 und SQL Server 2008 kompatibel ist, verwalten Sie mühelos eine Umgebung mit mehreren Versionen.

Wichtiger HinweisWichtig

SMO unterstützt keinen Kompatibilitätsgrad von 60, 65 oder 70. Wenn Sie SMO mit einer Datenbank mit einem auf 60, 65 oder 70 festgelegten Kompatibilitätsgrad verwenden, können Sie die Datenbank nicht mit SMO verwalten.

Zu den neuen Features in SMO gehören:

  • Zwischengespeichertes Objektmodell und optimierte Objektinstanzerstellung. Objekte werden nur geladen, wenn auf sie ausdrücklich verwiesen wird. Objekteigenschaften werden beim Erstellen der Objekte nur teilweise geladen. Die übrigen Objekte und Eigenschaften werden geladen, wenn direkt auf sie verwiesen wird.

  • Ausführung von Transact-SQL-Anweisungen im Batchmodus. Anweisungen werden im Batchmodus ausgeführt, um die Netzwerkleistung zu verbessern.

  • Aufzeichnen von Transact-SQL-Anweisungen. Ermöglicht die Aufzeichnung jedes Vorgangs in einem Skript. Management Studio verwendet diese Funktion, um einen Vorgang aufzuzeichnen, statt ihn sofort auszuführen.

  • Verwaltung von SQL Server-Diensten über den WMI-Anbieter. SQL Server-Dienste können programmgesteuert gestartet, gestoppt und angehalten werden.

  • Erweiterte Skriptfunktionen. Transact-SQL-Skripts können generiert werden, um SQL Server-Objekte neu zu erstellen, die Beziehungen zu anderen Objekten auf der Instanz von SQL Server beschreiben.

  • Verwenden eindeutiger Ressourcennamen (URNs). Ein URN ermöglicht es Ihnen, Instanzen von SMO-Objekten zu erstellen und darauf zu verweisen.

SMO stellt auch viele Features und Komponenten, die in SQL Server 2005 eingeführt wurden, als neue Objekte oder Eigenschaften dar. Zu diesen neuen Features und Komponenten gehören:

Der SMO-Namespace lautet Microsoft.SqlServer.Management.Smo. SMO wird als Microsoft .NET Framework-Assembly implementiert. Das bedeutet, dass die CLR (Common Language Runtime) von Microsoft .NET Framework, Version 2.0, installiert werden muss, bevor die SMO-Objekte verwendet werden. Die SMO-Assemblys werden standardmäßig mithilfe der SQL Server-SDK-Option im globalen Assemblycache (GAC) installiert. Die Assemblys befinden sich in C:\Programme\Microsoft SQL Server\100\SDK\Assemblies\. Weitere Informationen finden Sie in der Dokumentation zu Visual Studio.NET Framework.

SMO-Klassen

SMO-Klassen umfassen zwei Kategorien: Instanzklassen und Dienstprogrammklassen.

Instanzklassen

Die Instanzklassen stellen SQL Server-Objekte dar, z. B. Server, Datenbanken, Tabellen, Trigger und gespeicherte Prozeduren. Um eine Verbindung zur Instanz von SQL Server herzustellen und den Aufzeichnungsmodus für an die Instanz gesendete Befehle zu steuern, wird die Klasse ServerConnection verwendet.

Die SMO-Instanzobjekte bilden eine Hierarchie, die die Hierarchie eines Datenbankservers darstellt. Ganz oben sind die Instanzen von SQL Server, gefolgt von den Datenbanken, gefolgt von den Tabellen, Spalten, Triggern usw. Ist eine 1:n-Beziehung zwischen den über- und untergeordneten Elementen logisch, etwa im Fall einer Tabelle mit mehreren Spalten, wird das untergeordnete Element durch eine Objektauflistung dargestellt. Andernfalls wird das untergeordnete Element nur durch ein Objekt dargestellt.

Dienstprogrammklassen

Dienstprogrammklassen sind eine Gruppe von Objekten, die explizit erstellt wurden, um bestimmte Tasks auszuführen. Sie werden auf Grundlage ihrer Funktion in unterschiedliche Objekthierarchien unterteilt:

  • Übertragungsklasse. Diese wird verwendet, um Schema und Daten in eine andere Datenbank zu übertragen.

  • Klassen zur Sicherung und Wiederherstellung. Diese werden zum Sichern und Wiederherstellen von Datenbanken verwendet.

  • Scripter-Klasse. Diese wird zum Erstellen von Skriptdateien für die erneute Generierung von Objekten und ihren Abhängigkeiten verwendet.

Neue SMO-Features

Optimierte Leistung

In SQL-DMO musste zur Objektenumeration jedes Objekt innerhalb einer Auflistung vollständig instanziiert werden. Dies ist in Hinblick auf Netzwerk und Speicherbeanspruchung ineffizient. Häufig könnte ein Objekt auch instanziiert werden, ohne dass dabei auf die meisten seiner Eigenschaften explizit verwiesen wird.

Die SMO-Architektur ist speichereffizienter, da Objekte zunächst nur teilweise instanziiert und nur minimale Eigenschafteninformationen vom Server angefordert werden. Die vollständige Instanziierung der Objekte wird verzögert, bis auf das Objekt explizit verwiesen wird. Ein Objekt wird vollständig instanziiert, wenn eine Eigenschaft angefordert wird, die nicht Bestandteil der zunächst abgerufenen Eigenschaftengruppe ist, oder wenn eine Methode aufgerufen wird, die eine solche Eigenschaft erfordert. Der Übergang zwischen teilweise und vollständig instanziierten Objekten erfolgt für den Benutzer transparent. Darüber hinaus werden einige Eigenschaften, die viel Arbeitsspeicher belegen, nur dann abgerufen, wenn explizit auf die Eigenschaft verwiesen wird. Ein Beispiel hierfür ist die Size-Eigenschaft der Database-Objekteigenschaft. Die teilweise Instanziierung erfordert jedoch mehr Netzwerkroundtrips und stellt möglicherweise nicht die leistungseffizienteste Option für Ihre Anwendung dar.

Sie können die Instanziierung entsprechend der Systemumgebung steuern. Durch die verzögerte Instanziierung wird der von der Anwendung benötigte Arbeitsspeicher minimiert, wenngleich dadurch möglicherweise zahlreiche Serveranforderungen ausgelöst werden, wenn auf Eigenschaften verwiesen wird.

Für Instanzklassen (Objekte, die wirkliche Datenbankobjekte darstellen) sind drei Ebenen der Instanziierung möglich: minimal instanziiert (nur die erforderlichen Mindesteigenschaften werden in einem Block gelesen), teilweise instanziiert (alle Eigenschaften, die relativ viel Speicher in Anspruch nehmen, werden in einem Block gelesen) und vollständig instanziiert. Nicht instanziiert und vollständig instanziiert sind die herkömmlichen Instanziierungsstatuswerte. Die teilweise Instanziierung steigert die Effizienz, da ein teilweise instanziiertes Objekt nicht Werte für alle Objekteigenschaften enthält. Die teilweise Instanziierung ist der Standardstatus für ein Objekt, auf das nicht direkt verwiesen wird. Wird auf eine dieser Eigenschaften verwiesen, tritt ein Fehler auf, der zur vollständigen Instanziierung des Objekts auffordert.

Aufzeichnen der Ausführung

Die direkte Ausführung ist die übliche Methode der Ausführung. Anweisungen werden direkt an eine Instanz von SQL Server gesendet. Eine Alternative stellt die Aufzeichnung der Ausführung dar.

Dabei können Sie Transact-SQL-Batches aufzeichnen, die in der Regel ausgeführt würden. Auf diese Weise kann der SMO-Programmierer das Skript aufschieben, zur späteren Ausführung speichern oder dem Endbenutzer eine Vorschau bereitstellen. Beispielsweise können die Anweisungen create database, create table und create index in einen Batch gesendet und dann als drei aufeinander folgende Schritte ausgeführt werden. Diese Funktionalität wird vom Benutzer mit dem Server-Objekt gesteuert.

WMI-Anbieter

Die WMI-Anbieterobjekte werden von SMO umschlossen. Damit steht dem SMO-Programmierer ein einfaches Objektmodell zur Verfügung, das SMO-Klassen stark ähnelt, ohne dass dafür Kenntnisse des durch den Namespace und die Details des SQL Server WMI-Anbieters dargestellten Programmiermodells erforderlich sind. Mithilfe des WMI-Anbieters können Sie SQL Server-Dienste, Aliase und Client- und Servernetzwerkbibliotheken konfigurieren.

Skripterstellung

In SMO wurde die Skripterstellung verbessert und in die Scripter-Klasse verlegt. Die Scripter-Klasse kann Abhängigkeiten ermitteln, die Beziehungen zwischen Objekten verstehen und die Bearbeitung der Abhängigkeitshierarchie aktivieren. Das Hauptobjekt zur Skripterstellung ist das Scripter-Objekt. Daneben gibt es mehrere unterstützende Objekte, die Abhängigkeiten behandeln und auf Fortschritts- oder Fehlerereignisse antworten.

Das Scripter-Objekt unterstützt die folgenden erweiterten Optionen zur Skripterstellung:

  • Einfache einphasige Skripterstellung (erstellt das Skript in einem Schritt)

  • Erweiterte dreiphasige Skripterstellung (erstellt das Skript in drei Schritten: Ermittlung von Abhängigkeiten, Listengenerierung, Skriptgenerierung)

  • Bidirektionale Abhängigkeitsermittlung (ermöglicht die Ermittlung von Abhängigkeiten oder abhängigen Elementen)

  • Antwort auf Fortschrittsereignisse

  • Antwort auf Fehlerereignisse

Eindeutige Ressourcennamen

Ein Schlüsselkonzept bei der Verwendung der SMO-Objektbibliothek ist der eindeutige Ressourcenname (Unique Resource Name, URN). Die URN-Syntax ähnelt der XPath-Syntax. Die XPath-Syntax stellt einen Hierarchiepfad zur Angabe eines Objekts dar, bei dem jede Ebene Qualifizierer und Funktionen aufweist. In SMO verfügt der URN über zwei Elemente, den Pfad und die Attributbenennung mit eingeschränkter Funktionalität. Über den Pfad wird der Speicherort des Objekts angegeben, während die Attributbenennung eine gewisse Filterung erlaubt.

Ein URN-Beispiel für eine Datenbank ist

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

Der URN eines Objekts kann abgerufen werden, indem auf seine URN-Eigenschaft verwiesen wird. Das Scripter-Objekt verwendet ebenfalls URNs als Parameter, die Objektreferenzen an die Methode des Scripter-Objekts übergeben. Darüber hinaus kann ein URN für die GetSmoObject(Urn)-Methode des Server-Objekts angegeben werden. Damit wird eine Instanz des SMO-Objekts erstellt.

Neue SQL Server-Features in SMO

Tabellen- und Indexpartitionierung

Mithilfe der Indextabellenpartitionierung können Sie die Spannweite von Daten in Tabellen und Indizes dateigruppenübergreifend verwalten. Dieses neue Feature wird durch SMO-Objekte dargestellt.

Endpunkte

SOAP- und Datenbankspiegelungs-Anforderungen werden von Endpunkten verarbeitet, die das Endpoint-Objekt verwenden.

Snapshotisolation/Versionsverwaltung auf Zeilenebene

Die Snapshotisolation (Zeilenebenen-Versionsverwaltung) wird durch neue Database-Objekteigenschaften dargestellt.

XML-Schemanamespace, XML-Indizes und XML-Datentyp

XML-Schemanamespaces werden in SMO durch eine Auflistung von Objekten dargestellt. XML-Indizes werden in SMO durch eine Index-Objekteigenschaft dargestellt.

Erweiterte Volltextsuche

In SMO werden neue Objekte bereitgestellt, die eine erweiterte Volltextsuche ermöglichen.

Seitenüberprüfung

Das PageVerify-Objekt stellt Optionen zur Überprüfung von Datenbankseiten dar.

Snapshotdatenbanken

Eine Snapshotdatenbank ist eine schreibgeschützte Kopie einer bestimmten Datenbank zu einem gegebenen Zeitpunkt. Eine Snapshotdatenbank kann mit der IsDatabaseSnapshot-Eigenschaft des Database-Objekts angegeben werden.

Service Broker

Service Broker und seine Funktionalität werden durch eine Gruppe von Objekten dargestellt.

Indexerweiterungen

SQL Server-Indexerweiterungen werden durch neue Eigenschaften im Index-Objekt dargestellt.

SMO und SQL-DMO

Das SMO-Objektmodell löst SQL-DMO ab und ersetzt dieses. SMO unterstützt SQL Server 2000, SQL Server 2005 und SQL Server 2008. Es unterstützt zusätzliche SQL Server-Verwaltungsaufgaben und enthält in SQL Server zahlreiche neue Features. SMO wurde mit Blick auf größere Effizienz und umfassendere Steuerungsfunktionen entworfen.

Die DMO-Bibliothek ist ein COM-Objektmodell, während SMO als .NET Framework-Assembly implementiert wird. COM-Komponenten sind Bibliotheken, die wiederholt verwendbare Funktionalität für Anwendungen und für die Programmierung nicht verwalteter Anwendungen bereitstellen. Die .NET Framework-Assemblys stellen die wiederverwendbare Funktionalität für .NET Framework zum Schreiben verwalteter Codeanwendungen bereit.

Während der Umstellung auf .NET Framework-Technologie können Anwendungen teilweise in verwaltetem und teilweise in nicht verwaltetem Code geschrieben werden. Mithilfe von .NET Framework können Sie Schnittstellen zu COM-Komponenten einrichten. Hierfür ist eine primäre Interopassembly erforderlich. Für SQL-DMO ist ein Laufzeitwrapper erforderlich, damit Aufrufe von einer .NET Framework-basierten Anwendung möglich sind.