2009-06-11 3 views

Répondre

5

Tout d'abord, créer une table d'enregistrement:

CREATE TABLE modlog(
    datestamp smalldatetime, 
    username varchar(255) NOT NULL DEFAULT SYSTEM_USER 
    ); 

Ensuite, créez un déclencheur UPDATE sur votre table:

CREATE TRIGGER mytable_mods ON mytable FOR UPDATE AS 
    INSERT INTO modlog(smalldatetime) VALUES (GETDATE()); 

Il suffit de jeter un regard dans la table de modlog pour savoir quel utilisateur est mise à jour de la table, et quand. Vous pourriez avoir envie et aussi enregistrer des champs particuliers en cours de mise à jour. Une autre approche consisterait à configurer une trace dans SQL Server Profiler, filtrer le diable afin qu'il ne renvoie que des mises à jour sur cette table, et le garder ouvert jusqu'à ce que quelque chose se passe.

Si vos applications comprennent le NomApplication paramètre dans leurs chaînes de connexion, vous pouvez utiliser app_name() au lieu de SYSTEM_USER, qui enregistrera le nom de l'application, la suppression du travail de détective supplémentaire. Connaître l'utilisateur peut toujours être utile afin que vous puissiez comprendre ce qu'ils font pour déclencher la mise à jour.

+0

Will qui identifient le nom d'utilisateur? –

+0

@richard, si vous pouvez corréler le nom d'utilisateur avec une application spécifique, cela devrait fonctionner. –

+0

Oui, cela permettra d'identifier le nom d'utilisateur associé à la session SQL Server qui effectue la mise à jour. Espérons que connaître l'utilisateur et le temps sera suffisant pour déterminer quelle application était responsable. – richardtallent

1

Créez un déclencheur pour annuler la mise à jour. Attendez que l'application à l'erreur. Il peut être un déclencheur très simple:

CREATE TRIGGER BugOffRogueProgram 
ON MyConfigTable 
FOR UPDATE 
AS 
BEGIN 
ROLLBACK TRAN 
END 

0

Les réponses fournies jusqu'à présent sont tout à fait sur place - c'est la façon de le faire dans SQL Server 2005.

Tout comme un bref teaser : dans SQL Server 2008, une nouvelle fonctionnalité appelée Change Data Capture prend en charge ce scénario exact "prêt à l'emploi" sans qu'il soit nécessaire d'écrire des déclencheurs et de mettre à jour les tables vous-même. Assez pratique!

Marc

Questions connexes