Ugrás a fő tartalomra

PowerShell alapok 5

 Bevezetés


A Microsoft legújabb definíciója szerint a PowerShell a rendszergazda tevékenységek automatizációs platformja. Kettős szerepe van: egyrészt a PowerShell egy parancssori környezet, azaz egy olyan program, ahol a felhasználó kapcsolatba léphet a számítógépes rendszerrel (direkt nem korlátozva le az operációs rendszerre!). Ebből a szempontból sok olyan szolgáltatást kell nyújtania, ami a gyors, kényelmes adatbevitelt, azaz a gyors gépelést szolgálja. Másrészt a PowerShell egy programnyelv is, mint ilyennek rendelkeznie kell azokkal a programíráshoz szükséges elemekkel, mint például a ciklus, változók, függvények, adatszerkezetek.



Jellemző

NEM case-sensitive
Biztonsági szempontból nem lehet a ps1 kiterjesztéshez hozzárendelni a PowerShell-beli végrehajtást, el kell indítani!
Be kell állítani a futtatáshoz Set-ExecutionPolicy –ExecutionPolicy RemoteSigned

 

 

#                        Megjegyzés, comment

<#
This is a
multi-line
comment
#>

 

 

 

Parancsok

Get-Command                                                                                       //parancsok és más elemek (providerek, függvények)
Get-Command -?                                                                                  //Get-Command-ról help kérés
Get-Help Get-Command –full (/Detailed/Examples) – paraméterek

Get-Command –Commandtype Cmdlet                                             //a cmdlet-ek listája
gcm                                                                                                     // Get-Command aliasa (tehát így is használhatjuk)
Get-Alias                                                                                             //alias nevek
Set-Alias „ujnev” parancs                                                                   //új aliast adhatunk

Write-Host „Üdvözlés” –ForeGroundColor Blue                                //kiíratás szín megadással

Clear-Host vagy Clear                                                                        // képernyőtörlés

Get-Date                                                                                            //dátum-idő kiírása

Get-Content „fájlnév”                                                                        // fájl tartalmának kilistázása

Get-Childitem                                                                                   //aktuális könyvtár tartalma

Get-Childitem „c:\konyvtar”                                                            // adott konyvtár tartalma
Get-ChildItem –recurse                                                                 // alkönyvtár tartalmakkal együtt

Get-ChildItem –Filter *.txt                                                            // csak a txt fájlokat listázza
Copy-Item „fájlt” „fájlba”                                                              //másolás  
Copy-Item „fájlt” ”fájlba” –Confirm                                              //csak akkor hajtsa végre, ha megerősítjük
Copy-Item „fájlt” „fájlba” –Whatif                                                //nem hajtja végre, csak megadja mit tenne...

New-Item –Path utvonal –ItemType Directory                            //új konyvtar létrehozása
New-Item –Path utvonal –ItemType File                                     //új fájl létrehozása
Get-Location                                                                               //path kiolvasása
Set-Location –path „útvonal”                                                      //könyvtárra váltás - cd
Push-Location útvonal                                                                //verembe teszi az aktuális könyvtárat és rááll az „útvonal”-ra
Pop-Location                                                                              //a veremből kiolvassa az útvonalat és visszaállítja...
Get-Process                                                                               //gps az aliassa
Invoke-Item c:\Windows\Notepad.exe                                     // elindítja az alkalmazást -ii (aliassa)
Stop-Process ID                                                                         // process lelövése .  - kill

 

Csővezeték kezelése

Get-ChildItem | Out-File fájlnév                               //csővezeték

$_                                                                             // a csővezetékből érkező objektum

Get-Date | Get-Member                                           //objektumok feltérképezése, pl. Dátum objektumra – NEM SZTRING-et ad át!! 

(Get-Date).year                                                         // objektum tagadatának elérése

Get-ChildItem „fájlnév” | Get-Member                     // egy fájl adatait tartalmazó objektum tagjai

(Get-ChildItem „fájlnév”).FullName                          //fájl neve útvonallal

Get-ChildItem | Where {$_.Length –gt 100}             //100-nál hosszabb fájlokat listázza ki


Get-ChildItem | Where {$_.Extension –eq „.txt”}      //txt fájlokat listázza

Get-Childitem| Sort-Object –Property LastTimeWrite –Descending //a könyvtárat csökkenő sorrendben utolsó írás ideje szerint
Get-Process                                                            // futó processzeket listázza

Get-Process | Format-List –Property Name, Id       // a processzeket listázza, csak az ID-t és nevet
Get-Process |Format-table –AutoSize                      //táblázatos formában írja ki,
Get-Process| Where-Object {$_.ProcessName –lt „Nev”} //szűrés, $_ csővezetéken érkező objektum, operátorok!!
Get-Process| Sort-Object –Property CPU| select-Object –Property Name, Cpu –Last 5 | Format-Table –AutoSize     //a processzeket állítsuk sorba a CPU szerint, szűrjük le a name és cpu tulajdonságra és tábla formába írjuk ki.

 

Változók:

$HOME                                      // user home könyvtára c:\document and setting\ user,

$PSHOME                                 // Powershell home könyvtára c:\Windows\system32\WindowsPowerShell\v1.0
Set-Location $HOME                // Saját változók: Get-Variable // változók listája
Set-Variable –Name x –Value 2 // x változó, 2-s értékkel

$x=3                                          // x változó 3-s értékkel
$x                                              //kiírja az értéket

$sz=”hello”+”vilag”                   //” a string, + konkatenáció

„hello$x”                                   // „ „között a változó tartalma kerül be a szövegbe  /eredmény : hello3

’hello$x’                                    // ’’-között a szöveg, a változó azonosítóját tárolja  /eredmény : hello

$x $ma=Get-Date                    // objektumokat is tárolhat!

$ma.Year                                  // az objektum Year adattagja

Remove-Variable –Name azonosító // azonosító eltávolítása


$tombbe=Get-Content „szoveg.txt”
$tombe                                             // a teljes fájl tartalmát beolvassa


$tombbe |get-member                     // a tömbbel kapcsolatos elérhető adatok, metódusok

Get-psprovider                                 // beépített szolgáltatók listája – drive, alias, registry....

 

Változók kezelése

"4" + 2             #  "42"
4 + "2"             #  6
1,2,3 + "Hello" #  1,2,3,"Hello"
"Hello" + 1,2,3 #  "Hello1 2 3"

 

Feltételes elágazás, feltételes végrehajtás


A szkripteknek gyakran kell döntéseket hozniuk, és a döntések alapján eltérő logikát kell végrehajtaniuk. Ezt a feltételes végrehajtás jelenti. A kiértékeléshez egy utasítást vagy értéket kell megadnia, majd a kód alapján egy másik szakaszt kell végrehajtania. Pontosan ez az if utasítás.

Az if utasítás :

$condition = $true
if ( $condition )
{
Write-Output "The condition was true"
}


Első lépésként a if kifejezés kiértékelése zárójelben történik. Ha kiértékeli a-t $true , végrehajtja a scriptblock kapcsos zárójeleket. Ha az érték volt $false , akkor kihagyhatja ezt a scriptblock kulcsszót.

 

$value = 1

if ( $value -gt 5 ) {

  Write-Output "nagyobb"

} else  {

 

   Write-Output "kisebb"

}

 

 

Összehasonlító operátorok

-gt : nagyobb, mint
-igt : nagyobb, mint, kis-és nagybetűk megkülönböztetése
-cgt :n agyobb, mint, kis-és nagybetűk megkülönböztetése
-ge : nagyobb vagy egyenlő
-ige : nagyobb vagy egyenlő, kis-és nagybetűk megkülönböztetése
-cge : nagyobb vagy egyenlő, kis-és nagybetűk megkülönböztetése
-lt : kisebb, mint
-ilt : kisebb, mint, kis-és nagybetűk megkülönböztetése
-clt : kisebb, mint, kis-és nagybetűk megkülönböztetése
-le : kisebb vagy egyenlő
-ile : kisebb vagy egyenlő, kis-és nagybetűk megkülönböztetése
-cle : kisebb vagy egyenlő, kis-és nagybetűk megkülönböztetése

 

Karakter minta kereső

  • ? egyetlen karakternek felel meg
  • * tetszőleges számú karakternek felel meg

 

  • -like kis-és nagybetűket megkülönböztető helyettesítő karakter
  • -ilike kis-és nagybetűket megkülönböztető helyettesítő karakter
  • -clike kis-és nagybetűket megkülönböztető helyettesítő karakter
  • -notlike kis-és nagybetűk megkülönböztetése nem megfelelő helyettesítő karakter
  • -inotlike kis-és nagybetűk megkülönböztetése nem megfelelő helyettesítő karakter
  • -cnotlike kis-és nagybetűket megkülönböztető helyettesítő karakter nem egyezik
  • -match kis-és nagybetűk megkülönböztetése
  • -imatch kis-és nagybetűk megkülönböztetése
  • -cmatch kis-és nagybetűket megkülönböztető regex
  • -notmatch kis-és nagybetűket nem megkülönböztető regex nem egyezik
  • -inotmatch kis-és nagybetűket nem megkülönböztető regex nem egyezik
  • -cnotmatch a kis-és nagybetűk megkülönböztetése nem egyezik
  • -contains kis-és nagybetűk megkülönböztetése
  • -icontains kis-és nagybetűk megkülönböztetése
  • -ccontains kis-és nagybetűk megkülönböztetése
  • -notcontains kis-és nagybetűk megkülönböztetése nem egyezik
  • -inotcontains kis-és nagybetűk megkülönböztetése nem egyezik
  • -cnotcontains kis-és nagybetűk megkülönböztetése nem egyezik
  • -in kis-és nagybetűk megkülönböztetése
  • -iin kis-és nagybetűk megkülönböztetése
  • -cin kis-és nagybetűk megkülönböztetése
  • -notin kis-és nagybetűk megkülönböztetése nem egyezik
  • -inotin kis-és nagybetűk megkülönböztetése nem egyezik
  • -cnotin kis-és nagybetűk megkülönböztetése nem egyezik

 

 

$value = 'S-ATX-SQL02'

if ( $value -like '*SQL*')

Write-Output "Van benne"

}

 

 

Feltételek és kapcsolattal:

 

if ( ($age -gt 13) -and ($age -lt 55) )

 

Feltételek vagy kapcsolattal

 

if ( $age -le 13 -or $age -ge 55 )

 

 

NULL ellenőzés

 

if ( $null -eq $value )

 

 

Összetett if szerkezet

 

$discount = if ( $age -ge 55 ) {

     Get-SeniorDiscount

} elseif ( $age -le 13 ) {

     Get-ChildDiscount

} else {

    0.00

}

 

 

SWITCH szerkezet

 

$result = switch ( $day ) {

0 { 'Sunday' }

1 { 'Monday' }

2 { 'Tuesday' }

3 { 'Wednesday' }

4 { 'Thursday' }

5 { 'Friday' }

6 { 'Saturday' }

}

 

Ciklusok

 

For ciklus

 

for ($i=1; $i -le 10; $i++) {$i,"`n"}

 

 

While cilus

 

while(($inp = Read-Host -Prompt "Select a command") -ne "Q"){
    Write-Output   $inp
}

 

 

Foreach ciklus

 

#- User lista végigolvasása

$user = Get-ADUser -Filter *
foreach($u in $user) {
   $u.surname
}

 

#-     1-től 10-ig a számok négyzete

(1..10).ForEach({$_ * $_})

 

 

 

 

Minta

## --- PowerShell futtatási jog állítása
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Bypass Process
 
## --- Scipt file futtatás jog állítással
powershell.exe -ExecutionPolicy Bypass -File "c:\tmp\MyScript.ps1"
 
 
## --- Kiíratás
Write-Host "Hello World"
## vagy
Write-Output 'Hello world'
 
 
## process lista elemzés
Get-Process | Select-Object id, name -first 2 | format-list
 
###--------------------------------------
#- Tartalomban a „B” betűvel kezdődő elemek kiírása
$szavak="alma", "korte", "banan", "szilva", "szolo", "barack"
$i=0;
while ($i -lt $szavak.length) {
   if ($szavak[$i] -match "^B"){
      write-host ($szavak[$i], " B-vel kezdodik")
   }
 $i++
}
 
#- szótár tartalom kiírása (kulcs érték párban)
$szotar=@{kutya="dog";macska="cat";eger="mouse"}
write-host "Szavak:"
foreach ($magyar in $szotar.Keys){
     write-host ($magyar," ",$szotar[$magyar])
}
 
#-Paraméterben megadott fájlban levő mappaneveket hozzon létra egy paraméterben megadott útvonalon
function letrehoz { param($fajl,$utvonal); 
$mappak=Get-Content $fajl; 
foreach ($mappa in $mappak){ 
   New-Item –path „$utvonal\$mappa” –ItemType Directory 
} 
;
} 
 
 
#- Másoljuk a paraméterben megadott helyen lévő könyvtárat és tartalmát, a másik paraméterben megadott helyre
function masolo {
param($honnan,$hova); 
if (!test-path –path $hova)) {
    new-item –path $hova –type directory;
}; 
copy-item –path $honnan –destination $hova -recurse;
}
 
 
#- Aktuális könyvtár összes állományát az új helyre másolja
gci | % { Copy $_.FullName C:\NewDirectory\ }
 
 
 
#- Text fájl mérete sor szavak száma
param ($fajl) 
$sorok=0 
$sorok=get-content $fajl -filter "*.txt"|measure-object -line 
write-host ($sorok.Lines," sorbol all") 
$szavak=get-content $fajl -filter "*.txt"|measure-object -word 
write-host ($szavak.Words," szobol all")
$betuk=get-content $fajl -filter "*.txt"|measure-object -char 
write-host ($betuk.Characters," betubol all") 
 
 
#- adott idő múlva elindít egy alkalmazást 
param([int]$mennyi) 
$kezd=Get-Date 
do { $most=Get-Date } 
while (($most-$kezd).Seconds -lt $mennyi) write-host ("Eltelt",$mennyi,"masodperc.") 
invoke-item "c:\windows\notepad.exe"
 
 
 
#- Asztalra program indító ikon készítése 
$wshshell=new-object –comobject wscript.shell 
$lnk=$wshshell.createshortcut(„$home\asztal\Sajat.LNK”) ## shortcut referencia készítése 
$lnk.targetpath=$home                                   ## az útvonal beállítása
$lnk.save()
 
 
#- IE elindítás és egy web lap 
$ie=new-object –comobject internetexplorer.application ##elindít egy IE processt 
#Get-process                          ##látszik az elindított explorer process 
$ie|get-member                        ## milyen propertyk, metódusok 
$ie.visible=$true                     ## megjeleníti az IE ablakot 
$ie.gohome()                          ## megjeleniti a home lapot  
$ie.navigate("https://www.origo.hu/") ## navigál az url-re 
#$ie.quit()                             ## kilépés
 
 
 
 
###---------------------------------------
## ----- XML 10000 sor kiírás állományba szét dobálással
$ext = "xml"
$inputFile = "C:\Users\kecskemetil\Documents\munka\doksi\kimeneti_xml\minta.xml"
$rootName = "c:\Users\kecskemetil\Documents\munka\doksi\kimeneti_xml\tmp\xml_kim_"
$upperBound = 50MB
$sorszam = 1
 
$reader = new-object System.IO.StreamReader($inputFile)
$count = 1
$fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext)
while(($line = $reader.ReadLine()) -ne $null)  
{
    Add-Content -path $fileName -value $line
#    if((Get-ChildItem -path $fileName).Length -ge $upperBound)  ### minden sornál állomány méteret hasonlít össze ezért lassú!!!
    if ($sorszam -ge 10000)                                      ### helyesebb belső számláló ciklus változó figyelése
    {
        ++$count
        $fileName = "{0}{1}.{2}" -f ($rootName, $count, $ext)
    }
        ++$sorszam
}
 
$reader.Close()
 
##----- XML méretre darabolás
# gyorsabb
$from = "C:\Users\kecskemetil\Documents\munka\doksi\kimeneti_xml\utf_file_0531\ELECTRA_20210531_GOEMMO_1_EBE_F.xml"
$rootName = "c:\Users\kecskemetil\Documents\munka\doksi\kimeneti_xml\tmp\xml_kim_"
$ext = "xml"
$upperBound = 50MB
 
 
$fromFile = [io.file]::OpenRead($from)
$buff = new-object byte[] $upperBound
$count = $idx = 0
try {
    do {
        "Reading $upperBound"
        $count = $fromFile.Read($buff, 0, $buff.Length)
        if ($count -gt 0) {
            $to = "{0}.{1}.{2}" -f ($rootName, $idx, $ext)
            $toFile = [io.file]::OpenWrite($to)
            try {
                "Writing $count to $to"
                $tofile.Write($buff, 0, $count)
            } finally {
                $tofile.Close()
            }
        }
        $idx ++
    } while ($count -gt 0)
}
finally {
    $fromFile.Close()
}
 
#----------------------
 
while (1) {
  $wsh = New-Object -ComObject WScript.Shell
  $wsh.SendKeys('+{F15}')
  Start-Sleep -seconds 200
  Write-Output "Fenn vagyok"
}
#-------------------------
 

 

Ez a PowerShell megjelenésével megváltozott, azóta az az irány, hogy a teljes funkcionalitás PowerShellen keresztül érhető el, és ennek a gyakran használt részeit kivezetik a GUI-ra (de a háttérben az is tulajdonképpen PowerShell
parancsokat hív).

 

 

Funkciók használata

 

#-- definició

function Get-Sum {
foreach ($i in $Input)
{$Sum += $i}
$Sum
}
#-- meghívása
1..10 | Get-Sum

 

 

Állomány műveletek

 

CSV olvasás, írás

 

 

#- CSV file olvasás 1
$listOfRows = Import-Csv c:\temp\kl.csv
$listOfRows | ForEach-Object {
#Cast properties
$_.DateTime = [datetime]$_.DateTime
$_.Integer = [int]$_.Integer
#Output object
$_
}

 

#- CSV file olvasás 1

$listOfRows = Import-Csv c:\temp\kl.csv

$listOfRows | Select-Object String,
@{name="DateTime";expression={ [datetime]$_.DateTime }},
@{name="Integer";expression={ [int]$_.Integer }}

 

 

XML olvasás, írás

 

#- XML file olvasás
#-0
$xdoc = New-Object System.Xml.XmlDocument
$file = Resolve-Path("c:\temp\kl.xml")
$xdoc.load($file)
#-1
[xml] $xdoc = Get-Content "c:\temp\kl.xml"
# 2
$xdoc = [xml] (Get-Content "c:\temp\kl.xml")

#-- Objektum cimzéssel adat elérés
#Write-Output $xdoc.people
#Write-Output $xdoc.people.person
Write-Output $xdoc.people.person[0].name

#-- XPath címzéssel adat elérés
Write-Output $xdoc.SelectNodes("//people//person")
Write-Output $xdoc.SelectSingleNode("people//person[2]//age")
Write-Output $xdoc.SelectSingleNode("people//person[3]//@id")

 


#- XML írás
$xmlsettings = New-Object System.Xml.XmlWriterSettings
$xmlsettings.Indent = $true
$xmlsettings.IndentChars = " "
# Set the File Name Create The Document
$XmlWriter = [System.XML.XmlWriter]::Create("C:\temp\kl_ki.xml", $xmlsettings)
# Write the XML Declaration and set the XSL
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='style.xsl'")
# Start the Root Element
$xmlWriter.WriteStartElement("Root")
$xmlWriter.WriteStartElement("Object") # <-- Start <Object>
$xmlWriter.WriteElementString("Property1","öüóőúűáéí_ÖÜÓÚŐŰÁÉÍ_Value 1")
$xmlWriter.WriteElementString("Property2","Value 2")
$xmlWriter.WriteStartElement("SubObject") # <-- Start <SubObject>
$xmlWriter.WriteElementString("Property3","Value 3")
$xmlWriter.WriteEndElement() # <-- End <SubObject>
$xmlWriter.WriteEndElement() # <-- End <Object>
$xmlWriter.WriteEndElement() # <-- End <Root>
# End, Finalize and close the XML Document
$xmlWriter.WriteEndDocument()
$xmlWriter.Flush()
$xmlWriter.Close()

 

 

Regexp művelet (csere)

$text = @"
This is (a) sample
text, this is
a (sample text)
"@
##-- keresési maszk
$pattern = '\(.*?\)'
#-- új érték
$newvalue = 'test'
#-- csere meghívása operátorként
$text -replace $pattern, $newvalue

#-- csere meghívása metodusként
[regex]::Replace($text, $pattern, 'test')

#-- Select-String használatával
$m = Select-String -InputObject $text -Pattern $pattern -AllMatches
$m | Format-List *

 

 

SCP műveletek

 

#- Szolgáltatás elérésének ellenőrzése, modul telepítése

service ssh status

#Install-Module -Name Posh-SSH

 

 

Lehetőségek:

  1. Get-SCPFile     – Download files from remote servers.
  2. Get-SCPFolder – Download the Entire folder from remote server.
  3. Get-SCPItem    – Download both files or folders from the remote servers.
  4. Set-SCPFile      – Upload files into remote servers.
  5. Set-SCPFolder – Upload the Entire folder into the remote server.
  6. Set-SCPItem    – Can upload both files or folders to the remote servers.

 

#- Állomány letöltése

Get-SCPFile -ComputerName 'REMOTE_SERVER_IP' -Credential $credential -RemoteFile "REMOTE_SERVER_FILE_PATH" -LocalFile "LOCAL_FILE_PATH"

 

#- Könyvtár tartalom letőltése

Get-SCPFOlder -ComputerName 'REMOTE_SERVER_IP' -Credential $credential -RemoteFolder "REMOTE_SERVER_DIR_PATH" -LocalFolder 'LOCAL_DIR_PATH'

 


#$credential = Get-Credential
#Get-SCPFile -ComputerName  -Credential $credential -RemoteFile "iotarchlog/dmp/kivonat/utl_file_ebhtsym7" -LocalFile 'C:\temp'

Get-PowerShellServerFile -Server  -AuthMode password -User kivonat -Password kivonat -RemoteFile /iotarchlog/utl_file_ebhlt.xml -LocalFile C:\temp\tscp_est.txt

 

 

Adatbázis művelet

 

Adatbázishoz kapcsolódás

 

#- oracle sql select minta
Add-Type -Path "C:\Oracle\x86\12.1.0.2\ODP.NET\managed\common\Oracle.ManagedDataAccess.dll"
$reader = $false
# -----
$username   = "Lajos"
$password   = "jelszó**********"
$datasource = "intora.hu:1559/CMDB

$connectionstring = 'User Id=' + $username + ';Password=' + $password + ';Data Source=' + $datasource
$queryStatment = "Select 'Hello world!' Greeting from dual"

try{
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($connectionstring)
$con.Open()

$cmd = $con.CreateCommand()
$cmd.CommandType = "text"
$cmd.CommandText = $queryStatment

$reader = $cmd.ExecuteReader()

#-- kiolvasó ciklus

while ($reader.Read()) {
write-host -ForegroundColor Green $reader.GetString(0) $reader.GetString(1) $reader.GetString(2)
}

#-- csak egy érték kiolvasása
if ($reader.Read()) {
$result = $reader.GetString(0)
write-host -ForegroundColor Green $result
} else {
write-host -ForegroundColor Yellow $result "nothing returned"
}


#-- Kivétel kezelés
} catch {
Write-Error (“Database Exception: {0}`n{1}” -f `
$con.ConnectionString, $_.Exception.ToString())
} finally{
if ($con.State -eq ‘Open’) { $con.close() }
}

 

 

 

SQL Lekérdezés CSV filebe írás

 

 

 

 

Link:

http://www.powershellkonyv.hu/

https://adamtheautomator.com/powershell-parse-xml/

 


Néhány hasznos példa:


Könyvtára tartalmának másolása kihagyási maszkkal

Azt hiszem, a legjobb módja a Get-ChildItem és a cső használata a Copy-Item parancsban.


$source = 'd:\t1'                ## Forrás

$dest = 'd:\t2'                  ## Cél

$exclude = @('*.pdb','*.config') ## Kihagyás

Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}


Alapvetően az, ami itt történik, az, hogy az érvényes fájlokat egymás után végigmásolja, majd átmásolja az új útvonalra. A végén a 'Join-Path' utasítás van, hogy a könyvtárak a fájlokon történő másolás közben is megmaradjanak.

Ez a rész a célkönyvtárat veszi, és a forrásútvonal után csatlakozik a könyvtárhoz.


DATABASE LINK


Egy séma objektum ahhoz, hogy egy másik adatbázis objektumaihoz lehessen hozzáférni. A
másik adatbázisnak is Oracle-nek kell lenni! A hivatkozáshoz @adatbázis_link utótagot kell
használni. (SELECT, INSERT, UPDATE, DELETE, LOCK TABLE)


Létrehozás szintaxisa:
CREATE [SHARED] [PUBLIC]
 DATABASE LINK dblink [CONNECT TO {CURRENT_USER | user
IDENTIFIED BY password [dblink_authentication] } |
dblink_authentication ]
[USING 'connect_string'];

SHARED: egy olyan nyilvános adatbázis link létrehozásához, amelyet meglehet osztani
több felhasználó között.

PUBLIC: egy nyilvános adatbázis link létrehozásához. Ha ez nem szerepel, akkor csak
a létrehozó láthatja ezt a kapcsolatot.

CONNECT TO: a kapcsolat eléréséhez kell.

CURRENT USER: az aktuális felhasználó lesz a létrehozó, globális felhasználó kell
legyen.

USING 'connect string ' : szolgáltatás név
SY N O N YM

Létrehozás szintaxisa:
CREATE [OR REPLACE] [PUBLIC]
SYNONYM [schema.]synonym FOR
[schema.]object [@dblink];

S E Q U E N C E
Létrehozás szintaxisa:
CREATE SEQUENCE [<schema>.]<sequence_name>
[INCREMENT BY <integer>]
[START WITH <integer>]
[MAXVALUE <integer> | NOMAXVALUE]
[MINVALUE <integer> | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE <#> | NOCACHE]
[ORDER | NOORDER];


Használat:
<sequence_name>.nextval
----
ALL_DB_LINKS Lists all database links accessible to the connected user.
USER_DB_LINKS Lists all database links owned by the connected user.
----
CREATE PUBLIC DATABASE LINK remote 
   USING 'remote'; 
UPDATE employees@remote
   SET salary=salary*1.1
   WHERE last_name = 'Baer';

----   
CREATE DATABASE LINK local 
   CONNECT TO hr IDENTIFIED BY password
   USING 'local';
SELECT * FROM employees@local;


----
CREATE DATABASE LINK remote.us.example.com
   CONNECT TO CURRENT_USER
   USING 'remote';
CREATE SYNONYM emp_table 


----
create public database link 
  mylink
connect to 
  remote_username
identified by 
  mypassword 
using 'myserver:1521/MYSID';
----



Megjegyzések