La riduzione del file di registro non riduce le dimensioni


24

Ho un database che ha un file di dati da 350 MB (.mdf) e un file di registro da 4,9 GB (.ldf). Il modello di recupero è impostato su FULL.

Quando provo a ridurre il file di registro, non si riduce.

So che ridurre un database non è buono e non dovrebbe essere fatto. Ma sto ancora cercando di farlo per ridurre il file di registro.

Quando ho corso

DBCC SQLPerf(logspace) 

Ho scoperto che la dimensione del registro è 4932 MB e lo spazio del registro utilizzato è del 98,76% !

Quindi ho provato questo comando

USE <databasename>;
DBCC loginfo;

Ora quasi tutti i VLF sono "status 2", il che significa che tutti sono in uso.

Ho provato a fare un backup del registro e quindi a ridurre il file di registro. La riduzione non ha ridotto le dimensioni.

Ho cambiato il modello di recupero in SIMPLEe ho provato a ridurlo di nuovo, ma anche questo non ha aiutato.

Ho verificato le transazioni aperte

DBCC opentran (database);

e ho scoperto che nessuna transazione è aperta ora.

Cosa mi impedisce di ridurre il file di registro? Come posso risolvere questo?

Risposte:


12

Ecco la risposta alla mia domanda.

Eseguire la query seguente per ottenere informazioni sull'attesa di riutilizzo del file di registro:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

Ho ottenuto il seguente output:

log_reuse_wait_desc
-------------------
REPLICATION 

Alcuni oggetti relativi alla replica rimanevano nel database, anche dopo aver rimosso la replica.

Per rimuovere la replica dal database, è sp_removedbreplicationpossibile utilizzare. Ma non ha funzionato per noi poiché la replica non era attiva al momento e in realtà la replica era stata rimossa molto prima.

La soluzione era importare il contenuto del database in un altro database usando l'opzione di importazione di SQL Server.


Ho avuto lo stesso problema e ho usato questo per vedere che c'era una transazione attiva nel db. log_reuse_wait_descha dato ACTIVE_TRANSACTION. Non appena la transazione è stata completata, la riduzione ha funzionato bene.
Squillman,

10

I passaggi per ridurre il registro saranno

Effettua il backup del log delle transazioni tramite SSMS o T-SQL e quindi esegui una riduzione

i comandi per SSMS sono sotto le attività se si fa clic con il tasto destro sul nome del database

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

Probabilmente dovrai farlo più volte

Se è presente una transazione o un processo che blocca l'azione, utilizzare Monitoraggio attività per identificare il processo e interromperlo oppure utilizzare il monitor attività del lavoro SQL Agent per terminare il processo.

fonte: http://support.microsoft.com/kb/907511


Ma il problema che ho riscontrato è diverso. Per favore, vedi la mia risposta qui sotto
Navaneet,

Sono contento di sentire che l'hai capito, grazie per l'aggiornamento!
Cougar9000,

Sintassi errata: manca un segno di uguale: REGISTRO DI BACKUP <nome database> DISCO = N '<percorso \ database_log.ldf';
Ingegnere invertito il

9

Leggi Come ridurre il registro di SQL Server per una spiegazione di come la natura circolare del registro può impedire la riduzione dopo il troncamento. È possibile che si registri l'ultimo punto LSN in un VLF che si trova alla coda del LDF. Contatore intuitivo è necessario far avanzare il registro, generando le scritture del registro, per consentirne la riduzione.


0

È necessario prima creare un backup, in base al modello di backup impostato per il database prima di poter ridurre il database.

Puoi provare a eseguire questo:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

Oppure puoi farlo da SSMS e utilizzare gli strumenti grafici disponibili (vedi qui per i dettagli: http://msdn.microsoft.com/en-us/library/ms187510.aspx )

Una volta eseguito il backup del database è possibile comprimerlo. Tuttavia, ridurre il database non è una buona idea poiché si verificherà una pesante frammentazione dell'indice e la ricerca di dati diventerà lenta.

Spero che sia di aiuto.


So come eseguire il backup e troncare il registro e ridurre le dimensioni del file di registro. Ma per questo database sto riscontrando un problema. Ho appena eseguito la query selezionare log_reuse_wait_desc da sys.d Database dove name = 'dbname' e ho scoperto che la replica sta causando il problema. Ma non ho impostato la replica su di esso. Quindi, come rimuovere la repliaction da questo db che viene mostrato nel log reuse wait_desc?
Navaneet,

Quale versione di SQL Server stai usando?
Toni Kostelac,

La replica potrebbe essere impostata come processo, quindi aprire la cartella Agente SQL Server ed espandere la cartella Lavori, verificare se è stato impostato un processo di replica e, in tal caso, disattivarlo facendo clic con il pulsante destro del mouse e selezionando Interrompi processo
Toni Kostelac,

Se si utilizza SQL Server 2005 e versioni successive, sp_removedbreplication "DB_NAME" rimuoverà la replica. Per sql server 2000 .. consultare blogs.msdn.com/b/repltalk/archive/2010/11/17/…
Kin Shah

Ma il problema che ho riscontrato è diverso. Per favore, vedi la mia risposta
Navaneet,

0

Ho scoperto che devo eseguire 2 o 3 backup sia del database che del registro delle transazioni per ridurre effettivamente le dimensioni del registro delle transazioni. Ho un database che è stato creato con il modello di recupero completo. Ogni notte esegue backup del database e del registro delle transazioni, ma inevitabilmente il registro delle transazioni sembra crescere continuamente per 2-3 settimane. Quando lo spazio su disco rimanente arriva a 1 GB vedrò che il registro delle transazioni è di circa 30 GB. Ho seguito i passaggi consigliati da Microsoft e dopo la quarta o la quinta iterazione del backup del database e del registro delle transazioni, il registro delle transazioni rilascerà finalmente il suo spazio aggiuntivo e si ridurrà. Quindi torno indietro ed elimino i backup multipli che ho creato.


Penso che tu stia facendo qualcosa di sbagliato. Se si esegue correttamente il backup del registro, è necessario troncare il registro inutilizzato. I comandi indicati nella mia domanda potrebbero aiutarti a risolvere il problema.
Navaneet,

-8

Il mio lavoro per la replica che sta bloccando la riduzione del file di registro è:

  1. Impostare DB Recovery Model su Simple
  2. Porta DB offline
  3. Creare il backup del file di registro (per ogni evenienza)
  4. Elimina il file di registro
  5. Porta DB online

Nel mio caso ha funzionato. Dopo aver portato il log online DB è stato creato automaticamente e la sua dimensione era 512kb invece di 70GB. Ma questa è solo una soluzione alternativa. Il problema alla radice non è stato risolto. Nel mio caso stiamo usando la replica.


4
Questo è un consiglio terribile, non cancellare mai il registro delle transazioni, da questo tipo di corruzione possono derivare tutti i tipi di problemi
Tom V - Team Monica,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.