MS PowerShell und Oracle - doag.org · Herunterladen kann sie jeder,doch richtig kennen und...

Preview:

Citation preview

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

Recommended