2013-01-17 2 views
0

다른 그룹에서 제공하는 여러 SQL Server 2008 데이터베이스를 호스팅합니다. 가끔은 데이터베이스 중 하나의 새 버전을 백업하고 이전 버전을 삭제하고 새 버전을 복원 한 다음 새로 복원 된 데이터베이스로 이동하여 기존 SQL 로그인을 다음과 같이 추가하는 루틴을 실행합니다. 해당 데이터베이스의 사용자가이 모든 데이터베이스에 존재하는 표준 역할을 할당합니다.둘 이상의 SQL Server 2008 데이터베이스에서 작업 자동화

루틴은 동일하지만 데이터베이스와 로그 파일에 대해 서로 다른 이름과 다른 논리 및 OS 이름을 사용한다는 점만 다릅니다. 내 성향은 각 데이터베이스와 관련된 이름 집합을 정의하는 테이블로 보조 데이터베이스를 설정 한 다음 교체 할 데이터베이스의 이름과 백업 파일의 이름을 매개 변수로 허용하는 저장 프로 시저를 만드는 것입니다. SP는 관련 논리 및 OS 파일 이름을 조회 한 다음 작업을 수행합니다.

이렇게하면 명령을 문자열로 작성한 다음이를 exec'ing해야합니다. 그러나 데이터베이스를 복원 한 후 저장 프로 시저를 사용하면 SQL 로그인을 사용자로 데이터베이스에 추가하고 데이터베이스 역할에 할당 할 수 있습니다. 저장 프로시 저는 이것을 수행 할 수 없습니다.

조각을 동적으로 채우고 자동화 된 프로 시저를 만들 때 이와 같은 방법으로 어떤 데이터베이스를 사용할 수 있습니까?

답변

0

나는 내 자신의 해결책을 생각해 냈습니다.

  1. 작업이 마스터 데이터베이스에서 실행되어야 함을 지정하고, 실행하는 코드가 포함되어 하나의 거래-SQL 단계를 정의하는 작업을 수행 할 수있는 작업을 만듭니다.

  2. 작업에서 사용할 개체를 호스팅하기 위해 만든 유틸리티 데이터베이스에서 데이터가 작업의 매개 변수가 될 최대 하나의 행을 포함하는 테이블을 만듭니다.

  3. 해당 데이터베이스에서 작업에서 사용하기 위해 저장해야하는 매개 변수 (바꾸려는 데이터베이스의 이름 포함)를 사용하여 호출 할 수있는 저장 프로 시저를 만듭니다. SP는 매개 변수의 유효성을 검사하고 오류를보고하고 성공할 경우 매개 변수 테이블에 기록하고 msdb..sp_start_job을 사용하여 작업을 시작해야합니다.

  4. 작업에서 교체 할 데이터베이스를 참조해야하는 명령문의 경우 명령문을 문자열로 작성하고 실행하십시오.

  5. 다시 작성된 데이터베이스에서 실행해야하는 모든 명령문의 경우 sp_executesql IN THAT DATABASE의 인스턴스에 대한 인수로 사용할 명령문을 이중 인용하고 EXECUTE를 사용하여 전체 명령을 실행하십시오.

    SET @statement = @dbName + '..sp_executesql' '[데이터베이스 @dbName에서 실행할 명령문]' '';

    EXEC (@statement);

  6. 출력을 로그 파일에 기록하도록 작업을 구성하십시오.