Wenn der Computer, auf dem die Oracle-Datenbank läuft, heruntergefahren wird, besteht die Gefahr, dass die Oracle-Datenbank nicht sauber geschlossen werden kann, weil Windows vor dem Herunterfahren geöffneten Programmen nur wenig Zeit zum Schließen gibt.
Am besten wird die Datenbank vor dem Shutdown sauber heruntergefahren – das beschleunigt den späteren Neustart!
Mit Hilfe eines Powershell-Skripts lässt sich der Vorgang automatisieren.
MSOraStop.ps1
################################################################################
# Zweck: Fährt die Datenbank herunter und beendet MEDISTAR- und Oracle-Dienste.
# Autor: Wilhelm Happe, © 2012
################################################################################
# Starte ggfs. erneut mit Administratorrechten
$id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$princ = New-Object System.Security.Principal.WindowsPrincipal($id)
if(!$princ.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
{$ps = [System.Diagnostics.Process]::GetCurrentProcess()
$psi = New-Object System.Diagnostics.ProcessStartInfo $ps.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;}
$ErrorActionPreference = "SilentlyContinue" # gilt für alle folgenden Befehle
If (Get-Process 'oracle' -ea 0) {
$Password = "XXXXXXXX" # PASSWORT BITTE ANPASSEN
$SqlFile = "${env:temp}\Temp.sql" # Datei für SQL-Anweisungen
"shutdown normal;", "exit;" -join "`n" | Set-Content $SqlFile
sqlplus sys/$Password as sysdba '@'$SqlFile
Remove-Item -Path $SqlFile} # Datei löschen
Else {Write-Warning "Es ist keine Oracle-Instanz verfügbar!"}
Function Dienst-Stoppen {param([string]$sName)
$s = Get-Service -display $sName -ea SilentlyContinue
If (!$s) {Write-Warning "$sName ist nicht installiert."}
Else {Stop-Service -inputobject $s -passthru -ea 0
If (!$?) {Write-Host "$sName wurde nicht beendet!"}}}
Write-Host "`nDie MEDISTAR-Dienste werden beendet.`n"
Stop-Process -processname dscm
Dienst-Stoppen -sName "MEDISTAR ISAM"
Dienst-Stoppen -sName "MEDISTAR RPCI"
Dienst-Stoppen -sName OracleOraDb11g_home1TNSListener
Dienst-Stoppen -sName OracleServiceMEDISTAR
Dienst-Stoppen -sName OracleDBConsolemedistar
Dienst-Stoppen -sName OracleMTSRecoveryService
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Fertig!"
$objForm.AutoSize = $True
$objForm.AutoSizeMode = "GrowAndShrink"
$objForm.StartPosition = "CenterScreen"
$objForm.FormBorderStyle = "FixedToolWindow"
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter")
{$script:x = $objListBox.SelectedItem;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$objForm.Close()}})
$objForm.Controls.Add($objLabel)
$objListBox = New-Object System.Windows.Forms.ListBox
$objListBox.AutoSize = $True
$objListBox.Add_MouseDoubleClick({$script:x = $objListBox.SelectedItem;$objForm.Close()})
$lbItem = @(
($myInvocation.MyCommand.Name + " beenden"),
"Computer neustarten",
"Computer herunterfahren")
For($i=0; $i -lt $lbItem.Count; $i++) {[void] $objListBox.Items.Add($lbItem[$i])}
$objListBox.SelectedIndex = 0
$objListBox.Height = $objListBox.PreferredHeight
$objForm.Controls.Add($objListBox)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
[Environment]::NewLine; Write-Host $x
Switch ($x) {
$lbItem[1] {Restart-Computer}
$lbItem[2] {Stop-Computer}
default {Exit}}
Klicken Sie hier, um das Skript herunter zu laden.