Panoramica (SMO)

SQL Server Management Objects (SMO) sono oggetti progettati per la gestione a livello di programmazione di Microsoft SQL Server. È possibile utilizzare SMO per compilare applicazioni di gestione SQL Server personalizzate. Sebbene SQL Server Management Studio sia un'applicazione potente e completa per la gestione di SQL Server, in alcuni casi è possibile che sia necessario utilizzare un'applicazione SMO.

È possibile, ad esempio, che sia necessario semplificare le applicazioni utente che controllano le attività di gestione SQL Server per soddisfare le necessità di nuovi utenti e ridurre i costi di formazione. È possibile dovere creare database SQL Server personalizzati o creare un'applicazione per la creazione e il controllo dell'efficienza degli indici. Un'applicazione SMO può anche essere utilizzata per includere perfettamente hardware o software di terze parti nell'applicazione per la gestione di database.

Il modello a oggetti SMO estende e sostituisce il modello a oggetti SQL-DMO (Distributed Management Objects). Rispetto a SQL-DMO, SMO migliora prestazioni, controllo e semplicità di utilizzo. La maggior parte della funzionalità di SQL-DMO è inclusa in SMO e sono disponibili diverse classi nuove che supportano le nuove caratteristiche presenti in SQL Server. Il modello a oggetti è intuitivo e, se possibile, utilizza la terminologia di SQL-DMO per consentire il trasferimento delle competenze.

Poiché SMO è compatibile con SQL Server 2000, SQL Server 2005, SQL Server 2008 e SQL Server 2008 R2, è possibile gestire facilmente un ambiente in cui sono presenti più versioni.

Nota importanteImportante

SMO non supporta il livello di compatibilità 60, 65 o 70. Se si utilizza SMO con un database impostato sul livello di compatibilità 60, 65 o 70, non sarà possibile gestire il database mediante SMO.

Di seguito sono elencate le nuove caratteristiche di SMO:

  • Modello a oggetti memorizzato nella cache e creazione ottimizzata dell'istanza dell'oggetto. Gli oggetti vengono caricati solo quando viene fatto loro riferimento in modo specifico. Le proprietà degli oggetti vengono caricate solo parzialmente quando si creano gli oggetti. Gli oggetti e le proprietà rimanenti vengono caricati quando viene fatto loro riferimento in modo diretto.

  • Esecuzione in batch delle istruzioni Transact-SQL. Le istruzioni vengono eseguite in batch per migliorare le prestazioni della rete.

  • Acquisizione delle istruzioni Transact-SQL. Consente l'acquisizione di tutte le operazioni in uno script. Management Studio utilizza questa funzionalità per creare uno script di un'operazione anziché eseguirla immediatamente.

  • Gestione di servizi SQL Server con il provider WMI. I servizi SQL Server possono essere avviati, arrestati e sospesi a livello di programmazione.

  • Generazione di script avanzata. Gli script Transact-SQL possono essere generati per ricreare oggetti SQL Server che descrivono le relazioni con altri oggetti nell'istanza di SQL Server.

  • Utilizzo di nomi di risorse univoci (URN). Un URN consente di creare istanze di oggetti SMO e di farvi riferimento.

In SMO sono inoltre rappresentati come nuovi oggetti o proprietà molte caratteristiche e componenti introdotti in SQL Server 2005. Queste nuove caratteristiche e componenti includono:

Lo spazio dei nomi SMO è Microsoft.SqlServer.Management.Smo. SMO viene implementato come assembly Microsoft .NET Framework. Ciò significa che Common Language Runtime (CLR) da Microsoft .NET Framework versione 2.0 deve essere installato prima di utilizzare gli oggetti SMO. Gli assembly SMO vengono installati per impostazione predefinita nel Global Assembly Cache (GAC) con l'opzione SDK di SQL Server. Gli assembly si trovano in C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\. Per ulteriori informazioni, vedere la documentazione di Visual Studio .NET Framework.

Classi SMO

Le classi SMO includono due categorie: classi di istanze e classi di utilità.

Classi di istanze

Le classi di istanze rappresentano gli oggetti SQL Server quali esempio server, database, tabelle, trigger e stored procedure. La classe ServerConnection viene utilizzata per stabilire una connessione all'istanza di SQL Server e per controllare la modalità di acquisizione dei comandi inviati.

Gli oggetti dell'istanza SMO formano una gerarchia che rappresenta la gerarchia di un server database. All'inizio sono presenti le istanze di SQL Server seguiti dai database, quindi dalle tabelle, le colonne, i trigger e così via. Se è presente una relazione che prevede un elemento padre per molti elementi figlio, ad esempio una tabella contenente una o più colonne, l'elemento figlio verrà rappresentato da una raccolta di oggetti. In caso contrario l'elemento figlio sarà rappresentato solo da un oggetto.

Classi di utilità

Le classi di utilità sono un gruppo di oggetti creato in modo esplicito per eseguire attività specifiche. Sono state divise in diverse gerarchie di oggetti in base alla funzione:

  • Classe di trasferimento. Utilizzata per trasferire lo schema e i dati in un altro database.

  • Classi di backup e ripristino. Utilizzate per eseguire il backup e il ripristino di database.

  • Classe di script. Utilizzata per creare file script per la rigenerazione di oggetti e le relative dipendenze.

Nuove caratteristiche SMO

Prestazioni ottimizzate

In SQL-DMO l'enumerazione degli oggetti richiedeva la creazione di un'istanza completa di ogni oggetto all'interno di una raccolta. Tale operazione non è efficiente in termini di rete e footprint di memoria. In molte situazioni è possibile creare l'istanza di un oggetto senza fare riferimento in modo esplicito alla maggior parte delle relative proprietà.

L'architettura SMO è più efficiente in termini di memoria poiché inizialmente viene creata solo un'istanza parziale degli oggetti e le informazioni minime sulle proprietà vengono richieste dal server. La creazione di un'istanza completa degli oggetti viene posticipata fino a quando non viene fatto riferimento all'oggetto in modo esplicito. L'istanza completa di un oggetto viene creata un'istanza quando viene richiesta una proprietà che non fa parte del set di proprietà recuperate inizialmente o quando viene chiamato un metodo che richiede tale proprietà. La transizione tra la creazione di un'istanza parziale e un'istanza completa degli oggetti è visibile all'utente. Inoltre, alcune proprietà che utilizzano molta memoria non vengono mai recuperate, a meno che non venga fatto riferimento alla proprietà in modo esplicito. Un esempio è la proprietà Size della proprietà dell'oggetto Database. Tuttavia, la creazione di un'istanza parziale richiede più tempo di round trip in rete e potrebbe non essere la migliore opzione per le prestazioni ottimizzate dell'applicazione.

È possibile controllare la creazione di un'istanza in base all'ambiente di sistema. La creazione di un'istanza posticipata riduce la quantità di memoria richiesta dall'applicazione, sebbene possa generare molte richieste del server quando viene fatto riferimento alle proprietà.

Le classi di istanze, ovvero gli oggetti che rappresentano gli oggetti di database reali, possono avere tre livelli di creazione di un'istanza: livello minimo quando vengono lette in un solo blocco solo le proprietà necessarie minime, livello parziale quando vengono lette in un solo blocco tutte le proprietà che utilizzano un quantità di memoria relativamente grande e livello completo. Gli stati tradizionali della creazione di un'istanza sono lo stato completo e lo stato non istanziato. Lo stato parziale aumenta l'efficienza poiché la creazione di un'istanza parziale di un oggetto non contiene valori per il set completo delle proprietà dell'oggetto. Lo stato parziale è lo stato predefinito per un oggetto al quale non viene fatto direttamente riferimento. Quando viene fatto riferimento a una di queste proprietà, viene generato un errore in cui viene richiesta la creazione di un'istanza completa dell'oggetto.

Esecuzione dell'acquisizione

L'esecuzione diretta è il metodo di esecuzione standard. Le istruzioni vengono inviate direttamente a un'istanza di SQL Server appena vengono generate. L'esecuzione dell'acquisizione rappresenta il metodo alternativo.

L'esecuzione dell'acquisizione consente di acquisire i batch Transact-SQL generalmente eseguiti, consentendo così al programmatore SMO di posticipare lo script, archiviarlo per un'esecuzione successiva o fornire un'anteprima per l'utente finale. È possibile ad esempio inviare in un unico batch un'istruzione create database, un'istruzione create table e un'istruzione create index ed effettuare l'esecuzione come tre passaggi sequenziali. Questa funzionalità viene controllata dall'utente tramite l'oggetto Server.

Provider WMI

In SMO sono inclusi gli oggetti provider WMI, fornendo al programmatore SMO un modello a oggetti semplice che è molto simile alle classi SMO, senza dovere necessariamente comprendere il modello di programmazione rappresentato dallo spazio dei nomi e dai dettagli del provider WMI di SQL Server. Il provider WMI consente di configurare servizi, alias e librerie di rete client e server di SQL Server.

Generazione di script

In SMO la generazione di script è stata migliorata e spostata nella classe Scripter. La classe Scripter può individuare dipendenze, comprendere le relazioni tra gli oggetti e consentire la modifica della gerarchia delle dipendenze. L'oggetto scripting principale è l'oggetto Scripter. Sono inoltre disponibili diversi oggetti di supporto che gestiscono le dipendenze e rispondono agli eventi di stato e di errore.

L'oggetto Scripter supporta le seguenti opzioni di scripting avanzate:

  • Scripting semplice in una fase (crea lo script in un unico passaggio)

  • Scripting avanzato in tre fasi (crea lo script in tre passaggi: individuazione dipendenze, generazione elenchi e generazione script)

  • Individuazione dipendenze in due modi (consente l'individuazione di dipendenze o di dipendenti)

  • Risposta agli eventi di stato

  • Risposta agli eventi di errore

Nomi di risorse univoci

Un concetto chiave nell'utilizzo della libreria di oggetti SMO è rappresentato dai nomi di risorse univoci (URN, Unique Resource Name). L'URN utilizza una sintassi simile a XPath. XPath è un percorso della gerarchia utilizzato per specificare un oggetto nel quale ogni livello dispone di qualificatori e funzioni. In SMO l'URN dispone di due elementi: percorso e denominazione degli attributi con funzionalità limitata. Il percorso viene utilizzato per specificare il percorso dell'oggetto mentre la denominazione degli attributi consente un grado di filtraggio.

Un esempio di URN per un database è:

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

L'URN di un oggetto può essere recuperato facendo riferimento alla proprietà dell'URN. L'oggetto Scripter utilizza inoltre gli URN come parametri che passano i riferimenti all'oggetto al metodo dell'oggetto Scripter. Inoltre, è possibile specificare un URN per il metodo GetSmoObject(Urn) dell'oggetto Server utilizzato per creare un'istanza dell'oggetto SMO.

Nuove caratteristiche di SQL Server rappresentate in SMO

Partizionamento di tabelle e indici

Il partizionamento di tabelle e indici consente di gestire la distribuzione di dati in tabelle e indici attraverso filegroup. Questa nuova caratteristica viene rappresentata mediante oggetti SMO.

Endpoint

Le richieste di mirroring del database e SOAP vengono gestite dagli endpoint mediante l'oggetto Endpoint.

Isolamento dello snapshot/controllo delle versioni a livello di riga

L'isolamento dello snapshot (controllo delle versioni a livello di riga) è rappresentato da nuove proprietà dell'oggetto Database.

Spazio dei nomi di XML Schema, indici XML e tipo di dati XML

Gli spazi dei nomi di XML Schema sono rappresentati in SMO da una raccolta di oggetti. Gli indici XML sono rappresentati in SMO da una proprietà dell'oggetto Index.

Miglioramenti della ricerca full-text

In SMO vengono forniti nuovi oggetti che rappresentano i miglioramenti alla ricerca full-text.

Verifica pagina

L'oggetto PageVerify rappresenta le opzioni di verifica pagina del database.

Database snapshot

Un database snapshot è una copia di sola lettura di un database specifico in un momento specifico. Un database snapshot può essere specificato tramite la proprietà IsDatabaseSnapshot dell'oggetto Database.

Service Broker

Service Broker e la relativa funzionalità sono rappresentati da un gruppo di oggetti

Miglioramenti degli indici

I miglioramenti degli indici di SQL Server sono rappresentati da nuove proprietà nell'oggetto Index.

SMO e SQL-DMO

Il modello a oggetti SMO sostituisce SQL-DMO. SMO supporta SQL Server 2000, SQL Server 2005, SQL Server 2008 e SQL Server 2008 R2. Supporta più attività di gestione di SQL Server e contiene molte caratteristiche nuove di SQL Server. SMO è progettato per essere più efficiente e fornire un maggiore controllo.

La libreria DMO è un modello a oggetti COM, mentre SMO viene implementato come assembly .NET Framework. I componenti COM sono librerie che forniscono funzionalità riutilizzabili per le applicazioni e per la programmazione di applicazioni non gestite. Gli assembly .NET Framework forniscono funzionalità riutilizzabili per .NET Framework per la scrittura di applicazioni in codice gestito.

Durante la transizione alla tecnologia .NET Framework è possibile avere applicazioni scritte in parte in codice gestito e in parte in codice non gestito. .NET Framework consente di interfacciarsi con i componenti COM che richiedono un assembly di interoperabilità primario. È necessario un wrapper di runtime per SQL-DMO in modo che possa essere chiamato da un'applicazione basata su .NET Framework.