Vinnaren i pepparkakshustävlingen!
2018-02-06, 14:33
  #1
Medlem
zoombos avatar
Jobbar med IT och har nu fått en otacksam uppgift som ingen velat ta på sig: skapa lite ordning i företagets SQL-värld och nu pratar vi om en miljö som föddes i förra seklet.

Det finns ett 30-tal servrar med MS-SQL Server i varierande versioner med minimalt med dokumentation om systemen och när man har uppgraderat nån gång så har man många gånger låtit gamla SQL-databaserna ligga kvar på gamla servern utan att ens ta dem off-line så nu är det en enda soppa med databaser som har samma namn lite här och var men ingen vet riktigt vilken som är den skarpa eller om det finns korskopplingar som fortfarande lever. Några system används troligen inte alls men även detta ligger i dunkel och det beror delvis på att en del system ingår i rena industriella processer och tillhörande system - som per definition har diffusa ägare och förvaltare.

Är ingen SQL-guru själv och kan inte producera sån kod/querys och vad jag söker är ett (gratis) och lättanvänt verktyg eller metod där man kan se när en databas sist accessades. Blev mäkta förvånad när jag insåg att det inte finns inbyggt i Management Studio och jag hittar bara exempel där man skriver kodsnuttar som dumpar resultatet i egna databaser och sen får man titta där.

Märkligt. Det här borde vara ett universiellt problem som finns på många, skulle nästan vilja säga: alla företag. Trodde man kunde titta i transktionsloggarna men det är tydligen bara om det skrivs nåt som den används, många databaser här används bara för läsning. Vissa rätt sällan.

Den hårda vägen är att sätta de misstänkta databaserna off-line själv och vänta på reaktioner men den metoden fick inget gehör hos IT-chefen...

Finns det nåt enkelt sätt att göra detta på? Det handlar om allt mellan SQL Server 2000 upp till SQL Server 2016. Några Express.
Citera
2018-02-06, 14:46
  #2
Medlem
Börja med att titta på hur man gör profilering med MySQL - finns olika verktyg för det.

Sen får du slå på kollar loggor med vilka SQL frågor som körs och använd programvara som kan göra reverse engineer informationsmodeller utifrån SQL - finns flera sådana.

Låter det för tufft bör du stanna där och ta in en vassare DBA
Citera
2018-02-06, 14:53
  #3
Medlem
kodsnickrarns avatar
1) Slå på Audit Log så kan du logga alla anslutningsförsök, både lyckade och misslyckade (är inte på som default).
Se 1:a svaret här: https://stackoverflow.com/questions/...ttempts-logged

2) Med SQL-kommandot "sp_who" kan du se vilka användare som är anslutna och vad de kör för något (vid just detta tillfället).

/K
Citera
2018-02-06, 15:20
  #4
Medlem
zoombos avatar
Citat:
Ursprungligen postat av kodsnickrarn
1) Slå på Audit Log så kan du logga alla anslutningsförsök, både lyckade och misslyckade (är inte på som default).
Se 1:a svaret här: https://stackoverflow.com/questions/...ttempts-logged

2) Med SQL-kommandot "sp_who" kan du se vilka användare som är anslutna och vad de kör för något (vid just detta tillfället).

/K

@glamoureus: Det gäller inte MySQL utan MS-SQL. Om det nu skiljer.

Problemet med Auduit Log är att allt loggas och det finns system som gör flera tusen uppslag per timme så loggarna skulle snabbt bli gigantiskt stora och i vissa fall köra disken i taket.
Sen finns det körningar som görs någon eller några gånger per år så det gäller att monitorera detta under en längre tid, har hoppats att ett par månader skall räcka.
Ett enskilt kommand kan vara användbart nån gång men det visar ju bara nuläget. En tidsuppsatt logg är mer användbar.
Citera
2018-02-06, 16:05
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av zoombo
Jobbar med IT och har nu fått en otacksam uppgift som ingen velat ta på sig: skapa lite ordning i företagets SQL-värld och nu pratar vi om en miljö som föddes i förra seklet.

Det finns ett 30-tal servrar med MS-SQL Server i varierande versioner med minimalt med dokumentation om systemen och när man har uppgraderat nån gång så har man många gånger låtit gamla SQL-databaserna ligga kvar på gamla servern utan att ens ta dem off-line så nu är det en enda soppa med databaser som har samma namn lite här och var men ingen vet riktigt vilken som är den skarpa eller om det finns korskopplingar som fortfarande lever. Några system används troligen inte alls men även detta ligger i dunkel och det beror delvis på att en del system ingår i rena industriella processer och tillhörande system - som per definition har diffusa ägare och förvaltare.

Är ingen SQL-guru själv och kan inte producera sån kod/querys och vad jag söker är ett (gratis) och lättanvänt verktyg eller metod där man kan se när en databas sist accessades. Blev mäkta förvånad när jag insåg att det inte finns inbyggt i Management Studio och jag hittar bara exempel där man skriver kodsnuttar som dumpar resultatet i egna databaser och sen får man titta där.

Märkligt. Det här borde vara ett universiellt problem som finns på många, skulle nästan vilja säga: alla företag. Trodde man kunde titta i transktionsloggarna men det är tydligen bara om det skrivs nåt som den används, många databaser här används bara för läsning. Vissa rätt sällan.

Den hårda vägen är att sätta de misstänkta databaserna off-line själv och vänta på reaktioner men den metoden fick inget gehör hos IT-chefen...

Finns det nåt enkelt sätt att göra detta på? Det handlar om allt mellan SQL Server 2000 upp till SQL Server 2016. Några Express.
Vad sägs om följande grej då, står ju precis hur du ska göra:

https://www.mssqltips.com/sqlservert...longer-in-use/

Det avancerade tricket här är ju såklart att logga alltihop från ett ställe, men det borde gå att fixa med linked servers och vyer som använder dessa linked servers, en per linked server som används, sen är det ju bara att skita ur sig raderna i en tabell och sedan analysera denna tabell.
__________________
Senast redigerad av Proton 2018-02-06 kl. 16:08.
Citera
2018-02-06, 21:23
  #6
Medlem
zoombos avatar
Citat:
Ursprungligen postat av Proton
Vad sägs om följande grej då, står ju precis hur du ska göra:

https://www.mssqltips.com/sqlservert...longer-in-use/

Det avancerade tricket här är ju såklart att logga alltihop från ett ställe, men det borde gå att fixa med linked servers och vyer som använder dessa linked servers, en per linked server som används, sen är det ju bara att skita ur sig raderna i en tabell och sedan analysera denna tabell.

Jodå, jag har hittat denna tråd själv men som synes så är det en del fibblande innan man har satt upp detta, man förväntas kunna SQL-språket och vara en DBA. Det är jag inte och även om jag skulle kunna läsa mig till förfarandet så känns tröskeln rätt hög. Är inte ens säker på att jag kommer att få alla rättigheter som behövs för att kunna göra detta. Att sen göra det från ett och samma ställe är smutt men inte nödvändigt.
Men finns det då ingen som har gjort ett simpelt program för detta? Man lägger det på respektive server och använder ett privilegierat AD-konto som sen sköter samma sak som dessa små SQL-script gjorde?
Citera
2018-02-06, 21:29
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av zoombo
Jodå, jag har hittat denna tråd själv men som synes så är det en del fibblande innan man har satt upp detta, man förväntas kunna SQL-språket och vara en DBA. Det är jag inte och även om jag skulle kunna läsa mig till förfarandet så känns tröskeln rätt hög. Är inte ens säker på att jag kommer att få alla rättigheter som behövs för att kunna göra detta. Att sen göra det från ett och samma ställe är smutt men inte nödvändigt.
Men finns det då ingen som har gjort ett simpelt program för detta? Man lägger det på respektive server och använder ett privilegierat AD-konto som sen sköter samma sak som dessa små SQL-script gjorde?
Trots att du inte är nån dba har du väl ändå lyckats lära dig klipp-och-klistrandets konst? I sådana fall är ju saken klar, att sätta upp jobb i databasen är inte speciellt svårt heller.

Detta problem löses absolut enklast medelst SQL och sidan jag länkade till, det där andra låter ju som det stora trasslandet i sammanhanget.

Rättigheter fixar man hos driftleverantören, tjafsar de går det bra att lämna länken till sidan och be dem själva ta reda på vilka databaser det handlar om.

Eftersom det fanns SQL i klipp-och-klistravänligt format tvivlar jag på att nån har lagt tid eller energi på att fixa ihop ett program som gör samma sak. Vad är det för övrigt som säger i sådana fall att du får tillgång till ett nytt servicekonto för detta om du inte ens visste om du kunde fixa permissions att köra sql-scriptet med tillhörande schemalagda jobb?
__________________
Senast redigerad av Proton 2018-02-06 kl. 21:32.
Citera
2018-02-08, 18:46
  #8
Medlem
fnirps avatar
Citat:
Ursprungligen postat av kodsnickrarn
1) Slå på Audit Log så kan du logga alla anslutningsförsök, både lyckade och misslyckade (är inte på som default).
Se 1:a svaret här: https://stackoverflow.com/questions/...ttempts-logged

2) Med SQL-kommandot "sp_who" kan du se vilka användare som är anslutna och vad de kör för något (vid just detta tillfället).

/K

Jag kör regelbundet ett uppslag mot sys.sysprocesses där jag kan selekterar ut den information jag behöver, användarnamn, databas som användaren är kopplad mot, vilken server användaren kommer från vilket sql-kommando som körs för tillfället. Beroende på hur ofta man kör uppslaget (och sparar ner det i en egen databas lämpligtvis), så får man rätt bra koll ändå på vilka databaser som används av vilka användare och varifrån anropen kommer.

Vill man ha ännu noggrannare, kan man sätta upp lite extended_events som har koll på detaljerna.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback