Condividi tramite


Ripristino di pagine (SQL Server)

In questo argomento viene descritto come ripristinare le pagine in SQL Server 2012 utilizzando SQL Server Management Studio o Transact-SQL. L'obiettivo di un ripristino della pagina è ripristinare una o più pagine danneggiate senza ripristinare l'intero database. In genere, le pagine candidate al ripristino sono state contrassegnate come "sospette" a causa di un errore verificatosi all'accesso alla pagina. Le pagine sospette vengono identificate nella tabella suspect_pages del database msdb.

Contenuto dell'argomento

  • Prima di iniziare:

    Casi in cui è utile il ripristino della pagina

    Limitazioni e restrizioni

    Consigli

    Sicurezza

  • Per ripristinare le pagine utilizzando:

    SQL Server Management Studio

    Transact-SQL

Prima di iniziare

Casi in cui è utile il ripristino della pagina

Il ripristino di una pagina è destinato alla correzione di pagine danneggiate isolate. Il ripristino e il recupero di poche pagine singole possono essere eseguiti in modo più rapido rispetto al ripristino di un file, riducendo la quantità di dati offline durante l'operazione di ripristino. Tuttavia, se è necessario ripristinare un certo numero di pagine in un file, in genere è più efficiente ripristinare l'intero file. Se, ad esempio, numerose pagine in un dispositivo indicano la possibilità di un guasto imminente del dispositivo, prendere in considerazione il ripristino del file, se possibile in un percorso diverso, e la riparazione del dispositivo.

Non tutti gli errori di pagina richiedono inoltre un ripristino. Nei dati della cache, ad esempio in un indice secondario, può verificarsi un problema risolvibile ricalcolando i dati. Se, ad esempio, l'amministratore del database elimina un indice secondario e lo ricompila, i dati danneggiati, sebbene corretti, non sono indicati come tali nella tabella suspect_pages.

Limitazioni e restrizioni

  • Il ripristino delle pagine si applica ai database di SQL Server che utilizzano i modelli di recupero con registrazione completa o con registrazione minima delle operazioni bulk. Il ripristino della pagina è supportato solo per i filegroup di lettura/scrittura.

  • È possibile ripristinare solo le pagine di database. Non è possibile utilizzare il ripristino della pagina per gli elementi seguenti:

    • Log delle transazioni

    • Pagine di allocazione: pagine mappa di allocazione globale (GAM, Global Allocation Map), pagine mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map) e pagine spazio libero nella pagina (PFS, Page Free Space).

    • Pagina 0 di tutti i file di dati (pagina di avvio del file)

    • Pagina 1:9 (pagina di avvio del database)

    • Catalogo full-text

  • È possibile ripristinare solo le pagine di database. Non è possibile utilizzare il ripristino della pagina per gli elementi seguenti:

    • Log delle transazioni

    • Pagine di allocazione: pagine mappa di allocazione globale (GAM, Global Allocation Map), pagine mappa di allocazione globale condivisa (SGAM, Shared Global Allocation Map) e pagine spazio libero nella pagina (PFS, Page Free Space).

    • Pagina 0 di tutti i file di dati (pagina di avvio del file)

    • Pagina 1:9 (pagina di avvio del database)

    • Catalogo full-text

  • Nel caso di un database che utilizza il modello di recupero con registrazione minima delle operazioni bulk, per il ripristino della pagina sono previste le condizioni aggiuntive seguenti:

    • Il backup dei dati con registrazione minima delle operazioni bulk risulta problematico se il filegroup o i dati della pagina sono offline, poiché i dati offline non vengono registrati nel log. Una pagina offline può impedire il backup del log. In questo caso, prendere in considerazione l'utilizzo di DBCC REPAIR, che può consentire una minore perdita di dati rispetto al ripristino del backup più recente.

    • Se un backup del log di un database con registrazione minima delle operazioni bulk rileva una pagina contenente errori, non sarà possibile completarlo, a meno che non sia specificata la clausola WITH CONTINUE_AFTER_ERROR.

    • Il ripristino della pagina in genere non funziona con il recupero con registrazione minima delle operazioni bulk.

      Una procedura consigliata per l'esecuzione del ripristino della pagina consiste nell'impostare il database sul modello di recupero con registrazione completa e tentare un backup del log. Se il backup del log funziona, è possibile procedere con il ripristino della pagina. Se l'esecuzione del backup del log ha invece esito negativo, le modifiche eseguite dopo il backup del log precedente verranno perse oppure sarà necessario tentare di eseguire DBCC con l'opzione REPAIR_ALLOW_DATA_LOSS.

Consigli

  • Scenari di ripristino della pagina:

    • Ripristino della pagina offline
      Tutte le edizioni di SQL Server 2005 e versioni successive supportano il ripristino delle pagine quando il database è offline. Durante un ripristino della pagina offline, il database è offline mentre le pagine danneggiate vengono ripristinate. Al termine della sequenza di ripristino, il database torna online.

    • Ripristino della pagina online
      SQL Server 2005 Enterprise Edition e versioni successive supportano il ripristino della pagina online, sebbene nei casi in cui il database è attualmente offline viene utilizzato il ripristino offline. Nella maggior parte dei casi, una pagina danneggiata può essere ripristinata mentre il database, incluso il filegroup in cui una pagina viene ripristinata, rimane online. Quando il filegroup primario è online, anche se uno o più filegroup secondari sono offline, il ripristino della pagina viene in genere eseguito online. Talvolta, tuttavia, una pagina danneggiata può richiedere un ripristino offline. Un danno a determinate pagine di importanza critica può ad esempio impedire l'avvio del database.

      Nota di attenzioneAttenzione

      Se nelle pagine danneggiate sono archiviati metadati del database di importanza critica, gli aggiornamenti necessari ai metadati potrebbero non riuscire durante un tentativo di ripristino della pagina online. In questo caso, è possibile eseguire un ripristino della pagina offline, ma è prima necessario creare un backup della parte finale del log (eseguendo il backup del log delle transazioni tramite RESTORE WITH NORECOVERY).

  • Il ripristino della pagina sfrutta le funzionalità ottimizzate di segnalazione e rilevamento degli errori a livello di pagina, inclusi i checksum di pagina, introdotte in SQL Server 2005. Le pagine rilevate come danneggiate da un errore di checksum o di scrittura incompleta possono essere ripristinate tramite un'operazione di ripristino della pagina. Vengono ripristinate solo le pagine specificate in modo esplicito. Ogni pagina specificata viene sostituita dalla copia di tale pagina dal backup dei dati specificato.

    Quando si ripristinano i backup del log successivi, questi vengono applicati solo ai file di database che contengono almeno una pagina recuperata. È inoltre necessario che una catena non interrotta di backup del log venga applicata all'ultimo ripristino completo o differenziale per aggiornare il filegroup che include la pagina rispetto al file di log attuale. Analogamente al ripristino del file, il set di rollforward viene avanzato con un unico passaggio di rollforward del log. Affinché il ripristino delle pagine avvenga correttamente, è necessario che le pagine ripristinate vengano recuperate fino a uno stato consistente con il database.

Sicurezza

Autorizzazioni

Se il database da ripristinare non esiste, per eseguire un'operazione RESTORE l'utente deve disporre delle autorizzazioni CREATE DATABASE. Se il database esiste, le autorizzazioni per l'istruzione RESTORE vengono assegnate per impostazione predefinita ai membri dei ruoli predefiniti del server sysadmin e dbcreator e al proprietario (dbo) del database (per l'opzione FROM DATABASE_SNAPSHOT, il database esiste sempre).

Le autorizzazioni per l'istruzione RESTORE vengono assegnate ai ruoli in cui le informazioni sull'appartenenza sono sempre disponibili per il server. Poiché è possibile controllare l'appartenenza ai ruoli predefiniti del database solo quando il database è accessibile e non è danneggiato, condizioni che non risultano sempre vere quando si esegue un'operazione RESTORE, i membri del ruolo predefinito del database db_owner non dispongono delle autorizzazioni per l'istruzione RESTORE.

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Utilizzo di SQL Server Management Studio

A partire da SQL Server 2012, SQL Server Management Studio supporta il ripristino della pagina.

Per ripristinare le pagine

  1. Stabilire una connessione all'istanza appropriata di Motore di database di SQL Server, quindi fare clic sul nome del server in Esplora oggetti per espandere l'albero di server.

  2. Espandere Database. A seconda del database, selezionare un database utente oppure espandere Database di sistema e selezionare un database di sistema.

  3. Fare clic con il pulsante destro del mouse sul database, scegliere Attività, Ripristina, quindi fare clic su Pagina per aprire la finestra di dialogo Ripristina pagina.

    • Ripristina
      Questa sezione ha la stessa funzione dell'opzione Ripristina fino a in Ripristina database (pagina Generale).

      • Database
        Consente di specificare il database da ripristinare. È possibile immettere un nuovo database oppure selezionarne uno esistente nell'elenco a discesa. Nell'elenco sono inclusi tutti i database disponibili nel server, ad eccezione dei database di sistema master e tempdb.
      Nota di attenzioneAttenzione

      Per ripristinare un backup protetto da password, è necessario utilizzare l'istruzione RESTORE.

    • Backup della parte finale del log
      Immettere o selezionare un nome di file in Dispositivo di backup per indicare dove verrà archiviato il backup della parte finale del log per il database.

    • Set di backup
      In questa sezione vengono visualizzati i set di backup coinvolti nel ripristino.

      Intestazione

      Valori

      Nome

      Nome del set di backup.

      Componente

      Componente di cui viene eseguito il backup: Database, File o <vuoto> (nel caso dei log delle transazioni).

      Tipo

      Tipo di backup eseguito: Completo, Differenziale o Log delle transazioni.

      Server

      Nome dell'istanza di Motore di database che ha eseguito l'operazione di backup.

      Database

      Nome del database su cui viene eseguita l'operazione di backup.

      Posizione

      Posizione del set di backup nel volume.

      Primo LSN

      Numero di sequenza del file di log (LSN) della prima transazione nel set di backup. Vuoto per i backup dei file.

      Ultimo LSN

      Numero di sequenza del file di log (LSN) dell'ultima transazione nel set di backup. Vuoto per i backup dei file.

      LSN checkpoint

      Numero di sequenza del file di log (LSN) del checkpoint più recente al momento della creazione del backup.

      LSN completo

      Numero di sequenza del file di log (LSN) dell'operazione di backup completo del database più recente.

      Data inizio

      Data e ora di inizio dell'operazione di backup, visualizzate in base alle impostazioni internazionali del client.

      Data fine

      Data e ora di fine dell'operazione di backup, visualizzate in base alle impostazioni internazionali del client.

      Dimensioni

      Dimensioni in byte del set di backup.

      Nome utente

      Nome dell'utente che ha eseguito l'operazione di backup.

      Scadenza

      Data e ora di scadenza del set di backup.

      Fare clic su Verifica per controllare l'integrità dei file di backup necessaria per eseguire l'operazione di ripristino della pagina.

  4. Per identificare pagine danneggiate, con il database corretto selezionato nella casella Database, fare clic su Controlla pagine di database. L'operazione può richiedere molto tempo.

    Nota di attenzioneAttenzione

    Per ripristinare pagine specifiche che non sono danneggiate, fare clic su Aggiungi e immettere l'ID file e l'ID pagina delle pagine da ripristinare.

  5. La griglia di pagine viene utilizzata per identificare le pagine da ripristinare. Inizialmente, questa griglia viene popolata dalla tabella di sistema suspect_pages. Per aggiungere o rimuovere pagine dalla griglia, fare clic su Aggiungi o su Rimuovi. Per ulteriori informazioni, vedere Gestione della tabella suspect_pages (SQL Server).

  6. Nella griglia Set di backup sono elencati i set di backup inclusi nel piano di ripristino predefinito. Facoltativamente, fare clic su Verifica per verificare che i backup siano leggibili e che i set di backup siano completi, senza ripristinarli. Per ulteriori informazioni, vedere RESTORE VERIFYONLY (Transact-SQL).

    Pagine

  7. Per ripristinare le pagine elencate nella griglia, fare clic su OK.

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Utilizzo di Transact-SQL

Per specificare una pagina in un'istruzione RESTORE DATABASE, sono necessari l'ID del file contenente la pagina e l'ID della pagina. La sintassi necessaria è la seguente:

RESTORE DATABASE <database_name>

PAGE = '<file: page> [ ,... n ] ' [ ,... n ]

FROM <backup_device> [ ,... n ]

WITH NORECOVERY

Per ulteriori informazioni sui parametri dell'opzione PAGE, vedere Argomenti dell'istruzione RESTORE (Transact-SQL). Per ulteriori informazioni sulla sintassi di RESTORE DATABASE, vedere RESTORE (Transact-SQL).

Per ripristinare le pagine

  1. Ottenere gli ID di pagina delle pagine danneggiate da ripristinare. Un errore di checksum o di scrittura incompleta restituisce l'ID della pagina, con le informazioni necessarie per specificare le pagine. Per cercare l'ID di una pagina danneggiata, utilizzare una delle origini seguenti:

    Origine dell'ID di pagina

    Argomento

    msdb..suspect_pages

    Gestione della tabella suspect_pages (SQL Server)

    log degli errori

    Visualizzazione del log degli errori di SQL Server (SQL Server Management Studio)

    Tracce degli eventi

    Monitoraggio e risposta agli eventi

    DBCC

    DBCC (Transact-SQL)

    Provider WMI

    Concetti relativi al provider WMI per eventi del server

  2. Avviare un ripristino della pagina con un backup completo del database, del file o del filegroup contenente la pagina desiderata. Nell'istruzione RESTORE DATABASE utilizzare la clausola PAGE per elencare gli ID di tutte le pagine da ripristinare.

  3. Applicare i backup differenziali più recenti.

  4. Applicare i backup del log successivi.

  5. Creare un nuovo backup del log del database che include l'LSN finale delle pagine ripristinate, ovvero il punto in corrispondenza del quale viene portata offline l'ultima pagina ripristinata. L'LSN finale, impostato come parte del primo ripristino nella sequenza, è l'LSN di destinazione di rollforward. Il rollforward online del file che include la pagina è in grado di arrestarsi in corrispondenza dell'LSN di destinazione di rollforward. Per conoscere l'LSN di destinazione di rollforward corrente di un file, vedere la colonna redo_target_lsn di sys.master_files. Per ulteriori informazioni, vedere sys.master_files (Transact-SQL).

  6. Ripristinare il nuovo backup del log. Una volta applicato il nuovo backup del log, il ripristino della pagina è completo e le pagine sono utilizzabili.

    [!NOTA]

    Questa sequenza è analoga a una sequenza di ripristino del file. In effetti, il ripristino della pagina e i ripristini dei file possono essere eseguiti entrambi come parte della stessa sequenza.

Esempio (Transact-SQL)

Nell'esempio seguente vengono ripristinate quattro pagine danneggiate del file B con NORECOVERY. Successivamente, vengono applicati due backup del log con NORECOVERY, seguiti dal backup della parte finale del log, ripristinato con RECOVERY. Nell'esempio seguente viene eseguito un ripristino in linea. Nell'esempio l'ID del file B è 1 e gli ID delle pagine danneggiate sono 57, 202, 916 e 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY; 
BACKUP LOG <database> TO <new_log_backup>; 
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Vedere anche

Riferimento

RESTORE (Transact-SQL)

Concetti

Applicazione dei backup di log delle transazioni (SQL Server)

Gestione della tabella suspect_pages (SQL Server)

Backup e ripristino di database SQL Server