Ripristino di pagine (SQL Server)Restore Pages (SQL Server)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento viene descritto come ripristinare le pagine in SQL ServerSQL Server usando SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to restore pages in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. L'obiettivo di un ripristino della pagina è ripristinare una o più pagine danneggiate senza ripristinare l'intero database.The goal of a page restore is to restore one or more damaged pages without restoring the whole database. In genere, le pagine candidate al ripristino sono state contrassegnate come "sospette" a causa di un errore verificatosi all'accesso alla pagina.Typically, pages that are candidates for restore have been marked as "suspect" because of an error that is encountered when accessing the page. Le pagine sospette vengono identificate nella tabella suspect_pages del database msdb .Suspect pages are identified in the suspect_pages table in the msdb database.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Casi in cui è utile il ripristino della pagina When is a Page Restore Useful?

Il ripristino di una pagina è destinato alla correzione di pagine danneggiate isolate.A page restore is intended for repairing isolated damaged pages. 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.Restoring and recovering a few individual pages might be faster than a file restore, reducing the amount of data that is offline during a restore operation. Tuttavia, se è necessario ripristinare un certo numero di pagine in un file, in genere è più efficiente ripristinare l'intero file.However, if you have to restore more than a few pages in a file, it is generally more efficient to restore the whole 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.For example, if lots of pages on a device indicate a pending device failure, consider restoring the file, possibly to another location, and repairing the device.

Non tutti gli errori di pagina richiedono inoltre un ripristino.Furthermore, not all page errors require a restore. Nei dati della cache, ad esempio in un indice secondario, può verificarsi un problema risolvibile ricalcolando i dati.A problem can occur in cached data, such as a secondary index, that can be resolved by recalculating the data. 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 .For example, if the database administrator drops a secondary index and rebuilds it, the corrupted data, although fixed, is not indicated as such in the suspect_pages table.

Limitazioni e restrizioni Limitations and Restrictions

  • Il ripristino delle pagine si applica ai database di SQL ServerSQL Server che utilizzano i modelli di recupero con registrazione completa o con registrazione minima delle operazioni bulk.Page restore applies to SQL ServerSQL Server databases that are using the full or bulk-logged recovery models. Il ripristino della pagina è supportato solo per i filegroup di lettura/scrittura.Page restore is supported only for read/write filegroups.

  • È possibile ripristinare solo le pagine di database.Only database pages can be restored. Non è possibile usare il ripristino della pagina per gli elementi seguenti:Page restore cannot be used to restore the following:

    • Log delle transazioniTransaction log

    • 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).Allocation pages: Global Allocation Map (GAM) pages, Shared Global Allocation Map (SGAM) pages, and Page Free Space (PFS) pages.

    • Pagina 0 di tutti i file di dati (pagina di avvio del file)Page 0 of all data files (the file boot page)

    • Pagina 1:9 (pagina di avvio del database)Page 1:9 (the database boot page)

    • Catalogo full-textFull-text catalog

  • Nel caso di un database che usa il modello di recupero con registrazione minima delle operazioni bulk, per il ripristino della pagina sono previste le condizioni aggiuntive seguenti:For a database that uses the bulk-logged recovery model, page restore has the following additional conditions:

    • 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.Backing up while filegroup or page data is offline is problematic for bulk-logged data, because the offline data is not recorded in the log. Una pagina offline può impedire il backup del log.Any offline page can prevent backing up the 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.In this cases, consider using DBCC REPAIR, because this might cause less data loss than restoring to the most recent backup.

    • 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.If a log backup of a bulk-logged database encounters a bad page, it fails unless WITH CONTINUE_AFTER_ERROR is specified.

    • Il ripristino della pagina in genere non funziona con il recupero con registrazione minima delle operazioni bulk.Page restore generally does not work with bulk-logged recovery.

      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.A best practice for performing page restore is to set the database to the full recovery model, and try a log backup. Se il backup del log funziona, è possibile procedere con il ripristino della pagina.If the log backup works, you can continue with the page restore. 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.If the log backup fails, you either have to lose work since the previous log backup or you have to try running DBCC must be run with the REPAIR_ALLOW_DATA_LOSS option.

Indicazioni Recommendations

  • Scenari di ripristino della pagina:Page restore scenarios:

    Ripristino della pagina offlineOffline page restore
    Tutte le edizioni di SQL ServerSQL Server supportano il ripristino delle pagine quando il database è offline.All editions of SQL ServerSQL Server support restoring pages when the database is offline. Durante un ripristino della pagina offline, il database è offline mentre le pagine danneggiate vengono ripristinate.In an offline page restore, the database is offline while damaged pages are restored. Al termine della sequenza di ripristino, il database torna online.At the end of the restore sequence, the database comes online.

    Ripristino della pagina onlineOnline page restore
    SQL ServerSQL Server Enterprise Edition supporta il ripristino della pagina online, anche se nei casi in cui il database è offline viene usato il ripristino non in linea. SQL ServerSQL Server Enterprise edition supports online page restores, though they use offline restore if the database is currently 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.In most cases, a damaged page can be restored while the database remains online, including the filegroup to which a page is being restored. Quando il filegroup primario è online, anche se uno o più filegroup secondari sono offline, il ripristino della pagina viene in genere eseguito online.When the primary filegroup is online, even if one or more of its secondary filegroups are offline, page restores are usually performed online. Talvolta, tuttavia, una pagina danneggiata può richiedere un ripristino offline.Occasionally, however, a damaged page can require an offline restore. Un danno a determinate pagine di importanza critica può ad esempio impedire l'avvio del database.For example, damage to certain critical pages might prevent the database from starting.

    Avviso

    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.If damaged pages are storing critical database metadata, required updates to metadata might fail during an online page restore attempt. In questo caso è possibile eseguire un ripristino della pagina non in linea, ma è prima necessario creare un backup della parte finale del log eseguendo il backup del log delle transazioni tramite RESTORE WITH NORECOVERY.In this case, you can perform an offline page restore, but first you must create a tail log backup (by backing up the transaction log using 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.Page restore takes advantage of the improved page-level error reporting (including page checksums) and tracking. Le pagine rilevate come danneggiateda un errore di checksum o di scrittura incompleta possono essere ripristinate tramite un'operazione di ripristino della pagina.Pages that are detected as corrupted by check-summing or a torn write, damaged pages, can be restored by a page restore operation. Vengono ripristinate solo le pagine specificate in modo esplicito.Only explicitly specified pages are restored. Ogni pagina specificata viene sostituita dalla copia di tale pagina dal backup dei dati specificato.Each specified page is replaced by the copy of that page from the specified data backup.

    Quando si ripristinano i backup del log successivi, questi vengono applicati solo ai file di database che contengono almeno una pagina recuperata.When you restore the subsequent log backups, they are applied only to database files that contain at least one page that is being recovered. È 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.An unbroken chain of log backups must be applied to the last full or differential restore to bring the filegroup that contains the page forward to the current log file. Analogamente al ripristino del file, il set di rollforward viene avanzato con un unico passaggio di rollforward del log.As in a file restore, the roll forward set is advanced with a single log redo pass. Affinché il ripristino delle pagine avvenga correttamente, è necessario che le pagine ripristinate vengano recuperate fino a uno stato consistente con il database.For a page restore to succeed, the restored pages must be recovered to a state consistent with the database.

Sicurezza Security

Autorizzazioni Permissions

Se il database da ripristinare non esiste, per eseguire un'operazione RESTORE l'utente deve disporre delle autorizzazioni CREATE DATABASE.If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. 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.If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

Le autorizzazioni per l'istruzione RESTORE vengono assegnate ai ruoli in cui le informazioni sull'appartenenza sono sempre disponibili per il server.RESTORE permissions are given to roles in which membership information is always readily available to the server. L'appartenenza ai ruoli predefiniti del database può essere controllata solo quando il database è accessibile e non è danneggiato, condizioni che non risultano sempre vere quando si esegue un'operazione RESTORE, quindi i membri del ruolo predefinito del database db_owner non hanno le autorizzazioni per l'istruzione RESTORE.Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

A partire da SQL Server 2016SQL Server 2016, SQL Server Management StudioSQL Server Management Studio supporta il ripristino della pagina.Starting in SQL Server 2016SQL Server 2016, SQL Server Management StudioSQL Server Management Studio supports page restores.

Per ripristinare le pagineTo restore pages

  1. Stabilire una connessione all'istanza appropriata di Motore di database di SQL ServerSQL Server Database Engine, quindi fare clic sul nome del server in Esplora oggetti per espandere l'albero di server.Connect to the appropriate instance of the Motore di database di SQL ServerSQL Server Database Engine, in Object Explorer, click the server name to expand the server tree.

  2. Espandere Database.Expand Databases. A seconda del database, selezionare un database utente oppure espandere Database di sistemae selezionare un database di sistema.Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. Fare clic con il pulsante destro del mouse sul database, scegliere Attività, Ripristina, quindi fare clic su Pagina. Verrà aperta la finestra di dialogo Ripristina pagina .Right-click the database, point to Tasks, point to Restore, and then click Page, which opens the Restore Page dialog box.

    RipristinaRestore
    Questa sezione ha la stessa funzione di Ripristina fino a in Ripristina database (pagina Generale).This section performs the same function as that of Restore to on the Restore Database (General Page).

    DatabaseDatabase
    Consente di specificare il database da ripristinare.Specifies the database to restore. È possibile immettere un nuovo database oppure selezionarne uno esistente nell'elenco a discesa.You can enter a new database or select an existing database from the drop-down list. Nell'elenco sono inclusi tutti i database disponibili nel server, ad eccezione dei database di sistema master e tempdb.The list includes all databases on the server, except the system databases master and tempdb.

    Avviso

    Per ripristinare un backup protetto da password, è necessario usare l'istruzione RESTORE .To restore a password-protected backup, you must use the RESTORE statement.

    Backup della parte finale del logTail-Log backup
    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.Enter or select a file name in Backup device where there tail-log backup will be stored for the database.

    Set di backupBackup Sets
    In questa sezione vengono visualizzati i set di backup coinvolti nel ripristino.This section displays the backup sets involved in the restoration.

    IntestazioneHeader ValoriValues
    NomeName Nome del set di backup.The name of the backup set.
    ComponenteComponent Componente incluso nel backup, ovvero Database, File o <vuoto> (nel caso dei log delle transazioni).The backed-up component: Database, File, or <blank> (for transaction logs).
    TipoType Tipo di backup eseguito: Completo, Differenzialeo Log delle transazioni.The type of backup performed: Full, Differential, or Transaction Log.
    ServerServer Nome dell'istanza del Motore di databaseDatabase Engine che ha eseguito l'operazione di backup.The name of the Motore di databaseDatabase Engine instance that performed the backup operation.
    DatabaseDatabase Nome del database interessato dall'operazione di backup.The name of the database involved in the backup operation.
    PosizionePosition Posizione del set di backup nel volume.The position of the backup set in the volume.
    Primo LSNFirst LSN Numero di sequenza del file di log (LSN) della prima transazione nel set di backup.The log sequence number (LSN) of the first transaction in the backup set. Vuoto per i backup dei file.Blank for file backups.
    Ultimo LSNLast LSN Numero di sequenza del file di log (LSN) dell'ultima transazione nel set di backup.The log sequence number (LSN) of the last transaction in the backup set. Vuoto per i backup dei file.Blank for file backups.
    LSN checkpointCheckpoint LSN Numero di sequenza del file di log (LSN) del checkpoint più recente al momento della creazione del backup.The log sequence number (LSN) of the most recent checkpoint at the time the backup was created.
    LSN completoFull LSN Numero di sequenza del file di log (LSN) dell'operazione di backup completo del database più recente.The log sequence number (LSN) of the most recent full database backup.
    Data inizioStart Date Data e ora di inizio dell'operazione di backup, visualizzate in base alle impostazioni internazionali del client.The date and time when the backup operation began, presented in the regional setting of the client.
    Data fineFinish Date Data e ora di fine dell'operazione di backup, visualizzate in base alle impostazioni internazionali del client.The date and time when the backup operation finished, presented in the regional setting of the client.
    DimensioneSize Dimensioni in byte del set di backup.The size of the backup set in bytes.
    Nome utenteUser Name Nome dell'utente che ha eseguito l'operazione di backup.The name of the user who performed the backup operation.
    ScadenzaExpiration Data e ora di scadenza del set di backup.The date and time the backup set expires.

    Fare clic su Verifica per controllare l'integrità dei file di backup necessaria per eseguire l'operazione di ripristino della pagina.Click Verify to check the integrity of the backup files needed to perform the page restore operation.

  4. Per identificare pagine danneggiate, con il database corretto selezionato nella casella Database , fare clic su Controlla pagine di database.To identify corrupted pages, with the correct database selected in the Database box, click Check Database Pages. L'operazione può richiedere molto tempo.This is a long running operation.

    Avviso

    Per ripristinare pagine specifiche non danneggiate, fare clic su Aggiungi e immettere l' ID file e l' ID pagina delle pagine da ripristinare.To restore specific pages that are not corrupted, click Add and enter the File ID and Page ID of the pages to be restored.

  5. La griglia di pagine viene usata per identificare le pagine da ripristinare.The pages grid is used to identify the pages to be restored. All'inizio questa griglia viene popolata dalla tabella di sistema suspect_pages .Initially, this grid is populated from the suspect_pages system table. Per aggiungere o rimuovere pagine dalla griglia, fare clic su Aggiungi o su Rimuovi.To add or remove pages from the grid, click Add or Remove. Per altre informazioni, vedere Gestione della tabella suspect_pages (SQL Server).For more information, see Manage the suspect_pages Table (SQL Server).

  6. Nella griglia Set di backup sono elencati i set di backup inclusi nel piano di ripristino predefinito.The Backup sets grid lists the backup sets in the default restore plan. Facoltativamente, fare clic su Verifica per verificare che i backup siano leggibili e che i set di backup siano completi, senza ripristinarli.Optionally, click Verify to verify that the backups are readable and that the backup sets are complete, without restoring them. Per altre informazioni, vedere RESTORE VERIFYONLY (Transact-SQL).For more information, see RESTORE VERIFYONLY (Transact-SQL).

    PaginePages

  7. Per ripristinare le pagine elencate nella griglia, fare clic su OK.To restore the pages listed in the pages grid, click OK.

Utilizzo di Transact-SQL Using 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.To specify a page in a RESTORE DATABASE statement, you need the file ID of the file containing the page and the page ID of the page. La sintassi necessaria è la seguente:The required syntax is as follows:

RESTORE DATABASE <database_name>

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

FROM <backup_device> [ ,... n ]

WITH NORECOVERY

Per altre informazioni sui parametri dell'opzione PAGE, vedere Argomenti dell'istruzione RESTORE (Transact-SQL).For more information about the parameters of the PAGE option, see RESTORE Arguments (Transact-SQL). Per altre informazioni sulla sintassi di RESTORE DATABASE, vedere RESTORE (Transact-SQL).For more information about the RESTORE DATABASE syntax, see RESTORE (Transact-SQL).

Per ripristinare le pagineTo restore pages

  1. Ottenere gli ID di pagina delle pagine danneggiate da ripristinare.Obtain the page IDs of the damaged pages to be restored. Un errore di checksum o di scrittura incompleta restituisce l'ID della pagina, con le informazioni necessarie per specificare le pagine.A checksum or torn write error returns page ID, providing the information required for specifying the pages. Per cercare l'ID di una pagina danneggiata, usare una delle origini seguenti:To look up page ID of a damaged page, use any of the following sources.

    Origine dell'ID di paginaSource of page ID ArgomentoTopic
    msdb..suspect_pagesmsdb..suspect_pages Gestione della tabella suspect_pages (SQL Server)Manage the suspect_pages Table (SQL Server)
    Log degli erroriError log Visualizzazione del log degli errori di SQL Server (SQL Server Management Studio)View the SQL Server Error Log (SQL Server Management Studio)
    Tracce degli eventiEvent traces Monitoraggio e risposta agli eventiMonitor and Respond to Events
    DBCCDBCC DBCC (Transact-SQL)DBCC (Transact-SQL)
    Provider WMIWMI provider Concetti relativi al provider WMI per eventi del serverWMI Provider for Server Events Concepts
  2. Avviare un ripristino della pagina con un backup completo del database, del file o del filegroup contenente la pagina desiderata.Start a page restore with a full database, file, or filegroup backup that contains the page. Nell'istruzione RESTORE DATABASE usare la clausola PAGE per elencare gli ID di tutte le pagine da ripristinare.In the RESTORE DATABASE statement, use the PAGE clause to list the page IDs of all of the pages to be restored.

  3. Applicare i backup differenziali più recenti.Apply the most recent differentials .

  4. Applicare i backup del log successivi.Apply the subsequent log backups.

  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.Create a new log backup of the database that includes the final LSN of the restored pages, that is, the point at which the last restored page is taken offline. L'LSN finale, impostato come parte del primo ripristino nella sequenza, è l'LSN di destinazione di rollforward.The final LSN, which is set as part of the first restore in the sequence, is the redo target LSN. Il rollforward online del file che include la pagina è in grado di arrestarsi in corrispondenza dell'LSN di destinazione di rollforward.Online roll forward of the file containing the page is able to stop at the redo target LSN. Per conoscere l'LSN di destinazione della fase di rollforward corrente di un file, vedere la colonna redo_target_lsn di sys.master_files.To learn the current redo target LSN of a file, see the redo_target_lsn column of sys.master_files. Per altre informazioni, vedere sys.master_files (Transact-SQL).For more information, see sys.master_files (Transact-SQL).

  6. Ripristinare il nuovo backup del log.Restore the new log backup. Una volta applicato il nuovo backup del log, il ripristino della pagina è completo e le pagine sono utilizzabili.After this new log backup is applied, the page restore is completed and the pages are now usable.

    Nota

    Questa sequenza è analoga a una sequenza di ripristino del file.This sequence is analogous to a file restore sequence. In effetti, il ripristino della pagina e i ripristini dei file possono essere eseguiti entrambi come parte della stessa sequenza.In fact, page restore and file restores can both be performed as part of the same sequence.

Esempio (Transact-SQL) Example (Transact-SQL)

Nell'esempio seguente vengono ripristinate quattro pagine danneggiate del file B con NORECOVERY.The following example restores four damaged pages of file B with NORECOVERY. Successivamente, vengono applicati due backup del log con NORECOVERY, seguiti dal backup della parte finale del log, ripristinato con RECOVERY.Next, two log backups are applied with NORECOVERY, followed with the tail-log backup, which is restored with RECOVERY. Nell'esempio seguente viene eseguito un ripristino in linea.This example performs an online restore. Nell'esempio l'ID del file B è 1e gli ID delle pagine danneggiate sono 57, 202, 916e 1016.In the example, the file ID of file B is 1, and the page IDs of the damaged pages are 57, 202, 916, and 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  

Vedere ancheSee Also

RESTORE (Transact-SQL) RESTORE (Transact-SQL)
Applicazione dei backup di log delle transazioni (SQL Server) Apply Transaction Log Backups (SQL Server)
Gestione della tabella suspect_pages (SQL Server) Manage the suspect_pages Table (SQL Server)
Backup e ripristino di database SQL Server Back Up and Restore of SQL Server Databases