SQLServer2008 새 인스턴스 원격 데이터베이스 링크 문제(sp_addlinkedserver)

먼저 문제의 원인을 말하다.
테스트 학생들은 자신의 컴퓨터에서 서로 다른 백그라운드를 테스트하지만 데이터베이스는 같은 이름을 사용한다.
그래서 새로운 SQL Server 인스턴스를 만들었습니다. 새 인스턴스는 다른 포트를 지정해야 시작할 수 있습니다. 포트를 고친 후 sp_addlinkedserver 문장 후 연결 테스트가 성공하지 못했습니다.
SQL 구문은 다음과 같습니다.

EXEC master.dbo.sp_addlinkedserver @server = N'UserDBLink', @srvproduct=N'UserDBLink', @provider=N'SQLNCLI', @datasrc=N'(LOCAL)', @catalog=N'UsersDB'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'UserDBLink',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
먼저 다음 문제의 해결 방안은 @datasrc 문자열에 포트 번호를 넣어야 합니다. 다음과 같습니다.

@datasrc=N'(LOCAL)' @datasrc=N'(LOCAL), '
간단하죠!그러나 오랫동안 조사한 끝에 프로그램에서 문자열을 연결하는 방법을 생각해서 이 문제를 해결했다.
프로그램의 링크 문자열은 이렇다

Provider=SQLOLEDB.1;Password=11;Persist Security Info=True;User ID=sa;Initial Catalog=db;Data Source=127.0.0.1,1433;
문제를 찾는 과정에서 MSDN 문서를 찾았는데 새 포트를 쓰는 방법이 없어서 동생이 오랫동안 고생을 했더라니!,여러분 저 좀 도와주세요, 혹시 제가 MSDN을 잘못 탓했나요!!!
링크:https://msdn.microsoft.com/zh-cn/library/ms190479.aspx
이것은 내가 복사한 MSDN 설명이다

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]  
   [ , [ @provider= ] 'provider_name' ] 
   [ , [ @datasrc= ] 'data_source' ]  
   [ , [ @location= ] 'location' ]  
   [ , [ @provstr= ] 'provider_string' ]  
   [ , [ @catalog= ] 'catalog' ]
매개변수:

[ @server= ] 'server'
생성할 링크 서버의 이름입니다.서버의 데이터 형식은sysname입니다. 기본값이 없습니다. 

[ @srvproduct= ] 'product_name'
링크된 서버로 추가할 OLE DB 데이터 소스의 제품 이름입니다.라이브러리는 nvarchar(128)이며 기본값은 NULL입니다.SQL Server의 경우 provider_name, data_소스, 위치,provider_string, 디렉터리는 지정할 필요가 없습니다.

[ @provider= ] 'provider_name'
이 데이터 소스에 해당하는 OLE DB 액세스 인터페이스의 유일한 프로그래밍 식별자(PROGID)입니다.provider_name은 현재 컴퓨터에 지정된 OLE DB 공급자를 설치해야 합니다.provider_name은 nvarchar(128)이고 기본값은 NULL입니다.단, provider_name 은 생략되며 SQLNCLI 를 사용합니다.(SQLNCLI를 사용하고 SQL Server는 SQL Server Native Client OLE DB 액세스 인터페이스의 최신 버전으로 리디렉션됩니다.)OLE DB 액세스 인터페이스는 지정된 PROGID로 레지스트리에 등록해야 합니다. 

[ @datasrc= ] 'data_source'
OLE DB 액세스 인터페이스에서 설명하는 데이터 원본의 이름입니다.data_소스는 nvarchar(4000)입니다.data_소스 초기화할 OLE DB 액세스 인터페이스로 DBPROP_INIT_DATASOURCE 속성 전달.

[ @location= ] 'location'
OLE DB 액세스 인터페이스가 설명하는 데이터베이스의 위치입니다.위치는 nvarchar(4000)이며 기본값은 NULL입니다.초기화할 OLE DB 액세스 인터페이스의 DBPROP_ 위치INIT_위치 속성 전달. 

[ @provstr= ] 'provider_string'
OLE DB 액세스 인터페이스별 연결 문자열은 고유한 데이터 소스를 식별합니다.provider_string은 nvarchar(4000)이고 기본값은 NULL입니다.provstr가 IDataInitialize에 전달되거나 DBPROP_로 설정됨INIT_OLE DB 액세스 인터페이스를 초기화하는 Providerstring 속성입니다.
링크된 서버를 만들 때 SQL ServerNative Client OLE DB 제공 프로그램으로 서버 서버 키워드를 사용하여 실례=servername\instancename에서 지정한 특정 실례 SQL 서버를 지정할 수 있습니다.servername은 컴퓨터의 이름인 SQL Server가 실행 중이며, instancename과 같은 특정한 실례의 이름인 SQL Server 사용자가 연결됩니다. 

[ @catalog= ] 'catalog'
OLE DB 액세스 인터페이스에 연결할 때 사용하는 디렉토리입니다.디렉토리는 sysname이며 기본값은 NULL입니다.디렉터리는 초기화할 OLE DB 액세스 인터페이스인 DBPROP_INIT_CATALOG 속성 전달.SQL Server 인스턴스에 대해 링크 서버를 정의할 때 디렉토리는 링크 서버가 매핑된 기본 데이터베이스를 가리킵니다.
위에서 말한 것은 편집자가 여러분께 소개한 SQLServer 2008의 새로운 실례 원격 데이터베이스 링크 문제(sp_addlinkedserver)입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 점이 있으면 저에게 메시지를 남겨주시면 편집자는 제때에 답장할 것입니다!

좋은 웹페이지 즐겨찾기