Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?


Не так давно пришлось переносить базу с версии 10.50.4042.0​(2016?) на 10.0.5538.0​(2014?)
"Прямого" переноса - т.е. бекап+ресторе - не получилось - несовпадение по версиям бекапа.
Делалось посредством ДТС.
Прошло нормально - данные перелились, триггеры позднее накатил скриптом.


Все работает, но...


Временами в поле типа TIMESTAMP пишутся дуплицируемые значения.

Победить это Я могу прогнав х32000 пустых вставок в таблицу.

Может кто то понятно пояснить где спрямить и сразу поправить timestamp sequence?
14 сен 18, 10:55    [21674468]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
PinkCat,

я человек тёмный, но что вы вкладыаете в "дуплицирует" а то гугл меня шлёт в генетику
14 сен 18, 11:20    [21674497]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
aleks222
Member

Откуда:
Сообщений: 310
TIMESTAMP - глобальное свойство СЕРВЕРА.
И уникально, тоже только в пределах сервера.
Это простая последовательность номеров обновлений в рамках всего сервера.

Не надо было закладываться на уникальность.
Можно попытаться обновить все TIMESTAMP на х32000 вниз.
14 сен 18, 11:25    [21674507]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
aleks222
TIMESTAMP - глобальное свойство СЕРВЕРА.
И уникально, тоже только в пределах сервера.
Это простая последовательность номеров обновлений в рамках всего сервера.

Не надо было закладываться на уникальность.
Можно попытаться обновить все TIMESTAMP на х32000 вниз.

прям таки сервера
14 сен 18, 11:26    [21674510]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
invm
Member

Откуда: Москва
Сообщений: 8155
PinkCat
Может кто то понятно пояснить где спрямить и сразу поправить timestamp sequence?
Спрямить можно перестав использовать timestamp как нечто уникальное. Ибо он предназаначен не для этого и уникальность значений не гарантируется.
14 сен 18, 11:39    [21674530]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
TaPaK,

Выборка

SELECT RowTS,
Count(*)
FROM [dbo].[Defaults]
Group BY RowTS
HAVING COUNT(*) > 1

​Где RowTS поле типа TIMESTAMP не пуста.
14 сен 18, 11:50    [21674541]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
PinkCat,

и как dts перетянул вам timestamp?
14 сен 18, 11:55    [21674551]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4555
PinkCat
Не так давно пришлось переносить базу с версии 10.50.4042.0​(2016?) на 10.0.5538.0​(2014?)

SQL2008R2 -> SQL2008

http://sqlserverbuilds.blogspot.com/
14 сен 18, 11:58    [21674556]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
TaPaK,

А нормально перетащил.
RowTS генерируется и используется в триггерах чтобы связать запись в dbo.Defaults с другими таблицами. Структура и названия таблиц на момент определения dbo.Defaults - неизвестны. Отсюда и извращение со связыванием.

Проблема в том, что похоже генератор TIMESTAMP не обновился - выпадают те же значения, которые уже использовались.
14 сен 18, 12:16    [21674586]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
komrad,

Извини, но тонкости версий мне не особо интересны.
Где посмотреть точную версию сервера - нашел, а уж какой он - интересует достаточно мало.
Существенным было то, что бэкап+ресторе не совместились - пришлось гнать по ДТС.
А теперь - непонятные проблемы ползут...
14 сен 18, 12:22    [21674598]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
iiyama
Member

Откуда:
Сообщений: 548
PinkCat
Проблема в том, что похоже генератор TIMESTAMP не обновился - выпадают те же значения, которые уже использовались.


Что выдает @@DBTS и SELECT MAX(RowTS) FROM [dbo].[Defaults] ?
14 сен 18, 12:33    [21674605]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 631
PinkCat
TaPaK
и как dts перетянул вам timestamp?

А нормально перетащил.

Вам мягко намекают на то, что настоящий timestamp нельзя ни задать ни изменить.
По этому узнайте последнее выданное значение timestamp в базе
PRINT @@DBTS

И если результат не похож на то что у вас "дуплицируется", то показывайте скрипт создания таблицы и проблемное поле в ней.
А если похож, то тем более.
14 сен 18, 12:39    [21674612]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 262
TaPaK
PinkCat,

я человек тёмный, но что вы вкладыаете в "дуплицирует" а то гугл меня шлёт в генетику


с этим словом в генетику - это еще не самы плохой вариант
14 сен 18, 12:51    [21674620]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
iap
Member

Откуда: Москва
Сообщений: 46430
PinkCat
TaPaK,

А нормально перетащил.
RowTS генерируется и используется в триггерах чтобы связать запись в dbo.Defaults с другими таблицами. Структура и названия таблиц на момент определения dbo.Defaults - неизвестны. Отсюда и извращение со связыванием.

Проблема в том, что похоже генератор TIMESTAMP не обновился - выпадают те же значения, которые уже использовались.
А у этого поля после переноса точно тип TIMESTAMP?
Закрадываются сомнения.
14 сен 18, 12:52    [21674621]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
iap
PinkCat
TaPaK,

А нормально перетащил.
RowTS генерируется и используется в триггерах чтобы связать запись в dbo.Defaults с другими таблицами. Структура и названия таблиц на момент определения dbo.Defaults - неизвестны. Отсюда и извращение со связыванием.

Проблема в том, что похоже генератор TIMESTAMP не обновился - выпадают те же значения, которые уже использовались.
А у этого поля после переноса точно тип TIMESTAMP?
Закрадываются сомнения.

вставить в timestamp вообще нельзя, про то и вопрос


автор
и как dts перетянул вам timestamp?
14 сен 18, 12:59    [21674626]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
iiyama,

PRINT @@DBTS = 0x0000000000006D6A
Max(RowTS) = 0x000000000003290E
14 сен 18, 13:01    [21674632]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
Guf,

Вам мягко намекают на то, что настоящий timestamp нельзя ни задать ни изменить.
-----
Я, как бы, это знаю.


показывайте скрипт создания таблицы и проблемное поле в ней.
-----
А поможет?
Я вот думаю что нет.

Следующим вопросом будет вопрос об триггерах.
И там тоже нет ничего критичного.
Критично то, что текущее значение счетчика не соответствует состоянию базы.
И Я не знаю как его поправить...

ALTER TABLE [dbo].[Defaults] DROP CONSTRAINT [FK_Defaults_Keys]
GO

/****** Object:  Table [dbo].[Defaults]    Script Date: 14/09/2018 11:05:15 ******/
DROP TABLE [dbo].[Defaults]
GO

/****** Object:  Table [dbo].[Defaults]    Script Date: 14/09/2018 11:05:15 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Defaults](
	[IDs] [int] IDENTITY(1,1) NOT NULL,
	[Active] [varchar](1) NOT NULL DEFAULT ('Y'),
	[KeyID] [int] NOT NULL DEFAULT ((1)),
	[RecordType] [int] NOT NULL DEFAULT ((0)),
	[SequenceNo] [int] NOT NULL,
	[RowID] [binary](8) NULL,
[color=red][b]	[RowTS] [timestamp] NOT NULL,[/b][/color]
PRIMARY KEY CLUSTERED 
(
	[IDs] 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

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Defaults]  WITH CHECK ADD  CONSTRAINT [FK_Defaults_Keys] FOREIGN KEY([KeyID])
REFERENCES [dbo].[Keys] ([IDs])
GO

ALTER TABLE [dbo].[Defaults] CHECK CONSTRAINT [FK_Defaults_Keys]
GO
14 сен 18, 13:06    [21674640]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
PinkCat
iiyama,

PRINT @@DBTS = 0x0000000000006D6A
Max(RowTS) = 0x000000000003290E

ещё раз. timestamp это монотонно возрастающий идентификатор в рамках базы. Править max нельзя(может можно прям в db_info ). Это поле предназначено для работы именно как rowversion, и все остальные извращения это личные проблемы:)
14 сен 18, 13:08    [21674644]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
iap,

А у этого поля после переноса точно тип TIMESTAMP?
-----
Да, тип поля сохранился при переносе - иначе у меня бы все давно сломалось.
Сейчас перепроверил - все как должно быть.
14 сен 18, 13:09    [21674646]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
TaPaK,

вставить в timestamp вообще нельзя, про то и вопрос
-----
DTS - справляется с реплецированием поля.
Но, повторюсь, на работоспособность системы не перенос или неправильные значения в стампах никак не влияют.
Оно критично только на момент вставки при подключенных триггерах.
14 сен 18, 13:13    [21674650]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
PinkCat
iap,

А у этого поля после переноса точно тип TIMESTAMP?
-----
Да, тип поля сохранился при переносе - иначе у меня бы все давно сломалось.
Сейчас перепроверил - все как должно быть.


да, скорее всего это выглядит как
CREATE TABLE #a (a timestamp)

INSERT INTO #A DEFAULT VAlues
SELECT * FROM #a

SELECT* INTO #b FROM #a
SELECT * FROM #b
DROP TABLE #a
DROP TABLE #b


при этом dbts сдвигается от текущего в той базе куда вставляете, и решение на уникальность timestamp откровенная ересь.
14 сен 18, 13:16    [21674652]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
TaPaK,

может можно прям в db_info
-----
Вот что-то подобное Я и ищу...
А про то, что НЕЛЬЗЯ ​- Я знаю... но ведь и дуплицироваться - не должно... а имеет место быть...
Так что нестандартная ситуация требует нестандартных мер...
14 сен 18, 13:17    [21674655]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
PinkCat
TaPaK,

может можно прям в db_info
-----
Вот что-то подобное Я и ищу...
А про то, что НЕЛЬЗЯ ​- Я знаю... но ведь и дуплицироваться - не должно... а имеет место быть...
Так что нестандартная ситуация требует нестандартных мер...

прям в db_info это ещё большее извращение. Продолжайте пустые вставки на разницу....
зы у вас какая-то проблема со словом дубль?
14 сен 18, 13:21    [21674661]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5549
автор
не должно... а имеет место быть...

конструкция select into никому ничего не должна
14 сен 18, 13:24    [21674663]     Ответить | Цитировать Сообщить модератору
 Re: Когда MS SQL дуплицирует значения в поле типа TIMESTAMP?  [new]
PinkCat
Member

Откуда:
Сообщений: 954
TaPaK,

решение на уникальность timestamp откровенная ересь.
-----
Возможно.
Я ведь не ДБА.
Решаю задачу в том виде в каком ее дают.
А задача была следующая:
- есть запись в таблице dbo.Defaults
- для нее должна быть парная и единственная запись в таблице которая будет определена позднее
- таблиц которые являются парными - полсотни и их количество увеличится по мере обновления документации партнером.
Есть у ДБА подходящее решение на такой случай?
14 сен 18, 13:27    [21674666]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить