Avatar billede pimpf202 Nybegynder
14. juli 2004 - 12:18 Der er 11 kommentarer og
1 løsning

log i en fil

Hejsa,
Jeg ville høre om der var nogen måde man kunne logge informationer til en fil i t-sql. Til daglige bruger jeg bare print/select, og når jeg så kører det som et job, så vælger jeg bare inde under det step hvilken fil den skal logge til. Dette kommer dog til kort hvis man ikke lige vil bruge sin kode i et sqljob, men eks i en dts pakke. Den eneste måde jeg selv kan komme på er ved hjælp af xp_cmdshell og så pipe noget ned i en fil, men det er bare ikke nogen særlig god/elegant løsning. Alternativt til dette, hvis det ikke kan lade sig gøre direkte i t-sql koden, ville jeg høre om der er en let måde at logge sine prnt/select statements til en fil, hvis man eksekvere dem i en dts pakke?
Avatar billede janus_007 Nybegynder
14. juli 2004 - 13:33 #1
Hvad med bare at skrive dem til loggen?
Avatar billede pimpf202 Nybegynder
14. juli 2004 - 13:35 #2
hvordan gøre dette??
Avatar billede janus_007 Nybegynder
15. juli 2004 - 12:25 #3
Det kan du evt. gøre vha. xp_logevent

exec xp_logevent 60000, 'This is the message', informational

severity kan du også styre, dvs. informational, error osv.. alt afhængig af hvordan du vil have eventen til at stå i windows eventloggen :O)
Avatar billede pimpf202 Nybegynder
15. juli 2004 - 15:08 #4
Det kan godt være at jeg har misforstået xp_logevent, men det jeg gerne ville var at lave en logfil, og som jeg forstår xp_logevent, så kan jeg ikke udspicificere at jeg gerne vil skrive det ned i en fil?
Avatar billede janus_007 Nybegynder
15. juli 2004 - 15:30 #5
Nej den kan ikke skrive til en fil, det var derfor jeg spurgte om du bare ville skrive dem til loggen :O)

Men hvorfor ikke skrive dem til loggen? - hvad er det for noget info du skal skrive?
Avatar billede pimpf202 Nybegynder
15. juli 2004 - 16:01 #6
Det er lidt forskellige jobs. Det kan være backup jobs / shrinkning af log jobs, hvor jeg gerne vil have lidt info. Andre gange har jeg skrevet ned i en table, og så lavet en log, som jeg tilgår via en browser. Nogle gange er det bare ultra rart at have en flad fil med loggen, og derfor er jeg meget glad for den funktion i sqljobbet, og efterlyser det når jeg eks skal bruge dts.
Jeg er pt ved at lave et backup job, hvor jeg logger ca. 15 linier, som jeg gerne vil have ud i en fil. Dette job, skal til at køre som en dts pakke, da jeg skal til at bruge noget ftp i det også. Så er det jeg savner min elskede log funktion til en fil. Det var bare hvis der var en måde man kunne gøre det på.
19. juli 2004 - 15:11 #7
Hvis du bruger DTS er det da ret nemt at få skrevet fritekst ned i en ASCII fil.
Lav en MSSQL conncection. Lav en ny connection af typen "text file". Skriv noget SQL der danner den tekst du vil have skrevet, f.eks "Select 'Start process'+getdate()

Eller kald xp_cmdexec "Echo start process > c:\log.log"
HIH
Henrik
Avatar billede pimpf202 Nybegynder
20. juli 2004 - 09:45 #8
Jeg kan ikke helt få det til at virke i DTS pakken. Jeg laver en MSSQL connection. Jeg laver en ny connection som er en tekstfile (destination). Jeg laver en "execute sql task", hvor jeg laver en select 'tekst til logfil'. Denne task er jeg nød til at pege hen på mssql connectionen (da jeg får en fejl hvis jeg prøver at bruge tekst dokumentest connection). Gør jeg det, så eksekvere den fint, men jeg får ikke noget i loggen.
Din xp_cmdexec kommando kan jeg ikke finde på min sqlsrv2000. Den ligner dog meget xp_cmdshell, som jeg også beskrev i mit indlæg. Denne er dog ikke super interessant.
Men hvis du kan forklare mig , så jeg kan finde ud af at logge ned i en ascii fil i dts, så er jeg meget glad og tilfreds.
Mange tak for hjælpen indtil videre.
21. juli 2004 - 08:46 #9
Istedet for en "execute sql task" skal du have en transform data task.
Så skal du lave en select, f.eks. select top 1 'TEst' 'T', 'Test2' 'T2'  from titles

Bemærk at selvom vi ikke bruger data fra en tabel, skal den tilsyneladende have en tabel (i hvert fald første gang den kører).
I Destination fanebladet, vælger du "populate from source" (tror jeg nok den hed).
I Transformation fanebladet skal du have den til at kopiere dine felter over.

Min fil ser således ud: "TEst","Test2". Lige til at læse ind i Excel, og det kan de fleste brugere egentligt godt finde ud af.
Avatar billede pimpf202 Nybegynder
21. juli 2004 - 15:07 #10
Du skal have mange tak for din hjælp. Det var desværre nok ikke helt det jeg havde brug for. I øjeblikket har jeg et sql job som logger noget i retningen af:
--------------------------------------------------------------------------
Der er kun kontrol af databasen om fredagen. Backuppen fortsætter. [SQLSTATE 01000]
nu skal jeg til at sætte databasen tilbage til multi_user [SQLSTATE 01000]
Nu er databasen sat tilbage til multi_user mode [SQLSTATE 01000]
Processed 433768 pages for database 'Data', file 'data_data' on file 1. [SQLSTATE 01000]
Processed 1 pages for database 'Data', file 'Data_log' on file 1. [SQLSTATE 01000]
BACKUP DATABASE successfully processed 433769 pages in 698.840 seconds (5.084 MB/sec). [SQLSTATE 01000]
Backuppen af databasen er gået godt. [SQLSTATE 01000]
Databasen er nu i simple log mode [SQLSTATE 01000]
Shrinkning af loggen ok.... [SQLSTATE 01000]
Databasen er sat tilbage til full recovery mode [SQLSTATE 01000]
[SQLSTATE 01000]
----- Der har ikke været nogen kritiske fejl i Backuppen. Se loggen for yderliger oplysninger--------- [SQLSTATE 01000]
------------------------------------------------------------------------------------------------------ [SQLSTATE 01000]

Dette er nemt og overskueligt, for edb-ansvarlige og andre, som ikke er dybt inde i sql serveren. Dette er alt sammen lavet med simple print kommandoer i t-sql, og så logget via. sql- jobbet. Jeg kan bare ikke rigtig se hvordan det skulle kunne lade sig gøre på samme måde via "transform data task". Jeg har ingen erfaring med bygning af DTS pakker, men "transform data task" ser ud til kun er til at transformere data fra et format til et andet, og derfor kan jeg ikke se hvordan jeg kan få den til at logge på denne måde, hvor den logger noget forskelligt alt efter hvad der sker i koden. Hvis det er mig der har misforstået det hele ville jeg bliver enormt taknemlig hvis du evt. kunne sende mig et eksempel på hvordan du ville gøre det i en dts pakke (spam@pcix.dk), og lige meget hvad, så skal du have tak for din tid/hjælp.
21. juli 2004 - 16:07 #11
Istedet for print statements, kunne du indsætte dem i en tabel.
Så kan din DTS nemt lave en select * from tabel, og gemme dette i en tekst fil på disken.
Jeg har nu selv lavet en stored procedure, der laver en echo til en fil. Simpelt, nemt og stabilt. Men ikke særligt "elegant". Lige meget. Det virker. Videre.
Avatar billede pimpf202 Nybegynder
21. juli 2004 - 16:11 #12
Det lyder som en rigtig god løsning på mit problem.. når jeg plejer at logge i en table, så plejer at jeg hente dem via. asp/html, men det synes jeg var "over kill" i denne sammenhæng, men at hente dem via dts, er da en åbenlys idé.... mange tak for hjælpen, det vil jeg lege lidt med...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester