programing

데이터베이스 연결 테스트

madecode 2023. 7. 30. 22:44
반응형

데이터베이스 연결 테스트

PowerShell을 사용하여 SQL 어셈블리를 로드하지 않고 클라이언트에서 MS SQL Server 인스턴스에 대한 연결을 쉽게 테스트할 수 있는 방법이 있습니까?

MS SQL: 서버 이름\인스턴스 포트 1433

일반 클라이언트에서 PowerShell을 사용하여 서버에 대한 연결을 테스트하려면 어떻게 해야 합니까?

클래스를 사용하여 연결을 테스트합니다.SQL 어셈블리를 로드할 필요가 없습니다.

도우미 기능:

function Test-SQLConnection
{    
    [OutputType([bool])]
    Param
    (
        [Parameter(Mandatory=$true,
                    ValueFromPipelineByPropertyName=$true,
                    Position=0)]
        $ConnectionString
    )
    try
    {
        $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $ConnectionString;
        $sqlConnection.Open();
        $sqlConnection.Close();

        return $true;
    }
    catch
    {
        return $false;
    }
}

사용 예:

Test-SQLConnection "Data Source=localhost;database=myDB;User ID=myUser;Password=myPassword;"

이는 기본적으로 Martin의 답변과 동일하며 매개 변수에서 연결 문자열만 빌드되고 연결에 걸리는 시간을 측정합니다.

예:

Test-SQLDatabase -Server SQLServer -Database SomeDB -Username SQLUser -Password password

또는

Test-SQLDatabase -Server Server1\SQLExpress -Database SomeDB -UseWindowsAuthentication

.

function Test-SQLDatabase 
{
    param( 
    [Parameter(Position=0, Mandatory=$True, ValueFromPipeline=$True)] [string] $Server,
    [Parameter(Position=1, Mandatory=$True)] [string] $Database,
    [Parameter(Position=2, Mandatory=$True, ParameterSetName="SQLAuth")] [string] $Username,
    [Parameter(Position=3, Mandatory=$True, ParameterSetName="SQLAuth")] [string] $Password,
    [Parameter(Position=2, Mandatory=$True, ParameterSetName="WindowsAuth")] [switch] $UseWindowsAuthentication
    )

    # connect to the database, then immediatly close the connection. If an exception occurrs it indicates the conneciton was not successful. 
    process { 
        $dbConnection = New-Object System.Data.SqlClient.SqlConnection
        if (!$UseWindowsAuthentication) {
            $dbConnection.ConnectionString = "Data Source=$Server; uid=$Username; pwd=$Password; Database=$Database;Integrated Security=False"
            $authentication = "SQL ($Username)"
        }
        else {
            $dbConnection.ConnectionString = "Data Source=$Server; Database=$Database;Integrated Security=True;"
            $authentication = "Windows ($env:USERNAME)"
        }
        try {
            $connectionTime = measure-command {$dbConnection.Open()}
            $Result = @{
                Connection = "Successful"
                ElapsedTime = $connectionTime.TotalSeconds
                Server = $Server
                Database = $Database
                User = $authentication}
        }
        # exceptions will be raised if the database connection failed.
        catch {
                $Result = @{
                Connection = "Failed"
                ElapsedTime = $connectionTime.TotalSeconds
                Server = $Server
                Database = $Database
                User = $authentication}
        }
        Finally{
            # close the database connection
            $dbConnection.Close()
            #return the results as an object
            $outputObject = New-Object -Property $Result -TypeName psobject
            write-output $outputObject 
        }
    }
}

이는 실제로 테스트하려는 항목에 따라 다릅니다.원격 호스트의 포트에 연결할 수 있는지 확인하려는 경우 다음과 같은 방법을 사용할 수 있습니다.

$server = 'servername'
$port   = 1433

$tcp = New-Object Net.Sockets.TcpClient
if ([void]$tcp.Connect($server, $port)) {
  'connected'
} else {
  'not connected'
}
$tcp.Dispose()

SQL Server 인스턴스에 연결할 수 있는지 확인하려면 다음과 같은 작업이 필요합니다.

$dbhost = 'servername'
$dbinst = 'instance'
$dbname = 'master'

$username = ...
$password = ...

$cs = "Server=$dbhost\$dbinst;Database=$dbname;User Id=$username;" +
      "Password=$password;"

$cn = New-Object -COM 'ADODB.Connection'
$cn.ConnectionString = $cs
try {
  $cn.Open()
  if ($cn.State -eq 1) {
    'connected'
    $cn.Close()
  } else {
    'not connected'
  }
} catch {
  'not connected'
}

연결 상태 열거를 사용하여 데이터베이스 연결 상태를 확인했습니다.

이 열거형에 대한 설명서는 여기에서 찾을 수 있습니다.

다음을 사용하여 액세스할 수 있습니다.[System.Data.ConnectionState]::Open

기타 옵션은 다음과 같습니다.Broken,Closed,Connecting,Executing,그리고.Fetching.

예:
class Database
{
    [System.Data.SqlClient.SqlConnection]$Connection

    [void]Connect
    {
        $sqlConnection = New-Object System.Data.SqlClient.SqlConnection
        $sqlConnection.ConnectionString = $connectionString
        $sqlConnection.Open()

        $this.Connection = $sqlConnection
    }
    
    [bool]IsConnected
    {
        return $this.Connection.State -eq [System.Data.ConnectionState]::Open
    }
}

언급URL : https://stackoverflow.com/questions/29229109/test-database-connectivity

반응형