2008/02/15

SQL 2005 에서 데이터베이스 복사 마법사 [SSIS] 실행시 sp_changedbowner 오류

다음 사항은, SQL Server 2000 에서 SQL Server 2005 로의 [데이터 복사] 마법사를 진행하는 과정에서의 오류중 하나에 관련된 내용입니다.



SQL Server 2000 에서와 마찮가지로, 2005 에서도 [데이터 복사] 마법사는 꽤나 훌륭한 도구임에 틀림없는 것 같습니다. 다만, 기존 2000 에서와의 UI에서의 제어 사항이 단순화되어 있어서 약간 불편한 점은 없지 않아 있는 것 같습니다.

어쨌든,.,

SQL Server 2005 에서는, DB를 분리 복사하는 옵션이 하나더 추가되어 있는데요. 실제로 온라인중인 DB를 offline 해버린다는 것은 매우 신중한 선택이어야 합니다. 그래서 대부분 기존 2000 의 DTS와 같은 방법을 이용합니다.??...




진행을 하다보면,. 다음과 같은 오류가 발생하는데요. 주로 3가지 오류가 발생하게됩니다.
(물론 계정정보에 관련된 사전 작업은 되어 있어서 그와 같은 문제 상황은 아니고....)

1. SQL Server 2000 에서 SQL Server 2005 로 복사를 하게되면 DB 호환성은 2005로 변경됩니다. 그 과정에서 지원되지 않는 데이터 타입이나 프로시져, 함수가 오류가 나게 되고요,.

2. 계정문제인데요. 가장 흔하게 발생하는 문제로, 데이터 복사 마법사는 실제 모든 데이터 복사 작업을 쿼리문에 의해서 처리됩니다. 그래서 대상측에 create 문을 이용해서 테이블이나 프로시져등을 생성하게 되는데 그때 특정 사용자 소유권이 지정되어 있는 경우 해당 계정이 없으면 오류가 납니다.

3. 나머지가 서버 운영환경에 따른 차이점에서 발생하는 부차적인 문제이겠지요.




SQL 2000 간의 데이터 복사는 sp_changedbowner 체크하거나 설정하지 않습니다. SQL 2005 에서 추가된 부분인데요. Active Directory 환경에서는 이와 같은 문제상황을 맞닥드릴 확률이 조금더 낮은것 같기도 합니다.

아뭏튼, 위와 같은 오류가 발생합니다. 로그를 자세히 살펴보면,. (되도록이면 텍스트 로그를 남겨서 보는게 좋을것 같습니다.)

OnError,WSSPLEX,NT AUTHORITY\SYSTEM,SERVERINFO_WSSPLEX_Transfer 개체 작업,{D18D5027-7ED2-45C7-BBC0-D0BB764AC333},{B6F041C4-0FD2-471C-9D0C-F12EA2C20986},2008-02-14 오후 2:28:57,2008-02-14 오후 2:28:57,0,0x,오류: errorCode=-1073548784 description=다음 오류로 인해 쿼리 "EXEC dbo.sp_changedbowner @loginame = N'SERVERINFO\test', @map = false
"을(를) 실행하지 못했습니다: "보안 주체 'SERVERINFO\test'이(가) 없거나 권한이 없어서 찾기할 수 없습니다.".
가능한 실패 원인: 쿼리에 문제가 있거나 "ResultSet" 속성, 매개 변수 또는 연결을 올바르게 설정하지 않았을 수 있습니다.
 helpFile= helpContext=0 idofInterfaceWithError={8BDFE893-E9D8-4D23-9739-DA807BCDC2AC}
StackTrace:    위치: Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer()
   위치: Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
   위치: Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()


오류 내용을 잘보면,. 대상측 서버에 DB 생성까지는 정상적으로 진행되나 위 sp_changedbowner 프로시져에서 오류가 납니다.

자세히 보면, 대상측 서버에 기존서버의 계정정보에 대해서 소유권 설정을 하는데요. 문제는 일반 계정이 아닌 윈도우 계정이라는 점입니다. (앞서 얘기한것처럼 Active Directory 환경에서 같은 도메인에 있는 서버라면 문제 없겠지요..)

구체적으로, SQL 2005 의 데이터 복사 마법사의 내부 구조가 어떻게 변경되었는지 자세히 확인해 보지 못했지만,. 기존의 test DB를 확인해 보면 다음과 같습니다.




테이블이라던가, 프로시져등의 오브젝트에 대한 소유권이 아니라, DB에 대한 소유권이 특정 윈도우 계정으로 설정되어 있습니다. 소유권은 특별히 지정하지 않는 경우 로그인 계정으로 기본값이 지정됩니다.

그러면, 이제 위와 같은 오류를 해결하기 위한 답이 나온게지요..^^;; 바로 원본 DB의 소유권을 변경해 주면 됩니다. 왜냐면 원격지 윈도우 계정명을 동일하게 생성할수는 없으니깐요.


오류로그에 남아 있는 쿼리문을, 원격지 서버에서 먼저 동일한 SID값을 가지고 있는 sa 계정이나 관리용 SQL 계정으로 먼저 변경해 놓으면 됩니다.

sp_changedbowner [ @loginame = ] 'login'
          [ , [ @map= ] remap_alias_flag ]


EXEC dbo.sp_changedbowner @loginame = 'sa'




다만,. 원격지 서버에 대한 소유권 변경 권한이 제한되어 있다면 난감하겠지요.. -_-;;


14-ssis_db_migrate_1.gif
14-ssis_db_migrate_2.gif
14-ssis_db_migrate_3.gif
14-ssis_db_migrate_4.gif
14-ssis_db_migrate_5.png

댓글 없음:

댓글 쓰기

가장 많이 본 글