Visão geral (SMO)

Os SMO (SQL Server Management Objects) são objetos criados para gerenciamento programático do MicrosoftSQL Server. Você pode usar os SMO para compilar aplicativos de gerenciamento do SQL Server personalizados. Embora o SQL Server Management Studio seja um aplicativo extenso e abrangente para o gerenciamento de SQL Server, pode haver vezes em que um aplicativo SMO funcione melhor.

Por exemplo, pode ser necessário simplificar os aplicativos de usuário que controlam as tarefas de gerenciamento do SQL Server para atender as necessidades dos novos usuários e reduzir custos de treinamento. Pode ser necessário criar bancos de dados do SQL Server personalizados ou criar um aplicativo para criar e monitorar a eficiência de índices. Um aplicativo de SMO também pode ser usado para incluir hardware ou software de terceiros de modo homogêneo no aplicativo de gerenciamento de banco de dados.

O modelo de objeto do SMO amplia e substitui o modelo de objeto SQL-DMO (Distributed Management Objects). Comparado ao SQL-DMO, o SMO aumenta o desempenho, o controle e a facilidade de uso. A maior parte da funcionalidade SQL-DMO está incluída no SMO, e há várias classes novas com suporte aos novos recursos no SQL Server. O modelo de objeto é intuitivo e usa terminologia do SQL-DMO, onde é possível, para ajudar a transferir suas habilidades.

Como o SMO é compatível com o SQL Server 2000, o SQL Server 2005 e o SQL Server 2008, você gerencia facilmente um ambiente de várias versões.

Observação importanteImportante

O SMO não dá suporte ao nível de compatibilidade 60, 65 ou 70. Se você usar o SMO com um conjunto de bancos de dados com nível de compatibilidade 60, 65 ou 70, não poderá gerenciar o banco de dados usando o SMO.

Os novos recursos do SMO incluem:

  • Modelo de objeto armazenado em cache e criação de instância de objeto otimizada. Os objetos são carregados somente quando especificamente referenciados. As propriedades do objeto são parcialmente carregadas apenas quando o objeto é criado. Os objetos e propriedades restantes são carregados quando referenciados diretamente.

  • Execução processada em lotes de instruções Transact-SQL. As instruções são processadas em lote para melhorar o desempenho de rede.

  • Captura de instruções Transact-SQL. Permite capturar qualquer operação em um script. O Management Studio usa esse recurso para executar uma operação em script, em vez de executá-la imediatamente.

  • Gerenciamento de serviços do SQL Server com o Provedor WMI. Serviços do SQL Server podem ser iniciados, interrompidos e pausados de forma programática.

  • Script Avançado. Os scripts do Transact-SQL podem ser gerados para recriar objetos do SQL Server que descrevem relações a outros objetos na instância do SQL Server.

  • Uso de URNs (nomes de recurso exclusivos). Um URN permite criar instâncias e referências de objetos de SMO.

O SMO também representa como objetos ou propriedades novos muitos recursos e componentes que foram introduzidos no SQL Server 2005. Esses novos recursos e componentes incluem:

O namespace do SMO é Microsoft.SqlServer.Management.Smo. O SMO é implementado como um assembly Microsoft .NET Framework. Isso significa que o Common Language Runtime do Microsoft.NET Framework versão 2.0 deve ser instalado antes da utilização dos objetos do SMO. Os assemblies do SMO são instalados por padrão no GAC (cache de assembly global) com o a opção SDK do SQL Server. Os assemblies estão localizados em C:\Arquivos de Programas\Microsoft SQL Server\100\SDK\Assemblies\. Para obter mais informações, consulte a documentação do Visual Studio.NET Framework.

Classes do SMO

As classes do SMO incluem duas categorias: classes de instância e classes de utilitário.

Classes de instância

As classes de instância representam objetos do SQL Server como servidores, bancos de dados, tabelas, gatilhos e procedimentos armazenados. A classe ServerConnection é usada para estabelecer uma conexão com a instância do SQL Server e controlar o modo de captura de comandos enviado a ele.

Os objetos da instância do SMO formam uma hierarquia que representa a hierarquia de um servidor de banco de dados. Na parte superior estão as instâncias do SQL Server, sob as quais estão os bancos de dados seguidos das tabelas, colunas, gatilhos e assim por diante. Se for lógica a existência de uma relação de um pai para vários filhos, como uma tabela tendo uma ou mais colunas, o filho é representado por uma coleção de objetos. Caso contrário, o filho apenas é representado por um objeto.

Classes de utilitário

Classes de utilitários são um grupo de objetos que foram criados para executar tarefas específicas explicitamente. Elas foram divididas em hierarquias de objeto diferentes baseado em função:

  • Classe de transferência. Usada para transferir esquema e dados a outro banco de dados.

  • Classes de backup e restauração. Usadas para fazer backup e restaurar bancos de dados.

  • Classe scripter. Usada para criar arquivos de script para a regeneração de objetos e suas dependências.

Novos recursos do SMO

Desempenho otimizado

No SQL-DMO, a enumeração de objetos exigia que cada objeto dentro de uma coleção fosse totalmente instanciado. Isto é ineficiente em termos de rede e volume de memória. Em muitas ocasiões, um objeto pode ser instanciado sem que a maioria de suas propriedades seja referenciada explicitamente.

A arquitetura do SMO é mais eficiente em termos de memória, pois os objetos são somente parcialmente instanciados primeiro, e o mínimo de informações de propriedade é solicitado do servidor. A instanciação total de objetos é atrasada até que o objeto seja explicitamente referenciado. Um objeto é totalmente instanciado quando uma propriedade é solicitada e não está no conjunto de propriedades recuperadas primeiramente ou quando um método é chamado exigindo tal propriedade. A transição entre objetos parcialmente e totalmente instanciados é transparente para o usuário. Além disso, algumas propriedades que usam muitos memória nunca são recuperadas, a menos que a propriedade seja explicitamente referenciada. Um exemplo disto é a propriedade Size da propriedade do objeto Database. Porém, a instanciação parcial requer mais viagens de ida e volta de rede e não é a melhor opção de desempenho para o seu aplicativo.

Você pode controlar instanciação para que fique adequada ao ambiente do sistema. A dependência na instanciação adiada minimiza a quantidade de memória exigida pelo aplicativo, embora possa ativar muitas solicitações do servidor quando as propriedades forem referenciadas.

Classes de instância – objetos que representam objetos de banco de dados reais – podem existir em três níveis de instanciação. São elas: minimamente instanciadas (somente as propriedades mínimas são lidas em um bloco), parcialmente instanciadas (todas as propriedades que usam uma quantidade relativamente grande de memória são lidas em um bloco) e totalmente instanciadas. Os estados de instanciação sem instância e totalmente instanciadas são tradicionais. O estado parcialmente instanciadas aumenta eficiência, porque um objeto parcialmente instanciado não contém valores para o conjunto completo de propriedades de objeto. A instanciação parcial é o estado padrão para um objeto que não é referenciado diretamente. Quando um destas propriedades é referenciada, é gerada uma falha que solicita uma instanciação completa do objeto.

Execução de captura

A execução direta é o método habitual de execução. As instruções são enviadas diretamente a uma instância do SQL Server conforme são incorridas. A execução de captura é a alternativa a isto.

A execução de captura permite capturar os lotes do Transact-SQL que seriam executados normalmente. Dessa forma, o programador de SMO pode adiar o script, armazená-lo para execução posterior ou fornecer uma visualização para o usuário final. Por exemplo, uma instrução create database, um create table e create index podem ser enviadas em um lote e ser executadas como três etapas seqüenciais. Essa funcionalidade é controlada pelo usuário com o objeto Server.

Provedor WMI

Os objetos do Provedor WMI são quebrados pelo SMO. Isso fornece ao programador de SMO um modelo de objeto simples que é muito similar a classes de SMO, sem a necessidade de compreender o modelo de programação representado pelo namespace e os detalhes do Provedor WMI do SQL Server. O Provedor WMI permite configurar serviços, aliases e bibliotecas de rede do servidor e do cliente do SQL Server.

Scripts

No SMO, a criação de scripts foi aprimorada e movida para a classe Scripter. A classe Scripter pode descobrir dependências, entender as relações entre objetos e habilitar a manipulação da hierarquia de dependência. O objeto principal da criação de scripts é o Scripter. Também há vários objetos que dão suporte, manipulam as dependências e respondem a eventos Error ou Progress.

O objeto Scripter dá suporte às seguintes opções de script avançadas:

  • Criação de script de 1 fase (cria o script em uma etapa)

  • Criação de script de 3 fases (cria o script em três etapas; descoberta de dependência, geração de lista, geração de script)

  • Descoberta de dependência bidirecional (permite a descoberta de dependências ou dependentes)

  • Resposta para eventos Progress

  • Resposta para eventos Error

Nomes de recurso exclusivos

Um conceito fundamental no uso da biblioteca de objetos do SMO é o URN (nome de recurso exclusivo). O URN usa uma sintaxe semelhante ao XPath. O XPath é um caminho de hierarquia usado para especificar um objeto no qual cada nível tem qualificadores e funções. No SMO, o URN tem dois elementos, o caminho e nomeação de atributo que limitaram funcionalidade. O caminho é usado para especificar o local do objeto, enquanto a nomeação do atributo permite um grau de filtragem.

Um exemplo de uma URN para um banco de dados é

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

O URN de um objeto pode ser recuperado pela referência de sua propriedade de URN. O objeto Scripter também usa URNs como parâmetros que transmitem referências de objeto ao método do objeto Scripter. Alem disso, é possível especificar um URN para o método do objeto GetSmoObject(Urn) do objeto Server. Isto é usado para criar uma instância do objeto do SMO.

Novos recursos do SQL Server representados no SMO

Particionamento de tabela e índice

O particionamento de tabela e índice permite gerenciar a expansão de dados em tabelas e índices por grupos de arquivos. Esse recurso novo é representado por objetos do SMO.

EndPoints

As solicitações de espelhamento de banco de dados e SOAP são manipuladas por pontos de extremidade que usam o objeto Endpoint.

Isolamento de instantâneo/Controle de versão no nível de linha

O Isolamento de instantâneo (controle de versão no nível de linha) é representado através de novas propriedades de objeto do Database.

Namespace de esquema XML, índices XML e tipo de dados XML

Namespaces de Esquema XML são representados no SMO por uma coleção de objetos. Os índices XML são representados no SMO por uma propriedade de objeto do Index.

Aprimoramentos da pesquisa de texto completo

São fornecidos objetos novos no SMO representando os aprimoramentos da pesquisa de texto completo.

Página Verificar

O objeto PageVerify representa as opções de verificação de página do banco de dados.

Bancos de dados de instantâneo

Um banco de dados de instantâneo é uma cópia somente leitura de um banco de dados especificado como momento determinado. Um banco de dados de instantâneo pode ser especificado usando a propriedade IsDatabaseSnapshot do objeto Database.

Service Broker

O Service Broker e sua funcionalidade são representados por um grupo de objetos

Aprimoramentos do índice

Os aprimoramentos de índice do SQL Server são representados por propriedades novas no objeto Index.

SMO e SQL-DMO

O modelo de objeto do SMO substitui o SQL-DMO. O SMO dá suporte a SQL Server 2000, SQL Server 2005 e SQL Server 2008. Ele dá suporte a mais tarefas de gerenciamento do SQL Server e contém muitos recursos novos no SQL Server. O SMO foi criado para ser mais eficiente e fornecer mais controle.

A biblioteca do DMO é um modelo de objeto COM, ao passo que o SMO é implementado como um assembly .NET Framework. Os componentes COM são bibliotecas que fornecem funcionalidade reutilizável para aplicativos e na programação de aplicativos não gerenciados. Os assemblies do .NET Framework fornecem funcionalidade reutilizável para o .NET Framework a fim de gravar aplicativos de código gerenciado.

Durante a transição para a tecnologia do .NET Framework é possível ter aplicativos gravados parcialmente em código gerenciado e parcialmente em código não gerenciado. O .NET Framework permite que você crie uma interface com componentes do COM, que requer um assembly de interoperabilidade Primário. Um wrapper de tempo de execução é necessário para o SQL-DMO, para que ele possa ser chamado de um aplicativo baseado em .NET Framework.