2013-03-05 4 views
3

저는 파워 쉘 스크립트를 몇 개 만들었고 Iv'e는 주로 데이터베이스를 쿼리하거나 .sql 파일을 입력하는 방법으로 Invoke-Sqlcmd를 사용했습니다. 접근과 살해 과정을 포함하는 것에 약간의 문제가있었습니다. 나는 그런Invoke-SQLCMD, SMO 또는 SQLConnection을 사용하는 것이 더 좋습니다

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) 
로 erorrs을 받기 시작 때까지 잘 실행

Iv'e이 과정

$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance 
$SQlSvr1.KillAllprocesses($databaseMain) 

을 죽일 SMO를 사용하여 다음 내 프로세스를 실행하기 위해 호출-SQLCMD를 사용하고, 그것이

그리고 내가 프로세스를 죽이지 않으면

데이터베이스가 i이기 때문에 독점적 인 액세스를 얻을 수 없습니다. n 사용.

그래서 내 질문에, 재생 또는 난 내이 SMO 또는 SQLConnection을 모든 것을 변경하거나하지 않는 안정적인 연결을 유지하는 최선의 방법 것입니다 호출-SQLCMD를 사용하여 단일 연결을 만들 수있는 방법이 있는지, 하지만 invoke를 사용할 때마다 kill/requeue.

먼저 해당 스크립트를 백업하십시오. try/catch 내의 패치 스크립트를 사용하여 데이터베이스를 백업, 실행 및 업데이트하는 경우 kill 프로세스를 제외하고 스크립트가 catch 내에 백업 할 오류가 있으면 모두 Invoke-Sqlcmd를 사용합니다.

답변

2

세 가지 모두 용도가 있습니다.

더러운 쿼리 나 파일 매개 변수를 전달할 수있는 다른 파일에 이미 존재하는 쿼리의 경우 invoke-sqlcmd은 빠른 &입니다. 나는 당신이 그 질문을 촉발 시켰던 오류를 다룰 필요가 없었습니다. 나는 망치를하지 않도록 - 매개 변수가있는 쿼리, 예를 들어 - -

나는 좀 더 안전을 필요로 할 때 SQLConnection & SQLCommand를 사용하거나 더 지속적인 연결을 유지 보수 할 - 내가 연속으로 빠르게 쿼리를 많이 실행하는거야 짧은 기간에 많은 연결을 가진 서버.

SMO는 정말 사용하지 않은,하지만 난 "시스템"수준에서 관리 할 것을 예약 것 - 작업, 백업 등 당신 SMO와 거의 아무것도 할 수 - 웨인 셰필드가 & 추가의 예를 가지고 있었다 지난 달 his blog에 테이블 & 저장 프로 시저를 변경합니다 (내 사무실 방화벽이 알 수없는 이유로 차단하므로 게시물에 연결할 수 없습니다). 일반적으로 T-SQL 쿼리를 통해이 작업을 수행 할 수 있지만 두 가지 방법으로 모두 작동합니다. SMO를 사용하여 이점을 확인해야합니다.

+0

내가 작업하고있는 것의 90 %는 패치 스크립트 파일을 기반으로하므로 invoke-sqlcmd를 사용하면이 사용에 가장 적합할까요? – Lewis

+0

미리 작성된 스크립트 파일을 서버에 던지기 만하면,'invoke-sqlcmd'로 시작 하겠지요. 당신은 아마 SMO와 함께 할 수도 있지만, 제가 말했듯이, 나는 경험이 없습니다. – alroc

관련 문제