O Babelfish é compatível com servidores vinculados - Amazon Aurora

O Babelfish é compatível com servidores vinculados

O Babelfish para Aurora PostgreSQL é compatível com servidores vinculados usando a extensão do PostgreSQL tds_fdw na versão 3.1.0. Para trabalhar com servidores vinculados, é necessário instalar a extensão tds_fdw. Para ter mais informações sobre a extensão tds_fdw, consulte Trabalhar com os invólucros de dados externos compatíveis do Amazon Aurora PostgreSQL.

Instalar a extensão tds_fdw

É possível instalar a extensão tds_fdw usando os métodos a seguir.

Usar CREATE EXTENSION no endpoint do PostgreSQL
  1. Conecte-se à sua instância de banco de dados PostgreSQL no banco de dados Babelfish na porta PostgreSQL. Use uma conta que tenha o perfil rds_superuser.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test --dbname=babelfish_db --password
  2. Instale a extensão tds_fdw. É um processo de instalação único. Não é necessária a reinstalação quando o cluster de banco de dados é reiniciado.

    babelfish_db=> CREATE EXTENSION tds_fdw; CREATE EXTENSION
Chamar o procedimento sp_execute_postgresql armazenado pelo endpoint do TDS

O Babelfish é compatível com a instalação da extensão tds_fdw chamando o procedimento sp_execute_postgresql na versão 3.3.0. É possível executar as instruções do PostgreSQL no endpoint do T-SQL sem sair da porta do T-SQL. Para obter mais informações, consulte Referência de procedimentos do Babelfish para Aurora PostgreSQL.

  1. Conecte-se à sua instância de banco de dados do PostgreSQL no banco de dados do Babelfish na porta do PostgreSQL.

    sqlcmd -S your-DB-instance.aws-region.rds.amazonaws.com -U test -P password
  2. Instale a extensão tds_fdw.

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

Funções compatíveis

O Babelfish é compatível com a adição de endpoints RDS remotos para SQL Server ou Babelfish para Aurora PostgreSQL como servidor vinculado. Você também pode adicionar outras instâncias remotas do SQL Server como servidores vinculados. Depois, use OPENQUERY() para recuperar dados desses servidores vinculados. A partir da versão 3.2.0 do Babelfish, nomes de quatro partes também são compatíveis.

Os procedimentos armazenados e visualizações de catálogo a seguir são compatíveis com o uso dos servidores vinculados.

Procedimentos armazenados

  • sp_addlinkedserver: o Babelfish não é compatível com o parâmetro @provstr.

  • sp_addlinkedsrvlogin

    • Você deve fornecer um nome de usuário e senha remotos explícitos para se conectar à fonte de dados remota. Não é possível se conectar com as credenciais próprias do usuário. O Babelfish é compatível apenas com @useself = false.

    • O Babelfish não é compatível com o parâmetro @locallogin, pois não há suporte à configuração do acesso remoto ao servidor específico para login local.

  • sp_linkedservers

  • sp_helplinkedsrvlogin

  • sp_dropserver

  • sp_droplinkedsrvlogin: o Babelfish não é compatível com o parâmetro @locallogin, pois não há suporte à configuração do acesso remoto ao servidor específico para login local.

  • sp_serveroption: o Babelfish suporta as seguintes opções de servidor:

    • tempo limite de consulta (da versão 3.2.0 do Babelfish)

    • tempo limite de conexão (da versão 3.3.0 do Babelfish)

  • sp_testlinkedserver (da versão 3.3.0 do Babelfish)

  • sp_enum_oledb_providers (da versão 3.3.0 do Babelfish)

Visualizações do catálogo

  • sys.servers

  • sys.linked_logins

Usar criptografia em trânsito para a conexão

A conexão do servidor de origem do Babelfish para Aurora PostgreSQL com o servidor de destino usa criptografia em trânsito (TLS/SSL), dependendo da configuração do banco de dados do servidor remoto. Se o servidor remoto não estiver configurado para criptografia, o servidor do Babelfish que faz a solicitação ao banco de dados remoto retornará ao estado de não criptografado.

Como impor a criptografia de conexão

Adicionar o Babelfish como um servidor vinculado do SQL Server

O Babelfish para Aurora PostgreSQL pode ser adicionado como um servidor vinculado de um SQL Server. Em um banco de dados do SQL Server, você pode adicionar o Babelfish como um servidor vinculado usando o provedor de banco de dados do Microsoft OLE para ODBC: MSDASQL.

Há duas maneiras de configurar o Babelfish como um servidor vinculado do SQL Server usando o provedor MSDASQL:

  • Fornecendo a string de conexão ODBC como string do provedor.

  • Forneça o DSN do sistema da fonte de dados ODBC ao adicionar o servidor vinculado.

Limitações

  • OPENQUERY() funciona somente para SELECT e não para DML.

  • Os nomes de objetos em quatro partes funcionam somente para leitura e não para modificar a tabela remota. Um UPDATE pode referenciar uma tabela remota na cláusula FROM sem a modificar.

  • A execução de procedimentos armazenados em servidores vinculados ao Babelfish não é compatível.

  • O upgrade da versão principal do Babelfish pode não funcionar se houver objetos dependentes de OPENQUERY() ou objetos referenciados por meio de nomes de quatro partes. Você deve garantir que todos os objetos que fazem referência a OPENQUERY() ou a nomes de quatro partes sejam descartados antes de um upgrade de versão principal.

  • Os seguintes tipos de dados não funcionam conforme o esperado no servidor remoto do Babelfish: nvarchar(max)varchar(max)varbinary(max)binary(max) e time. Recomendamos usar a função CAST para convertê-los nos tipos de dados compatíveis.

Exemplo

No exemplo a seguir, uma instância do Babelfish para Aurora PostgreSQL está se conectando a uma instância do RDS para SQL Server na nuvem.

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';

Quando o servidor vinculado estiver instalado, você poderá usar T-SQL OPENQUERY() ou a nomenclatura padrão de quatro partes para fazer referência a uma tabela, exibição ou outros objetos compatíveis no servidor remoto:

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

Para descartar o servidor vinculado e todos os logins associados:

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

Solução de problemas

Você pode usar o mesmo grupo de segurança para os servidores de origem e remotos para permitir que eles se comuniquem entre si. O grupo de segurança deve permitir somente tráfego de entrada na porta TDS (1433 por padrão) e o IP de origem no grupo de segurança pode ser definido como o próprio ID do grupo de segurança. Para obter mais informações sobre como definir as regras para se conectar a uma instância de outra instância com o mesmo grupo de segurança, consulte Regras para se conectar a instâncias de uma instância com o mesmo grupo de segurança.

Se o acesso não estiver configurado corretamente, uma mensagem de erro semelhante ao exemplo a seguir será exibida quando você tentar consultar o servidor remoto.

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