À un moment donné au cours des 24 dernières heures, certains changements ont été apportés à un client SQL Server 2008 (V 9,0 SP4) par l'un des deux applications possibles qui utilisent la DB.
Ce n'est pas une critique particulière, mais il représenterait une perspicacité utile sur la manière dont ces applications utilisent les tableaux si je pouvais jeter les déclarations SQL correspondant aux périodes de temps.
Les tables que je suis intéressé, ne changent pas très souvent et donc les journaux de transactions appliquées à ces tables particulières ne doivent pas être très importantes dans les lignes totales.
Je vois les commandes "FN_DBLOG" et DBCC Log ("DatabasEname") et semble avoir une information assez connexe, mais je ne sais pas comment passer la prochaine étape et les amener à produire un rapport des changements réels .
Il y a quelques détails dans ce blog post; http://janiceclee.com/tag/fn_dump_dblog/
USE AdventureWorks
GO
SELECT [Transaction ID], count(*)
FROM fn_dblog(DEFAULT, DEFAULT)
where AllocUnitName LIKE '%Production.TransactionHistory%'--table name
GROUP BY [Transaction ID]
HAVING COUNT(*) >= 113443 --(estimated/actual) number of deleted records
Cependant, je n'ai aucun détail comme celui-ci, juste le nom de la table (et les clés principales si nécessaire, je peux l'obtenir)
et un autre poste de blog qui utilise un exemple similaire de données étant donné leur dénomination de table; http://www.sqlskills.com/blogs/pull/post/search-Engine-qa-6-Utilisation-fn_dblog-a-tell-if-a-transaction-is-contenait-in-a- Backup.aspx
USE AdventureWorks;
GO
SELECT [Current LSN], Operation, [Transaction ID], AllocUnitName FROM fn_dblog (NULL, NULL);
GO
The log record at that LSN is:
00000058:00001870:0001 LOP_MODIFY_ROW 0000:00001338 HumanResources.Employee.PK_Employee_EmployeeID
This is obviously in the middle of my contrived transaction - showing that it isn't all in the full backup. The end of the transaction isn't until way later in the log:
0000005e:00000628:01b1 LOP_MODIFY_ROW 0000:00001338 HumanResources.Employee.PK_Employee_EmployeeID
0000005e:00000628:01b2 LOP_COMMIT_XACT 0000:00001338 NULL
Le journal des transactions ne contient pas de relevés, il contient les modifications physiques survenues dans la base de données. Si vous voyez un enregistrement de journal indiquant une suppression, vous ne pouvez pas savoir s'il s'agissait d'une instruction DELETE, d'une instruction Fusion ou d'une version de mise à jour large (scindée). Si vous voyez une opération indiquant un insert, vous ne pouvez pas savoir s'il s'agissait d'une valeur d'insertion (...) (...) ou était un insert (...) Sélectionnez (...) ou c'était un insert (. ..) EXEC ou c'était une fusion ou c'était une mise à jour large (scindée). Et ainsi de suite. Plus précisément, le journal des transactions n'a pas l'intention de substituer une trace d'audit.
L'agent de réplication de la transcription a des moyens de reconstruire l'opération T-SQL avec un effet identique comme ceux qui ont modifié un article publié, mais comment Ce n'est pas une information publique.
Si vous souhaitez surveiller les modifications de données, utilisez Modifier le suivi ou modifier la capture de données . Si vous souhaitez surveiller l'activité T-SQL, utilisez traces de profileur .
Je ne pense pas que vous puissiez obtenir la requête du journal de transaction lui-même - je pourrais maintenant me tromper mais je ne l'ai jamais vu fait - bien que je n'ai jamais essayé non plus. Vous pouvez toutefois obtenir les données modifiées lors d'une transaction.
L'article ci-dessous présente une procédure stockée qui lira les données modifiées du journal des transactions; Je ne l'ai pas utilisé moi-même, mais quelques chaps dans notre entreprise disent que cela fonctionne assez bien. Veuillez noter que cela ne fonctionne que sur 2005 et ci-dessus:
http://raresql.com/2011/10/22/how-to-recover-Deleed-Data-from-sql-sever/
Cela pourrait fournir la perspicacité que vous êtes après - ou pas :-)
BTW Il existe quelques applications de lecteur de journal commercial qui font une chose similaire - mais quelque chose à garder à l'esprit est qu'ils ne vous fournissent que la capacité de faire quelque chose que vous pourriez vous faire suffisamment de recherches.
Si je puisse me permettre de suggérer un coup d'œil sur SQL Internals de Kalen Delaney, qui est un livre Excelent et vous aidera vraiment à comprendre beaucoup de ce qui se passe dans SQL Server:
http://www.microsoft.com/learning/en/us/book.aspx?id=12967&locale=EN-US
Maintenant, cela ne vous aidera pas pour les transactions passées, mais j'avance que je recommanderais probablement d'utiliser quelque chose comme Changer la capture de données ou le profileur SQL pour capturer les informations dont vous avez besoin - il est beaucoup plus facile que d'essayer de pêcher dans le journal des transactions. ;-)
J'espère que ceci vous aide.