Database indipendenti
Undatabase indipendente è un database isolato da altri database e dall'istanza di SQL Server che ospita il database. SQL Server 2014 consente all'utente di isolare il database dall'istanza in 4 modi.
Molti dei metadati che descrivono un database vengono gestiti nel database, oltre a (o anziché) essere gestiti nel database master.
Tutti metadati sono definiti usando le stesse regole di confronto.
L'autenticazione utente può essere eseguita dal database, riducendo la dipendenza dei database dagli account di accesso dell'istanza di SQL Server.
Report dell'ambiente SQL Server (DMV, XEvent e così via) e possono agire sulle informazioni di contenimento.
Alcune funzionalità di database parzialmente indipendenti, ad esempio l'archiviazione dei metadati nel database, si applicano a tutti i database SQL Server 2014. Alcuni vantaggi dei database parzialmente indipendenti, ad esempio l'autenticazione a livello di database e le regole di confronto del catalogo, devono essere abilitati per poter essere disponibili. Il contenimento parziale è abilitato usando le CREATE DATABASE
istruzioni e ALTER DATABASE
o tramite SQL Server Management Studio. Per altre informazioni sull'abilitazione dell'indipendenza parziale del database, vedere Migrate to a Partially Contained Database.
In questo argomento sono contenute le sezioni seguenti.
Concetti di database parzialmente indipendente
Un database completamente indipendente include tutte le impostazioni e i metadati necessari per definire il database e non ha dipendenze di configurazione dall'istanza del motore di database SQL Server in cui è installato il database. Nelle versioni precedenti di SQL Server, la separazione di un database dall'istanza di SQL Server potrebbe richiedere molto tempo e richiedere una conoscenza dettagliata della relazione tra il database e l'istanza di SQL Server. I database parzialmente indipendenti semplificano la separazione di un database dall'istanza di SQL Server e di altri database.
In un database indipendente le funzionalità vengono considerate in relazione all'indipendenza. Qualsiasi entità definita dall'utente basata solo su funzioni che risiedono nel database è considerata completamente indipendente. Qualsiasi entità definita dall'utente basata su funzioni che risiedono all'esterno del database è considerata non indipendente. Per altre informazioni, vedere la sezione Indipendenza più avanti in questo argomento.
I termini seguenti si applicano al modello di database indipendente.
Limite del database
Limite tra un database e l'istanza di SQL Server. Limite tra un database e altri database.
Contenuto
Elemento completamente esistente entro il limite del database.
Non contenuto
Elemento che varca il limite del database.
Database non indipendente
Database con lo stato di indipendenza impostato su NESSUNO. Tutti i database nelle versioni precedenti a SQL Server 2012 non sono contenuti. Per impostazione predefinita, tutti i database SQL Server 2012 e versioni successive hanno un contenimento impostato su NONE.
Database parzialmente indipendente
Un database parzialmente indipendente è un database indipendente in cui sono supportate funzionalità che superano il limite del database. SQL Server include la possibilità di determinare quando viene superato il limite di contenimento.
Utente indipendente
Per i database indipendenti sono previsti due tipi di utenti.
Utente del database indipendente con password
Gli utenti del database indipendente con password vengono autenticati dal database.
Entità di Windows
Gli utenti di Windows autorizzati e i membri dei gruppi di Windows autorizzati possono connettersi direttamente al database e non devono disporre di account di accesso nel database master . Il database considera attendibile l'autenticazione di Windows.
Agli utenti basati sugli account di accesso nel database master è possibile concedere l'accesso a un database indipendente, ma ciò creerebbe una dipendenza dall'istanza di SQL Server. Pertanto, per la creazione di utenti in base agli account di accesso, vedere il commento per i database parzialmente indipendenti.
Importante
L'abilitazione di database parzialmente indipendenti delega il controllo dell'accesso all'istanza di SQL Server ai proprietari del database. Per altre informazioni, vedere Security Best Practices with Contained Databases.
Limite del database
Considerato che nei database parzialmente indipendenti le funzionalità del database sono separate da quelle dell'istanza, tra questi due elementi esiste una netta linea di demarcazione detta limite del database.
All'interno del limite del database è presente il modello di database, nel quale i database vengono sviluppati e gestiti. Esempi di entità che si trovano all'interno del database includono tabelle di sistema, ad esempio sys.tables, utenti del database indipendente con password e tabelle utente nel database corrente a cui viene fatto riferimento con un nome in due parti.
All'esterno del limite del database è presente il modello di gestioneche si riferisce alla gestione e alle funzioni a livello di istanza. Esempi di entità che si trovano all'esterno del limite del database includono tabelle di sistema, ad esempio sys.endpoints, utenti su cui viene eseguito il mapping ad account di accesso e tabelle utente in un altro database a cui viene fatto riferimento con un nome in tre parti.
Containment
Le entità utente completamente residenti all'interno del database sono considerate indipendenti. Qualsiasi entità residente all'esterno del database o basata sull'interazione con le funzioni esterne al database è considerata non indipendente.
In generale, le entità utente rientrano nelle categorie di indipendenza seguenti:
Entità utente completamente indipendenti, ovvero quelle che non superano mai il limite del database, ad esempio sys.indexes. Qualsiasi struttura di codice in cui vengano usate queste funzionalità o qualsiasi oggetto che faccia riferimento solo a queste entità è anch'esso completamente contenuto.
Entità utente non indipendenti, ovvero quelle che superano il limite del database, ad esempio sys.server_principals o una stessa entità server (accesso). Qualsiasi struttura di codice in cui vengano usate queste entità o qualsiasi funzione che faccia riferimento a queste entità è anch'essa non indipendente.
Database parzialmente indipendente
La caratteristica di database indipendente è attualmente disponibile solo in uno stato parzialmente indipendente. Un database parzialmente indipendente è un database indipendente in cui è supportato l'utilizzo di funzionalità non indipendenti.
Usare la vista sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) per restituire informazioni su oggetti o funzionalità non contenuti. Determinando lo stato di indipendenza degli elementi del database, è possibile individuare gli oggetti o le funzionalità che è necessario sostituire o modificare ai fini dell'indipendenza.
Importante
Poiché l'impostazione di indipendenza predefinita di determinati oggetti è NESSUNO, è possibile che in questa vista vengano restituiti falsi positivi.
In termini di regole di confronto, il comportamento dei database parzialmente indipendenti è nettamente diverso da quello dei database non indipendenti. Per altre informazioni sui problemi relativi alle regole di confronto, vedere Contained Database Collations.
Vantaggi dell'utilizzo di database parzialmente indipendenti
Alcuni problemi e complessità associati ai database non indipendenti possono essere risolti con un database parzialmente indipendente.
Spostamento di database
Uno dei problemi che si verifica quando un database viene spostato da un'istanza a un'altra è che importanti informazioni possono non essere disponibili. Ad esempio, le informazioni di accesso sono archiviate all'interno dell'istanza anziché nel database. Quando si sposta un database non indipendente da un'istanza a un'altra istanza di SQL Server, queste informazioni vengono lasciate indietro. È necessario identificare le informazioni mancanti e spostarlo con il database nella nuova istanza di SQL Server. Questo processo può richiedere tempi lunghi e risultare difficile.
È possibile archiviare importanti informazioni nel database parzialmente indipendente in modo che dopo lo spostamento le informazioni siano ancora disponibili nel database.
Nota
Un database parzialmente indipendente può fornire la documentazione che descrive le funzionalità usate da un database che non possono essere separate dall'istanza. tra cui un elenco di altri database correlati, le impostazioni di sistema richieste dal database ma non indipendenti e così via.
Vantaggi degli utenti di database indipendenti con AlwaysOn
Riducendo i vincoli all'istanza di SQL Server, i database parzialmente indipendenti possono essere utili durante il failover quando si usano Always On gruppi di disponibilità.
La creazione di utenti indipendenti consente all'utente di connettersi direttamente al database indipendente. Si tratta di una funzionalità molto significativa in scenari a disponibilità elevata e di ripristino di emergenza, ad esempio in una soluzione AlwaysOn. Se gli utenti sono indipendenti, in caso di failover può essere possibile connettersi al database secondario senza creare account di accesso sull'istanza che ospita il database secondario. Questo rappresenta un vantaggio immediato. Per altre informazioni, vedere Panoramica dei gruppi di disponibilità AlwaysOn (SQL Server) e prerequisiti, restrizioni e consigli per i gruppi di disponibilità AlwaysOn (SQL Server).For more information, see Overview of AlwaysOn Availability Groups (SQL Server) and Prerequisites, Restrictions, and Recommendations for AlwaysOn Availability Groups (SQL Server).
Sviluppo iniziale di database
Poiché è possibile che uno sviluppatore non conosca l'ambiente nel quale verrà distribuita un nuovo database, limitando gli impatti ambientali distribuiti al database sarà possibile ridurre il lavoro e le problematiche per lo sviluppatore. Nel modello non indipendente lo sviluppatore deve quindi considerare i possibili impatti ambientali sul nuovo database e programmare di conseguenza. Tuttavia, usando i database parzialmente indipendenti, gli sviluppatori possono rilevare l'impatto a livello di istanza sul database e le problematiche a livello di istanza che è necessario affrontare.
Amministrazione del database
La gestione delle impostazioni del database nel database, anziché nel database master, consente a ogni proprietario di database di avere più controllo sul database, senza fornire al proprietario di database l'autorizzazione sysadmin .
Limitazioni
I database parzialmente indipendenti non supportano le funzionalità indicate di seguito.
Nei database parzialmente indipendenti non è supportato l'utilizzo di funzionalità di replica, di rilevamento modifiche o Change Data Capture.
Procedure numerate
Oggetti associati a schema che dipendono da funzioni predefinite con modifiche delle regole di confronto
Modifica di associazione a seguito di modifiche delle regole di confronto, inclusi riferimenti a oggetti, colonne, simboli o tipi.
Replica, Change Data Capture e rilevamento modifiche.
Avviso
Le stored procedure temporanee sono attualmente consentite. Poiché le stored procedure temporanee violano l'indipendenza, non ne è previsto il supporto nelle versioni future del database indipendente.
Identificazione dell'indipendenza del database
Per consentire l'identificazione dello stato di indipendenza del database sono disponibili due strumenti. Il sys.dm_db_uncontained_entities (Transact-SQL) è una visualizzazione che mostra tutte le entità potenzialmente non tained nel database. L'evento database_uncontained_usage si verifica quando viene identificata un'entità effettivamente non contenuta in fase di esecuzione.
sys.dm_db_uncontained_entities
In questa vista vengono riportate tutte entità presenti nel database che potrebbero essere non indipendenti, ad esempio quelle che superano il limite del database. Sono incluse le entità utente che potrebbero usare oggetti al di fuori del modello di database. Poiché non è tuttavia possibile determinare lo stato di indipendenza di alcune entità, ad esempio quelle che usano SQL dinamico, fino alla fase di esecuzione, nella vista potrebbero essere presenti alcune entità che non sono effettivamente non indipendenti. Per altre informazioni, vedere sys.dm_db_uncontained_entities (Transact-SQL).
database_uncontained_usage - evento
L'evento XEvent viene generato quando viene identificata un'entità non indipendente in fase di esecuzione. Sono incluse le entità che hanno origine nel codice client. Questo evento XEvent verrà generato solo per le entità effettivamente non indipendenti e solo in fase di esecuzione. Pertanto, qualsiasi entità utente non indipendente non eseguita non sarà identificata da questo XEvent.
Contenuto correlato
Funzionalità modificate (database indipendente)
Regole di confronto dei database indipendenti
Procedure consigliate per la sicurezza in database indipendenti
Eseguire la migrazione in un database parzialmente indipendente