Στην δουλειά του DBA υπάρχουν στιγμές που πραγματικά οι παλμοί ανεβαίνουν επικίνδυνα. Συνήθως αυτό συμβαίνει ότι υπάρχει το ενδεχόμενο απώλειας δεδομένων.
Θα πει κάποιος πως μπορεί να γίνει αυτό καθώς ο σωστός DBA έχει backups. Αυτό είναι σωστό αρκεί να μιλάμε για οργανισμό που έχει DBA πραγματικό αλλιώς όλα μπορούν να συμβούν.
Πρόσφατα επικοινώνησε μια εταιρεία μαζί που για κάποιους όχι και τόσο καλούς λόγους είχε χάσει τα πάντα από τα πάντα. Κάπου υπήρχε ένα system backup που μέσα σε αυτό ήταν τα data αρχεία μιας database (to log ήταν damaged).
Στην προσπάθεια τους να κάνουν attach αυτή την database με το CREATE DATABASE FOR ATTACH το λάθος που επιστρέφονταν ήταν το παρακάτω:
File activation failure. The physical file name "…" may be incorrect.
The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.
Msg 1813, Level 16, State 2, Line 3
Could not open new database 'XXXXXX'. CREATE DATABASE is aborted.
Ακόμα και όταν δοκίμαζαν το CREATE DATABASE FOR ATTACH_REBUILD_LOG το ίδιο λάθος επιστρέφονταν.
Αν παρατηρήσετε το μήνυμα λάθους λέει ακριβώς το πρόβλημα
The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.
Η λύση που υπάρχει σε αυτή την περίπτωση είναι να χρησιμοποιηθεί η δυστυχώς undocumented CREATE DATABASE FOR ATTACH_FORCE_REBUILD_LOG.
SQL Script
CREATE DATABASE demo
ON ( FILENAME = ‘…..’ )
FOR ATTACH_FORCE_REBUILD_LOG;
//Antonios Chatzipavlis