Bancos de dados contidos

Um banco de dados independente é um banco de dados isolado de outros bancos de dados e da instância do SQL Server que hospeda o banco de dados. O SQL Server 2012 ajuda o usuário a isolar seu banco de dados da instância de 4 maneiras.

  • A maioria dos metadados que descrevem um banco de dados é mantida no banco de dados. (Além de, ou em vez de, manter os metadados no banco de dados mestre.)

  • Todo os metadados são definidos usando o mesmo agrupamento.

  • A autenticação de usuário pode ser executada pelo banco de dados, reduzindo a dependência dos bancos de dados dos logons da instância do SQL Server.

  • O ambiente do SQL Server (DMVs, XEvents etc.) relata e pode agir sobre as informações de contenção.

Alguns recursos de bancos de dados parcialmente independentes, como armazenar metadados no banco de dados, aplicam-se a todos os bancos de dados do SQL Server 2012. Alguns benefícios dos bancos de dados parcialmente independentes, como autenticação no nível de banco de dados e agrupamento de catálogos, devem ser habilitados antes de serem disponibilizados. A contenção parcial é habilitada usando as instruções CREATE DATABASE e ALTER DATABASE ou usando o SQL Server Management Studio. Para obter mais informações sobre como habilitar a contenção parcial de bancos de dados, consulte Migrar para um banco de dados independente parcialmente.

Este tópico inclui as seções a seguir.

  • Conceitos de banco de dados parcialmente independente

  • Componentes de bancos de dados parcialmente independentes

  • Contenção

  • Benefícios do uso de bancos de dados parcialmente independentes

  • Limitações

  • Identificando a contenção do banco de dados

Conceitos de banco de dados parcialmente independente

Um banco de dados totalmente independente inclui todas as configurações e metadados necessários para definir o banco de dados e não tem nenhuma dependência de configuração da instância do Mecanismo de Banco de Dados do SQL Server onde o banco de dados está instalado. Em versões anteriores do SQL Server, separar um banco de dados da instância do SQL Server poderia ser demorado e exigir conhecimento detalhado da relação entre o banco de dados e a instância do SQL Server. Os bancos de dados parcialmente independentes do SQL Server 2012 facilitam a separação de um banco de dados da instância do SQL Server e de outros bancos de dados.

O banco de dados independente considera recursos em relação à contenção. Qualquer entidade definida pelo usuário que confie apenas em funções que residem no banco de dados é considerada totalmente contida. Qualquer entidade definida pelo usuário que confie apenas em funções que residem fora do banco de dados é considerada não contida. (Para obter mais informações, consulte a seção Contenção posteriormente neste tópico.)

Os termos a seguir se aplicam ao modelo de banco de dados independente.

  • Limite de banco de dados
    O limite entre um banco de dados e a instância do SQL Server. O limite entre um banco de dados e outros bancos de dados.

  • Contida
    Um elemento que existe completamente no limite de banco de dados.

  • Não contida
    Um elemento que cruza o limite de banco de dados.

  • Banco de dados dependente
    Um banco de dados com contenção definida como NONE. Todos os bancos de dados em versões anteriores ao SQL Server 2012 são dependentes. Por padrão, todos os bancos de dados do SQL Server 2012 têm um conjunto de contenção definido como NONE.

  • Banco de dados parcialmente contido
    Um banco de dados parcialmente independente é um banco de dados independente que permite que alguns recursos cruzem o limite de banco de dados. O SQL Server inclui a capacidade de determinar quando o limite de retenção é cruzado.

  • Usuário contido
    Há dois tipos de usuários de bancos de dados independentes.

    • Usuário de banco de dados independente com senha

      Usuários de banco de dados independente com senhas são autenticados pelo banco de dados.

    • entidades de segurança do Windows

      Usuários autorizados do Windows e membros de grupos autorizados do Windows podem conectar-se diretamente ao banco de dados e não precisam de logons no banco de dados mestre. O banco de dados confia na autenticação pelo Windows.

    Os usuários baseados em logons no banco de dados mestre podem receber acesso a um banco de dados independente, mas isso cria uma dependência na instância do SQL Server. Portanto, criar usuários com base em logons permite ver comentários sobre bancos de dados parcialmente independentes.

    Observação sobre segurançaObservação sobre segurança

    Habilitar delegados de bancos de dados parcialmente independentes controla o acesso à instância do SQL Server para os proprietários do banco de dados. Para obter mais informações, consulte Práticas recomendadas de segurança com bancos de dados independentes.

  • Limite de banco de dados
    Como os bancos de dados parcialmente independentes separam a funcionalidade do banco de dados das funcionalidades da instância, há uma linha claramente definida entre esses dois elementos chamada de limite de banco de dados.

    Dentro do limite de banco de dados está o modelo de banco de dados, onde os bancos de dados são desenvolvidos e gerenciados. Exemplos de entidades localizadas dentro do modelo do banco de dados incluem tabelas do sistema, como sys.tables, usuários com senhas de bancos de dados independentes e tabelas de usuário no banco de dados atual referenciadas por um nome de duas partes.

    Fora do limite de banco de dados está o modelo de gerenciamento que pertence às funções e ao gerenciamento em nível da instância. Exemplos de entidades localizadas fora do limite de banco de dados incluem tabelas do sistema, como sys.endpoints, usuários mapeados para logons e tabelas de usuário em outro banco de dados referenciadas por um nome de três partes.

Contenção

Entidades de usuário que residem inteiramente dentro do banco de dados são consideradas contidas. Qualquer entidade que resida fora do banco de dados ou que dependa da interação com funções fora do banco de dados é considerada como não contida.

Em geral, entidades de usuário entram nas seguintes categorias de contenção:

  • Entidades de usuário totalmente contidas (que nunca cruzam o limite de banco de dados), por exemplo sys.indexes. Qualquer código que use esses recursos ou qualquer objeto que faça referência apenas a essas entidades também é totalmente contido.

  • Entidades de usuário não contidas (que cruzam o limite de banco de dados), por exemplo, sys.server_principals ou a própria entidade de segurança de servidor (logon). Qualquer código que use essas entidades ou qualquer função que faça referência a essas entidades não é contido.

Banco de dados parcialmente contido

No SQL Server 2012, o recurso de banco de dados independente está disponível atualmente apenas em um estado parcialmente independente. Um banco de dados parcialmente contido é um banco de dados independente que permite o uso de recursos não contidos.

Use as exibições sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) para retornar informações sobre objetos ou recursos não contidos. Por meio da determinação do status da contenção dos elementos de seu banco de dados, é possível descobrir quais objetos ou recursos devem ser substituídos os alterados para promover a contenção.

Observação importanteImportante

Como determinados objetos têm uma configuração de contenção padrão de NONE, essa exibição pode retornar falsos positivos.

O comportamento de bancos de dados parcialmente independentes difere muito distintamente do comportamento de bancos de dados dependentes em termos de agrupamento. Para obter mais informações sobre problemas de agrupamento, consulte Agrupamentos de banco de dados contidos.

Benefícios do uso de bancos de dados parcialmente independentes

Há problemas e complicações associadas aos bancos de dados dependentes que podem ser resolvidos por meio de um banco de dados parcialmente independente.

Movimentação do banco de dados

Um dos problemas que ocorre ao mover bancos de dados é que algumas informações importantes podem não estar disponíveis quando um banco de dados é movido de uma instância a outra. Por exemplo, as informações de logon são armazenadas na instância e não no banco de dados. Quando você move um banco de dados dependente de uma instância para outra instância do SQL Server, essas informações são deixadas para trás. Você deve identificar as informações ausentes e movê-las com seu banco de dados para a nova instância do SQL Server. Esse processo pode ser difícil e demorado.

O banco de dados parcialmente independente pode armazenar informações importantes no banco de dados para que o banco de dados ainda contenha as informações depois de ser movido.

ObservaçãoObservação

Um banco de dados parcialmente independente pode fornecer documentação que descreve os recursos que são usados por um banco de dados que não pode ser separado da instância. Isso inclui uma lista de outros bancos de dados relacionados, configurações do sistema exigidas pelo banco de dados, mas que não podem ser contidas, e assim por diante.

Benefício de usuários de banco de dados independentes com AlwaysOn

Reduzindo as associações à instância do SQL Server, bancos de dados parcialmente independentes podem ser úteis durante o failover quando o Grupos de Disponibilidade AlwaysOn é usado.

Criar os usuários independentes permite que o usuário se conecte diretamente no banco de dados independente. Este é um recurso muito significativo em cenários de alta disponibilidade e recuperação de desastres como em uma solução AlwaysOn. Se os usuários forem independentes, no caso de failover, as pessoas podem ser capazes de se conectar ao secundário sem criar logons na instância que hospeda o secundário. Isto fornece um benefício imediato. Para obter mais informações, consulte Visão geral de grupos de disponibilidade AlwaysOn (SQL Server) e Pré-requisitos, restrições e recomendações para grupos de disponibilidade AlwaysOn (SQL Server).

Desenvolvimento inicial de bancos de dados

Como um desenvolvedor talvez não saiba onde um novo banco de dados será implantado, a limitação dos impactos no ambiente implantados no banco de dados reduz o trabalho e a preocupação do desenvolvedor. No modelo não contido, o desenvolvedor deve considerar os possíveis impactos no ambiente no novo banco de dados e programa de maneira correspondente. No entanto, ao usar bancos de dados parcialmente independentes, os desenvolvedores podem detectar impactos de nível de instância no banco de dados e preocupações de nível de instância para o desenvolvedor.

Administração de banco de dados

Manter as configurações de banco de dados no banco de dados, e não no banco de dados mestre, permite que o proprietário de cada banco de dados tenha mais controle sobre seu banco de dados, sem conceder a eles a permissão sysadmin.

Limitações

Bancos de dados parcialmente independentes não permitem os recursos a seguir.

  • Os bancos de dados parcialmente independentes não podem usar replicação, Change Data Capture ou controle de alterações.

  • Procedimentos numerados

  • Objetos associados a esquema que dependem de funções internas com alterações de agrupamento

  • Alteração de associação resultante de alterações de agrupamento, inclusive referências a objetos, colunas, símbolos ou tipos.

  • Replicação, captura de dados de alteração e controle de alterações.

Observação sobre cuidadosCuidado

Os procedimentos armazenados temporários são permitidos no momento. Como os procedimentos armazenados temporários violam a retenção, não se espera que eles tenham suporte em versões futuras de bancos de dados independentes.

Identificando a contenção do banco de dados

Há duas ferramentas para facilitar a identificação do status de contenção do banco de dados. sys.dm_db_uncontained_entities (Transact-SQL) é uma exibição que mostra todas as entidades potencialmente dependentes no banco de dados. O evento database_uncontained_usage ocorre quando qualquer entidade não contida real é identificada em tempo de execução.

sys.dm_db_uncontained_entities

Esta exibição mostra as entidades do banco de dados que têm potencial para não serem contidas, como aquelas que cruzam o limite de banco de dados. Isso inclui as entidades de usuário que possam usar objetos fora do modelo de banco de dados. Porém, como a contenção de algumas entidades (por exemplo, as que usam SQL dinâmico) não pode ser determinada até o tempo de execução, a exibição poderá mostrar algumas entidades que não estão contidas realmente. Para obter mais informações, consulte sys.dm_db_uncontained_entities (Transact-SQL).

evento database_uncontained_usage

Esse XEvent ocorre sempre que uma entidade não contida é identificada no momento de execução. Isso inclui entidades originadas no código de cliente. Esse XEvent ocorrerá somente para entidades reais não contidas. No entanto, o evento ocorre somente no momento de execução. Portanto, qualquer entidade de usuário não contida não executada não será identificada por esse XEvent.

Conteúdo relacionado

Recursos modificados (banco de dados independente)

Agrupamentos de banco de dados contidos

Práticas recomendadas de segurança com bancos de dados independentes

Migrar para um banco de dados independente parcialmente