14. juli 2004 - 12:18Der 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?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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?
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å.
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
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.
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.
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.
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.
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...
Synes godt om
Ny brugerNybegynder
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.