Идея
Обсуждение

Ошибка часового пояса в БД. [dbo].[SysProfileData]

Случилось так, что у меня слетело время на серверах. стал 2041 год. Исправили. 

Но вохник вопрос а что же с БД произошло? много ли записей с датой в будущем теперь у меня? Ответ - не много - около 1000, все исправил.

Но по ходу пьесы наткнулся на интересную вещь. Чисто логически в БД не должно быть записей с CratedOn или ModifiedOn > GETUTCDATE(). А они есть и не где либо, а в системных таблицах.

Для поиска своих записей из 2041 года набросал скрипт 

if  OBJECT_ID(N'tempdb..#Results') is not null
	Drop Table #Results
 
CREATE TABLE #Results (ColumnName nvarchar(370), Id uniqueidentifier)
 
SET NOCOUNT ON
 
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
WHILE @TableName IS NOT NULL
BEGIN
	SET @ColumnName = ''
	SET @TableName = 
	(
		SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
		FROM 	INFORMATION_SCHEMA.TABLES
		WHERE 		TABLE_TYPE = 'BASE TABLE'
			AND	QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
			AND	OBJECTPROPERTY(
					OBJECT_ID(
						QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
							), 'IsMSShipped'
						    ) = 0
	)
 
	WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
	BEGIN
 
		SET @ColumnName =
		(
			SELECT MIN(QUOTENAME(COLUMN_NAME))
			FROM 	INFORMATION_SCHEMA.COLUMNS
			WHERE 		TABLE_SCHEMA	= PARSENAME(@TableName, 2)
				AND	TABLE_NAME	= PARSENAME(@TableName, 1)
				AND	QUOTENAME(COLUMN_NAME) > @ColumnName
				And QUOTENAME(COLUMN_NAME) in ('[CreatedOn]', '[ModifiedOn]')
		)
		IF @ColumnName IS NOT NULL
		BEGIN
 
			INSERT INTO #Results
			EXEC
			(
				'SELECT ''' + @TableName + '.' + @ColumnName + ''', Id  
				FROM ' + @TableName + ' (NOLOCK) ' +
				' WHERE ' + @ColumnName + ' > GETUTCDATE() '
			)
		END
	END	
END
 
SELECT ColumnName, Id FROM #Results

После устранения 2041 года остались записи

ColumnName    Id

[dbo].[SysPackageSchemaData].[ModifiedOn]    2C172889-10E7-460D-A630-91E20CCC9ED8
[dbo].[SysPackageSqlScript].[ModifiedOn]    B2C17845-F2FD-43A9-97DF-946E2D74588C
[dbo].[SysProfileData].[ModifiedOn]    452EB96A-2F2D-4CDC-B244-823DEE7F36EA
[dbo].[SysProfileData].[ModifiedOn]    A46E427B-1514-478C-8F1E-A909B7D32B03
[dbo].[SysProfileData].[ModifiedOn]    349014E2-54AB-41C5-8072-9278D1829F5A
[dbo].[SysProfileData].[ModifiedOn]    B1B78E04-2D3D-414D-BD1F-565D9D96213E
[dbo].[SysProfileData].[ModifiedOn]    553596E4-06D1-4299-B012-F2098849E271
[dbo].[SysProfileData].[ModifiedOn]    D453578C-DB8C-4ECC-918A-26ED068054F4
[dbo].[SysProfileData].[ModifiedOn]    2F316056-B411-4FEF-BBD2-47CC5167320E
[dbo].[SysProfileData].[ModifiedOn]    DD200005-1F2F-4891-B3F2-32EF08CEF537
[dbo].[SysProfileData].[ModifiedOn]    E80BE419-186B-4AFA-A726-8CFC362DCAB1
[dbo].[SysProfileData].[ModifiedOn]    EFE8B4C8-6612-42EB-A39C-2418ACFB532D

 

Если смотреть конкретно по записям SysProfileData, то там дата текущего часового профиля, а не UTC. Т.е. если в моем запросе заменить GETUTCDATE() на GETDATE(), то скрипт больше не выдает эти записи. На либо баг сохранения данных в БД.

Но не дают покоя эти записи 

тут больше похоже на баг в поставке.

Террасофт, что скажите?

И у кого есть такие записи из будущего?

 

Версия 7.17.1

1 комментарий

Добрый день, Алексей.

Уведомим о данной проблеме ответственную команду разработки, чтобы внесли изменения в последующих релизах.

Показать все комментарии