MEDISTAR-SQL-Server richtig neustarten

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.

Screenshot

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.