programing

PowerShell에서 SQL Plus 스크립트를 실행하는 방법

itmemos 2023. 9. 19. 20:51
반응형

PowerShell에서 SQL Plus 스크립트를 실행하는 방법

PowerShell을 사용하여 Oracle DB에 로그인하고 "C:" 스크립트를 실행하려고 합니다.\Users\Administrator\Desktop\oracle\OracleCleanTest.sql", PS를 실행하면 아무 일도 일어나지 않습니다.

이것이 제가 가진 것입니다.

$adminLogon = "sys as sysdba/manager@ORCL"
$logon = "sqlplus\sql/manager@ORCL"


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

저도 이거 먹어봤어요.

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

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

이거 먹어봤어요.

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

"& : 모듈 'sqlplus'를 로드할 수 없습니다.자세한 내용을 보려면 'Import-Module sqlplus'를 실행하십시오.행:5 char:3 + & $mydata Invoke-SqlPlus - 입력 파일 "@C:\Users\Administrator\Desktop\Oracle\Orac...+ ~~~~ + 카테고리정보 : ObjectNotFound: (sqlplus\sql/manager@)ORCL:String) [], 상위에 오류 레코드 예외 + FullyQualifiedErrorId : Can't AutoLoadModule"이 포함되어 있습니다.

콜 교환원을 이용합니다&, Keith Hill이 제안한 "PowerShell에서 공백과 따옴표가 있는 매개변수를 사용하여 EXE 파일을 실행하는 방법"입니다.

& 'path\sqlplus.exe' 'system/password@dbase as sysdba'

공백 때문에 사용자 이름과 비밀번호를 따옴표에 넣었습니다.

스크립트를 시작하려면 다음과 같이 다른 매개 변수를 추가합니다.

 & 'path\sqlplus.exe' 'system/password@dbase as sysdba' '@my_script.sql'

ORA-12154 오류를 수신하고 있고 다른 사용자가 연결을 설정한 것을 알고 있는 경우(데이터베이스 수신기가 제대로 실행되고 있음을 의미함),그런 다음 SQL*Plus에서 제 tnsname 파일을 찾을 수 있는지 검토하겠습니다.

저의 첫번째 과제는 윈도우 cmd에서 다음과 같이 tnsping이 가능한지 확인하는 것입니다.exe:

tnsping orcl

연결을 설정할 수 있거나 설정할 수 없음을 확인합니다.

만약 그렇지 않다면 환경 변수인 ORACLE_HOME이 설정되어 있는지 확인하겠습니다.SQL*Plus는 이를 사용하여 tnsname.또는 파일을 찾습니다.

설정되지 않으면 PowerShell에서 다음 문장을 실행합니다(이 환경 변수를 설정하기 위해).

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

다음으로 tnsping(위에서 확인)을 시도해 보겠습니다.

성공하면 위의 스크립트 실행 명령을 다시 실행해 보겠습니다.

나는 이것을(를)

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

Windows PowerShell 명령 프롬프트에서 코드는 가변 설정이나 화려한 것을 요구하지 않습니다.그냥 이렇게 하면 됩니다.

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

사용하시면 됩니다.NET 오라클 라이브러리 DLL 아래에 필요한 DLL 파일이 있는지 확인하십시오.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()
}

이걸 왜 안 써요?

sqlplus -s$admin로그인 "@C:\Users\Administrator\Desktop\Oracle\OracleCleanTest.sql"

-s는 sqlplus 배너를 억제합니다.

언급URL : https://stackoverflow.com/questions/24682465/how-to-run-a-sql-plus-script-in-powershell

반응형