Visão geral (SMO)
Aplica-se a: SQL ServerBanco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics
Os Objetos de Gerenciamento do SQL Server (SMO) são objetos projetados para o gerenciamento programático do Microsoft SQL Server. Você pode usar o SMO para criar aplicativos de gerenciamento personalizados do SQL Server. Embora o SQL Server Management Studio seja um aplicativo poderoso e extenso para gerenciar o SQL Server, pode haver momentos em que você seria melhor atendido por um aplicativo SMO.
Por exemplo, os aplicativos de usuário que controlam as tarefas de gerenciamento do SQL Server podem ter que ser simplificados para atender às necessidades de novos usuários e reduzir os custos de treinamento. Talvez seja necessário criar bancos de dados personalizados do SQL Server ou criar um aplicativo para criar e monitorar a eficiência dos í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.
Como o SMO é compatível com o SQL Server 2005 (9.x) e versões posteriores, você pode gerenciar facilmente um ambiente de várias versões.
Os recursos do SMO incluem o seguinte:
Modelo de objeto armazenado em cache e criação de instância de objeto otimizada. Os objetos são carregados somente quando 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 em lote de instruções Transact-SQL. As instruções são processadas em lote para melhorar o desempenho de rede.
Capture instruções Transact-SQL. Permite capturar qualquer operação em um script. O Management Studio usa esse recurso para criar scripts de uma operação em vez de executá-la imediatamente.
Gerenciamento de serviços do SQL Server com o Provedor WMI. Os serviços do SQL Server podem ser iniciados, interrompidos e pausados programaticamente.
Scripts avançados. Os scripts Transact-SQL podem ser gerados para recriar objetos do SQL Server que descrevem relações com 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 novos objetos ou propriedades muitos recursos e componentes que foram introduzidos no SQL Server 2005 (9.x). Esses novos recursos e componentes incluem:
Tabela e particionamento de índice para armazenamento de dados em um esquema de partição. Para saber mais, confira Partitioned Tables and Indexes.
Pontos de extremidade de HTTP para o gerenciamento de solicitações de SOAP. Para obter mais informações, consulte Implementing Endpoints.
Isolamento de instantâneo e versão do nível de linha para aprimoramento de simultaneidade. Para obter mais informações, confira Trabalhando com o isolamento de instantâneos.
A coleção de esquemas XML, os índices XML e o tipo de dados XML fornecem validação e armazenamento de dados XML. Para obter mais informações, consulte Coleções de esquemas XML (SQL Server) e Usando esquemas XML.
Bancos de dados de instantâneo para criar cópias somente leitura de bancos de dados.
Suporte do Service Broker para comunicação baseada em mensagens. Para obter mais informações, consulte SQL Server Service Broker.
Suporte a sinônimos para vários nomes de objetos de banco de dados do SQL Server. Para obter mais informações, consulte Sinônimos (Mecanismo de Banco de Dados).
O gerenciamento do Database Mail que permite criar servidores de email, perfis de email e contas de email no SQL Server. Para obter mais informações, consulte Database Mail.
Servidores registrados dão suporte para registrar informações de conexão. Para obter mais informações, consulte Register Servers.
Rastreamento e reprodução de eventos do SQL Server. Para obter mais informações, consulte SQL Server Profiler, SQL Trace, SQL Server Distributed Replaye Extended Events.
Suporte a certificados e chaves para controle de segurança. Para obter mais informações, consulte Encryption Hierarchy.
Gatilhos DDL para adicionar funcionalidade quando ocorrerem eventos de DDL. Para obter mais informações, consulte DDL Triggers.
O namespace do SMO é Microsoft.SqlServer.Management.Smo. O SMO é implementado como um assembly do Microsoft .NET Framework. Isso significa que o Common Language Runtime do Microsoft .NET Framework versão 2.0 deve ser instalado antes de usar os objetos SMO. Os assemblies do SMO são instalados por padrão no GAC (Cache de Assembly Global) com a opção SDK do SQL Server. Os assemblies estão localizados em C:\Program Files\Microsoft SQL Server\130\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 ServerConnection classe é usada para estabelecer uma conexão com a instância do SQL Server e controlar o modo de captura dos comandos enviados a ela.
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, nas quais estão os bancos de dados e, em seguida, 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 é 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.
Recursos do SMO
Desempenho otimizado
A arquitetura do SMO é eficiente em termos de memória porque os objetos são apenas parcialmente instanciados no início e informações mínimas de propriedade são solicitadas 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. Não instanciado e totalmente instanciado são os estados tradicionais de instanciação. 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 para uma instância do SQL Server diretamente à medida que são incorridas. A execução de captura é a alternativa a isto.
A execução de captura permite capturar lotes Transact-SQL que normalmente seriam executados. 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 tablee create index podem ser enviadas em um lote e ser executadas como três etapas sequenciais. 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 do SMO um modelo de objeto simples que é semelhante às classes do SMO, sem a necessidade de entender o modelo de programação representado pelo namespace e os detalhes do Provedor WMI do SQL Server. O Provedor WMI permite configurar serviços do SQL Server, aliases e bibliotecas de rede de cliente e servidor.
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)
Script avançado 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 recursos 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='AdventureWorks2022']
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 . Além disso, é possível especificar um URN para o método GetSmoObject do objeto Server . Isto é usado para criar uma instância do objeto do SMO.
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.
Extremidade
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 em 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 do 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 de pesquisa de texto completo
São fornecidos objetos novos no SMO representando os aprimoramentos da pesquisa de texto completo.
Verificação de Página
O objeto PageVerify representa as opções de verificação de página do banco de dados.
Bancos de dados de instantâneos
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 de índice
Os aprimoramentos de índice do SQL Server são representados por novas propriedades no Index objeto.