Felsöka SQL datbas
Jag skall konstuera ett program som ligger och söker igenom en SQL databas efter vissa fel, och sedan genererar en felrapport som ett mail.
Hur kan jag bäst göra detta!
Fungerar det med ett script?
Svara
Sv: Felsöka SQL datbas
Det är ett "script" som körs inuti DTS (i Enterprise Manager)
Så fort du har en SQL Server har du en DTS installerad.
/micke
Svara
Sv: Felsöka SQL datbas
Start - Program - Microsoft SQL Server - Enterprise Manager
Sen hittar du DTS under fliken Data Transformation Services
/micke
Svara
Sv: Felsöka SQL datbas
Ok, nu sitter jag inte vid datorn där SQL servern ligger dock, måste jag det?
Svara
Sv: Felsöka SQL datbas
VBScript funkar.
Du måste ha Enterprise Manager, men inte sitta lokalt.
/micke
Svara
Sv: Felsöka SQL datbas
Kan ett sådant script kontrollera inkommande frågor till databasen?
Alltså kan man använda ett script för att kontrollera att data som skall sättas in i databasen är korrekt
och kanske t.om. hindra instättning i databasen om datat inte är korrekt?
Svara
Sv: Felsöka SQL datbas
En mycket stor produkt och kunddatabas används av väldigt många.
Data läggs till i databasen ifrån en mängd olika system, och ibland läggs felaktiga värden in.
Jag skulle vilja kontrollera att endast giltiga värden läggs in.
Om någon försöker lägga in ett ogiltigt värde skall detta helst hindras, eller iaf raporteras.
Jag vill alltså helst "fånga" datat inann det läggs till databasen, eller precis när det gör det!!
Är detta möjligt?
Svara
Sv: Felsöka SQL datbas
Triggers låter ju som en bra idé, vet ju inte om det är många tabeller som ska kontrolleras men det funkar väl ?
Överblicken blir lite si o så när det kan vara flera tabeller som uppdateras med "samma SQL".
Hur kommer datat in i servern - är det via direkta SQL-satser, procedurer, replikeringar eller kanske fil-importer ?
/Johan
Svara
Sv: Felsöka SQL datbas
Jag vet faktiskt inte hur datat kommer in i servern. Skulle tro att det är direkta SQL satser,
men som sagt det är en rad olika system som lägger till eller uppdaterar poset i databasen,
och det skulle inte förvåna mig om de verkar på olika sätt.
Hur kan jag ta reda på det?
Svara
Sv: Felsöka SQL datbas
Då kan du försöka logga med SQL Profiler.
Ja, den bör man köra lokalt på servern.
/micke
Svara
Sv: Felsöka SQL datbas
Kan man använda SQL profiler till att förhindra att data skrivs till databasen (om den inte uppfyller vissa vilkor, t.ex. angivna i ett script)?
Svara
Sv: Felsöka SQL datbas
Ok det ingår i SQL server.
Är det i SQL profiler man bör göra all kontroll av inkommande data istället
för i Enterprise Manager?
Svara
Sv: Felsöka SQL datbas
Profilern visar (mer eller mindre i realtid) vad som pågår i servern.
Kolla triggers : varje tabell kan ha "programsnuttar" som körs vid insert, update och delete.
Måste du validera många tabeller/fält ?
Är det här ett projekt för att få alla applikationer att göra rätt eller ska "försvaret" ligga aktivt jämt ?
Finns ju ofta en logg att undersöka annars - där ser man ju vad som hänt.
/Johan
Svara
Sv: Felsöka SQL datbas
Projektet skall få alla applikationer att göra rätt.
T.ex. läggs poster till med ogiltiga Produkt ID,
detta skall inte kunna ske.
Men då ett stort antal olika typer av applikationer som gör dessa insättningar,så blir det omöjligt att göra kontrollen där.
Kontrollen måste alltså ske på SQL servern,
Är detta ens möjligt?
Svara
Sv: Felsöka SQL datbas
Det låter som om databasen (databaserna) skulle behöva lite primärnycklar och främmande nycklar istället.
Vad händer med klienten om servern vägrar att ta emot ett värde? Kommer inte den klaga då? Då måste du ju ändå skriva om klienten så den tar hand om detta.
Annars lutar det mest åt triggrar, som nämnts innan. En kodsnutt som fångar upp det som lagts in, validerar och (förhoppningsvis) godkänner inmatningen. Vid misslyckad validering genereras fel, som klienten måste ta hand om.
/micke
Svara
Sv: Felsöka SQL datbas
Det handlar inte om värden som databasen inte kan ta emot utan värden som
jag vet är fel, t.ex. så ska kanske prodID bara kunna vara 3 om Lokation är 5 osv..
Det där med triggrar verkar intressant,
skulle du kunna förklara lite mer om hur det fungerar?
(eller ge mig en länk vilket är så populärt)
Svara
Sv: Felsöka SQL datbas
En trigger är kod som körs automatiskt.
Låt oss säga att du inte tillåter värdet 'Sill' i [product] fältet.
Då kan du göra ungefär såhär:
CREATE TRIGGER [bongo] ON Produkttabellen
FOR INSERT,UPDATE --Den går igång på Inserts och updates...
AS
IF (SELECT [product] FROM inserted) = 'Sill'
BEGIN
RAISERROR ('Sill är inte tillåtet',16 ,1)
ROLLBACK TRANSACTION
END
GO
Försöker du nu inserta eller ändra en rad till 'Sill', så får du ett fel.
Dessutom går ändringen inte igenom.
OBS!!!!!!
Om du kör med egendefinierade transaktioner (MTS/COM+/ADO) så kommer
ROLLBACK ställa till det för dig. Då skippar du bara den...
Nu är det upp till din fantasi att tillåta eller inte tillåta värden.
/micke
Svara
Sv: Felsöka SQL datbas
Låter precis som det jag behöver!
Något jag får läsa på lite dock!
Jag skall göra detta på en SQL server,
vart lägger jag till de här trigger scripten?
Svara
Sv: Felsöka SQL datbas
Kan error meddelandet skickas ut till alla olika applikationer
som använder databasen?
Det är allt ifrån webbapplikationer, automatiska kontrollprogram och gamla terminaler som lägger till poster i den här sql servern!
Svara
Sv: Felsöka SQL datbas
Ja, felmeddelanden från SQL Server går tillbaka till den som ställde frågan.
Jag tror att ett alternativ till att använda triggers skulle vara Check Constraints på tabellerna. Dessa används just till att kontrollera data som läggs in i den aktuella tabellen.
Svara
Sv: Felsöka SQL datbas
Kan man då direkt i databasen ange villka vilkor som måste uppfyllas för de olika fälten,
Stödjer SQL server dett?
Svara
Sv: Felsöka SQL datbas
<Kan man då direkt i databasen ange villka vilkor som måste uppfyllas för de olika fälten,
<Stödjer SQL server dett?
Ja, naturligtvis ;)
/micke
Svara
Sv: Felsöka SQL datbas
Det är inte så mycket att lära sig med check constraints. Nedanstående länkar visar nästan allt man behöver veta. Kolla annars MSDN.
http://www.databasejournal.com/features/mssql/article.php/2219901
http://www.aspfree.com/c/a/Database-Code/Constraints-In-Microsoft-SQL-SERVER-2000/7/
Svara
Sv: Felsöka SQL datbas
Det verkade inte som om SQL server 200 stödjer "User Defined Constraines", vilket ju är det jag skulle behöva använda för att implimentera mina sepcifika affärsregler.
Datat som inte "passar" constriansen nekas alltså att sättas in i databasen, men går det t.ex. något felmeddelande tillbaka till den applikation som försökte göra instättningen?
Svara
Sv: Felsöka SQL datbas
SQL Server stödjer visst constraints:
DEFAULT
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK
Dessa stödjs enligt ANSI standarden. Kolla i SQL BOL, efter syntaxen.
/micke
Svara
Sv: Felsöka SQL datbas
Bryter man mot ett Constraint så genererar SQL Server ett felmeddelande (t.ex. Violation of Check Constraint). Applikationen som anropar databasen får tillbaka detta felmeddelande och lämpligtvis implementerar man en felhanteringsfunktion som visar felet för användaren på ett snyggt sätt.
Svara
Sv: Felsöka SQL datbas
Ja det såg jag, det jag menade var att den inte verkar stödja "user defined" constraines, vilka är sådana constraines där man själv anger affärsregler för vad som är godtagbara data!
DEFAULT, PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK innefattar (såvitt jag förstår det) constraines för intrevall på värden, se till att celler ej är null, se till att värdne är unika samt se till att realtioner mellan tables bibehålls.
Svara
Sv: Felsöka SQL datbas
Och vad kan du mer begära???
<constraines för intrevall på värden, se till att celler ej är null, se till att värdne är unika samt se till att <realtioner mellan tables bibehålls.
Detta täcker (enligt mig) in 99.99% av all data som finns, eller behövs kontrolleras.
Berätta vad du vill kolla, så kan vi visa dig hur det skall göras. Detaljerade frågor får detaljerade svar. Du har bara frågat OM det funkar. Ja är svaret :)
/micke
Svara
Sv: Felsöka SQL datbas
Ok, ett fält innehåller ålder, ett fält inehåller födelsedatum ett fäl innehåller det datum då posten lades till. Jag vill kontrollera att åldern stämmer m.a.p födelsedatum och det datum då posten lades till.
Tyvärr har jag ingen möjlighet att ändra på applikationen som lägger till posten, då det ju är där man borde åtgärda det.
Svara
Sv: Felsöka SQL datbas
Här är ett förslag på Check Constraint:
<CODE>
datediff(day, DateAdd(Year, Age, BirthDate), EntryDate) >= 0
AND
datediff(day, DateAdd(Year, Age, BirthDate), EntryDate) < 365
</CODE>
Detta fungerar, men det kan bli randproblem vid skottår. Om man tycker att detta är ett problem, kan man bygga ut villkoren...
/Pelle
Svara