Случилось так, что у меня слетело время на серверах. стал 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
Понравилась ли вам эта идея?
Добрый день, Алексей.
Уведомим о данной проблеме ответственную команду разработки, чтобы внесли изменения в последующих релизах.