SQL Server 2012: Às vezes, parcial é melhor

O SQL Server 2012 oferecerá suporte a bancos de dados parcialmente independentes, que devem facilitar a solução de alguns problemas de migração e consolidação.

Denny Cherry

Os bancos de dados parcialmente independentes resolvem alguns dos maiores problemas de consolidação e migração que surgem em torno dos bancos de dados SQL Server, desde sua versão 4.2. Felizmente, esse será um dos muitos novos recursos que estão sendo introduzidos no SQL Server 2012.

O primeiro problema que os bancos de dados parcialmente independentes resolvem é quanto à movimentação de uma instância do SQL Server para outra sem precisar identificar os Logons do SQL Server usados pelo banco de dados. Isso também inclui a criação desses logons na instância do banco de dados de destino.

O SQL Server 2012 faz isso usando um logon independente do SQL Server. Isso significa um usuário do SQL Server criado dentro do banco de dados independente, mas sem um logon correspondente do SQL Server. Esse usuário independente dentro do banco de dados independente tem uma senha armazenada no banco de dados, de modo que a autenticação funciona conforme o esperado.

O segundo problema resolvido é a eliminação de conflitos de agrupamento entre as tabelas nos bancos de dados independentes e as tabelas temporárias. O SQL Server cria automaticamente tabelas temporárias dentro do escopo do banco de dados independente quando ele é agrupado. Isso permite que a mesma instância do SQL Server hospede bancos de dados de diferentes agrupamentos, sem precisar modificar as instruções CREATE TABLE para especificar o agrupamento nem ter que especificar a instrução COLLATE dentro da sintaxe da instrução JOIN.

Diferentemente de alguns dos novos recursos que exigem o nível de compatibilidade de banco de dados definido para o valor mais recente, os bancos de dados parcialmente independentes, atualmente, contam com o suporte do SQL Server 2005. O recurso de banco de dados independente, por outro lado, ainda não foi concluído. Ele deverá estar completo na versão CTP3 do SQL Server 2012 e quando o produto for liberado para fabricação durante o primeiro semestre de 2012.

Configure um banco de dados parcialmente independente

Para que seja possível alterar um banco de dados de dependente para parcialmente independente, é preciso primeiramente alterar uma configuração do servidor usando o procedimento armazenado do sistema sp_configure. Use o procedimento armazenado do sistema sp_configure para alterar a configuração "contained database authentication" de 0 para 1, em seguida, use a instrução RECONFIGURE para ativar a nova configuração, como se segue:

EXEC sp_configure 'contained database authentication', 1 RECONFIGURE GO

Após habilitar a configuração "contained database authentication", você poderá alterar um banco de dados específico para parcialmente independente. É possível usar o SQL Server Management Studio, conforme mostrado na Figura 1, a instrução ALTER DATABASE ou criar um novo banco de dados como um banco de dados independente:

ALTER DATABASE: USE [master] GO ALTER DATABASE [Cont] SET CONTAINMENT=PARTIAL GO CREATE DATABASE: CREATE DATABASE [Cont1] CONTAINMENT=PARTIAL GO

Para criar um novo banco de dados parcialmente independente ou alterar um banco de dados para que ele seja parcialmente independente, conecte-se à instância do SQL Server no pesquisador de objetos. Clique com o botão direito do mouse para criar um novo banco de dados ou selecione um banco de dados existente. Selecione as propriedades (de acordo com a ação que está praticando - criando um banco de dados ou alterando um existente). Seja qual for o caso, selecione a guia "Opções" e altere na lista suspensa "Tipo de contenção" de "Nenhum" para "Parcial".

The Database Properties window lets you change the database containment setting

Figura 1 A janela Propriedades do Banco de Dados permite alterar a configuração de contenção do banco de dados.

Para alterar um banco de dados existente de dependente para parcialmente independente, use o T/SQL e a instrução ALTER DATABASE. Para alterar com êxito a configuração de contenção do banco de dados, a instrução ALTER DATABASE deve poder obter um bloqueio exclusivo de todo o banco de dados. Portanto, será preciso programar uma rápida interrupção com a unidade de negócios usando esse banco de dados específico.

Evite erros de agrupamento de tabelas temporárias

Os novos bancos de dados parcialmente independentes permitem que diversos agrupamentos diferentes existam na mesma instância do SQL Server. Você não terá que se preocupar com os problemas de agrupamento ao reunir tabelas temporárias. Isso pode ser testado com uma instância do Microsoft SQL Server, na qual se cria um banco de dados parcialmente independente de um agrupamento diferente. Em seguida, crie uma tabela física e uma tabela temporária nesse banco de dados parcialmente independente. Carregue os dados nas duas tabelas e tente juntá-las.

Crie um banco de dados usando o agrupamento de banco de dados Albanian_100_CI_AI_KS_WS, enquanto a instância está usando o agrupamento SQL_Latin1_General_CP1_CI_AS, como mostrado na Figura 2. Ele cria uma tabela denominada dbo.Employee nos novos bancos de dados e carrega três linhas na tabela. Ele também cria uma tabela temporária denominada #emp e insere uma única linha na tabela. Quando as tabelas são unidas no fim da consulta, uma linha é retornada. Sem a configuração de banco de dados independente definida como parcial, em vez de uma linha, seria retornado um erro.

Figura 2 Crie e use um banco de dados parcialmente independente.

use master GO CREATE DATABASE [Cont] CONTAINMENT = PARTIAL ONPRIMARY (NAME = N'Cont', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Cont.mdf', SIZE = 4096KB, FILEGROWTH= 1024KB) LOGON (NAME = N'Cont_log',FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Cont_log.ldf', SIZE = 1024KB, FILEGROWTH = 10%) COLLATE Albanian_100_CI_AI_KS_WS GO Use Cont GO Create table Employee (EmployeeId INTPRIMARYKEY, LastName nvarchar(100), FirstName nvarchar(100)) GO Insert into Employee (EmployeeId,LastName,FirstName) values (1,'last1','first1'), (2,'last2','first2'),(3,'last3','first3') GO Create table #emp (LastName nvarchar(100)) GO Insert into #emp (LastName) values ('last1') GO select* from Employee join #emp on Employee.LastName = #emp.LastName

Usuários independentes

Os usuários independentes são semelhantes aos Logons do SQL Server, exceto pelo fato de que eles não têm um logon que se alinha com o usuário do banco de dados independente. Crie um usuário independente com o SQL Server Management Studio ou a instrução CREAT USAR T/SQL.

Para usar o SQL Server Management Studio, conecte-se à instância que hospeda o banco de dados independente no pesquisador de objetos. Navegue para Bancos de Dados | {Seu Banco de Dados Independente} | Segurança | Usuários. Clique com o botão direito do mouse na pasta Usuários e selecione "Novo Usuário" no menu de contexto. Na lista suspensa “Tipo de usuário”, selecione “Usuário do SQL com senha.” Preencha o nome do usuário e os campos de senha (veja a Figura 3), bem como o esquema padrão e qualquer associação à função de banco de dados que seja preciso configurar.

Create a contained SQL user with SQL Server Management Studio

Figura 3 Crie um usuário independente do SQL com o SQL Server Management Studio.

Após criar o usuário independente, você pode examinar a exibição do catálogo sys.database_principals no banco de dados independente. O conjunto de registros resultante da consulta feita à exibição do catálogo mostrará a nova coluna denominada authentication_type definida com o valor 2. Também será mostrada a coluna authentication_type_desc definida com o valor “DATABASE” quando o usuário for um usuário independente.

Crie um usuário de banco de dados independente usando o T/SQL com a instrução CREATE USER. O SQL Server reconhece que você está criando um usuário independente, no lugar de um usuário que se alinha com um logon no nível de instância, quando a instrução WITH PASSWORD é especificada, como mostrado aqui:

CREATE USER MyContainedUser WITHPASSWORD = 'MyContainedUserPassword' GO

É possível criar usuários independentes do SQL, bem como Logons independentes do Windows. Altere a lista suspensa "Tipo de Usuário" (veja a Figura 4) para “Usuário do Windows” e insira o nome de usuário sem selecionar um logon.

Create a contained Windows Login using SQL Server Management Studio

Figura 4 Crie um Logon independente do Windows usando o SQL Server Management Studio.

Também é possível criar usuários independentes do Windows com a instrução CREATE USER T/SQL, como mostrado aqui:

CREATE USER [CAPT-MAL\test] WITH DEFAULT_SCHEMA = [dbo] GO

Faça logon no banco de dados independente com um logon independente, assim como um usuário tradicional (dependente). O grande truque para o usuário independente é que você deve especificar o nome do banco de dados na cadeia de conexão ao se conectar. Caso isso não seja feito, o SQL Server suporá que um Logon tradicional do SQL Server está tentando fazer a conexão. O logon falhará se não houver nenhum logon que corresponda ao nome de usuário e à senha definidos no nível de instância.

Faça isso na caixa de diálogo de conexão do SQL Server Management Studio clicando no botão Opções, na parte inferior da janela de logon. Selecione a guia "Propriedades da Conexão". O nome do banco de dados independente pode ser inserido na lista suspensa "Conectar ao banco de dados" da guia "Propriedades da Conexão" (veja a Figura 5).

Não será possível consultar a lista de bancos de dados hospedados na Instância do SQL Server como o usuário independente especificado na guia "Logon". O usuário independente não terá direitos para o banco de dados mestre sem primeiro se autenticar no banco de dados independente que mantém seu nome de usuário e sua senha. Por isso, você terá que saber o nome do banco de dados e digitá-lo na caixa manualmente.

The “Connection Properties” tab of the SQL Server Management Studio connection dialog window

Figura 5 A guia "Propriedades da Conexão" da janela da caixa de diálogo de conexão do SQL Server Management Studio.

Como você pode ver a partir desses dois recursos, a consolidação de instâncias de bancos de dados em uma instância do SQL Server 2012 será muito mais fácil. A tarefa exigirá pouco tempo e menos testes para garantir que seu aplicativo de banco de dados seja totalmente compatível com o recurso de banco de dados independente. Assim que você habilitar a configuração de banco de dados independente, as futuras migrações e consolidações de banco de dados serão muito mais tranquilas, e essa é realmente a meta.

Denny Cherry

Denny Cherry, MVP, é um consultor independente com mais de uma década de experiência no Microsoft SQL Server, Hyper-V, vSphere e em soluções de armazenamento corporativas. Atualmente, ele possui vários Certificados Microsoft relacionados ao SQL Server, das versões 2000 a 2008, incluindo o Microsoft Certified Master. Ele escreveu diversos livros e dezenas de artigos técnicos sobre o gerenciamento do SQL Server.

Conteúdo relacionado