_Log.ldf corrompu

Résolu
GuaW Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 31 octobre 2006 - 26 oct. 2006 à 16:34
GuaW Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 31 octobre 2006 - 31 oct. 2006 à 16:32
Bonjour,

Apres visiblement un soucis disque dur je viens de sauver une base de donnée (visiblement saine) et son log (lui corrompu).
Par contre je n'arrive pas a trouver un seul moyen pour utiliser le .mdf sans le .ldf qui va avec.
Je sais que le .mdf en est "lisible" vu que j'ai trouvé des logiciels (en version de démonstration) qui me regénèrent un bout (version de démo oblige) des fichier .sql qui me permettrai de recreer la base.
Par contre au niveau de SQL Express je n'arrive pas a l'utiliser seul.
Si je tente d'attacher le .mdf sans le .ldf qui vas avec => on me dit que j'ai pas le bon fichier de log
Si je tente d'attacher les 2 => je plante sur la lecture du .log

j'ai pourtant essayé plein de methode (y compris un base identique mais "vide" pour avoir un .log cohérent et remplacement des fichier)

Quelqu'un connaitrait'il une solution pour soit :
- attacher un "basesql.mdf" quand on a perdu le "basesql_log.ldf" qui vas avec ?
- regénérer un log a partir d'un .mdf pour ensuite attacher les deux a SQL Express ?
- un logiciel pour lire un .mdf et en extraire les données a l'exterieur pour les injecter ensuite dans une base vierge ?

Merci d'avance.

1 réponse

GuaW Messages postés 2 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 16:32
Ok, j'ai finalement trouvé une solution qui, aussi étrange soit-elle marche.
Je la met ici si jamais quelqu'un d'autre croise se probleme.

1 - creer une base de
donnée du meme nom
2 - executer les
commandes :

EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO

BEGIN TRAN

UPDATE master..sysdatabases
SET status = status | 32768
WHERE name =
'mabasededonnee'

IF @@ROWCOUNT = 1
BEGIN
    COMMIT TRAN
    RAISERROR('emergency mode
set', 0, 1)
END
ELSE
BEGIN
    ROLLBACK
    RAISERROR('unable to
set emergency mode', 16, 1)
END
GO

EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE
GO

3 - Arreter SQL Server
4 - Remplacer la base
nouvellement creer par la corrompue
5 - Supprimer
l'historique (_log) cree avec la nouvelle base
6 - Redemarrer SQL Server
7 - Exécuter

DBCC REBUILD_LOG('mabasededonnee
','C:\Program Files\Microsoft SQL Server\MSSQL\Data\mabasededonnee_log.LDF')
GO
- cela donne un message d'erreur :
-
Warning: The log for database 'mabasededonnee' has been rebuilt. Transactional consistency
has been lost.
- DBCC CHECKDB should be run to validate physical consistency. Database
options will have to be reset,
- and extra log files may need to be deleted.- DBCC execution
completed. If DBCC printed error messages, contact your system administrator.

9 - mettre en mono
user (si besoin de faire un checkdb avec reparation)

ALTER DATABASE mabasededonnee SET SINGLE_USER
GO

8 - lancer un CHECKDB (avec ou sans réparation
des données)

DBCC CHECKDB ('mabasededonne')

9 - Remettre en
multi user

ALTER DATABASE mabasededonnee SET MULTI_USER
GO
3
Rejoignez-nous