MEDISTAR-SQL bzw. Oracle-Dienste schneller starten

Praxen, die ihren Server/Hauptrechner nicht ständig durchlaufen lassen, erleben jeden Morgen, dass es etliche Minuten dauert, bis alle Oracle-Dienste hochgefahren sind und MEDISTAR starten kann. Bis vor kurzem kam es zu Fehlermeldungen, wenn vorzeitig versucht wurde, MEDISTAR zu starten. Mit den letzten Updates scheint die zulässige Wartezeit für die die Bereitstellung der Dienste verlängert worden zu sein.

Es gibt aber ein paar Stellschrauben für die Beschleunigung des Vorgangs:

  • Der Dienst „OracleDBConsolemedistar‟ wird für die Ausführung des „Oracle Enterprise Manager Database Control‟ benötigt, einer Browser-basierten, graphischen Bedienoberfläche zur Verwaltung der Datenbank. Der Manager und somit auch der Dienst werden im normalen Betrieb nicht verwendet. Es empfiehlt sich deshalb, den Starttyp dieses Dienstes auf „manuell‟ zu setzen.
    Das gleiche gilt für den Dienst „OracleMTSRecoveryService‟, auch wenn er relativ wenig Zeit zum Starten benötigt. Dieser Dienst stellt Funktionen für den Microsoft-Transaction-Server zur Verfügung, der entweder auf dem Computer nicht vorhanden ist oder nicht genutzt wird.
  • Starttyp des Dienstes auf manuell ändern

  • In der Server-Konfigurationsdatei „listener.ora‟ lässt sich der Pfad zu den Diensten angeben. Dadurch wird eventuell ein wenig Zeit eingespart. Die Datei befindet sich in folgendem Ordner:
    D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
    Hier können Sie folgende Zeilen hinzufügen. Die Kommentarzeilen (#) können Sie weglassen.

    # SID_LIST_LISTENER section for listener named LISTENER (default)
    # SID_LIST list of SID descriptions.
    # SID_DESC service information for a specific database instance
    # SID_NAME the Oracle System Identifier (SID) of the instance
    # ORACLE_HOME the Oracle home location of the service

    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = MEDISTAR)
    (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
    )
    )

Übrigens prüft mein Tool MSHotkey auf Wunsch, ob die Dienste auf dem Server bereitstehen. Erst danach wird die Autostart-Funktion für den ersten MEDISTAR-Task ausgeführt.

MEDISTAR- und Oracle-Dienste auf dem Heimrechner

Man kann ja darüber diskutieren, ob die Oracle-Datenbank für eine Kleinpraxis überdimensioniert ist. Unvernünftig wäre es auf jeden Fall auf einem Heimrechner, der in der Hauptsache für andere Dinge benutzt wird, die MEDISTAR- und Oracle-Dienste ständig laufen zu lassen.

Ich habe daher den Starttyp der Dienste von „Automatisch“ auf „Manuell“ geändert. Wenn ich MEDISTAR benutzen möchte, starte ich die Dienste durch den Aufruf eines Powershell-Skriptes.

Gegenüber einer normalen Batchdatei hat Powershell Vorteile: Erstens kann sich das Skript selbst Administratorrechte anfordern und zweitens informiert das Skript darüber, wann die Dienste laufen.
Wenn Sie auf Ihrem Rechner Powershell zum ersten mal benutzen, können Sie keine Skripte ausführen. Sie müssen zuvor die Ausführungsrichtlinien ändern.

OraStart.ps1
# Starte Skript mit Administratorrechten, falls ohne diese Rechte gestartet wurde.
$identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$princ = New-Object System.Security.Principal.WindowsPrincipal($identity)
if(!$princ.IsInRole( `
[System.Security.Principal.WindowsBuiltInRole]::Administrator))
{
$powershell = [System.Diagnostics.Process]::GetCurrentProcess()
$psi = New-Object System.Diagnostics.ProcessStartInfo $powerShell.Path
$script = $MyInvocation.MyCommand.Path
$prm = $script
foreach($a in $args) {
$prm += ‚ ‚ + $a
}
$psi.Arguments = $prm
$psi.Verb = „runas“
[System.Diagnostics.Process]::Start($psi) | Out-Null
return;
}

# Starte Dienste, deren Starttyp von ‚Automatisch‘ auf ‚Manuell‘ geändert wurde.
Start-Service „MEDISTAR ISAM“
Start-Service „MEDISTAR RPCI“
Start-Service OracleMTSRecoveryService
Start-Service OracleOraDb11g_home1TNSListener
Start-Service OracleServiceMEDISTAR
Start-Service OracleDBConsolemedistar

# Starte, wenn gewünscht, einen MEDISTAR-Task, nachdem die Dienste gestarte wurden.
$title = „MEDISTAR-SQL-Starter“
$message = „MEDISTAR kann nun gestartet werden!`nSoll dies jetzt geschehen (Task-0)?“
$yes = New-Object System.Management.Automation.Host.ChoiceDescription „&Ja, Task-0 öffnen“, `
„Der MEDISTAR-Task wird gestartet.“
$no = New-Object System.Management.Automation.Host.ChoiceDescription „&Nein, nur beenden.“, `
„Powershell-Skript wird beendet.“
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
$result = $host.ui.PromptForChoice($title, $message, $options, 0)
switch ($result) {
0 {D:\MEDISTAR\prg4\m42t.exe desk-0 -style medistar}
1 {„Sie haben Nein gewählt.“}
}

Das Skript kann in abgewandelter Form auch die Dienste beenden. Es muss nur „Start-Service“ durch „Stop-Service“ ersetzt werden und Part 3 gelöscht werden.