반응형
데이터베이스 연결 테스트
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
반응형
'programing' 카테고리의 다른 글
| C에서는 언제 asserts를 사용해야 합니까? (0) | 2023.07.30 |
|---|---|
| Kotlin에서 Spring 매개변수화된 유형 참조 인스턴스(instance) 작성 (0) | 2023.07.30 |
| 윈도우즈 7의 PowerShell: 일반 사용자를 위한 실행 정책 설정 (0) | 2023.07.30 |
| NSNumber를 사용하여 통화 입력 형식 지정스위프트의 포맷터 (0) | 2023.07.30 |
| 부트스트랩 4의 class="mb-0"은 무엇입니까? (0) | 2023.07.30 |