20122012.01.20 13:09

기존 서버에서 연결된 서버 생성 스크립트를 만들어 낸 후 다른 서버에 해당 스크립트를 수행했는데 오류가 발생하는군요...
연결된 서버가 잘 동작하는 서버에서 뽑아낸 스크립트인데 왜? 생성되지 않는거야! 짜증내지 마시고 원인을 찾아 봅시다.


[환경]
SQL Server 2008 R2


[시나리오]
기존 운영 서버에서 사용중인 연결된 서버 정보를 다른 서버로 옮기고자 SSMS 에서 연결된 서버 스크립팅 - CREATE 메뉴를 사용하여 sp_addlinkedserver, sp_addlinkedsrvlogin, sp_serveroption 저장 프로시저가 자동으로 생성되었습니다. 해당 생성 스크립트를 사용하여 다른 서버에서 수행했는데 아래와 같은 오류가 발생합니다.

메시지 15429, 수준 16, 상태 1, 프로시저 sp_addlinkedserver, 줄 45
'(null)'은(는) 잘못된 제품 이름입니다.

메시지를 보면 제품 이름이 null 이기 때문에 발생한 문제로 보입니다. 생성된 스크립트를 보니 sp_addlinkedserver 프로시저에 @srvproduct 인수가 없는 것을 확인하였습니다. 스크립트 생성에 문제였을까요? 기존 서버에서 제품 이름이 입력되지 않은 것일까요? 기존 서버에서 연결된 서버 정보를 확인해 봅니다.
 

SELECT name, Product FROM SYS.servers WHERE Product IS NOT NULL


Product 컬럼에 White space 값이 적용된 것으로 확인되었습니다.




즉, 최초 Linked Server 를 생성할 때, SSMS 에서 GUI 로 생성을 하였다면 제품 이름 값이 입력되지 않을 경우 오류가 발생하며 Linked Server 를 생성할 수 없지만 sp_addlinkedserver 프로시저를 사용하여 제품 이름을 다음과 같이 @srvproduct ='' 으로 지정하였다면 Linked Server 는 생성되나 추후 해당 스크립트를 생성할 때, 제품 이름이 나타나지 않는 문제가 발생하게 됩니다.


이와 같은 문제라면 생성된 sp_addlinkedserver 스크립트의 매개변수에 @srvproduct = '<제품 이름>' 을 추가해 주시면 되겠습니다.


[참고자료]
sys.servers(Transact-SQL)
http://msdn.microsoft.com/ko-kr/library/ms178530.aspx

작성자 : Lai Go / 작성일자 : 2012.01.20

Posted by Lai Go