微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell 循环,带有 sqlplus 连接字符串

如何解决Powershell 循环,带有 sqlplus 连接字符串

我想创建一个 power shell 脚本,它使用 sqlplus 循环连接字符串,但我不确定如何在 power shell 中执行此操作。

类似:

begin
  for i in 1..10
  loop
    sqlplus .../...@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=...)(HOST=...)(PORT=...)))(CONNECT_DATA=(SID=...)))
    --- wait for response then move foreward
  end loop;
end

这个想法是我想测试连接字符串中不同的 connection_timeout 值,以确定哪个值更稳定。

我在网上找到了这段 powershell 代码,但我不知道如何根据我的要求调整它:

$lines = Get-Content 'c:\firstsecondnames.txt'
$DBs = "192.168.1.1"
$DB = "DBA"
$ConnectionTimeout = 90
$QueryTimeout = 90

foreach ($line in $lines) {
    $vala  = $line.Split(',')[0]
    $valb  = $line.Split(',')[1]
    #DB query
    $Query = "select ValC from dbo.PROCESSED_INTERCHANGES where Firstname = '$vala' and middlename = '$valb'"
    $conn=new-object System.Data.sqlClient.sqlConnection
    $ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $DBs,$DB,$ConnectionTimeout
    $conn.ConnectionString=$ConnectionString
    $conn.open()
    $cmd=new-object system.Data.sqlClient.sqlCommand($Query,$conn)
    $cmd.CommandTimeout=$QueryTimeout
    $ds=New-Object system.Data.DataSet
    $da=New-Object system.Data.sqlClient.sqlDataAdapter($cmd)
    [void]$da.fill($ds)
    $conn.Close()
    $conn.dispose()
    foreach ($valC in $ds.tables[0].rows.ValC) {
        $fullname = $vala + $valb + $valC
      Write-Host $fullname
    }

} 

解决方法

如果您只想测试各种 connection_timeout 值,您应该遍历这些值,而不是遍历一组用户名和中间名。

像这样:

$DBs = "192.168.1.1"
$DB  = "DBA"
# insert working values here. We don't test these,we only try out different ConnectionTimeouts
$vala  = 'FirstName'
$valb  = 'MiddleName'
$QueryTimeout = 90
# try a range of connection timeout values. For demo here 10,20 .. 200 + 0
$ConnectionTimeout = for ($i = 10; $i -le 200; $i += 10) { $i }
# lastly,add 'Infinite' value 0
$ConnectionTimeout += 0

$ConnectionTimeout | ForEach-Object {
    # show what timeout value is now in effect
    Write-Host $(switch ($_){
        0       { "Attempting Infinite timeout $_" ; break}
        30      { "Attempting Default timeout $_"  ; break }
        default { "Attempting timeout $_" }
    }) -ForegroundColor Cyan
    #DB query
    $Query = "select ValC from dbo.PROCESSED_INTERCHANGES where Firstname = '$vala' and middlename = '$valb'"
    $conn = New-Object System.Data.SqlClient.SQLConnection
    $ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $DBs,$DB,$_
    $conn.ConnectionString = $ConnectionString
    $conn.Open()
    $cmd = New-Object system.Data.SqlClient.SqlCommand($Query,$conn)
    $cmd.CommandTimeout = $QueryTimeout
    $ds = New-Object system.Data.DataSet
    $da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
    [void]$da.fill($ds)
    foreach ($valC in $ds.tables[0].rows.ValC) {
        $fullname = $vala + $valb + $valC
        Write-Host $fullname
    }
    # clean-up
    $conn.Close()
    $conn.Dispose()
    $ds.Dispose()
    $da.Dispose()
} 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。