Na samym początku należy zainicjalizować moduł.
Load-OracleAssemblyes 'path_to_oracle_dataacces_dir\Oracle.DataAccess.dll'Będziemy mogli przeglądać hasła oraz przeglądać połączenia w TNS:
$secPass, $pass = Get-Password Get-TnsOracleConnectionString | Out-GridViewMożna pobrać połączenie z app.configu oraz sprawdzić wersję servera:
$connectStr = Get-ConfigConnectionString 'path_to_app_dir\App.config' DatabaseNr1 Get-OracleServerVersion $connectStr
A wywoływanie zapytania SQL jest bardzo proste. Poniżej jest przykład zapisania do csv wszystkich obiektów w bazie danych, które stworzyliśmy dla schematu 'my':
$conn = new-OracleConnection $connectStr $conn.Open() $dbObj =Get-OracleDataTable -conn $conn -sql "select * from all_objects where owner like 'my' order by last_ddl_time desc" $conn.Close() $dbObj | Export-Csv -Path 'LastChangedObjects.csv'
Oczywiście można wywołać polecenie z pliku, gdzie znajduję się zapytanie sql:
Get-OracleDataTable -file file.sql -conn $conn
Gdy będziemy przeglądać rekordy w bardzo dużej tabeli to będziemy mogli uzyskać wyjątek z brakiem pamięci:
Błąd powyższy odnosi się do braku pamięci:
#out-lineoutput : Exception of type 'System.OutOfMemoryException' was thrown.
# + CategoryInfo : NotSpecified: (:) [out-lineoutput], OutOfMemoryException
# + FullyQualifiedErrorId : System.OutOfMemoryException,Microsoft.PowerShell.Commands.OutLineOutputCommand
Wtedy zamiast ładować wszystko do adaptera to można odczytywać z DataReader'a:
$reader = Get-OracleDataReader -conn $conn -sql "select * from all_objects" while($reader.Reader()) { # operacja na reader }
Dodatkową funkcjonalnością jest porównywanie tabel dla różnych baz danych. Poniżej jest przykład sprawdzenia czy na 2 bazach są takie same tabele z takim samym właścicielem (owner) i z taką samą ilością rekordów:
$connStr1 = 'Data Source=...' $connStr2 = 'Data Source=...' $conn1 = New-OracleConnection $connStr1 $conn2 = New-OracleConnection $connStr2 $allTables1 = Get-OracleSystemTables -conn $conn1 -SystemTable ALL_TABLES $allTables2 = Get-OracleSystemTables -conn $conn2 -SystemTable ALL_TABLES Compare-Object ($allTables1 | select TABLE_NAME,OWNER,NUM_ROWS) ($allTables2 | select TABLE_NAME,OWNER,NUM_ROWS) -IncludeEqual
Brak komentarzy:
Prześlij komentarz