Compartir a través de


Replicación de SQL Server (solución de problemas)

Este tema contiene las secciones siguientes relacionadas con la solución de problemas entre el proveedor OLE DB para DB2 y SQL Server (proveedor de datos) y SQL Server.

Mapeos de tipos de datos incorrectos

Error al replicar columnas de DATETIME2 en columnas DB2 TIMESTAMP

Para obtener más información sobre la replicación de SQL Server, vea Guía del desarrollador (replicación) (https://go.microsoft.com/fwlink/?LinkId=193231) en SQL Server Libros en línea.

Mapeos incorrectos de tipos de datos

La replicación de SQL Server puede convertir datos incorrectamente, basándose en las asignaciones predeterminadas de SQL Server a los tipos de datos de DB2. Se recomienda que el administrador y el desarrollador revisen y ajusten las asignaciones de tipos de datos de replicación mediante los siguientes procedimientos almacenados del sistema de SQL Server.

sp_helpdatatypemap

sp_getdefaultdatatypemapping

sp_setdefaultdatatypemapping

Para obtener más información, vea [Procedimientos almacenados del sistema (Transact-SQL)](https://go.microsoft.com/fwlink/?LinkID=180765\).

Error al replicar columnas de DATETIME2 en columnas DB2 TIMESTAMP

Problema

La replicación de SQL Server 2008 hacia DB2 para z/OS puede fallar con SQLCODE -188 (una representación de un valor datetime en forma de cadena no es válida). Esto ocurre cuando la replicación está configurada para asignar DATETIME2 a DB2 VARCHAR(27) y usa comandos de artículo de suscripción con valores de datos literales de cadena.

Solución

Reconfigura la replicación de SQL Server 2008 para asignar DATETIME2 al TIMESTAMP de DB2 y los comandos de artículos de suscripción con parámetros. Esto permite al proveedor de datos dar formato al DATETIME2 como una estructura DB2 TIMESTAMP compatible con el servidor de bases de datos IBM DB2.

Habilitación de la autenticación de Azure Active Directory Domain Services en Azure Files

Paso 1. Identifique la asignación de tipos de datos que se va a modificar. USE MASTER para todos los pasos.

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

Los resultados deben indicar el mapping_id a modificar. En la tabla siguiente se muestra el panel de resultados de este ejemplo donde el mapping_id es 189.

mapping_id source_dbms tipo_de_fuente destination_dbms tipo_de_destino longitud_destino
189 MSSQLSERVER datetime2 DB2 VARCHAR 27

Paso 2. Elimine la asignación de tipos de datos.

exec sp_dropdatatypemapping  189  

Paso 3. Agregue la asignación de tipos de datos.

exec  sp_adddatatypemapping   
    @source_dbms                  = 'MSSQLSERVER',    
    @source_type                  = 'datetime2',  
    @destination_dbms             = 'DB2',  
    @destination_type             = 'TIMESTAMP',  
    @destination_nullable         = 1,  
    @destination_createparams     = 0,  
    @dataloss                     = 0,  
    @is_default                   = 1  
  

Paso 4. Vuelva a ejecutar la consulta para comprobar la nueva asignación de tipos de datos.

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

Los resultados deben mostrar la nueva asignación de tipos de datos. En este ejemplo, el mapping_id que se muestra en la tabla siguiente es 189.

identificador_de_mapeo source_dbms tipo_de_fuente dbms_destino tipo_de_destino longitud_destino
494 MSSQLSERVER datetime2 DB2 TIMESTAMP NULO

Paso 5. Identifique el artículo de la suscripción de replicación para volver a configurar. Use la instrucción Transact-SQL USE para cambiar de la base de datos maestra a la base de datos desde la que se va a replicar.

USE [Test]  
select name, status from sysarticles  

Los resultados deben mostrar el nombre del artículo que se va a modificar. En este ejemplo, en la tabla siguiente se muestran los resultados en los que el nombre es DB2TS01.

nombre estado
DB2TS01 25

Si el valor de estado es 1 o 9, el artículo se configura para el formato literal de cadena.

Si el valor de estado es 17 o 25, el artículo se configura para el formato con parámetros.

Paso 6. Configura el elemento de suscripción de replicación para los comandos parametrizados.

USE [Test]  
DECLARE @publication AS sysname;  
DECLARE @article AS sysname;  
SET @publication = N'DB2TS_PUB01';  
SET @article = N'DB2TS01';  
  
EXEC sp_changearticle @publication, @article, 'status' , 'parameters' , 0 , 0;  
  

Para obtener más información, vea Conceptos de procedimientos almacenados del sistema de replicación (https://go.microsoft.com/fwlink/?LinkId=193232) en los Libros en línea de SQL Server.

Se produce un error en la operación INSERT de replicación con el error 8152: los datos binarios o de cadena se truncarían

Problema

Puede fallar la operación INSERT de la replicación de SQL Server con el error 8152 de SQL Server (los datos de cadena o binarios podrían truncarse). Esto puede ocurrir cuando (1) El proveedor de datos no está configurado para usar metadatos anticipados y (2) La replicación no está configurada para usar instrucciones INSERT parametrizadas.

Solución

Paso 1. Vuelva a configurar la conexión del proveedor de datos para especificar "use early metadata=true" en la definición del origen de datos del suscriptor de replicación de SQL Server.

Para obtener más información, consulte Configurar proveedores de datos para vínculos de datos DB2 (DB2): propiedades completas en la documentación del proveedor OLE DB para DB2.

Paso 2 Vuelva a configurar el artículo sobre la suscripción de replicación de SQL Server para incluir la opción "24" ("Incluye el nombre de columna en instrucciones INSERT y usa instrucciones parametrizadas").

Para obtener más información, consulte la sección Replicación de SQL Server sp_addarticle (Transact-SQL) en la documentación de SQL Server.