2014-07-10 79 views
7

Tôi đang cố gắng đăng nhập vào DB Oracle bằng PowerShell và chạy tập lệnh có tên "C: \ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql", khi tôi thực thi PS không có gì xảy ra.Cách chạy tập lệnh SQL Plus trong PowerShell

Đây là những gì tôi có.

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


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

Tôi cũng đã thử điều này.

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

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

Tôi đã thử điều này.

& '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' 

tôi nhận được lỗi "&:. Mô đun 'sqlplus' không thể được nạp Để biết thêm thông tin, hãy chạy 'Import-Module sqlplus' Tại dòng:. 5 char: 3 + & $ mydata Invoke-SqlPlus -inputfile "@C: \ Users \ Administrator \ Desktop \ oracle \ Orac ... + ~~~~~~~ + CategoryInfo: ObjectNotFound: (sqlplus \ sql/manager @ ORCL: String) [] , ParentContainsErrorRecordException + FullyQualifiedErrorId: CouldNotAutoLoadModule "

+0

Có bạn đã xem "Cách chạy exe trong PowerShell với các tham số có dấu cách và dấu ngoặc kép", http://stackoverflow.com/questions/1673967/how-to-run-exe-in-powershell-with-parame ters-with-dấu cách và dấu ngoặc kép. Câu trả lời của Keith Hill làm việc cho tôi. –

+0

Hey, chỉ trong trường hợp bạn vẫn muốn chạy SQL * Plus trên PowerShell, hãy xem Module này: https://www.powershellgallery.com/packages/JS.OracleDatabase –

Trả lời

9

Tôi sử dụng toán tử cuộc gọi, &, như Keith Hill đã đề xuất với câu hỏi, How to run an EXE file in PowerShell with parameters with spaces and quotes.

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

Tôi đã đặt tên người dùng, mật khẩu trong dấu ngoặc kép do dấu cách.

Để bắt đầu một kịch bản, tôi thêm tham số khác như sau:

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

Nếu bạn nhận được lỗi ORA-12154, và bạn biết rằng những người dùng khác có kết nối thành lập (trong đó hàm ý rằng người nghe cơ sở dữ liệu đang chạy đúng cách); Sau đó tôi sẽ kiểm tra xem SQL * Plus có thể tìm thấy tệp tnsname của tôi không.

nhiệm vụ đầu tiên của tôi sẽ là để xem nếu tôi có thể tnsping như sau trong Windows cmd.exe:

tnsping orcl 

Nó sẽ xác nhận rằng một kết nối có thể (hoặc không thể được thiết lập).

Nếu không thể, tôi sẽ kiểm tra xem biến môi trường, ORACLE_HOME, có được đặt hay không. SQL * Plus sử dụng công cụ này để tìm tệp tnsname.ora.

Nếu nó không được thiết lập, tôi sẽ thực hiện tuyên bố này trong PowerShell (thành lập môi trường này biến):

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

Tiếp theo, tôi sẽ thử lại để tnsping (được xác định ở trên).

Sau khi thành công, tôi sẽ thử thực thi lại lệnh chạy lệnh ở trên.

+0

Tôi nhận được lỗi này, "L ERI: ORA -12154: TNS: không thể giải quyết mã định danh kết nối được chỉ định ", khi tôi sử dụng," & 'C: \ app \ Quản trị viên \ product \ 11.2.0 \ client_1 \ BIN \ sqlplus.exe' 'hệ thống/người quản lý @ ORCL là sysdba '' @C: \ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql '". – user3826435

+0

Bạn đã đặt biến môi trường ORACLE_HOME của mình chưa? Bạn có thể kết nối trong chế độ Windows cmd.exe (ví dụ: bạn có thể tnsping orcl) không? –

+0

Tôi có để lại "[Môi trường] :: SetEnvironmentVariable (" ORACLE_HOME "," oracle_home_path "," Người dùng ")" nguyên trạng hoặc tôi có cần thay đổi không? Nếu tôi thay đổi nó thì mỗi người nên thay đổi điều gì? – user3826435

1

Trong lệnh Windows PowerShell, mã không yêu cầu cài đặt biến hoặc bất kỳ thứ gì lạ mắt.Chỉ cần làm điều này:

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

0

tôi sử dụng này:

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

Bạn có thể sử dụng .NET Oracle library DLL, chỉ cần đảm bảo bạn có các tập tin DLL cần thiết trong thư mục 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() 
} 
Các vấn đề liên quan