Come risolvere la corruzione della pagina in SQL Server?

Summary: In questo post parleremo della causa principale del danneggiamento a livello di pagina in SQL Server. Verranno inoltre illustrati i modi per risolvere il danneggiamento e ripristinare il database. Inoltre, scoprirete un software di riparazione per database SQL che può facilmente riparare un database corrotto e ripristinare tutti i suoi oggetti.

I database possono essere danneggiati in qualsiasi momento e questo è un problema preoccupante per gli amministratori di database, poiché mette a rischio tutti i dati cruciali presenti sul server SQL. Inoltre, i dati diventano inaccessibili, con un impatto sul flusso di lavoro dell’organizzazione. Per questo motivo, è importante risolvere immediatamente il problema della corruzione. Tuttavia, è altrettanto importante capire le cause della corruzione, altrimenti si ripresenterà. Questo blog fornisce informazioni essenziali su come risolvere il danneggiamento delle pagine in SQL server.

Cause di corruzione a livello di pagina di SQL Server

Ecco alcuni dei principali motivi che possono portare al danneggiamento del database di SQL Server.

  1. Bug del software all’interno del programma SQL Server: In questo caso, i dati vengono scritti male sul disco. Guardate questi documenti Microsoft:

È possibile evitare questo tipo di problema installando l’ultimo aggiornamento cumulativo (CU) della versione di SQL Server.

  1. Problemi di memoria: Si tratta di problemi hardware che possono interessare l’intero sistema e non solo MS SQL Server. Esistono programmi per verificare la correttezza dei dati in memoria.
  2. Problemi del sottosistema I/O: In questo caso, non è facile capire la causa del problema perché il sistema di archiviazione può avere un’architettura complicata. Ad esempio, prima di scrivere sul disco fisico, è possibile che si debba attraversare una rete o che ci sia un controller del disco e i suoi driver. Uno qualsiasi di questi componenti può guastarsi.
  3. Arresto improvviso del server: Esiste un rischio sostanziale di corruzione del database, se per qualsiasi motivo il server si spegne improvvisamente. Ciò può accadere a causa di un guasto fisico del server o per mancanza di elettricità.

Come rilevare la corruzione a livello di pagina in SQL Server?

I database di MS SQL Server sono costituiti da pagine di dati di 8 KB. Otto pagine fisicamente contigue costituiscono un’estensione di 64 KB. La corruzione della pagina significa che una o più pagine contengono valori errati.

Se il database è danneggiato, è possibile verificarlo in tre modi:

1. L’esecuzione dell’istruzione SELECT sulla tabella danneggiata mostra un errore

In questo caso, viene visualizzato il messaggio di errore:

2. Eseguire l’istruzione DBCC CHECKDB

Questo comando controlla l’integrità fisica e logica degli oggetti del database, le relazioni degli indici e altri controlli strutturali. Basta digitare DBCC CHECK con il nome del database tra parentesi tonde.

In questo caso, l’errore viene visualizzato:

3. Eseguire una SELECT sulla tabella [msdb].[dbo].[suspect_pages].

Il comando SELECT restituirà una griglia con una riga per ogni pagina danneggiata. In questo caso, possiamo vedere che nel database con ID = 31 la pagina 1:368 è danneggiata.

Come risolvere la corruzione a livello di pagina in SQL Server?

Qui abbiamo menzionato due modi diversi per riparare e recuperare il database.

1. Recupero manuale tramite comandi T-SQL

Nota: prima di procedere, eseguire un backup dei database e/o una copia dei file fisici. Il processo manuale è rischioso.

Per procedere al ripristino manuale tramite comandi T-SQL per risolvere il danneggiamento della pagina in SQL server, seguite le istruzioni riportate di seguito.

Utilizzate il comando non documentato DBCC IND per verificare che la pagina 368 sia una pagina di dati.

DBCC IND('Recovery_test',Person,-1)

Questo comando mostra tutte le pagine relative alla tabella, indicata nel secondo parametro, con le informazioni relative al tipo di pagina. Nell’esempio seguente,

Per visualizzare i dati contenuti nella pagina 1:368, possiamo aprire recovery_test.mdf con un editor esadecimale e passare all’offset 2e0000.

Il carattere rosso ‘b’ (vedi immagine sotto) sembra sospetto in quanto il mio nome è “Luca” e non “Lucb”.

2. Utilizzare il comando DBCC PAGE:

Per ottenere il risultato del comando DBCC PAGE, è necessario impostare il flag di tracciamento 3604.

DBCC TRACEON (3604)
DBCC PAGE('Recovery_test',1,368,2) CON I RISULTATI DELLE TABELLE

I parametri richiesti sono:

I valori del parametro printopt sono:

I dati riportati sono gli stessi.

È necessario modificare il valore del carattere dal valore Hex 62 (b) al valore Hex 61 (a).

Possiamo utilizzare un altro comando non documentato, il comando DBCC WRITEPAGE. Si tratta di un comando potente che consente di scrivere direttamente su una pagina.

Per utilizzare il comando DBCC WRITEPAGE, sono necessarie le seguenti informazioni:

Per prima cosa, mettete il database in modalità SINGLE_USER:

ALTER DATABASE recovery_test SET SINGLE_USER CON ROLLBACK IMMEDIATO

Eseguire quindi il comando WRITEPAGE:

DBCC WRITEPAGE ('recovery_test', 1, 368, 116, 1, 0x61,1)

Eseguire nuovamente l’operazione per verificare se i dati sono cambiati:

DBCC TRACEON (3604)
DBCC PAGE('Recovery_test',1,368,2) CON I RISULTATI DELLE TABELLE

Sì, i dati sono cambiati.

Impostare il database in modalità MULTI_USER:

ALTER DATABASE recovery_test SET MULTI_USER CON ROLLBACK IMMEDIATO

Controllare lo stato di salute del database:

DBCC CHECKDB ('recovery_test')

Dal registro, si può notare che non ci sono errori. Ciò significa che il database non è più corrotto.

Riparare il database utilizzando Stellar Repair for MS SQL

Consideriamo che il problema che abbiamo risolto manualmente è un caso estremamente semplice. Ma la riparazione di casi di corruzione complessi richiede conoscenze avanzate e comporta il rischio di danneggiare maggiormente i dati. Tuttavia, un’applicazione dedicata come Stellar Repair for MS SQL può risolvere lo stesso problema in modo sicuro e veloce. Per recuperare un database corrotto sono necessari solo alcuni semplici passaggi. Questi sono:

La struttura del database viene analizzata per la riparazione. Una barra di avanzamento mostra il progresso del lavoro.

Per concludere

Il database SQL si corrompe per una serie di motivi. In questo post abbiamo discusso le cause del danneggiamento a livello di pagina in SQL Server. Abbiamo anche visto come rilevare la corruzione del database e come riparare il database danneggiato manualmente tramite comandi T-SQL e utilizzando un software di riparazione SQL. Il software può fare un lavoro encomiabile per risolvere il problema e riportare il database a uno stato di funzionamento perfetto.

Related Post

Exit mobile version