SQL Server 2012: Talvolta la parzialità è preferibile

SQL Server 2012 supporterà database parzialmente indipendenti, con conseguente riduzione di alcuni problemi associati alla migrazione e al consolidamento.

Denny Cherry

I database parzialmente indipendenti consentono di risolvere alcuni dei principali di consolidamento e migrazione che da sempre gravano sui database SQL Server a partire dalla versione 4.2. Fortunatamente, questa sarà una delle tante nuove funzionalità introdotte in SQL Server 2012.

Il primo problema che i database parzialmente indipendenti consentono di risolvere è lo spostamento di un database da un'istanza di SQL Server a un'altra senza dover identificare gli account di accesso a SQL Server utilizzati dal database. Consentono inoltre di creare gli stessi account di accesso nell'istanza di database di destinazione.

In SQL Server 2012 tale operazione viene effettuata mediante un account di accesso a SQL Server indipendente. Si tratta di un utente SQL Server creato all'interno del database indipendente, ma senza un account di accesso a SQL Server corrispondente. Tale utente indipendente presente nel database indipendente dispone di una password archiviata all'interno del database indipendente. Con tali presupposti, la procedura di autenticazione funziona in modo corretto.

Il secondo problema risolto è il fatto che eventuali conflitti di regole di confronto tra tabelle all'interno di database indipendenti e tabelle temporanee spariscono completamente. In SQL Server vengono create automaticamente tabelle temporanee nell'ambito del database indipendente quando viene sottoposto a confronto. Ciò consente alla stessa istanza di SQL Server di ospitare database con diverse regole di confronto, senza dover modificare le istruzioni CREATE TABLE per specificare le regole di confronto o dover specificare l'istruzione COLLATE all'interno dell'istruzione JOIN.

A differenza di alcune nuove funzionalità che richiedono la completa compatibilità del database, i database parzialmente indipendenti sono attualmente supportati fino a SQL Server 2005. La funzionalità per database indipendenti, d'altro canto, non è ancora completa. Dovrebbe essere completata indicativamente tra la data di rilascio della versione SQL Server 2012 CTP3 e la data in cui il prodotto entrerà in fase di produzione (inizi - metà del 2012).

Impostazione di un database parzialmente indipendente

Prima di poter trasformare un database da non indipendente a parzialmente indipendente, è necessario prima modificare un'impostazione del server utilizzando la stored procedure sp_configure system. È possibile utilizzare la stored procedure sp_configure system per modificare l'impostazione "contained database authentication" da 0 a 1 e utilizzare l'istruzione RECONFIGURE per attivare la nuova impostazione, come di seguito riportato:

EXEC sp_configure 'contained database authentication', 1 RECONFIGURE GO

Dopo aver abilitato l'impostazione "contained database authentication", sarà possibile trasformare un database specifico in uno parzialmente indipendente. È possibile utilizzare SQL Server Management Studio, come mostrato nella Figura 1, l'istruzione ALTER DATABASE o creare un nuovo database indipendente.

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

Per creare un nuovo database parzialmente indipendente o modificare un database in modo che diventi parzialmente indipendente, è necessario connettersi all'istanza di SQL Server in Esplora oggetti. Fare clic con il pulsante destro del mouse per creare un nuovo database o selezionarne uno esistente. Scegliere le proprietà (a seconda se si sta creando un nuovo database o si sta modificando un database esistente). In entrambi i casi, selezionare la scheda "Opzioni" e modificare il valore dell'elenco a discesa "Tipo di indipendenza" da "Nessuna" a "Parziale".

The Database Properties window lets you change the database containment setting

Figura 1 Nella finestra di dialogo Proprietà database è possibile modificare l'impostazione di indipendenza del database.

Per trasformare un database esistente da non indipendente a parzialmente indipendente, è necessario utilizzare le istruzioni T/SQL e ALTER DATABASE. Per poter modificare correttamente l'impostazione di indipendenza del database, l'istruzione ALTER DATABASE deve poter ottenere un blocco esclusivo dell'intero database. Pertanto, sarà necessario pianificare una breve interruzione delle attività presso la business unit che utilizza questo particolare database.

Come evitare errori relativi alle regole di confronto tra tabelle temporanee

I nuovi database parzialmente indipendente consentono l'esistenza di più regole di confronto nella stessa istanza di SQL Server. Non c'è da preoccuparsi di eventuali problemi legati alle regole di confronto quando si uniscono delle tabelle temporanee. È possibile verificarlo utilizzando un'istanza di Microsoft SQL Server e creando un database parzialmente indipendente con regole di confronto differenti. Successivamente, creare una tabella fisica e una tabella temporanea all'interno del database parzialmente indipendente. Caricare i dati nelle due tabelle e tentare di unirle.

Creare un database utilizzando le regole di confronto database Albanian_100_CI_AI_KS_WS, mentre l'istanza utilizzerà le regole di confronto SQL_Latin1_General_CP1_CI_AS, come mostrato nella Figura 2. Viene creata una tabella denominata dbo.Employee, all'interno dei nuovi database, nella quale vengono caricate tre righe. Viene inoltre creata una cartella tabella denominata #emp in cui viene inserita una singola riga. Quando le tabelle vengono unite al termine della query, viene restituita una riga. Senza aver cambiato l'impostazione del database indipendente in parziale, sarebbe stato restituito un errore.

Figura 2 Creazione e utilizzo di un database parzialmente indipendente.

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

Utenti indipendenti

Gli utenti indipendenti sono simili agli account di accesso a SQL Server tradizionali, con l'eccezione che non dispongono di un account di accesso allineato all'utente del database indipendente. È possibile creare un utente indipendente con SQL Server Management Studio o l'istruzione T/SQL CREATE USER.

Per utilizzare SQL Server Management Studio, connettersi all'istanza in cui è ospitato il database indipendente all'interno di Esplora oggetti. Passare a Databas | {Database indipendente personale} | Sicurezza | Utenti. Fare clic con il pulsante destro del mouse sulla cartella Utenti e selezionare "Nuovo utente" dal menu di scelta rapida. Nel menu a discesa "Tipo di utente", selezionare "Utente SQL con password". Compilare i campi relativi al nome utente e alla password (vedere la Figura 3), nonché lo schema predefinito e qualsiasi appartenenza a ruoli di database che è necessario configurare.

Create a contained SQL user with SQL Server Management Studio

Figura 3 Creazione di un utente SQL indipendente con SQL Server Management Studio.

Dopo aver creato l'utente indipendente, sarà possibile esaminare la schermata del catalogo sys.database_principals all'interno del database indipendente. Nel recordset restituito dopo aver effettuato la query della vista del catalogo sarà riportata la nuova colonna denominata authentication_type e impostata sul valore 2. Verrà inoltre riportata la colonna denominata authentication_type_desc con un valore impostato su "DATABASE", qualora l'utente fosse un utente indipendente.

È possibile creare un database indipendente tramite T/SQL con l'istruzione CREATE USER. SQL Server rileva la creazione di un utente indipendente invece di un utente allineato a un accesso a livello di istanza grazie all'indicazione dell'istruzione WITH PASSWORD, come mostrato di seguito:

CREATE USER MyContainedUser WITHPASSWORD = 'MyContainedUserPassword' GO

È possibile creare utenti SQL indipendenti, nonché account di accesso a Windows indipendenti. A tale scopo, impostare il valore del menu a discesa "Tipo utente" (vedere la Figura 4) su "Utente Windows" e immettere il nome utente senza selezionare un account di accesso.

Create a contained Windows Login using SQL Server Management Studio

Figura 4 Creazione di un account di accesso Windows indipendente con SQL Server Management Studio.

È possibile inoltre creare un utente Windows indipendente con l'istruzione T/SQL CREATE USER, come mostrato di seguito:

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

Accedere al database indipendente con un account di accesso indipendente, esattamente come un utente tradizionale (non indipendente). La grossa differenza per l'utente indipendente è la necessità di specificare il nome del database nella stringa di connessione. In caso contrario, il tentativo di connessione verrà considerato come effettuato da un account di accesso SQL Server tradizionale e, pertanto, avrà esito negativo se non esiste alcun account di accesso che corrisponda al nome utente e alla password definiti a livello di istanza.

Per effettuare questa operazione, utilizzare la finestra di dialogo di connessione di SQL Server Management Studio e fare clic sul pulsante Opzioni nella parte inferiore della finestra di accesso. Selezionare la scheda "Proprietà connessione" e digitare il nome del database indipendente nel menu a discesa "Connetti al database" (vedere la Figura 5).

Non sarà possibile effettuare una query dell'elenco di database ospitati nell'istanza di SQL Server in qualità di utente indipendente specificato nella scheda "Accesso". L'utente indipendente non dispone dei diritti di accesso al database master senza prima aver completato l'autenticazione al database indipendente dove sono contenuti il nome utente e la password. Per questo motivo, sarà necessario conoscere il nome del database e digitarlo nella casella manualmente.

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

Figura 5 La scheda "Proprietà connessione" della finestra di dialogo di connessione di SQL Server Management Studio.

Come si può osservare da queste due funzionalità, il consolidamento di istanze di database in un'istanza di SQL Server 2012 si rivelerà molto più semplice. Sarà necessario dedicare solo un po' di tempo ai test per garantire che la propria applicazione di database sia completamente compatibile con la funzionalità di database indipendente. Tuttavia, una volta attivata l'impostazione per database indipendente, le migrazioni e i consolidamenti futuri dei database saranno veramente un piacere per quanto saranno semplici.

Denny Cherry

Denny Cherryè MVP e consulente indipendente con oltre dieci anni di esperienza di utilizzo di Microsoft SQL Server, Hyper-V, vSphere e di soluzioni di archiviazione aziendali. Ha conseguito diverse certificazioni Microsoft relative a SQL Server dalla versione 2000 alla 2008, tra cui il Microsoft Certified Master. Ha scritto numerosi libri e decine di articoli relative alla gestione di SQL Server.

Contenuto correlato