내 winform 애플리케이션에서 해당 데이터베이스 백업 및 복원 스크립트를 어떻게 실행합니까?

StackOverflow https://stackoverflow.com/questions/431033

문제

저는 Sqlserver 2005 데이터베이스를 사용하는 소규모 비즈니스 응용 프로그램을 개발 중입니다.

플랫폼:.Net 프레임워크 3.5;신청 유형:윈도우 응용프로그램;언어:씨#

질문:

내 애플리케이션에서 백업을 가져와 복원해야 합니다.SSME에서 생성된 필수 스크립트가 있습니다.

내 winform 애플리케이션에서 해당 특정 스크립트(또는 스크립트)를 어떻게 실행합니까?

도움이 되었습니까?

해결책

쿼리를 실행하는 것과 같은 방식 으로이 스크립트를 실행할 수 있으며 복원하려는 데이터베이스에 연결하지 않으면 마스터에 연결합니다.

다른 팁

응용 프로그램이 실행중인 시스템에 SQL Server 클라이언트 도구가 설치된 경우 사용할 수 있습니다. SQLCMD.

프로그래밍 방식으로하고 싶다면 사용할 수 있습니다. SMO

지도 시간

데이터베이스 (ADO I PRESUME?)에 대한 연결을 사용 하고이 연결을 통해 일반 TSQL 지침을 서버로 보내십시오.

백업을 위해 xp_sqlmaint를 사용하고 싶을 수도 있습니다.오래된 백업을 제거하는 편리한 기능이 있으며 멋진 로그 파일을 생성합니다.다음과 같은 방법으로 호출할 수 있습니다.EXECUTE master.dbo.xp_sqlmaint N''-S "[서버 이름]" [ServerLogonDetails] -D [데이터베이스 이름] -Rpt "[BackupArchive]\BackupLog.txt" [RptExpirationSchedule] -CkDB -BkUpDB "[BackupArchive]" -BkUpMedia DISK [Bak만료 일정]''

([대괄호]를 적절한 값으로 바꾸십시오).

또한 백업을 위해 트랜잭션 로그를 백업해야 할 수도 있습니다.다음과 같은 것 :IF DATABASEPROPERTYEX((SELECT db_name(dbid) FROM master..sysprocesses WHERE spid=@@SPID), ''복구'') <> ''SIMPLE'' EXECUTE master.dbo.xp_sqlmaint N'' -S "[ServerName] " [ServerLogonDetails] -D [데이터베이스 이름] -Rpt "[BackupArchive]\BackupLog_TRN.txt" [RptExpirationSchedule] -BkUpLog "[BackupArchive]" -BkExt TRN -BkUpMedia DISK [BakExpirationSchedule]''

사용 중인 실제 명령을 데이터베이스 테이블(명령당 1행)에 저장하고 일종의 템플릿 대체 구성표를 사용하여 구성 가능한 값을 처리하는 것이 좋습니다.이렇게 하면 새 코드를 배포할 필요 없이 명령을 쉽게 변경할 수 있습니다.

복원을 위해서는 내부 SQL Server 연결을 제외한 모든 연결을 종료해야 합니다.기본적으로 "exec sp_who" 및 dbname과 일치하고 "백그라운드"가 아닌 상태를 가진 행과 "SIGNAL HANDLER", "LOCK MONITOR", "LAZY WRITER" 중 하나가 아닌 cmd의 결과를 가져옵니다. , "LOG WRITER", "CHECKPOINT SLEEP"은 spid를 "kill"합니다(예:ExecuteNonQuery("kill 1283")).

KILL 명령의 예외를 트랩하고 무시하는 것이 좋습니다.그들에 대해 당신이 할 수 있는 일은 아무것도 없습니다.기존 연결 때문에 복원을 진행할 수 없으면 오류가 발생합니다.

연결 끊김으로 인한 위험 중 하나는 ADO의 연결 풀입니다(Windows 앱보다 asp.net 앱에 더 많음).ADO는 연결 풀에서 가져온 연결이 유효하다고 가정합니다.그리고 끊어진 연결에는 잘 반응하지 않습니다.해당 연결에서 발생하는 다음 작업은 실패합니다.오류가 기억나지 않네요...특정 오류만 잡아서 처리할 수도 있습니다.또한 3.5에서는 연결 풀을 플러시할 수 있다고 생각합니다(그래서...오류를 잡아내고, 연결 풀을 비우고, 연결을 열고, 명령을 다시 시도하십시오...추악하지만 가능할 수도 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top