연결된 서버를 지원하는 Babelfish - Amazon Aurora

연결된 서버를 지원하는 Babelfish

Babelfish for Aurora PostgreSQL은 버전 3.1.0에서 PostgreSQL tds_fdw 확장을 사용하여 연결된 서버를 지원합니다. 연결된 서버로 작업을 수행하려면 tds_fdw 확장을 설치해야 합니다. tds_fdw에 대한 자세한 내용은 Amazon Aurora PostgreSQL용 지원되는 외부 데이터 래퍼 작업을 참조하세요.

tds_fdw 확장 설치

다음 방법을 사용하여 tds_fdw 확장을 설치할 수 있습니다.

PostgreSQL 엔드포인트에서 CREATE EXTENSION 사용
  1. PostgreSQL 포트에서 Babelfish 데이터베이스의 PostgreSQL DB 인스턴스에 연결합니다. rds_superuser 역할이 있는 계정을 사용합니다.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test --dbname=babelfish_db --password
  2. tds_fdw 확장을 설치합니다. 이는 일회성 설치 프로세스입니다. DB 클러스터가 다시 시작될 때 재설치하지 않아도 됩니다.

    babelfish_db=> CREATE EXTENSION tds_fdw; CREATE EXTENSION
TDS 엔드포인트에서 sp_execute_postgresql 저장 프로시저 호출

Babelfish는 버전 3.3.0에서 sp_execute_postgresql 프로시저를 호출하여 tds_fdw 확장 설치를 지원합니다. T-SQL 포트를 종료하지 않고도 T-SQL 엔드포인트에서 PostgreSQL 문을 실행할 수 있습니다. 자세한 정보는 Babelfish for Aurora PostgreSQL 프로시저 참조 섹션을 참조하세요.

  1. T-SQL 포트에서 Babelfish 데이터베이스의 PostgreSQL DB 인스턴스에 연결합니다.

    sqlcmd -S your-DB-instance.aws-region.rds.amazonaws.com -U test -P password
  2. tds_fdw 확장을 설치합니다.

    1>EXEC sp_execute_postgresql N'CREATE EXTENSION tds_fdw'; 2>go

지원되는 기능

Babelfish는 원격 RDS for SQL Server 또는 Babelfish for Aurora PostgreSQL 엔드포인트를 연결된 서버로 추가하는 것을 지원합니다. 다른 원격 SQL Server 인스턴스를 연결된 서버로 추가할 수도 있습니다. 그런 다음, OPENQUERY()를 사용하여 이러한 연결된 서버에서 데이터를 검색합니다. Babelfish 버전 3.2.0부터 네 부분으로 구성된 이름도 지원됩니다.

연결된 서버를 사용하기 위해 다음과 같은 저장 프로시저 및 카탈로그 보기가 지원됩니다.

저장 프로시저

  • sp_addlinkedserver – Babelfish는 @provstr 파라미터를 지원하지 않습니다.

  • sp_addlinkedsrvlogin

    • 원격 데이터 소스에 연결하려면 명시적인 원격 사용자 이름과 암호를 입력해야 합니다. 사용자의 자체 보안 인증 정보로는 연결할 수 없습니다. Babelfish는 @useself = false만 지원합니다.

    • 로컬 로그인과 관련된 원격 서버 액세스 구성은 지원되지 않으므로, Babelfish는 @locallogin 파라미터를 지원하지 않습니다.

  • sp_linkedservers

  • sp_helplinkedsrvlogin

  • sp_dropserver

  • sp_droplinkedsrvlogin – 로컬 로그인과 관련된 원격 서버 액세스 구성은 지원되지 않으므로, Babelfish는 @locallogin 파라미터를 지원하지 않습니다.

  • sp_serveroption - Babelfish는 다음과 같은 서버 옵션을 지원합니다.

    • 쿼리 제한 시간(Babelfish 버전 3.2.0 이상)

    • 연결 제한 시간(Babelfish 버전 3.3.0 이상)

  • sp_testlinkedserver(Babelfish 버전 3.3.0 이상)

  • sp_enum_oledb_providers(Babelfish 버전 3.3.0 이상)

카탈로그 보기

  • sys.servers

  • sys.linked_logins

연결에 전송 중 암호화 사용

소스 Babelfish for Aurora PostgreSQL에서 대상 원격 서버로의 연결은 원격 서버 데이터베이스 구성에 따라 전송 중 암호화(TLS/SSL)를 사용합니다. 원격 서버에 암호화가 구성되지 않은 경우 원격 데이터베이스에 대한 요청을 수행하는 Babelfish 서버는 암호화되지 않은 상태로 폴백됩니다.

연결 암호화를 적용하려면

  • 대상 연결 서버가 RDS for SQL Server 인스턴스인 경우 대상 SQL Server 인스턴스에 대해 rds.force_ssl = on으로 설정합니다. RDS for SQL Server에 대한 SSL/TLS 구성과 관련된 자세한 내용은 Microsoft SQL Server DB 인스턴스와 함께 SSL 사용을 참조하세요.

  • 대상 연결 서버가 Babelfish for Aurora PostgreSQL 클러스터인 경우 대상 서버에 대해 babelfishpg_tsql.tds_ssl_encrypt = onssl = on으로 설정합니다. SSL/TLS 사용에 관한 자세한 내용은 Babelfish SSL 설정 및 클라이언트 연결 섹션을 참조하세요.

SQL Server에서 Babelfish를 연결된 서버로 추가

Babelfish for Aurora PostgreSQL은 SQL Server에서 연결된 서버로 추가할 수 있습니다. SQL Server 데이터베이스에서 ODBC용 Microsoft OLE DB 공급자인 MSDASQL을 사용하여 Babelfish를 연결된 서버로 추가할 수 있습니다.

MSDASQL 공급자를 사용하여 SQL Server에서 Babelfish를 연결된 서버로 구성하는 방법은 2가지가 있습니다.

  • ODBC 연결 문자열을 공급자 문자열로 제공합니다.

  • 연결된 서버를 추가하는 동안 ODBC 데이터 소스의 시스템 DSN을 제공합니다.

제한 사항

  • OPENQUERY()는 SELECT에서만 사용할 수 있고 DML에서는 사용할 수 없습니다.

  • 네 부분으로 구성된 객체 이름은 읽기에만 사용할 수 있고 원격 테이블 수정에는 사용할 수 없습니다. UPDATE는 수정하지 않고도 FROM 절의 원격 테이블을 참조할 수 있습니다.

  • Babelfish 연결 서버에 대한 저장 프로시저 실행은 지원되지 않습니다.

  • OPENQUERY()에 종속된 객체가 있거나 네 부분으로 구성된 이름을 통해 참조되는 객체가 있는 경우 Babelfish 메이저 버전 업그레이드가 작동하지 않을 수 있습니다. 메이저 버전 업그레이드 전에 OPENQUERY() 또는 네 부분으로 구성된 이름을 참조하는 모든 객체가 삭제되었는지 확인해야 합니다.

  • 다음 데이터 유형은 원격 Babelfish 서버(nvarchar(max), varchar(max), varbinary(max), binary(max), time)에서 예상대로 작동하지 않습니다. CAST 함수를 사용하여 지원되는 데이터 유형으로 변환하는 것이 좋습니다.

다음은 클라우드에서 RDS for SQL Server의 인스턴스에 Babelfish for Aurora PostgreSQL 인스턴스가 연결된 예시입니다.

EXEC master.dbo.sp_addlinkedserver @server=N'rds_sqlserver', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'myserver.CB2XKFSFFMY7.US-WEST-2.RDS.AMAZONAWS.COM'; EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'rds_sqlserver',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='password';

연결된 서버가 설치되면 T-SQL OPENQUERY() 또는 네 부분으로 구성된 표준 이름 지정을 사용하여 다음의 원격 서버 기반 테이블, 뷰 또는 기타 지원되는 객체를 참조할 수 있습니다.

SELECT * FROM OPENQUERY(rds_sqlserver, 'SELECT * FROM TestDB.dbo.t1'); SELECT * FROM rds_sqlserver.TestDB.dbo.t1;

연결된 서버 및 모든 관련 로그인을 중단하는 방법:

EXEC master.dbo.sp_dropserver @server=N'rds_sqlserver', @droplogins=N'droplogins';

문제 해결

소스 서버와 원격 서버 모두에 동일한 보안 그룹을 사용하여 서로 통신하도록 허용할 수 있습니다. 보안 그룹은 TDS 포트(기본값 1433)의 인바운드 트래픽만 허용해야 하며 보안 그룹의 소스 IP를 보안 그룹 ID 자체로 설정할 수 있습니다. 보안 그룹이 동일한 다른 인스턴스에서 인스턴스에 연결하는 규칙을 설정하는 방법에 대한 자세한 내용은 보안 그룹이 동일한 인스턴스에서 인스턴스에 대한 연결 규칙을 참조하세요.

액세스 권한이 올바르게 구성되지 않은 경우 원격 서버를 쿼리하려고 할 때 다음 예시와 비슷한 오류 메시지가 나타납니다.

TDS client library error: DB #: 20009, DB Msg: Unable to connect: server is unavailable or does not exist (mssql2019.aws-region.rds.amazonaws.com), OS #: 110, OS Msg: Connection timed out, Level: 9