Esporta (0) Stampa
Espandi tutto

Procedura: usare la copia del database (database SQL di Azure)

Aggiornamento: luglio 2014

Questo argomento descrive come usare la funzionalità di copia del database per eseguire una copia del database SQL di Microsoft Azure. Il nuovo database creato come risultato dell'operazione di copia è completamente funzionante e indipendente dal database di origine. Con l'operazione di copia vengono mantenuti il livello di servizio e il livello di prestazioni del database di origine. Assicurarsi che il server di destinazione disponga della quota disponibile, altrimenti l'operazione non riesce. Per tutti i metodi e gli scenari di copia dei database disponibili, vedere Copia di database nel database SQL di Azure.

Contenuto dell'argomento

Nella tabella riportata di seguito vengono illustrati i metodi disponibili per creare una copia di un database.

 

Metodo di copia Premium Standard Basic Business Web Tra server diversi/tra aree diverse

portale di gestione di Azure

Supporta solo la copia nello stesso server.

ImportantImportante
Per altre informazioni, vedere la sezione relativa alle restrizioni più avanti.

Transact-SQL

(istruzioni CREATE DATABASE con la clausola AS COPY OF)

È supportata la copia tra server diversi, ma entrambi i server devono trovarsi nella stessa area.

API REST

Supporta la copia tra server e tra aree. Per i database Premium è possibile impostare una relazione di replica tra aree diverse che consente di gestire copie del database in server che si trovano in aree geografiche diverse. Per altre informazioni, vedere Available Methods to Copy a Database.

PowerShell

Supporta la copia tra server e tra aree. Per i database Premium è possibile impostare una relazione di replica tra aree diverse che consente di gestire copie del database in server che si trovano in aree geografiche diverse. Per altre informazioni, vedere Available Methods to Copy a Database.

  • Un'area del database SQL di Azure può essere costituita da più cluster fisici. Attualmente è possibile copiare un database tra due diversi cluster solo con i cmdlet PowerShell o l'API REST. Inoltre, è possibile copiare un database tra due diverse sottoscrizioni solo con Transact-SQL. Come parte della gestione della capacità, il database SQL di Azure potrebbe spostare periodicamente il server in un cluster diverso. Tuttavia, i server appartenenti alla stessa sottoscrizione saranno mantenuti tutti nello stesso cluster.

    Per determinare se è possibile copiare un database: usare il comando ping ("ping <server>") sia nel server di origine sia in quello di destinazione per risolvere i relativi indirizzi IP. Se gli indirizzi IP sono uguali, la copia del database è possibile. Per altre informazioni, vedere Utilizzo del comando Ping.

  • La copia dei database può essere eseguita mediante Transact-SQL, PowerShell o l'API REST. Tuttavia, quando si usa Transact-SQL, è possibile eseguire la copia solo tra server diversi all'interno dello stesso cluster. PowerShell e l'API REST supportano la copia in un server diverso all'interno di un cluster fisico diverso.

Il carico di lavoro della copia del database influisce sulle prestazioni dei server di database SQL di Azure interessati dal processo di copia. È pertanto possibile che il processo di copia richieda ulteriore tempo. Se durante la copia del database si verifica un errore, riavviare il processo quando la richiesta sul database di origine è bassa. Per agevolare il completamento del processo di copia, potrebbe essere necessario sospendere altri carichi di lavoro nel database di origine.

Per copiare un database con Transact-SQL, è necessario avere le autorizzazioni seguenti:

  • In entrambi i server: per l'account di accesso è necessario usare nome e password uguali in entrambi i server di database SQL di Azure.

  • Nel server di destinazione: l'account di accesso deve essere membro del ruolo dbmanager a livello di server. Nota: l'entità di livello server del server di database SQL di Azure non è un membro del ruolo dbmanager, tuttavia dispone automaticamente delle stesse autorizzazioni. Per altre informazioni sulla gestione degli account di accesso in database SQL di Azure, vedere Gestione di database e account di accesso in database SQL di Azure.

  • Nel server di origine: l'account di accesso deve essere proprietario (DBO) del database di origine. Il database può essere copiato in un altro database solo dall'account di accesso con il quale è stato creato il database di origine (DBO) oppure dall'entità di livello server.

Quando vengono soddisfatti i requisiti di autorizzazione, con l'account di accesso è possibile eseguire le istruzioni ALTER DATABASE e DROP DATABASE di database SQL di Azure nel nuovo database. Se si effettua la copia di un database con PowerShell o l'API REST, le autorizzazioni usano l'autenticazione basata su certificati.

noteNota
La modifica del proprietario del database con l'istruzione ALTER AUTHORIZATION ON DATABASE non è supportata da database SQL di Azure. È possibile creare ulteriori utenti in database SQL di Azure e aggiungerli al ruolo db_owner a livello di database. Questi utenti aggiuntivi possono essere collegati ad account di accesso diversi da quelli usati per la creazione del database. Questi utenti aggiuntivi non possono tuttavia copiare il database.

ImportantImportante
Le impostazioni di controllo del database non vengono copiate nel nuovo database. Se è necessario usare la funzione di controllo nel nuovo database, abilitarla non appena il database è attivo. Se il nuovo database si trova nella stessa area del database originale, è possibile usare lo stesso account di archiviazione di Servizi. Se il nuovo database si trova in un'area diversa da quella del database originale, usare un account di archiviazione che risiede nella stessa area del nuovo database. Per altre informazioni sul controllo del database SQL di Azure, vedere l'articolo relativo al controllo del database.

Icona freccia usata con il collegamento Torna all'inizio [Top]

  1. Eseguire l'accesso al portale di gestione di Azure usando l'account Microsoft.

  2. Passare alla scheda DATABASE SQL.

  3. Evidenziare il database nell'elenco Database, quindi fare clic su Copia nella barra dei comandi nella parte inferiore della schermata. Verrà aperta la finestra di dialogo Impostazioni copia database. Specificare un nome per il nuovo database, quindi fare clic su Controlla nella finestra di dialogo per avviare l'operazione di copia.

  1. Avviare PowerShell, quindi connettersi alla sottoscrizione Azure.

  2. Usare il cmdlet Start-AzureSqlDatabaseCopy per creare una copia del database.

    Si noti che, in questo caso, il parametro –ContinuousCopy per questo cmdlet non viene usato. Questo parametro viene usato solo per impostare la replica geografica. Per altre informazioni sulla replica geografica, vedere Continuità aziendale del database SQL di Azure.

  3. Esempio di utilizzo: in questo esempio il database "Orders" viene copiato nel database "Orders Copy". Il database originale e la copia risiedono nello stesso server, "abc".

    PS C:\>Start-AzureSqlDatabaseCopy -ServerName "abc" -DatabaseName "Orders" -PartnerDatabase "Orders Copy"
    
    

  • Accedere al database master utilizzando l'account di accesso dell'entità di livello server o l'account di accesso che ha creato il database che si desiderare copiare. Gli account di accesso che non sono un'entità di livello server devono essere membri del ruolo dbmanager per copiare i database. Per altre informazioni sugli account di accesso e sulla connessione al server, vedere rispettivamente Gestione di database e account di accesso in database SQL di Azure e Sviluppo nel database SQL di Azure: Procedure.

  • Avviare la copia del database di origine con l'istruzione CREATE DATABASE. L'esecuzione di questa istruzione dà avvio al processo di copia del database. Poiché la copia di un database è un processo asincrono, l'istruzione CREATE DATABASE restituirà un risultato prima della fine della copia del database.

  • Monitorare il processo di copia eseguendo query sulle viste sys.databases e sys.dm_database_copies.

    • Durante il processo di copia, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su COPYING.

    • Se la copia non riesce, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su SUSPECT. In questo caso, eseguire l'istruzione DROP nel nuovo database, quindi riprovare più tardi.

    • Se la copia viene completata correttamente, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su ONLINE. In questo caso, la copia è completa e il nuovo database è un database normale che può essere modificato indipendentemente dal database di origine.

  • (Facoltativo) Se si decide di annullare il processo di copia mentre è in corso, eseguire l'istruzione DROP DATABASE sul nuovo database. In alternativa, è possibile eseguire l'istruzione DROP DATABASE sul database di origine.

Tramite l'esempio di codice riportato di seguito viene avviato il processo di copia del database. In questo esempio il Database1A viene copiato in un nuovo database denominato Database1B nello stesso server database SQL di Azure.

-- Execute on the master database.
-- Start copying.
CREATE DATABASE Database1B AS COPY OF Database1A;

Gli esempi di codice seguenti possono essere usati per monitorare il processo di copia del database eseguendo query sulle viste sys.databases e sys.dm_database_copies per ottenere informazioni sul nuovo database denominato Database1B.

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

ImportantImportante
L'istruzione seguente restituisce un set di risultati solo mentre la copia è in corso. Quando la copia è terminata e il nuovo database è online, tramite questa query non verrà più restituito alcun risultato.

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

Icona freccia usata con il collegamento Torna all'inizio [Top]

  • Accedere al database master del server di destinazione, il server database SQL di Azure in cui verrà creato il nuovo database. Usare un account di accesso che abbia lo stesso nome e la stessa password del proprietario del database (DBO) del database di origine nel server database SQL di Azure di origine. L'account di accesso nel server di destinazione deve anche essere un membro del ruolo dbmanager o essere l'account di accesso dell'entità di livello server. Per altre informazioni sugli account di accesso e sulla connessione al server, vedere rispettivamente Gestione di database e account di accesso in database SQL di Azure e Sviluppo nel database SQL di Azure: Procedure.

  • Avviare la copia del database di origine utilizzando l'istruzione CREATE DATABASE di database SQL di Azure. L'esecuzione di questa istruzione nel server di destinazione avvia il processo di copia del database. Poiché la copia di un database è un processo asincrono, l'istruzione CREATE DATABASE restituirà un risultato prima della fine della copia del database.

  • Monitorare il processo di copia eseguendo query sulle viste sys.databases e sys.dm_database_copies.

    • Durante il processo di copia, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su COPYING.

    • Se la copia non riesce, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su SUSPECT. In questo caso, eseguire l'istruzione DROP nel nuovo database e riprovare più tardi.

    • Se la copia viene completata correttamente, la colonna state_desc della vista sys.databases per il nuovo database viene impostata su ONLINE. In questo caso, la copia è completa e il nuovo database è un database normale che può essere modificato indipendentemente dal database di origine.

  • (Facoltativo) Se si decide di annullare il processo di copia mentre è in corso, eseguire l'istruzione DROP DATABASE sul nuovo database. In alternativa, è possibile eseguire l'istruzione DROP DATABASE sul database di origine.

  • (Facoltativo) Quando il nuovo database è online nel server di destinazione, usare l'istruzione ALTER USER per modificare il mapping degli utenti dal nuovo database agli account di accesso nel server di destinazione. Tutti gli utenti del nuovo database gestiscono le autorizzazioni ottenute nel database di origine. L'utente che ha avviato la copia del database diventa il proprietario del nuovo database e gli viene assegnato un nuovo ID di sicurezza (SID). Dopo il completamento della copia e prima della modifica del mapping degli altri utenti, solo l'account di accesso che ha avviato la copia, ovvero il proprietario del database (DBO), può accedere al nuovo database.

Tramite l'esempio di codice riportato di seguito viene avviato il processo di copia del database da bipk56ex. In questo esempio viene illustrata la copia del Database1A dal server database SQL di Azure denominato vipk56ex5c in un nuovo database denominato Database2A in Server2.

-- Execute on the master database of bipk56ex
-- Start copying from Server1 to Server2
CREATE DATABASE Database2A AS COPY OF vipk56ex5c.Database1A;

Tramite l'esempio di codice riportato di seguito viene monitorato il processo di copia del database. Nell'esempio vengono eseguite query sulle viste sys.databases e sys.dm_database_copies in Server2 per ottenere informazioni sul nuovo database denominato Database2A.

ImportantImportante
L'istruzione seguente restituisce un set di risultati solo mentre la copia è in corso. Quando la copia è terminata e il nuovo database è online, tramite questa query non verrà più restituito alcun risultato.

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

ImportantImportante
L'istruzione seguente restituisce un set di risultati solo mentre la copia è in corso. Quando la copia è terminata e il nuovo database è online, tramite questa query non verrà più restituito alcun risultato.

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

Icona freccia usata con il collegamento Torna all'inizio [Top]

Se si desidera arrestare il processo di copia prima che venga completato, è possibile usare l'istruzione DROP DATABASE per eliminare il database di destinazione. Affinché tutto funzioni come previsto, usare un account di accesso che soddisfi i requisiti di autorizzazione descritti in Autorizzazioni più indietro in questo argomento.

Icona freccia usata con il collegamento Torna all'inizio [Top]

  • Al termine del processo di copia del database, il nuovo database si troverà in uno dei due stati possibili:

    • Se il processo di copia è stato completato correttamente, il nuovo database si troverà nello stato ONLINE. Quando il nuovo database è online, può essere gestito e usato indipendentemente dal database di origine.

    • Se il processo di copia non è stato completato correttamente, il nuovo database si troverà nello stato SUSPECT. Il database in questo stato non è disponibile, né accessibile e non può essere recuperato. In questo caso, eliminare il database di destinazione, quindi provare a copiare nuovamente il database di origine.

    Per visualizzare lo stato, eseguire una query sulla colonna state_desc nella vista sys.databases.

  • Al termine della copia, il livello di servizio, il livello di prestazioni e la dimensione massima del nuovo database saranno uguali a quelli del database di origine. Per informazioni su come impostare e modificare il livello di servizio o il livello di prestazioni in database SQL di Azure, vedere Modifica dei livelli di servizio e dei livelli di prestazioni di un database.

  • Al termine di un processo di copia tra server, gli account di accesso, gli utenti e le autorizzazioni di copia possono essere gestiti indipendentemente dal database di origine. Usare l'account di accesso DBO e l'istruzione ALTER USER per eseguire il mapping degli utenti nel nuovo database agli account di accesso nel nuovo server di database SQL di Azure. Ad esempio: ALTER USER userName WITH LOGIN='loginName'. Per altre informazioni, vedere ALTER USER.

Icona freccia usata con il collegamento Torna all'inizio [Top]

Vedere anche

Mostra:
© 2014 Microsoft