Partilhar via


Bases de dados contidas

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Uma base de dados contida é uma base de dados isolada de outras bases de dados e da instância do SQL Server que hospeda a base de dados. O SQL Server ajuda o utilizador a isolar a sua base de dados da instância de 4 formas.

  • Grande parte dos metadados que descrevem uma base de dados é mantida na base de dados. (Além de, ou em vez de, manter metadados na base de dados mestre.)

  • Todos os metadados são definidos usando a mesma colação.

  • A autenticação do utilizador pode ser realizada pela base de dados, reduzindo a dependência da base de dados dos logins da instância do SQL Server.

  • O ambiente SQL Server (DMV's, XEvents, etc.) reporta e pode agir sobre a informação de contenção.

Algumas funcionalidades das bases de dados parcialmente contidas, como armazenar metadados na base de dados, aplicam-se a todas as bases de dados SQL Server. Alguns benefícios das bases de dados parcialmente contidas, como a autenticação ao nível da base de dados e a compilação de catálogos, devem ser ativados antes de estarem disponíveis. A contenção parcial é ativada usando as instruções CREATE DATABASE e ALTER DATABASE ou utilizando o SQL Server Management Studio. Para mais informações sobre como ativar a contenção parcial de bases de dados, consulte Migrar para uma Base de Dados Parcialmente Contida.

Conceitos de Bases de Dados Parcialmente Contidas

Uma base de dados totalmente contida inclui todas as definições e metadados necessários para definir a base de dados e não tem dependências de configuração na instância do Motor de Base de Dados SQL Server onde a base de dados está instalada. Em versões anteriores do SQL Server, separar uma base de dados da instância do SQL Server podia ser demorado e exigia conhecimento detalhado da relação entre a base de dados e a instância do SQL Server. Bases de dados parcialmente contidas facilitam a separação de uma base de dados da instância do SQL Server e de outras bases de dados.

A base de dados contida considera características relativas à contenção. Qualquer entidade definida pelo utilizador que dependa apenas de funções que residem na base de dados é considerada totalmente contida. Qualquer entidade definida pelo utilizador que dependa de funções que se encontram fora da base de dados é considerada como não contida. (Para mais informações, consulte a secção de Contenção mais adiante neste tópico.)

Os seguintes termos aplicam-se ao modelo de base de dados contido.

Limite da base de dados
A fronteira entre uma base de dados e a instância do SQL Server. A fronteira entre uma base de dados e outras bases de dados.

Contido
Um elemento que existe inteiramente dentro do limite da base de dados.

Incontrolável
Um elemento que atravessa o limite da base de dados.

Base de dados não isolada
Uma base de dados que tem a contenção definida como NENHUMA. Todas as bases de dados em versões anteriores ao SQL Server 2012 (11.x) não estão incluídas. Por defeito, todas as bases de dados SQL Server 2012 (11.x) e posteriores têm uma contenção definida como NENHUMA.

Base de dados parcialmente contida
Uma base de dados parcialmente contida é uma base de dados contida que pode permitir algumas funcionalidades que atravessam o limite da base de dados. O SQL Server inclui a capacidade de determinar quando o limite de contenção é ultrapassado.

Utilizador isolado
Existem dois tipos de utilizadores para bases de dados contidas.

Os utilizadores com base nos logins na base de dados mestre podem ter acesso a uma base de dados contida, mas isso criaria uma dependência da instância do SQL Server. Portanto, criar utilizadores com base nos logins requer contenção parcial.

Importante

A habilitação de bancos de dados parcialmente contidos delega o controle sobre o acesso à instância do SQL Server aos proprietários do banco de dados. Para obter mais informações, consulte Práticas recomendadas de segurança com bancos de dados contidos.

Limite da Base de Dados
Como as bases de dados parcialmente contidas separam a funcionalidade da base de dados das da instância, existe uma linha claramente definida entre estes dois elementos chamada limite da base de dados.

Dentro do limite da base de dados encontra-se o modelo da base de dados, onde as bases de dados são desenvolvidas e geridas. Exemplos de entidades localizadas dentro da base de dados incluem tabelas do sistema como sys.tables, utilizadores de base de dados contidas com palavras-passe, e tabelas de utilizador na base de dados atual referenciadas por um nome em duas partes.

Fora do limite da base de dados encontra-se o modelo de gestão, que diz respeito às funções e à gestão ao nível da instância. Exemplos de entidades localizadas fora do limite da base de dados incluem tabelas de sistema como sys.endpoints, utilizadores mapeados para logins, e tabelas de utilizador noutra base de dados referenciadas por um nome em três partes.

Contenção

As entidades utilizadoras que residem inteiramente dentro da base de dados são consideradas contidas. Quaisquer entidades que residam fora da base de dados, ou que dependam da interação com funções fora da base de dados, são consideradas não contidas.

Em geral, as entidades utilizadoras enquadram-se nas seguintes categorias de contenção:

  • Entidades de utilizador totalmente contidas (aquelas que nunca ultrapassam o limite da base de dados), por exemplo sys.indexes. Qualquer código que utilize estas funcionalidades ou qualquer objeto que faça referência apenas a estas entidades também está totalmente contido.

  • Entidades de utilizador não contidas (que ultrapassam o limite da base de dados), por exemplo, sys.server_principals ou um principal de servidor (login) em si. Qualquer código que utilize estas entidades ou quaisquer funções que as referenciem não está abrangido.

Base de Dados Parcialmente Contida

A funcionalidade de base de dados contida está atualmente disponível apenas num estado parcialmente contido. Uma base de dados parcialmente contida é uma base de dados contida que permite a utilização de funcionalidades não contidas.

Utilize as vistas sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) para obter informações sobre objetos ou funcionalidades que não estão contidos. Ao determinar o estado de contenção dos elementos da sua base de dados, pode descobrir que objetos ou características devem ser substituídos ou alterados para promover a contenção.

Importante

Como certos objetos têm uma configuração padrão de contenção NENHUMA, esta vista pode devolver falsos positivos.

O comportamento das bases de dados parcialmente contidas difere mais distintamente do das bases de dados não contidas no que diz respeito à colação. Para mais informações sobre questões de intercalação, consulte Intercalações Contidas em Base de Dados.

Benefícios de utilizar Bases de Dados Parcialmente Contidas

Existem questões e complicações associadas às bases de dados não contidas que podem ser resolvidas utilizando uma base de dados parcialmente contida.

Movimento da Base de Dados

Um dos problemas que ocorre ao mover bases de dados é que alguma informação importante pode ficar indisponível quando uma base de dados é transferida de uma instância para outra. Por exemplo, a informação de login é armazenada dentro da instância em vez de na base de dados. Quando se move uma base de dados não contida de uma instância para outra instância do SQL Server, esta informação fica para trás. Deve identificar a informação em falta e transferi-la com a sua base de dados para a nova instância do SQL Server. Este processo pode ser difícil e demorado.

A base de dados parcialmente contida pode armazenar informação importante na base de dados, de modo que esta ainda a tenha depois de ser movida.

Observação

Uma base de dados parcialmente contida pode fornecer documentação que descreve as funcionalidades utilizadas por uma base de dados que não podem ser separadas da instância. Isto inclui uma lista de outras bases de dados inter-relacionadas, definições do sistema que a base de dados requer mas não pode ser contidas, e assim sucessivamente.

Benefício dos Utilizadores de Base de Dados Contidos com Always On

Ao reduzir as ligações à instância do SQL Server, as bases de dados parcialmente contidas podem ser úteis durante as operações de failover ao utilizar grupos de disponibilidade Always On.

Criar utilizadores contidos permite que o utilizador se ligue diretamente à base de dados contida. Esta é uma funcionalidade muito significativa em cenários de alta disponibilidade e recuperação de desastres, como numa solução Always On. Se os utilizadores forem utilizadores contidos, em caso de failover, as pessoas poderiam ligar-se ao secundário sem criar logins na instância que aloja o secundário. Isto traz um benefício imediato. Para mais informações, consulte Visão Geral dos Grupos de Disponibilidade Sempre Ativos (SQL Server) e Pré-requisitos, Restrições e Recomendações para Grupos de Disponibilidade Sempre Ativos (SQL Server).

Desenvolvimento Inicial da Base de Dados

Como um programador pode não saber onde uma nova base de dados será implementada, limitar os impactos ambientais implementados na base de dados diminui o trabalho e a preocupação para o programador. No modelo não contido, o promotor deve considerar possíveis impactos ambientais na nova base de dados e programar em conformidade. No entanto, ao utilizar bases de dados parcialmente contidas, os programadores podem detetar impactos a nível da instância na base de dados e preocupações a nível da instância para o programador.

Administração de Banco de Dados

Manter as definições da base de dados dentro da base de dados, em vez de na base de dados principal, permite que cada proprietário da base de dados tenha mais controlo sobre a sua base de dados, sem dar permissão ao administrador do sistema ao dono da base de dados.

Limitações

Bases de dados parcialmente contidas não permitem as seguintes funcionalidades.

  • Replicação, captura de dados de alterações ou rastreamento de alterações.

  • Procedimentos numerados

  • Objetos associados a esquemas que dependem de funções internas com alterações de colação

  • Alterações de ligação resultantes de alterações de colação, incluindo referências a objetos, colunas, símbolos ou tipos.

Advertência

Procedimentos temporários armazenados são atualmente permitidos. Como os procedimentos armazenados temporários violam a contenção, não se espera que sejam suportados em versões futuras da base de dados contida.

Identificação da Contenção de Bases de Dados

Existem duas ferramentas para ajudar a identificar o estado de contenção da base de dados. A sys.dm_db_uncontained_entities (Transact-SQL) é uma vista que mostra todas as entidades potencialmente não contidas na base de dados. O evento database_uncontained_usage ocorre quando qualquer entidade efetivamente não contida é identificada em tempo de execução.

sys.dm_db_uncontained_entities

Esta vista mostra quaisquer entidades na base de dados que tenham potencial para não serem contidas, como aquelas que atravessam o limite da base de dados. Isto inclui aquelas entidades de utilizador que podem usar objetos fora do modelo de base de dados. No entanto, como a contenção de algumas entidades (por exemplo, aquelas que usam SQL dinâmico) não pode ser determinada até ao tempo de execução, a visualização pode mostrar algumas entidades que na verdade não estão descontidas. Para mais informações, consulte sys.dm_db_uncontained_entities (Transact-SQL).

Evento de uso não contido na base de dados

Este XEvent ocorre sempre que uma entidade não incluída é identificada em tempo de execução. Isto inclui as entidades originadas no código do cliente. Este XEvent ocorrerá apenas para entidades não contidas. No entanto, o evento só ocorre em tempo de execução. Portanto, quaisquer entidades de utilizador fora de contenção que não foram executadas não serão identificadas por este XEvent

Ver também

Funcionalidades Modificadas (Base de Dados Contida)
Colações de Bases de Dados Contidas
Práticas recomendadas de segurança com bancos de dados contidos
Migrar para uma Base de Dados Parcialmente Contida
Contained Database Users - Making Your Database Portable (Utilizadores de Base de Dados Contida - Tornar a Sua Base de Dados Portátil)