Babelfish admite servidores enlazados - Amazon Aurora

Babelfish admite servidores enlazados

Babelfish para Aurora PostgreSQL admite servidores enlazados mediante el uso de la extensión tds_fdw de PostgreSQL en la versión 3.1.0. Para trabajar con servidores enlazados, debe instalar la extensión tds_fdw. Para obtener más información acerca de la extensión tds_fdw, consulte Uso de los contenedores de datos externos compatibles para Amazon Aurora PostgreSQL.

Instalación de la extensión tds_fdw

Puede instalar una extensión tds_fdw utilizando los métodos siguientes.

Uso de CREATE EXTENSION desde el punto de conexión de PostgreSQL
  1. Conéctese a su instancia de base de datos de PostgreSQL en la base de datos de Babelfish en el puerto PostgreSQL. Utilice una cuenta que tenga el rol rds_superuser.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test --dbname=babelfish_db --password
  2. Instale la extensión de tds_fdw. Este proceso de instalación se realiza una sola vez. No tiene que volver a instalarla cuando el clúster de base de datos se reinicie.

    babelfish_db=> CREATE EXTENSION tds_fdw; CREATE EXTENSION
Llamar al procedimiento almacenado de sp_execute_postgresql desde un punto de conexión TDS

Babelfish admite la instalación de la extensión tds_fdw llamando al procedimiento sp_execute_postgresql desde la versión 3.3.0. Puede ejecutar instrucciones PostgreSQL desde el punto de conexión de T-SQL sin salir del puerto T-SQL. Para obtener más información, consultar Referencia de procedimientos de Babelfish para Aurora PostgreSQL

  1. Conéctese a su instancia de base de datos de PostgreSQL en la base de datos de Babelfish en el puerto T-SQL.

    sqlcmd -S your-DB-instance.aws-region.rds.amazonaws.com -U test -P password
  2. Instale la extensión de tds_fdw.

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

Funcionalidades compatibles

Babelfish permite añadir puntos de conexión remotos de RDS para SQL Server o Babelfish para Aurora PostgreSQL como servidor enlazado. También puede añadir otras instancias remotas de SQL Server como servidores enlazados. A continuación, utilice OPENQUERY() para recuperar datos de estos servidores enlazados. A partir de la versión 3.2.0 de Babelfish, también se admiten nombres de cuatro partes.

Se admiten los siguientes procedimientos almacenados y vistas de catálogo para utilizar los servidores enlazados.

Procedimientos almacenados

  • sp_addlinkedserver: Babelfish no admite el parámetro @provstr.

  • sp_addlinkedsrvlogin

    • Debe proporcionar un nombre de usuario y una contraseña remotos explícitos para conectarse al origen de datos remoto. No puede conectarse con las credenciales propias del usuario. Babelfish solo admite @useself = false.

    • Babelfish no admite el parámetro @locallogin, ya que no se permite la configuración del acceso al servidor remoto específico para el inicio de sesión local.

  • sp_linkedservers

  • sp_helplinkedsrvlogin

  • sp_dropserver

  • sp_droplinkedsrvlogin: Babelfish no admite el parámetro @locallogin, ya que no se permite la configuración del acceso al servidor remoto específico para el inicio de sesión local.

  • sp_serveroption: Babelfish admite las siguientes opciones de servidor:

    • tiempo de espera de consulta (de la versión 3.2.0 de Babelfish)

    • tiempo de espera de conexión (de la versión 3.3.0 de Babelfish)

  • sp_testlinkedserver (de la versión 3.3.0 de Babelfish)

  • sp_enum_oledb_providers (de la versión 3.3.0 de Babelfish)

Vistas de catálogo

  • sys.servers

  • sys.linked_logins

Uso de cifrado en tránsito para la conexión

La conexión desde el servidor Babelfish para Aurora PostgreSQL de origen al servidor remoto de destino utiliza crifrado en tránsito (TLS/SSL), dependiendo de la configuración de la base de datos del servidor remoto. Si el servidor remoto no está configurado para el cifrado, el servidor Babelfish que realiza la solicitud a la base de datos remota se revierte a no cifrado.

Para aplicar el cifrado en las conexiones

Adición de Babelfish como servidor enlazado desde SQL Server

Babelfish para Aurora PostgreSQL se puede añadir como un servidor enlazado desde un SQL Server. En una base de datos de SQL Server, puede añadir Babelfish como servidor enlazado mediante el proveedor OLE DB de Microsoft para ODBC: MSDASQL.

Hay dos maneras de configurar Babelfish como un servidor enlazado desde SQL Server mediante el proveedor MSDASQL:

  • Proporcionar la cadena de conexión de ODBC como cadena del proveedor.

  • Proporcionar el DSN del sistema del origen de datos de ODBC al agregar el servidor enlazado.

Limitaciones

  • OPENQUERY() solo funciona para SELECT y no para DML.

  • Los nombres de objetos de cuatro partes solo sirven para leer y no para modificar la tabla remota. Un UPDATE puede hacer referencia a una tabla remota de la cláusula FROM sin modificarla.

  • No se admite la ejecución de procedimientos almacenados en servidores enlazados de Babelfish.

  • Es posible que la actualización de la versión principal de Babelfish no funcione si hay objetos dependientes en OPENQUERY() u objetos a los que se hace referencia mediante nombres de cuatro partes. Debe asegurarse de que todos los objetos que hagan referencia a OPENQUERY() o nombre de cuatro partes se eliminen antes de realizar una actualización de la versión principal.

  • Los siguientes tipos de datos no funcionan como se esperaba en el servidor remoto de Babelfish: nvarchar(max), varchar(max), varbinary(max), binary(max) y time. Recomendamos utilizar la función CAST para convertirlos en tipos de datos compatibles.

Ejemplo

En el siguiente ejemplo, una instancia de Babelfish para Aurora PostgreSQL se conecta a una instancia de RDS para SQL Server en la nube.

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

Cuando el servidor enlazado esté implementado, podrá utilizar OPENQUERY() de T-SQL o una nomenclatura estándar de cuatro partes para hacer referencia a una tabla, vista u otros objetos compatibles en el servidor remoto:

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

Para eliminar el servidor enlazado y todos los inicios de sesión asociados:

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

Solución de problemas

Puede usar el mismo grupo de seguridad para los servidores de origen y remotos para permitir que se comuniquen entre sí. El grupo de seguridad solo debe permitir el tráfico entrante en el puerto TDS (1433 de forma predeterminada) y la IP de origen del grupo de seguridad se puede configurar como el propio ID del grupo de seguridad. Para obtener más información sobre cómo establecer las reglas para conectarse a una instancia desde otra instancia con el mismo grupo de seguridad, consulte Reglas para conectarse a instancias desde una instancia con el mismo grupo de seguridad.

Si el acceso no está configurado correctamente, aparecerá un mensaje de error similar al del siguiente ejemplo cuando intente consultar el 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