Respuestas a las misteriosas preguntas de tipo de datos de Sybase ASE 'timestamp'

Eric Johnson formuló las siguientes preguntas en agosto de 2010. "¿Qué es el misterioso tipo de datos de marca de hora en Sybase?

¿Qué diablos es una marca de tiempo?¿Tiene alguna relación con la hora o la fecha?¿Puedo convertirlo a datetime?Si no es una hora o una fecha, ¿para qué la usas?

Intenté responder a la publicación anterior, pero este sitio no aceptaría una nueva respuesta debido a la antigüedad de la publicación original. Como el tema sigue siendo una pregunta frecuente entre los profesionales de SAP / Sybase ASE, he decidido volver a publicar las preguntas originales y darles algunas respuestas claras a continuación.

Responda a la pregunta # 1: '¿Qué diablos es la marca de tiempo?'

• La marca de tiempo de una base de datos de Sybase ASE se guarda de manera central en una tabla interna de la base de datos de esa base de datos: esta tabla se crea cuando una base de datos se pone en línea. Puede consultar la marca de tiempo de la base de datos actual seleccionando @@ dbts. Tenga en cuenta que este valor de marca de tiempo 'Base de datos' varbinary (8) depende de la plataforma, es decir, está sujeto a endianness grande contra pequeño.

• Cada tabla de usuario puede tener una columna de marca de tiempo para mantener los valores de marca de tiempo de 'Base de datos' de INSERT / UPDATE de una fila dada. Todos los valores de la columna de marca de tiempo 'Tabla' se mantienen automáticamente por ASE (al igual que la columna de identidad) al completar con éxito un comando DML de TSQL. Sin embargo, a diferencia de la marca de tiempo 'Base de datos', los valores de marca de tiempo 'Tabla' son independientes de la plataforma, ya que siempre se conservan en orden de bytes Big-endian independientemente de la endianidad de la plataforma O / S (consulte la información adicional a continuación para obtener más información).

Respuesta a la pregunta 2: "¿Tiene alguna relación con la hora o la fecha?"

No, los valores de la marca de tiempo 'Base de datos' y las marcas de tiempo 'Local' de la página no reflejan la fecha / hora real.

Respuesta a la Q # 3: '¿Puedo convertirlo a una fecha y hora?'

No, no puede convertir la marca de tiempo 'Base de datos' o las marcas de tiempo 'Local' de sus páginas en valor de fecha / hora.

Responda a la pregunta 4: "Si no es una hora o una fecha, ¿para qué la usa?"

• La marca de tiempo 'Base de datos' se incrementa en uno cada vez que se modifica o crea una página dentro de una base de datos, mientras que la marca de tiempo 'Local' de la página afectada (dentro de su encabezado de página) se sincroniza con la marca de tiempo 'Base de datos' de ese momento.

• Cuando se compara con la marca de tiempo 'Base de datos' en el momento actual, la marca de tiempo 'Local' de una página de la base de datos refleja la antigüedad relativa de la última actualización o la primera creación de esa página; por lo tanto, ASE puede indicar el orden cronológico de actualizaciones / creaciones para todas las páginas dentro de una base de datos.

• La aplicación puede hacer uso de la columna de marca de tiempo 'Tabla' de manera similar a la columna de identidad para encontrar las filas insertadas / actualizadas más recientemente o menos recientemente, independientemente de los valores clave de las filas.

Más información, advertencias y advertencias: -

(1) Las marcas de tiempo 'Base de datos' y 'Local' se almacenan en 3 partes y son dependientes de la plataforma OS. p.ej. 0xHHHH 0000 LLLLLLLL

2 bytes de alto orden - 0xHHHHRelleno de 2 bytes - 0x00004 bytes de orden inferior - 0xLLLLLLLL

(2) La marca de tiempo 'Tabla' del usuario también se almacena en 3 partes, pero siempre está en orientación Big-endian. p.ej. 0x0000 HHHH LLLLLLLL

Relleno de 2 bytes - 0x00002 bytes de alto orden - 0xHHHH4 bytes de orden inferior - 0xLLLLLLLL

(3) La marca de tiempo de la base de datos se guarda en una tabla de tabla de sistema en memoria de una base de datos determinada (que se crea cuando una base de datos se pone en línea).

Nota1: los valores de columna de marca de tiempo de "tabla" se mantienen como otros valores de columna en las páginas de datos y / o índice de la tabla de base de datos, en la que se define la columna de marca de tiempo.Nota2: tenga en cuenta que al consultar la marca de tiempo 'Base de datos' de la base de datos actual mediante SELECT @@ dbts, se obtiene su representación hexadecimal, que está sujeta a la Endianness de la plataforma del sistema operativo.Nota 3 - En contraste, al consultar la marca de tiempo 'Base de datos' por DBCC dbtable (no recomendado), se obtiene su representación hexadecimal de Big-endian, por lo tanto, es independiente de la plataforma.ADVERTENCIA: cuando la marca de tiempo 'Base de datos' de una base de datos determinada se acerca a su límite máximo, es decir (0xFFFF, 0xFFFFFFFF), y puede tardar una década o más en llegar a este punto, según las frecuencias de las operaciones de inserción / actualización dentro de la base de datos, el ASE envíe una advertencia y ya no será posible insertar / actualizar más. La única opción es exportar los datos de todos los objetos utilizando BCP (más los procedimientos almacenados a través de sp_showtext), eliminar la base de datos, crearla de nuevo (con la nueva 'Base de datos near-zer' marca de tiempo) e importar los datos (y procedimientos almacenados).

FYI: las respuestas, sugerencias y consejos anteriores son auténticos y precisos, ya que trabajé para Sybase y ahora trabajo SAP, que es el propietario del producto ASE.

Respuestas a la pregunta(0)

Su respuesta a la pregunta