[sql] SQL Server에서 서로 다른 두 서버에서 데이터 선택

SQL Server의 서로 다른 두 서버에있는 서로 다른 두 데이터베이스에서 동일한 쿼리의 데이터를 어떻게 선택할 수 있습니까?



답변

찾고있는 것은 연결된 서버입니다. 개체 탐색기 트리의 다음 위치에서 SSMS로 가져올 수 있습니다.

Server Objects-->Linked Servers

또는 sp_addlinkedserver 를 사용할 수 있습니다 .

하나만 설정하면됩니다. 그런 다음 다른 서버에서 다음과 같이 테이블을 호출 할 수 있습니다.

select
    *
from
    LocalTable,
    [OtherServerName].[OtherDB].[dbo].[OtherTable]

소유자가 항상 그런 것은 아니므로 dbo사용하는 스키마로 바꾸십시오.


답변

연결된 서버를 사용하여 수행 할 수 있습니다.

일반적으로 연결된 서버는 데이터베이스 엔진이 다른 SQL Server 인스턴스 또는 Oracle과 같은 다른 데이터베이스 제품의 테이블을 포함하는 Transact-SQL 문을 실행할 수 있도록 구성됩니다. Microsoft Access 및 Excel을 포함하여 많은 유형의 OLE DB 데이터 원본을 연결된 서버로 구성 할 수 있습니다.

연결된 서버는 다음과 같은 장점을 제공합니다.

  • SQL Server 외부에서 데이터에 액세스하는 기능
  • 기업 전체의 이기종 데이터 소스에서 분산 쿼리, 업데이트, 명령 및 트랜잭션을 발행 할 수있는 기능
  • 다양한 데이터 소스를 유사하게 처리 할 수있는 기능.

연결된 서버 에 대해 자세히 알아보십시오 .

다음 단계에 따라 연결된 서버를 만드십시오.

  1. 서버 객체-> 연결된 서버-> 새로운 연결된 서버

  2. 원격 서버 이름을 제공하십시오.

  3. 원격 서버 유형 (SQL Server 또는 기타)을 선택하십시오.

  4. 보안->이 보안 컨텍스트를 사용하여 작성을 선택하고 원격 서버의 로그인 및 비밀번호를 제공하십시오.

  5. 확인을 클릭하면 완료됩니다!

다음 은 연결된 서버를 만드는 간단한 자습서입니다.

또는

쿼리를 사용하여 연결된 서버를 추가 할 수 있습니다.

통사론:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
     [ , [ @provider= ] 'provider_name' ]
     [ , [ @datasrc= ] 'data_source' ]
     [ , [ @location= ] 'location' ]
     [ , [ @provstr= ] 'provider_string' ]
     [ , [ @catalog= ] 'catalog' ] 

sp_addlinkedserver 에 대해서 더 읽어보세요. .

연결된 서버 는 한 번만 만들어야합니다 . 연결된 서버를 만든 후 다음과 같이 쿼리 할 수 ​​있습니다.

select * from LinkedServerName.DatabaseName.OwnerName.TableName


답변

SELECT
        *
FROM
        [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]

연결된 서버 사용을 볼 수도 있습니다. 링크 된 서버는 DB2 플랫폼과 같은 다른 유형의 데이터 소스 일 수도 있습니다. 이것은 SQL Server TSQL 또는 Sproc 호출에서 DB2에 액세스하는 방법 중 하나입니다 …


답변

서로 다른 2 개의 데이터베이스에 대한 쿼리는 분산 쿼리입니다. 다음은 몇 가지 기술과 장단점 목록입니다.

  1. 연결된 서버 : SQL Server 복제가 제공하는 것보다 다양한 데이터 원본에 대한 액세스를 제공합니다
  2. 연결된 서버 : 복제가 지원하지 않거나 임시 액세스가 필요한 데이터 소스에 연결
  3. 연결된 서버 : OPENDATASOURCE 또는 OPENROWSET보다 우수한 성능
  4. OPENDATASOURCEOPENROWSET 기능 : 데이터 소스에서 데이터를 임시로 검색하는 데 편리합니다. OPENROWSET에는 바이올린 기능이있는 형식 파일이 필요하지 않을 수도있는 BULK 기능이 있습니다.
  5. OPENQUERY : 변수를 지원하지 않습니다
  6. 모두 T-SQL 솔루션입니다. 비교적 쉽게 구현 및 설정
  7. 모두 성능과 확장성에 영향을 줄 수있는 소스와 대상 간의 연결에 의존합니다.

답변

이 시도:

SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a


답변

이것들은 모두 훌륭한 답변이지만,이 답변은 누락되어 있으며 강력한 용도로 사용됩니다. 아마도 OP가 원하는 것에 맞지 않을 수도 있지만 질문은 모호했으며 다른 사람들이 여기에서 길을 찾을 수 있다고 생각합니다. 기본적으로 1 개의 창을 사용하여 여러 서버에 대해 동시에 쿼리를 실행할 수 있습니다. 방법은 다음과 같습니다.

SSMS에서 등록 된 서버를 열고 로컬 서버 그룹 아래에 새 서버 그룹을 만듭니다 .

이 그룹 아래 에서 조회하려는 각 서버에 대해 새 서버 등록 을 작성하십시오 . DB 이름이 다른 경우 특성에서 각각의 기본값을 설정하십시오.

이제 첫 번째 단계에서 생성 한 그룹으로 돌아가서 마우스 오른쪽 버튼을 클릭하고 새 쿼리를 선택하십시오. 새 쿼리 창이 열리고 실행하는 모든 쿼리가 그룹의 각 서버에서 실행됩니다. 결과는 레코드의 서버를 나타내는 추가 열 이름과 함께 단일 데이터 세트로 표시됩니다. 상태 표시 줄을 사용하면 서버 이름이 여러 개로 바뀝니다. .


답변

SQL_server 2008을 원격 서버에서 호스팅되는 SQL_server 2016에 연결하는 것과 동일한 문제가있었습니다. 다른 답변은 저에게 직접 효과가 없었습니다. 다른 사람에게 유용 할 수 있다고 생각하면서 여기에 조정 된 솔루션을 작성합니다.

원격 IP DB 연결에 대한 확장 된 답변 :

1 단계 : 서버 연결

EXEC sp_addlinkedserver @server='SRV_NAME',
   @srvproduct=N'',
   @provider=N'SQLNCLI',
   @datasrc=N'aaa.bbb.ccc.ddd';

EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'

SRV_NAME발명 된 이름이 있습니다. 쿼리에서 원격 서버를 참조하는 데 사용합니다. aaa.bbb.ccc.dddSQLserver DB를 호스팅하는 원격 서버의 IP 주소입니다.

2 단계 : 쿼리 실행
예를 들면 다음과 같습니다.

SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table

…그리고 그게 다야!

구문 세부 정보 : sp_addlinkedserversp_addlinkedsrvlogin