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
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
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 ter mais informações, consulte Trabalhar com o Babelfish para Aurora PostgreSQL.
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
-Utest
-Ppassword
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
Se o servidor vinculado de destino for uma instância do RDS para SQL Server, defina
rds.force_ssl = on
para a instância de destino do SQL Server. Para ter mais informações sobre a configuração de SSL/TLS para o RDS para SQL Server, consulte Usar SSL com uma instância de banco de dados do Microsoft SQL Server.Se o servidor vinculado de destino for um cluster do Babelfish para Aurora PostgreSQL, defina
babelfishpg_tds.tds_ssl_encrypt = on
essl = on
para o servidor de destino. Para ter mais informações sobre SSL/TLS, consulte Configurações SSL e conexões do cliente do Babelfish.
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 aOPENQUERY()
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)
etime
. 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