2014-07-10 37 views
7

Sto tentando di accedere al DB Oracle mediante PowerShell ed eseguire uno script denominato "C: \ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql", quando eseguo il PS non succede nulla.Come eseguire uno script SQL Plus in PowerShell

Ecco quello che ho.

$adminLogon = "sys as sysdba/[email protected]" 
$logon = "sqlplus\sql/[email protected]" 


$mydata = Invoke-SqlPlus -inputfile  "@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql" $logon 

Ho provato anche questo.

$database = "ORCL"; 
$user = "sys as sysdba"; 
$pw = "manager"; 

sqlplus.exe -d $database -U $user -P $pw -I "@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql" 

Ho provato questo.

& 'C:\app\Administrator\product\11.2.0\client_1\BIN\sqlplus.exe' 'QE-JDBC-1/[email protected] sys as sysdba' '@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql' 

ottengo l'errore, "&:. Il modulo 'sqlplus' non può essere caricato Per ulteriori informazioni, eseguire 'Import-Module sqlplus' alla riga:. 5 char: 3 + & $ mydata Invoke-SqlPlus -inputfile "@C: \ Users \ Administrator \ Desktop \ oracle \ Orac ... + ~~~~~~~ + CategoryInfo: ObjectNotFound: (sqlplus \ sql/manager @ ORCL: String) [] , ParentContainsErrorRecordException + FullyQualifiedErrorId: CouldNotAutoLoadModule "

+0

Hanno hai guardato "Come eseguire exe in PowerShell con parametri con spazi e virgolette", http://stackoverflow.com/questions/1673967/how-to-run-exe-in-powershell-with-parame TERS-con-spazi-e-citazioni. La risposta di Keith Hill funziona per me. –

+0

Ehi, nel caso in cui tu voglia ancora eseguire SQL * Plus su PowerShell, dai un'occhiata a questo modulo: https://www.powershellgallery.com/packages/JS.OracleDatabase –

risposta

9

Io uso l'operatore di chiamata, &, come suggerito da Keith Hill con la domanda, How to run an EXE file in PowerShell with parameters with spaces and quotes.

& 'path\sqlplus.exe' 'system/[email protected] as sysdba' 

Ho inserito il nome utente, la password tra virgolette a causa degli spazi.

Per avviare uno script, aggiungo un altro parametro come segue:

& 'path\sqlplus.exe' 'system/[email protected] as sysdba' '@my_script.sql' 

Se si riceve l'errore ORA-12154, e voi sapete che gli altri utenti hanno connessioni stabilite (il che implica che l'ascoltatore di database sta funzionando correttamente ); Vorrei quindi esaminare se SQL * Plus può trovare il mio file tnsname.

Il mio primo compito sarebbe quello di vedere se riesco a tnsping come segue in Windows cmd.exe:

tnsping orcl 

Si confermerà che una connessione può (o non può essere stabilita).

Se non è possibile, vorrei verificare se la variabile di ambiente, ORACLE_HOME, è impostata. SQL * Plus lo utilizza per trovare il file tnsname.ora.

Se non è impostata, vorrei eseguire questa istruzione in PowerShell (per stabilire questo ambiente variabile):

[Environment]::SetEnvironmentVariable("ORACLE_HOME", "C:\app\Administrator\product\11.2.0\client_1" , "User") 

Avanti, vorrei riprovare a tnsping (sopra identificato).

Una volta eseguita correttamente, vorrei riprovare a eseguire il comando di esecuzione dello script sopra.

+0

Ho ricevuto questo errore, "ERRORE: ORA -12154: TNS: impossibile risolvere l'identificatore di connessione specificato ", quando utilizzo", & 'C: \ app \ Administrator \ product \ 11.2.0 \ client_1 \ BIN \ sqlplus.exe' 'system/manager @ ORCL come sysdba '' @C: \ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql '". – user3826435

+0

Hai impostato la tua variabile d'ambiente ORACLE_HOME? È possibile connettersi in modalità cmd.exe di Windows (ad esempio, è possibile eseguire il comando orcl)? –

+0

Lascio "[Ambiente] :: SetEnvironmentVariable (" ORACLE_HOME "," oracle_home_path "," Utente ")" così com'è o devo cambiarlo? Se lo cambio, a cosa dovrebbe essere cambiato ciascuno? – user3826435

1

Nel prompt dei comandi di Windows PowerShell il codice non richiede impostazioni variabili o nulla di particolare.Basta fare questo:

sqlplus ElBankoUser\SupaSecretyPass "@C:\Users\ElBankoUser\Documents\MaFancySckrp.sql"

0

Io uso questo:

$cmd = "cmd.exe" 
$args = ("/c sqlplus {0}/{1}@{2}:{3}/{4} @{5} {6}" -f $userName, $password, $tnsAlias, $port, $dbInstance, $sqlScript, $outputFileName) 
&$cmd $args 
0

È possibile utilizzare .NET Oracle library DLL, basta assicurarsi di avere il file DLL richiesto nella cartella lib

Add-Type -Path "lib\Oracle.ManagedDataAccess.dll" 

$query = "select 1 as Col1, 2 as Col2, 3 as Col3 from dual 
      union 
      select 4 as Col1, 5 as Col2, 6 as Col3 from dual 
      union 
      select 7 as Col1, 8 as Col2, 9 as Col3 from dual" 

$cn = New-Object Oracle.ManagedDataAccess.Client.OracleConnection -ArgumentList "TNS-ConnectionString-Here" 
$cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand -ArgumentList $query 

$cmd.Connection = $cn 

try { 
    $cn.Open() 

    $reader = $cmd.ExecuteReader() 

    while ($reader.Read()) { 
     $col1 = $reader["Col1"] 
     $col2 = $reader["Col2"] 
     $col3 = $reader["Col3"] 

     Write-Host $col1, $col2, $col3 
    } 

} catch { 
    Write-Error $_.Exception.Message 
} finally { 
    $cmd.Dispose() 
    $cn.Dispose() 
} 
Problemi correlati