Avatar billede petla Nybegynder
04. april 2005 - 11:40 Der er 8 kommentarer og
2 løsninger

Antal brugere

Hej

Findes der en måde hvorpå man kan registrere hvor mange brugere der er online på en given MS SQL database.

Det er brugere der er koblet op via ODBC fra MS ACCESS XP.

Det skal bruges til at sikre at der ikke er flere brugere end der er købt licenser til.


Peter
Avatar billede arne_v Ekspert
04. april 2005 - 11:47 #1
Prøv med en:

sp_who
Avatar billede arne_v Ekspert
04. april 2005 - 11:48 #2
Og bemærk at du ikke har nogen mulighed for at se antal samtidige brugere - du kan
kun se antal samtidige connections.
Avatar billede petla Nybegynder
04. april 2005 - 12:39 #3
Hej

Den har jeg kigget på. Jeg har prøvet

http://sqljunkies.com/WebLog/sqldude/archive/2004/06/14/3146.aspx

uden at finde noget som virker 100%.

Vil det sige at jeg bliver nødt til at lave min egen tæller tabel med de ulemper det giver hvis forbindelsen bliver afbrudt og ikke afsluttet normalt.
Avatar billede arne_v Ekspert
04. april 2005 - 12:56 #4
Du kan se antal samtidige connections.

Antal samtidige brugere kan din database ikke se. Medmindre det kan udregnes
udfra antal samtidige connections.

Kan du uddybe lidt hvad det er som du hænger fast i ?
Avatar billede petla Nybegynder
04. april 2005 - 13:11 #5
Jeg er kommet frem til flg.

SELECT COUNT(*) AS Antal
FROM master..sysaltfiles INNER JOIN master..sysprocesses
ON master..sysaltfiles.dbid = master..sysprocesses.dbid
WHERE master..sysaltfiles.name = N'database navn' and master..sysprocesses.program_name = 'program navn f.eks access xp'

dette virker sådan set meget fint men det ser ud til at connectionen forsvinder når programmet har stået åbent i f.eks ½ time uden brug.
Avatar billede petla Nybegynder
05. april 2005 - 11:18 #6
Smid et svar hvis du vil have point ellers lukker jeg.
Avatar billede zedios Nybegynder
05. april 2005 - 11:22 #7
sysprocesses er en in-memory system tabel som hele tiden afspejler den aktuelle situation på serveren altså også hvilke connections der p.t er.

Hvis du har brug for historik over antallat a forbindelser kan du beytte enten profiler (gerne som server trace - ligger dog lidt load på din server) eller du kan lave et job der sampler indholdet af sysprocesses ned i en historik tabel fx.

Ellers synes jeg din forespørgsel ser meget fornuftig ud - dog kan jeg ikke rigtig se hvad du har brug for altsysfiles til? hvis du gerne vil have mulighed for at filtrere på databasenavnet så ville jeg bruge sysdatabases istedet ..
Avatar billede petla Nybegynder
05. april 2005 - 13:40 #8
Sådan ser den ud nu

SELECT COUNT(master.dbo.sysprocesses.program_name) AS Connections
FROM master.dbo.sysprocesses INNER JOIN master.dbo.sysdatabases ON master.dbo.sysprocesses.dbid = master.dbo.sysdatabases.dbid
GROUP BY master.dbo.sysdatabases.name, master.dbo.sysprocesses.program_name
HAVING (master.dbo.sysdatabases.name = N'database') AND (master.dbo.sysprocesses.program_name = N'program navn')

Det ser ud til at det kører.

Jeg ved ikke hvem af jer der skal have point.
Avatar billede arne_v Ekspert
05. april 2005 - 18:26 #9
jeg synes ihvertfald ikke at jeg har bidraget med noget
Avatar billede petla Nybegynder
10. april 2005 - 01:14 #10
Jeg lukker
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