Ответы на загадочные вопросы о типе данных 'timestamp' Sybase ASE

Эрик Джонсон задает следующие вопросы в августе 2010 года. "Что такое таинственный тип метки времени в Sybase?

  1. Какого черта это метка времени?
  2. Имеет ли это какое-либо отношение ко времени или дате?
  3. Могу ли я преобразовать его в дату и время?
  4. Если это не время или дата, для чего ты это используешь?"

Я попытался ответить на вышеуказанный пост, но этот сайт не принял новый ответ из-за возраста оригинального поста. Поскольку этот вопрос остается часто задаваемым вопросом среди специалистов по SAP/Sybase ASE, я решил повторно опубликовать оригинальные вопросы выше и, надеюсь, дать некоторые четкие ответы ниже.


Ответ на вопрос №1: "Что за чертова метка времени?"

• Временная метка базы данных Sybase ASE хранится централизованно во внутренней таблице в памяти "dbtable" этой базы данных - эта таблица создается, когда база данных переводится в оперативный режим. Вы можете запросить текущую временную метку БД, выбрав @@dbts - имейте в виду, что это значение временной метки varbinary(8) "База данных" зависит от платформы, т. Е. Подвергается действительному порядку байтов по сравнению с малым байтом.

• Каждая пользовательская таблица может иметь один столбец отметок времени для хранения значений отметок времени "База данных" INSERT / UPDATE данной строки. Все значения столбца метки времени "Таблица" автоматически поддерживаются ASE (как и столбец идентификаторов) при успешном завершении команды TSQL DML. Однако, в отличие от временного сэмпла "Database", временные метки "Table" не зависят от платформы, так как они всегда сохраняются в порядке байтов с прямым порядком байтов независимо от порядка байтов в платформе O/S (подробности см. Ниже).


Ответ на вопрос № 2: "Имеет ли это какое-либо отношение ко времени или дате?"

Нет, значения в метке времени "База данных" и метках времени страницы "Локальные" не отражают фактическую дату / время.


Ответ на вопрос № 3: "Могу ли я преобразовать его в дату?"

Нет, вы не можете преобразовать временную метку "База данных" или "Локальную" временную метку своих страниц в значение даты / времени.


Ответ на вопрос № 4: "Если это не время или дата, для чего вы их используете?"

• Метка времени "База данных" увеличивается на единицу всякий раз, когда страница в базе данных изменяется или создается, в то время как метка времени "Локальной" для затронутой страницы (в пределах заголовка страницы) затем синхронизируется с меткой времени "База данных" того момента времени.

• При сравнении с отметкой времени "База данных" в настоящее время отметка времени "Локальная" страницы базы данных отражает относительный возраст последнего обновления или первого создания этой страницы; следовательно, ASE может определить хронологический порядок обновлений / созданий для всех страниц в базе данных.

• Приложение может использовать столбец отметок времени "Таблица" аналогично столбцу идентификаторов, чтобы найти самые последние или наименее недавно вставленные / обновленные строки независимо от значений ключей строк.


Дополнительная информация, предупреждения и предупреждения: -

(1) Временные метки "База данных" и "Локальные" хранятся в 3 частях и зависят от порядкового номера платформы ОС. например, 0xHHHH 0000 LLLLLLLL

  • 2-байтовый старший порядок - 0xHHHH
  • 2-байтовый заполнитель - 0x0000
  • 4-байтовый младший порядок - 0xLLLLLLLL

(2) Временная метка пользователя "Таблица" также хранится в 3 частях, но она всегда находится в ориентации старшего разряда. например, 0x0000 HHHH LLLLLLLL

  • 2-байтовый заполнитель - 0x0000
  • 2-байтовый старший порядок - 0xHHHH
  • 4-байтовый младший порядок - 0xLLLLLLLL

(3) Временная метка базы данных хранится в системной таблице в памяти dbtable данной базы данных (которая создается, когда база данных переводится в оперативный режим).

  • Примечание1 - Значения столбца временной метки "Таблица" хранятся так же, как и другие значения столбца на страницах данных и / или индексов таблицы базы данных, в которой определен столбец временной метки.
  • Примечание 2. Имейте в виду, что запрос метки времени текущей базы данных "База данных" с помощью SELECT @@dbts возвращает ее шестнадцатеричное представление, которое подчиняется порядку байтов платформы ОС.
  • Примечание 3. - Напротив, запрос метки времени "База данных" по DBCC dbtable (не рекомендуется) возвращает его шестнадцатеричное представление с прямым порядком байтов, таким образом, оно не зависит от платформы.
  • ПРЕДУПРЕЖДЕНИЕ. Когда временная метка "База данных" данной базы данных приближается к своему максимальному пределу, т.е. (0xFFFF, 0xFFFFFFFF), и может потребоваться десятилетие или более, чтобы достичь этой точки в зависимости от частоты операций вставки / обновления в базе данных, ASE будет выдает предупреждение и дальнейшая вставка / обновление невозможны - единственная возможность - экспортировать данные из всех объектов, используя BCP (плюс хранимые процедуры через sp_showtext), удалить базу данных, создать ее заново (с новой почти нулевой базой данных) метка времени) и импортировать данные (и хранимые процедуры).

К вашему сведению - приведенные выше ответы, советы и подсказки являются подлинными и точными, поскольку я работал в Sybase и сейчас работаю в SAP, владеющей продуктом ASE.

0 ответов

Другие вопросы по тегам