2013-04-24 3 views
1

내 문제는 꽤 인기가 많습니다. INFORMIX DB ROLLBACK과 같이 DELPHI와 SQL Server를 사용하여 데이터베이스에서 장기 실행 알고리즘을 개발하고 있습니다. 이러한 프로그램이 실패하면 데이터베이스를 다시 초기 상태로 설정해야합니다. 서버 측에서 데이터베이스를 분리하고 이전 데이터베이스를 백업에서 복원 한 다음 프로그램 테스트를 다시 시작하십시오. 길고 시간이 많이 걸리는 절차.코드에서 SQL Server를 롤백

내 테스트가 실패한 경우 Delphi를 사용하여 데이터베이스에 세이브 포인트를 설정하고 Delphi에서 DB를 복원 할 수 있습니까?

+0

일괄 적으로 쿼리를 실행하고 커밋 할 수 없습니까? 한 번 이런 식으로해야했지만 이건 약 2 천만 개의 기록을 복제하고있었습니다. 그래서 내가 한 일은 블록으로 읽었고, 필요한 것을하고 다중 삽입을 한 후 다음 블록으로갔습니다. 유일한 추가 사항은 마지막으로 삽입 된 레코드를 식별해야하며 간단한 비교를 통해이를 수행 할 수 있다는 것입니다. 아마도 다른 것이있을 테지만 이것이 당신에게 도움이 될까요? – itsols

+0

델파이에서'TADOConnection'을 사용한다면 다음과 같이 할 수 있습니다 :'ADOConnection.BeginTrans; ; ADOConnection.CommitTrans;'. 예외 :'ADOConnection.RollbackTrans'. – kobik

답변

2

쉽게이를 위해 SQL 서버의 Database Snapshots 기능을 사용할 수 있습니다 : 당신이 실패하면

  • 응용 프로그램

  • 를 실행 (CREATE DATABASE snapshot_name.... AS SNAPSHOT OF database_name를 사용하여) 시작하기 전에

    • 가 데이터베이스 스냅 샷을 생성, 해당 스냅 샷에서 복원하십시오 (RESTORE DATABASE .... FROM DATABASE_SNAPSHOT = '....' 사용)

  • +1

    나는 약간 혼란 스럽다. 원본 데이터베이스가 업데이트되면 데이터베이스 스냅 숏이 업데이트됩니다. " 그게 사실이야? – kobik

    +0

    @kobik : 혼란 스러움을 공유합니다. * 데이터베이스 스냅 숏은 SQL Server 데이터베이스 (원본 데이터베이스)의 읽기 전용 정적 뷰입니다. 단락 시작 부분의 문 * –

    +0

    그것을 시도하고 코딩을 해? – Franz