Post on 13-Aug-2019
transcript
MS PowerShellund Oracle
interaktiv – intuitiv - inspirativ
science + computing ag © 2009
Holger Bär
1 Einführung in die PowerShell1 Einführung in die PowerShell
2 Powershell und Oracle
3 Einsatz in der Praxis
EINFÜHRUNG IN DIE POWERSHELL
Herunterladen kann sie jeder,doch richtig kennen und schätzen zu lernen werden sie, gerade am Anfang, nur wenige. …Nehmen Sie sich am besten die nächsten drei Wochen frei, um alle Details kennen zu
science + computing ag © 2009
drei Wochen frei, um alle Details kennen zu lernen. Sie werden die nächsten 30 Jahre davon profitieren.
Peter Monadjemi Windows PowerShell Crashkurs
Common Model for developing administrative Interfaces
Common Model for Admin Interfaces
Grafisches Adminstratives Tool
ScriptsMMC
Snap-IN
ApplicationMisc.
Altes Modell Neues Modell
science + computing ag © 2009
Grafisches Adminstratives Tool(z.B. MMC)
Windows oder ServerProdukt Funktionalität
Command LineTool
ComponentObject
Model (COM)
WMIKlassen
Windows PowerShell Commandlets
Microsoft .NET Framework
Windows oder ServerProdukt Funktionalität
Einflußfaktoren
science + computing ag © 2009
Commandlets (Cmdlet)
� PowerShell-Befehle heißen „Commandlets“ bzw. Cmdlets- 129 Befehle eingebaut
� Allgemeine Syntax:- Verb-Substantiv [-Parameterliste]
� Beispiele:- get-help, get-location, get-command
science + computing ag © 2009
- get-help, get-location, get-command- get-childitem c:\daten, set-location c:\windows, remove-item
� Ausserdem:- Berechnungen: 10* (8 + 6)- Aufruf DOS-/Windows-EXEs: c:\windows\notepad.exe- Aufruf WSH-Skriptdateien: .vbs, .js, .vbe, .wsf, etc.- Aufruf Windows-Dokumente: .pdf, .doc, .xls, etc.
� Standardmäßig ist nur der interaktiver Gebrauch erlaubt
� Sollen Scripte ausgeführt werden, so muß die Ausführungsrichtlinie (ExecutionPolicy) geändert werden
� Scriptfiles (.ps1) werden standardmäßig mit Notepad geöffnet
Sicherheit ist ein zentraler Aspekt der PowerShell
Secure by default
science + computing ag © 2009
geöffnet
Aber:
PowerShell ist durch "Secure by Default" keine Alternative für Login-Scripte
Variablen
� Variablen beginnen mit vorangestellten $ Dollarzeichen. $a=42$a="Hello World" $a=[int] 42$a=[DateTime] "12/24/2007"
� Das Voranstellen des Typnamens
science + computing ag © 2009
� Das Voranstellen des Typnamens[int] $a =5bewirkt, daß die Variable nur Daten diese Typs aufnehmenkann. (Strenge Typisierung wie Java, C++ oder C#)
Arrays
� Einfache Arrays über kommaseparierte Liste oder @( , ) $a = "a", "b", "c" oder $a = @("a", "b", "c")$n = 1, 2, 3 oder $n=@(1,2,3)
� Leerer Array $leer=@()
� Mehrdimensionaler Array
science + computing ag © 2009
� Mehrdimensionaler Array$ma = @( ("a", 1),("b", 2), ("c",3) )
� Zugriff auf Elemente (Beginn bei Null)$a[0]$n[2]$ma[0][1]
Navigationsbefehle
Cmdlet Alias Beschreibung
Set-Location cd, chdir Festlegen des Standorts(Providerwechsel mit Doppelpunkt)
Get-Location pwd Abruf des aktuellen Standorts
Get-ChildItem dir, ls Auflisten der Elemente
science + computing ag © 2009
Get-ChildItem dir, ls Auflisten der Elemente
Get-Contents type, cat Abruf des Elementinhalts
New-Item md, mkdir Erstellen eines Elements (Ast oder Blatt)
Vergleichsoperatoren
Vergleichs-operatorGroß/Klein-schreibung ignorieren
Vergleichs-operatorGroß/Klein-schreibung beachten
Bedeutung
-eq -ceq Gleich
-ne -cne Ungleich
-gt -cgt Größer als
science + computing ag © 2009
-gt -cgt Größer als
-ge -cge Größer oder Gleich als
-lt -clt Kleiner als
-le -cle Kleiner oder Gleich als
-match -cmatch entspricht (nicht so streng wie gleich) (Regular Expression)
-notmatch -cnotmatch entspricht nicht (Regular Expression)
-like -clike wie (wildcards)
-notlike -cnotlike nicht wie (Wildcards)
Vergleichsoperatoren
Vergleichs-operator
Bedeutung
-contains enthält (für Collections)
-notcontains enthält nicht (für Collections)
science + computing ag © 2009
-replace ersetze (Suche mit Regular Expression möglich)
-is Ist vom Typ
-isnot Ist nicht vom Typ
Objektpipeline
� Weitergabe von .NET Objekten und nicht von unstrukturierten Daten (Strings)
� Pipelineoperator (Verkettungszeichen): |
� Das aktuelle Pipelineobjekt: $_Get-Process | Where-Object { $_.cpu –gt 5 } | Sort-Object cpu | Format-Table
Get
science + computing ag © 2009
Cm
dlet #1G
et-Process C
lass
Windows PowerShell Pipeline ProcessorC
mdlet #2
Where C
lass
Cm
dlet #3S
ort Class
Cm
dlet #4F
ormat C
lass
Kontrollstrukturen
� if (Bedingung) {…} elseif {…} else {…}
� for ([Initialisierer]; [Bedingung]; [Iterator]) {…}
� switch ($var) { Wert: {…} }
� while(Bedingung) { … }
� do { … } while (Bedingung)
� do { … } until (Bedingung)
� foreach ($var in $menge) {…}
science + computing ag © 2009
� function name {…}
� return
� throw "Fehlertext"
� trap Fehlerklasse { … } else { … }
� throw Fehlerklasse
� exit
� continue
� break
Kommentare und Zeilenaufteilung
� Kommentare: #
� Pipeline |
� Befehlstrenner ;
science + computing ag © 2009
� Befehlstrenner ;Befehl ; Befehl ; Befehl
PowerShell Team blog: http://blogs.msdn.com/PowerShell/Newsgroup: Microsoft.Public.Windows.PowerShellMicrosoft PowerShell Script Centerwww.microsoft.com/technet/scriptcenter/hubs/msh.mspx
PowerShell Community: http://www.powershellcommunity.org
Karl Prosser/Tobias Weltner powershelllive.comHolger Schwichtenberg www.it-visions.de
Websites zur PowerShell
science + computing ag © 2009
Holger Schwichtenberg www.it-visions.deMarc van Orsouw’s blog http://mow001.blogspot.comLee Holmes http://www.leeholmes.com/blog/
Powershell Beispiele http://www.scriptinganswers.com
PowerGui http://www.powergui.org
POWERSHELL UND ORACLE
�Voraussetzungen
�Zugriff auf Oracle DB über ODP.Net
�Öffnen einer Connection
�Verwendung des OracleCommand Objekts
�Einsatz von Parametern
PowerShell und Oracle
science + computing ag © 2009
�Einsatz von Parametern
�Verwendung des DataReaders
�Performance Betrachtungen
Installation
�.Net 2.0 oder höher
�Oracle Client / Instant Client
�ODP.Net für Oracle 9i, 10g oder 11g für .NET 2.0
PowerShell und Oracle
science + computing ag © 2009
VerwendungAufruf im Skript:[Reflection.Assembly]::LoadWithPartialName("Oracle.D
ataAccess")
Verbindungsaufbau
� Erzeugen eines ConnectionObjects
$constr = "User Id=hb;Password=hb;Data
Source=localhost:/isen"
$conn= New-Object \
Oracle.DataAccess.Client.OracleConnection($constr)
PowerShell und Oracle
science + computing ag © 2009
Oracle.DataAccess.Client.OracleConnection($constr)
$conn.Open()
Datenzugriff
� Erzeugen eines CommandObjects(egal ob Stored Procedure, DML/DDL)
$command = New-Object
Oracle.DataAccess.Client.OracleCommand(
PowerShell und Oracle
science + computing ag © 2009
„DOAG.DEMO“, $dbconnection)
ODER
$command = $conn.CreateCommand()
$command.CommandText = „DOAG.DEMO“
Datenzugriff - Fortsetzung
Setzen des CommandTyps$command.CommandType=
[Text|StoredProcedure|TableDirect]
Ausführen des Commandos
PowerShell und Oracle
science + computing ag © 2009
Ausführen des Commandos$command.ExecuteNonQuery()
$command.ExecuteReader()
$command.ExecuteScalar()
$command.ExecuteStream()
demo0.ps1, demo1.ps1
Parameter
Platzhalter im SQL-Text lassen$command.CommandText=
“insert into emp (empno, ename) values (:1, :2)“
PowerShell und Oracle
science + computing ag © 2009
Automatisch bei Stored Procedures$command.CommandText=
“doag.one_param“
Parameter - Fortsetzung
Parameter �erzeugen
�Typ und Richtung angeben
�Binden
�Wert setzen
PowerShell und Oracle
science + computing ag © 2009
�Wert setzen$param = New-Object
Oracle.DataAccess.Client.OracleParameter()
$param.DbType = „Int32“
$command.Parameters.Add($param)
$param.Value=8911
demo2.ps1
Parameter - Fortsetzung
RefCursor�Ein Parameter wie (fast) jeder andere
�kann als Eingabe für weitere Prozedur verwendet werden
�kann direkt ausgelesen werden über einen DataReader
PowerShell und Oracle
science + computing ag © 2009
�kann direkt ausgelesen werden über einen DataReader
$param = NewParam 'RefCursor' 'Output'
$doag_demo.Parameters.Add($param)
$reader = $doag_demo.ExecuteReader()
while ($reader.read()) { $reader.getstring(1) }
demo5
Performance Betrachtungen
Automatische Optimierungen�Connection Pooling
�Cursor Caching / Statement Cache
�ab 11g: Result Cache
PowerShell und Oracle
science + computing ag © 2009
�ab 11g: Result Cache
demo2,demo3
Performance Betrachtungen
Manuelle Optimierungen�Autocommit vermeiden
�FetchSize anpassen
�Bulk Operationen
PowerShell und Oracle
science + computing ag © 2009
�Bulk Operationen
demo3/demo4,demo5, demo6/demo7
Metalink Note 848177.1
http://guyharrison.typepad.com/oracleguy/2008/01/accessing-
oracl.html
PowerShell und Oracle
science + computing ag © 2009
POWERSHELL IMPRAXISEINSATZ
Powershell im Praxiseinsatz
� Datenmanagementsystem
- Anbindung eines Archivsystems 80TB
- Skripting mit Powershell- Skripting mit Powershell
- Auslagern/Rücklagern von Daten über Applikation steuern
Aufgaben Aus-/Rücklagerung
� Auslagern
- Auslesen der betroffenen Daten aus der Datenbank
- Zusammenpacken der Datenverzeichnisse in ZIP-Datei
- Verlagern in Auslagerungsdatenbereich- Verlagern in Auslagerungsdatenbereich
- Statusmeldung an DB
� Rücklagern
- Auslesen der angeforderten Daten aus der Datenbank
- Entpacken der ZIPDatei
- Verlagern in Online Bereich
- Statusmeldung an DB
Probleme
� Zeitgesteuerter Skriptablauf mit Cron
! Beim Ausloggen: Abbruch des Skripts
! Synchronisation über Lock-Dateien
� Lösung: PowerShell als Service� Lösung: PowerShell als Service
� PowerShell als Service
- Aufruf mit vollständigem Pfad (Leerzeichen)
Powershell als Service
� Service einrichten mit srvany
- HKLM\LocalMachine\System\Services\CurrentControlSet\PsService\Parameters : Application
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powe
rshell.exe -noninteractive -nologo -noprofilershell.exe -noninteractive -nologo -noprofile
-command "cd 'C:\Program
Files\PowershellSkripte'; &
./Auslagern_service.ps1"
- AppDirectory setzen reicht leider nicht!
� Einbetten in eigene Anwendung
http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx
Fazit
� Kombination aus .NET und Skripting ergibt starkes Duo
� Interaktives Arbeiten durch Objekt-Inspektion verkürzt Entwicklungszeit
� Administratoren und Entwickler benutzen die gleichen Tools
� Effiziente Datenverarbeitung in Skripten sehr einfach
Vielen Dank für Ihre Aufmerksamkeit
Holger Bär
science + computing AG
Telefon: 07071 9457-559
www.science-computing.de
E-Mail: h.baer@science-computing.de