Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: SQL Productie Trigger
Prev Next
You are not authorized to post a reply.

Author Messages
Jeffrey VerheulUser is Offline

Posts:1

16-04-2008 09:51:53 Alert 

Op dit moment hebben we een probleem met een productie SQL server. Er worden updates uitgevoerd op een belangrijke tabel, en (helaas) hebben we niet in kaart waar dit door komt. Er schrijft geen enkele SP in die tabel (nagekeken op Productie), dus het lijkt te gaan om een menselijke actie.

De enige optie die ik nu zie is een trigger op de tabel. Zodra er een record ge-update wordt, trigger af laten gaan die een mail stuurt, waarbij er de volgende gegevens worden meegestuurd:

Ge-update record (moeilijk, want wat doe je bij een massive update?)
NT-Username
Hostname (naam van het werkstation als extra zekerheid)
Datum


Maar hoe kan ik dit soepel laten lopen op Productie (ook al is het tijdelijk) zonder het systeem vast te laten lopen? En hoe zorg ik dat ik een bepaalde kolom kan meesturen, om zo te laten zien welk record ge-update is?

Daniel van der MeulenUser is Offline

Posts:2

16-04-2008 12:35:13 Alert 
Hoi Jeffrey,

Je kunt een trigger maken die de voor en na situatie + username + datum logt...
Ik heb een voorbeeld voor je gemaakt:
/* maak een test tabel */
if object_id('dbo.test', 'U') is not null
drop table dbo.test;
go
create table dbo.test (
id int not null identity primary key,
voornaam varchar(20),
achternaam varchar(20)
);
go
/* insert dummy waardes */
insert into dbo.test values ('Jeffrey', 'Verheul');
insert into dbo.test values ('Kalen', 'Delaney');

/* maak een tabel die de updates bijhoudt */
if object_id('dbo.test_update', 'U') is not null
drop table dbo.test_update;
go
create table dbo.test_update (
id int not null, /* dit keer geen PK want record kan meerdere keren worden ge-update */
d_voornaam varchar(20),
d_achternaam varchar(20),
i_voornaam varchar(20),
i_achternaam varchar(20),
gebruiker varchar(128) not null default (user_name()),
datum datetime not null default (current_timestamp)
);
go
/* maak de update trigger */
create trigger u_test on dbo.test
for update
as
insert into dbo.test_update (id, d_voornaam, d_achternaam, i_voornaam, i_achternaam)
select d.*, i.voornaam, i.achternaam
from deleted d
join inserted i on d.id = i.id;
go

/* check de tabellen */
select * from dbo.test;
select * from dbo.test_update;
/* update een aantal waarden */
update dbo.test set voornaam = 'daniel' where voornaam = 'kalen';
update dbo.test set achternaam = 'van der Meulen' where achternaam = 'Delaney';
/* check de tabellen */
select * from dbo.test;
select * from dbo.test_update;

/* opruimen */
if object_id('dbo.test_update', 'U') is not null
drop table dbo.test_update;
if object_id('dbo.test', 'U') is not null
drop table dbo.test;
Robert HartskeerlUser is Offline

Posts:86

18-04-2008 21:11:55 Alert 
Jeffrey,

is het niet makkelijker om een trace te definieren die alle SQL statements naar een tracefile stuurt? Deze kun je ook nog filteren op je specifieke database en eventueel tabel. In de trace kun je ook de login en het werkstation meenemen.

Kijk in booksonline naar sp_trace_create, sp_trace_set_event, sp_trace_setfilter en sp_trace_setstatus.

Andere mogelijkheid, maar geeft wel extra belasting op je server, is de profiler starten. Heeft hetzelfde effect als de trace events maar met meer belasting.

Gr.
Robert
You are not authorized to post a reply.
Forums > Forums > Ontwikkelen > SQL Productie Trigger



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use