Bonjour à tous,


J'ai récupéré les informations sur internet pour arriver à identifier quel processus bloque notre base de donnée:

Voici le Script vbs:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Option Explicit
Dim strConnection, conn, rs, strSQL, objWMIService, objProcess, colProcess, User, Domain, Rtn
 Dim server, login, mdp, database, strComputer, strList, hostprocess, strMatricule
server = inputbox( "Nom du serveur SQL", "Input","" )
login = inputbox( "Nom Utilisateur SQL", "Input","" )
mdp = inputbox( "Mot de passe SQL", "Input","" )
database = inputbox( "bdd", "Input","master" )
strConnection = "Driver={SQL Server};Server=" & server & ";Database=" & database & ";Uid="& login & ";Pwd=" & mdp & ";"
 
 
Set conn = Wscript.CreateObject("ADODB.Connection")
conn.Open strConnection
 
Set rs = Wscript.CreateObject("ADODB.recordset")
strSQL = "select LTRIM(RTRIM(hostname)) as 'hostname', LTRIM(RTRIM(hostprocess)) as 'hostprocess' from sysprocesses where dbid=DB_ID('IcarDMS') and kpid > '0' and blocked >'0'"
rs.open strSQL, conn, 3,3
 
rs.MoveFirst
strMatricule = ">>>" & rs.fields("hostname") & "-" &  rs.fields("hostprocess")
MsgBox (strMatricule)
'-------------------
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & rs.fields("hostname") & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process WHERE ProcessId="& rs.fields("hostprocess") &"")
For Each objProcess in colProcess
    If objProcess.GetOwner ( User, Domain ) = 0 Then
          strList = strList & vbCr & "Processus " & objProcess.Caption & " Executé " & Domain & "\" & User & "sur le serveur" & rs.fields("hostname") & "-" & rs.fields("hostprocess")
    Else
          strList = strList & vbCr & "Problem " & Rtn & " getting the owner for process " & objProcess.Caption
    End If
'strList = strList & vbCr & objProcess.Name & "-" & objProcess.ProcessId
Next
WSCript.Echo strList
 
'----------- 
 
 
rs.Close
Set rs = Nothing
 
conn.Close
Set conn = Nothing

Je voudrais savoir si mon code est correcte? (Si j'ai pas commis erreur, qui pourrai bloquer le script)
Est-il possible de savoir a quel moment le processus c'est bloqué jour/heure?

Merci d'avance pour vos conseils et votre aide

guigui69