La gestione dei file può essere un'operazione completamente online. Esistono due percorsi, a seconda della necessità di conservare le informazioni del registro a fini di recupero:
Ripristino temporizzato non necessario
- Converti il database in
SIMPLE
recupero. Eseguire un checkpoint per scrivere le transazioni sul disco.
- Appiattire il registro.
- Ridimensionare il registro alla dimensione appropriata.
Consiglio anche di impostare un importo di crescita fisso e crescita illimitata (in modo da aiutare a gestire meglio il tuo registro). Nota, la quantità di crescita fissa è molto e dipende dalla quantità, inizialmente raccomanderei di andare con 1-2 GB a seconda della crescita che il log potrebbe aspettarsi di vedere. Idealmente, il tuo registro non crescerà molto, quindi questo non dovrebbe avere un grande impatto. Se il registro cresce regolarmente, potrebbe essere necessario rivisitare le dimensioni.
Compiuto utilizzando:
ALTER DATABASE [foo]
SET RECOVERY SIMPLE;
CHECKPOINT;
DBCC SHRINKFILE (foo_log,0);
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [foo]
SET RECOVERY FULL;
Necessario recupero temporizzato
Il problema principale sarà che non è possibile ridurre il file di registro oltre il segmento VLF attualmente attivo. Per vedere questo, è possibile utilizzare DBCC LOGINFO
nel contesto del database. Qualsiasi segmento con uno stato = 2 è attivo. Per cancellare i segmenti attivi, sarà necessario eseguire un backup del registro delle transazioni quando al momento non sono attive transazioni in quel segmento. I tuoi passi sono:
- Eseguire un backup del registro delle transazioni.
- Riduci il tuo file. (Idealmente appiattire, ma se il database è attivo questo sarà difficile da fare).
- Ripetere i passaggi 1 e 2 fino a quando il registro non ha le dimensioni appropriate, idealmente il più piccolo possibile.
- Ridimensionare il registro alla dimensione appropriata.
Compiuto utilizzando:
BACKUP LOG [foo] TO DISK='<Location of t-log backup>';
DBCC SHRINKFILE (foo_log,0);
--Repeat the above until your log file is small "enough"
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
Alcune risorse aggiuntive per capire cosa sta succedendo qui: