[MSSQL2005]64비트 SQL Server 2005에서 연결된 32비트 SQL Server 2000(7.0) 서버로 분산 쿼리를 실행하려고 하면 오류 메시지 해결방법
경력관리/개발 2010/04/30 15:58 Tweet연결된 서버(linked server)로 분산쿼리를 실행하려고 하면 아래와 같은 에러메세지가
나타납니다.
연결된 서버 "연결서버이름(xxxx)"의 OLE DB 공급자 "SQLNCLI"이(가) 메시지 "이 작업을 완료하는 데 필요한 저장 프로시저가 서버에 없습니다. 시스템 관리자에게 문의하십시오."을(를) 반환했습니다.
메시지 7311, 수준 16, 상태 2, 줄 1
연결된 서버 "연결서버이름(xxxx)"에 대한 OLE DB 공급자 "SQLNCLI"의 스키마 행 집합 "DBSCHEMA_TABLES_INFO"을(를) 가져올 수 없습니다. 공급자가 인터페이스를 지원하지만 이 인터페이스를 사용하면 오류 코드가 반환됩니다.
원인.
이 문제는 시스템 저장 프로시저가 업그레이드되지 않았기 때문에 발생합니다. SQL Server 2000 SP3 또는 SQL Server 2000 SP4를 설치한 후 시스템 저장 프로시저를 수동으로 업그레이드해야 합니다.
해결방법.
하나. Instcat.sql 스크립트를 수동으로 실행하기
1. Windows 인증 모드를 사용하여 시스템 저장 프로시저를 업그레이드하려면
실행 > cmd > 아래 명령어 실행
osql -E -S <LinkedServerName> -i <Location>\instcat.sql
2. SQL Server 인증 모드를 사용하여 시스템 저장 프로시저를 업그레이드하려면
osql -U <AdminLogin> -P <AdminPassword> -S <LinkedServerName>
-i <Location>\instcat.sql
위 방법은 아래에서 간단하게 긁어옴
http://support.microsoft.com/kb/906954/ko
그런데 위 실행은 안해봤습니다. 서비스를 하고 있는 DB서버라서 혹시나 문제가
발생할까봐 못해봤습니다. ㅠㅠ
또 하나. 시스템프로시저 추가해주기
결국 한개의 프로시저만 있으면 간단하게 해결해주네여.
use master
Go
create procedure sp_tables_info_rowset_64
@table_name sysname,
@table_schema sysname = null,
@table_type nvarchar(255) = null
as
declare @Result int set @Result = 0
exec @Result = sp_tables_info_rowset @table_name, @table_schema, @table_type
위 프로시저만 한개 생성해주면 잘 됩니다.
생성을 하고 분산쿼리를 실행했떠니 아래와 같이 에러메세지가 나오면
연결된 서버 "연결서버이름(xxxx)"의 OLE DB 공급자 "SQLNCLI"이(가) 메시지 "지정되지 않은 오류입니다."을(를) 반환했습니다.
메시지 229, 수준 14, 상태 5, 프로시저 sp_tables_info_rowset_64, 줄 7
'dbo' 소유자, 'master' 데이터베이스, 'sp_tables_info_rowset_64' 개체에 대한 EXECUTE 사용 권한이 거부되었습니다.
실행권한을 줘야 실행이 되는군요.
아래와 같이 public EXEC 권한을 체크해줘야 합니다.










404488
96
160

















































댓글을 달아 주세요