database - Respuestas a las misteriosas preguntas sobre el tipo de datos Sybase ASE ''timestamp''
(0)
Eric Johnson hizo las siguientes preguntas en agosto de 2010. "¿Cuál es el misterioso tipo de datos ''timestamp'' en Sybase?
- ¿Qué diablos es una marca de tiempo?
- ¿Tiene alguna relación con la hora o la fecha?
- ¿Puedo convertirlo a una fecha y hora?
- Si no es una fecha o una hora, ¿para qué la usas?
Intenté responder 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 ASE de SAP / Sybase, he decidido volver a publicar las preguntas originales anteriores y dar esperanzadamente algunas respuestas claras a continuación.
Responda a Q # 1: ''¿Qué diablos es timestamp?''
• La marca de tiempo de una base de datos Sybase ASE se mantiene centralmente en una tabla interna en memoria ''dbtable'' de esa base de datos; esta tabla se genera cuando una base de datos se pone en línea. Puede consultar la marca de tiempo actual de la base de datos seleccionando @@ dbts. Tenga en cuenta que este valor varbinary (8) de la marca de tiempo de la "base de datos" depende de la plataforma, es decir, está sujeto a una endiancia grande o pequeña.
• Cada tabla de usuario puede tener una columna de marca de tiempo para contener los valores de marca de tiempo de ''Base de datos'' de INSERT / UPDATE de una fila determinada. Todos los valores de la columna de marca de tiempo ''Tabla'' son mantenidos automáticamente por ASE (al igual que la columna de identidad) al completar con éxito un comando TSQL DML. Sin embargo, a diferencia del timestsamp ''Database'', los valores de marca de tiempo ''Table'' 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 (para más información, ver más información a continuación).
Responda a Q # 2: ''¿Tiene alguna relación con la hora o la fecha?''
No, los valores en las indicaciones de fecha y hora ''Local'' de la ''Marca de tiempo'' de la ''Base de datos'' no reflejan la fecha / hora real.
Responda a 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 el valor de fecha / hora.
Responda a Q # 4: ''Si no es una fecha o una hora, ¿para qué la usa?''
• La marca de tiempo ''Base de datos'' se incrementa cada vez que se modifica o crea una página dentro de una base de datos mientras la marca de tiempo ''Local'' de la página afectada (dentro del encabezado de página) se sincroniza con la marca de tiempo ''Base de datos'' de ese punto en el tiempo.
• En comparación con la marca de tiempo ''Base de datos'' en el momento actual, la marca de tiempo ''Local'' de una página de base de datos refleja la antigüedad relativa de la última actualización de esa página o primero crea; por lo tanto, ASE puede indicar el orden cronológico de las actualizaciones / creaciones en 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 forma similar a la columna de identidad para encontrar las filas insertadas / actualizadas más recientes o menos recientes, 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 depende de la endianidad de la plataforma del sistema operativo. por ejemplo, 0xHHHH 0000 LLLLLLLL
- Orden alto de 2 bytes - 0xHHHH
- Relleno de 2 bytes - 0x0000
- Orden bajo de 4 bytes - 0xLLLLLLLL
(2) La marca de tiempo ''Tabla'' del usuario también se almacena en 3 partes, pero siempre está en orientación Big-endian. por ejemplo, 0x0000 HHHH LLLLLLLL
- Relleno de 2 bytes - 0x0000
- Orden alto de 2 bytes - 0xHHHH
- Orden bajo de 4 bytes - 0xLLLLLLLL
(3) La marca de tiempo de la base de datos se almacena en una tabla de sistema en memoria dbtable de una base de datos dada (que se crea cuando una base de datos se pone en línea).
- Nota1: los valores de la columna de marca de tiempo ''Tabla'' se mantienen igual que otros valores de columna en las páginas de datos y / o índice de la tabla de la base de datos, en la que se define la columna de marca de tiempo.
- Nota 2: tenga en cuenta que al consultar la marca de tiempo de la ''Base de datos'' de la base de datos actual mediante SELECT @@ dbts, se devuelve su representación hexadecimal, que está sujeta a la Endianidad de la plataforma del sistema operativo.
- Nota3 - Por el contrario, consultar la marca de tiempo ''Base de datos'' por DBCC dbtable (no recomendado) devuelve su representación hexadecimal 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 aproxima a su límite máximo, es decir (0xFFFF, 0xFFFFFFFF), y puede llevar una década o más alcanzar este punto dependiendo de las frecuencias de las operaciones de inserción / actualización dentro de la base de datos, ASE lanzar una advertencia y no será posible insertar / actualizar - la única opción es exportar los datos de todos los objetos usando BCP (más los procedimientos almacenados a través de sp_showtext), soltar la base de datos, crearla de nuevo (con una nueva base de datos cercana a zer '' marca de tiempo) e importar los datos (y los procedimientos almacenados).
FYI - Las respuestas, sugerencias y consejos anteriores son auténticos y precisos, ya que trabajé para Sybase y ahora trabajo para SAP, que posee el producto ASE.