Compartir a través de


Errores 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.

Asignaciones de tipos de datos incorrectos

Error de replicación de las columnas DATETIME2 en las columnas DB2 TIMESTAMP

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

Asignaciones de tipos de datos incorrectos

La Replicación de SQL Server puede convertir los datos incorrectamente, en función de las asignaciones predeterminadas desde los tipos de datos de SQL Server a los de DB2. Es recomendable que el administrador y programador revisen las asignaciones de tipos de datos de replicación mediante los siguientes procedimientos almacenados del sistema 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 de replicación de las columnas DATETIME2 en las columnas DB2 TIMESTAMP

Problema

Puede producirse un error en la replicación de SQL Server 2008 a DB2 para z/OS con SQLCODE -188 (la representación de cadenas de un valor de fecha y hora no es un valor válido). Esto sucede 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

Vuelva a configurar la replicación de SQL Server 2008 para asignar DATETIME2 a DB2 TIMESTAMP y comandos de artículo de suscripción con parámetros. Esto permite al proveedor de datos dar formato a DATETIME2 como estructura DB2 TIMESTAMP compatible con el servidor de base 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 debe modificar. USE MASTER para todos los pasos.

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

Los resultados deberían indicar el valor mapping_id que se debe modificar. En la tabla siguiente se muestra el panel de resultados de este ejemplo donde el valor mapping_id es 189.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
189 MSSQLSERVER datetime2 DB2 VARCHAR 27

Paso 2. Coloque 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 valor mapping_id que se muestra en la tabla siguiente es 189.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
494 MSSQLSERVER datetime2 DB2 timestamp NULL

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

USE [Test]  
select name, status from sysarticles  

Los resultados deberían mostrar el nombre del artículo que se debe modificar. Para este ejemplo, en la tabla siguiente se muestran los resultados cuando el nombre es DB2TS01.

name status
DB2TS01 25

Si el valor de estado es 1 o 9, el artículo está configurado para el formato literal de la cadena.

Si el valor de estado es 17 o 25, el artículo está configurado para el formato parametrizado.

Paso 6. Configure el artículo de suscripción de réplica para 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 SQL Server Libros en pantalla.

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

Problema

Se puede producir el error 8152 de SQL Server en la operación INSERT de Replicación de SQL Server (los datos binarios o de cadena se truncarán). Esto puede ocurrir cuando (1) El proveedor de datos no está configurado para usar metadatos tempranos 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, vea Configurar proveedores de datos para vínculos de datos DB2 (DB2) Todas las propiedades del proveedor OLE DB para DB2 documentación.

Paso 2 Vuelva a configurar el artículo de la suscripción 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, vea Replicación de SQL Server sp_addarticle (Transact-SQL) en SQL Server documentación.