Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
kominet
Member

Откуда:
Сообщений: 40
Добрый день. Всю голову сломал над этой проблеммой. Есть 2 сервера, один
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) Jun 11 2012 16:41:53 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Второй
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Требуется реалицировать одну БД. Репликация нужна одноранговая (с обновляемыми подписками не работает т.к. если я правильно понимаю софт работающий с БД использует транзакции с активными точками востановления).

Впрочем репликация запускается, данные передаются, но не понятно в какой момент при действиях с одной из таблиц реплика падает с ошибкой:

"Ошибка при преобразовании типа данных varchar к numeric"

в мониторе репликации по этому поводу удалось посмотреть только:

"Выполнявшаяся команда:
if @@trancount > 0 rollback tran
(Номер последовательности транзакций: 0x00001931000007F8003700000000, идентификатор команды: 4)

Сообщения об ошибках:
Ошибка при преобразовании типа данных varchar к numeric. (Источник: MSSQLServer, номер ошибки: 8114)
Получить справку: http://help/8114
Ошибка при преобразовании типа данных varchar к numeric. (Источник: MSSQLServer, номер ошибки: 8114)
Получить справку: http://help/8114"

Базы восстановлены с одного Бэкапа, схема таблиц идентичная.

/****** Object: Table [LSDBO].[attrib_value] Script Date: 08/23/2013 10:14:54 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [LSDBO].[attrib_value](
[ID] [numeric](18, 0) NOT NULL,
[Object_ID] [numeric](18, 0) NOT NULL,
[TreeLink_ID] [numeric](18, 0) NOT NULL,
[Attrib_ID] [numeric](18, 0) NOT NULL,
[Value_ID] [numeric](18, 0) NOT NULL,
[author_id] [int] NOT NULL,
[user_id] [int] NOT NULL,
[cd] [datetime] NOT NULL,
[ws_id] [int] NOT NULL,
[filial_id] [int] NOT NULL,
[Parent_ID] [numeric](18, 0) NOT NULL,
[msrepl_tran_version] [uniqueidentifier] NOT NULL,
CONSTRAINT [attrib_value_PK] PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [LSDBO].[attrib_value] WITH NOCHECK ADD CONSTRAINT [attrib_key1] FOREIGN KEY([Attrib_ID])
REFERENCES [LSDBO].[attrib] ([id])
NOT FOR REPLICATION
GO

ALTER TABLE [LSDBO].[attrib_value] CHECK CONSTRAINT [attrib_key1]
GO

ALTER TABLE [LSDBO].[attrib_value] WITH NOCHECK ADD CONSTRAINT [object_reference_key2] FOREIGN KEY([Object_ID])
REFERENCES [LSDBO].[object_reference] ([id])
NOT FOR REPLICATION
GO

ALTER TABLE [LSDBO].[attrib_value] CHECK CONSTRAINT [object_reference_key2]
GO

ALTER TABLE [LSDBO].[attrib_value] ADD DEFAULT ((0)) FOR [Parent_ID]
GO

ALTER TABLE [LSDBO].[attrib_value] ADD CONSTRAINT [MSrepl_tran_version_default_086C62EC_9717_4AB6_B496_DF929EAEFB4B_1550628567] DEFAULT (newid()) FOR [msrepl_tran_version]
GO


При этом не любое обращение к этой таблице валит реплику, работая в программе (Lotsia PDM) данные успешно вносятся и изменяются. И только, как я понял при работе с строчками содержащих в столбце [TreeLink_ID] отличное от нуля, возникает эта ошибка.

Подскажите пожалуйста, могу ли я как то зная номер последовательности транзакций посмотреть какое именно действие привело к этой ошибке? Если ввожных данных мало чтобы понять что тут вообще происходит извиняюсь, пока ещё не очень опытне в данных вопросах и если подскажите что ещё нужно выложить - сразу сделаю.
23 авг 13, 10:25    [14745746]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
andy st
Member

Откуда:
Сообщений: 806
kominet, имеет смысл запустить профайлер с отловом ошибок и посмотреть, на какой именно команде всё встаёт.
как вариант - разные разделители дробной части или где-то еще есть триггеры
23 авг 13, 10:32    [14745813]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
kominet
Member

Откуда:
Сообщений: 40
andy st,

Прошу прощения, можно чуть подробней описать что нужно сделать?
23 авг 13, 10:40    [14745883]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
andy st
Member

Откуда:
Сообщений: 806
kominet,
запустить SQL Server Profiler
подключиться к серверу
в свойствах трассировки выбрать "показать все события"
в разделе Errors and warnings выбрать всё (или то, что нужно)
в фильтрах столбцов ограничить события так,чтобы отражались только события, вызванные локальными подключениями и подключениями с удаленного сервера
исключить события агента и аналогичных служб
запустить
ждать или спровоцировать
медитировать над полученной трассой. в случае возникновения проблем с отловом и углубленного понимания работы профилёра - F1 в профилёре
23 авг 13, 10:46    [14745939]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
kominet
Выполнявшаяся команда:
if @@trancount > 0 rollback tran
(Номер последовательности транзакций: 0x00001931000007F8003700000000, идентификатор команды: 4)

kominet
Подскажите пожалуйста, могу ли я как то зная номер последовательности транзакций посмотреть какое именно действие привело к этой ошибке?
ЕМНИП, примерно так:
exec distribution.dbo.sp_browsereplcmds @xact_seqno_start = '0x00001931000007F8003700000000', @xact_seqno_end = '0x00001931000007F8003700000000', @command_id = 4;
23 авг 13, 10:53    [14745988]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
kominet
Member

Откуда:
Сообщений: 40
invm,
на
exec distribution.dbo.sp_browsereplcmds @xact_seqno_start = '0x00001931000007F8003700000000', @xact_seqno_end = '0x00001931000007F8003700000000', @command_id = 4;

выдаёт
Сообщение 21110, уровень 16, состояние 1, процедура sp_browsereplcmds, строка 48
Должны быть указаны значения параметров @xact_seqno_start и @publisher_database_id, если указан @command_id

я уже вообще перестал понимать что тут происходит ( вон же они в запросе явно заданы?)
23 авг 13, 12:00    [14746657]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
Glory
Member

Откуда:
Сообщений: 104760
kominet
Сообщение 21110, уровень 16, состояние 1, процедура sp_browsereplcmds, строка 48
Должны быть указаны значения параметров @xact_seqno_start и @publisher_database_id, если указан @command_id

я уже вообще перестал понимать что тут происходит ( вон же они в запросе явно заданы?)

@publisher_database_id не задана
23 авг 13, 12:02    [14746688]     Ответить | Цитировать Сообщить модератору
 Re: Проблемма одноранговой репликации. Ошибка при преобразовании типа данных varchar к numeric  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
kominet,

declare @id int;

select
 @id = id
from
 distribution.dbo.MSpublisher_databases
where
 publisher_db = N'Имя вашей БД';

exec distribution.dbo.sp_browsereplcmds @xact_seqno_start = '0x00001931000007F8003700000000', @xact_seqno_end = '0x00001931000007F8003700000000', @command_id = 4, @publisher_database_id = @id;
23 авг 13, 12:19    [14746862]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить