Cerca un record di checkpoint nel log delle transazioni che probabilmente non esiste o è danneggiato. È possibile determinare se questo è il caso per esecuzione:
pg_resetxlog DATADIR
Se il log delle transazioni è danneggiato, verrà visualizzato un messaggio del tipo:
Il server di database non è stato chiuso correttamente. La reimpostazione del log delle transazioni potrebbe causare la perdita dei dati. Se si desidera continuare con lo , utilizzare -f per forzare il ripristino.
È possibile seguire le istruzioni e correre con -f
per forzare l'aggiornamento:
pg_resetxlog -f DATADIR
Questo dovrebbe ripristinare il log delle transazioni, tuttavia, potrebbe lasciare il database in uno stato indeterminato come spiegato nella PostgreSQL documentation on pg_resetxlog
:
Se pg_resetxlog lamenta che non può determinare dati validi per pg_control, è possibile forzarlo a proseguire comunque specificando l'-f
(forza) s strega. In questo caso i valori plausibili saranno sostituiti dai dati mancanti. È probabile che la maggior parte dei campi corrisponda, ma potrebbe essere necessaria assistenza manuale per il prossimo OID, l'ID della transazione successiva e l'epoca, il successivo ID e l'offset multitransaction e i campi dell'indirizzo iniziale WAL. Questi campi possono essere impostati utilizzando gli interruttori discussi di seguito. Se non si è in grado di determinare i valori corretti per tutti questi campi, è ancora possibile utilizzare -f
, ma il database ripristinato deve essere trattato con un sospetto ancora maggiore del solito: un'immediata discarica e ricarica è indispensabile. Non eseguire alcuna operazione di modifica dei dati nel database prima di eseguire il dump, poiché è probabile che qualsiasi azione di questo tipo peggiori il danneggiamento.
fonte
2012-01-11 01:17:14
Si prega di non pubblicare la soluzione nella domanda stessa. Rispondere alle proprie domande non è scoraggiato, ma è necessario pubblicare soluzioni come risposte. Ho modificato la soluzione fuori dalla domanda questa volta. Sentiti libero di postare come risposta a tuo piacimento. –
Sono davvero curioso di sapere quale sia stata la risposta prima che Anna lo correggesse :-) – filiprem
Se si trova su un server slave/letto e si è avviato dopo aver copiato il backup di base, assicurarsi di avere il file di etichetta che è stato creato durante la creazione del backup di base nella cartella dati locale. –