Hallo zusammen,
ich glaube, jeder der mit C&S von Lotus Notes arbeitet, stand irgendeinmal vor dem Problem, daß Ressourcen als frei angezeit werden, in Wirklichkeit aber belegt sind.
Schuld ist hier eine inkonsistente busytime.nsf.
Nun was macht man in einem solchen fall.
Ran an die Konsole und den scheduler mit tell sched q
herunterfahren; anschließen die busytime.nsf löschen und mit load sched den scheduler wieder starten.
Da das bei uns 2 x am Tag nötig war
, habe ich mir gedacht: warum kann Notes das denn nicht übernehmen.
Resultat ist ein Agent, der über ein paar Notes APIs die o.g. Aktionen ausführt.
Der Agent kann in jeder NotesDatenbank laufen; ich haben den Agenten einfach ins Domino Directory kopiert.
Bitte nicht vergessen mit der ServerID zu signieren !!
hier der Link zum Download der fertigen Agenten
http://www.eknori.de/downloads/killbusy.zipfür alle diejenigen unter euch, die lieber tippen hier der Quelltext.
'KillBusyTimeNsf:
Option Public
%REM
================================================================
(c) 2001 Heinz Ulrich Krause, Am Zaunbusch 8, 40822 Mettmann, ulrich-krause@web.de
Sometimes the busytime.nsf gets corrupt and you don't realize it before it's too late.
It especially happens with R5 servers.
This agent kills the corrupt database.
A new busytime.nsf will be created when the scheduler task restarts
The code uses a few Notes API calls to send console commands to the server.
Run as a scheduled agent
%END REM
'===============================================================
' DECLARATION SECTION
'===============================================================
Const QUIT_SCHEDULER = "tell sched q"
Const LOAD_SCHEDULER = "load sched"
Const UNLOAD_CACHE = "dbcache flush"
'Replace the location of the busytime.nsf
Const KILL_BUSYTIME_NSF = "c:\notes\notesdat\busytime.nsf"
'Replace the value with your server'S name
Const SERVER = "YOUR_SERVER"
'===============================================================
' SUB INITIALIZE
'===============================================================
Declare Function NSFRemoteConsole Lib "NNotes.dll" Alias "NSFRemoteConsole" (Byval Server As String, Byval cmd As String, ret As Long) As Long
Declare Function OSLockObject Lib "NNotes.dll" Alias "OSLockObject" (Byval Handle) As String
Declare Sub OSUnlockObject Lib "NNotes.dll" Alias "OSUnlockObject" (Byval Handle)
Declare Sub OSMemFree Lib "NNotes.dll" Alias "OSMemFree" (Byval Handle)
Class remoteConsole
Private IsError As Variant
Private rc As Integer
Private hBuffer As Long
Private Server As String
Private Command As String
Private Result As String
Sub New(inpServer As String)
Dim server As New NotesSession
If inpServer = "" Then
Me.IsError = True
Else
Me.server=inpServer
Me.IsError = False
End If
End Sub
Function Execute(inpCommand As String) As String
If Me.Server = "" Then
Exit Function
End If
If inpCommand = "" Then
Me.execute="You must specify a command"
Me.iserror = True
Exit Function
Else
Me.command = inpCommand
End If
Me.rc = NSFRemoteConsole(Me.server, Me.command, hBuffer)
If Me.rc <> 0 Then
Me.iserror = True
Me.result= "ERROR"
Else
Me.result = OSLockObject(hBuffer)
Call OSUnlockObject(hBuffer)
Call OSMemFree(hBuffer)
Me.Iserror = False
End If
Me.execute = Me.result
End Function
End Class
Sub Initialize
On Error Resume Next
Dim exec As String
Dim dummy As Variant
Dim remConsole As New RemoteConsole ( SERVER )
dummy = remConsole.Execute ( QUIT_SCHEDULER )
dummy = remConsole.Execute ( UNLOAD_CACHE )
Sleep ( 10 )
Kill KILL_BUSYTIME_NSF
dummy = remConsole.Execute ( LOAD_SCHEDULER )
End Sub