Consideraciones y limitaciones del libro de contabilidad

Se aplica a: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Hay algunas consideraciones y limitaciones que deben tenerse en cuenta al trabajar con tablas de libro de contabilidad debido a la naturaleza de las versiones del sistema y los datos inmutables.

Consideraciones y limitaciones generales

Tenga en cuenta lo siguiente al trabajar con el libro de contabilidad.

Limitaciones y consideraciones de las tablas de libro de contabilidad

  • Las tablas existentes en un base de datos que no son tablas de libro de contabilidad no se pueden convertir en tablas de libro de contabilidad. Para obtener más información, consulte Migración de datos de tablas normales a tablas de libro de contabilidad.
  • Una vez creada una tabla del libro de contabilidad, no se puede revertir a una tabla que no sea de libro de contabilidad.
  • No se admite la eliminación de datos más antiguos en las tablas de libro de contabilidad de solo anexión o en la tabla del historial de las tablas actualizables del libro de contabilidad.
  • TRUNCATE TABLE no se admite.
  • Cuando se crea una tabla actualizable del libro de contabilidad, agrega cuatro columnas GENERATED ALWAYS a la tabla de libro de contabilidad. Una tabla de libro de contabilidad de solo anexión agrega dos columnas a la tabla de libro de contabilidad. Estas nuevas columnas cuentan con el número máximo admitido de columnas en Azure SQL Database (1024).
  • No se admiten las tablas en memoria.
  • No se admiten los conjuntos de columnas dispersas.
  • No se admite la partición SWITCH IN/OUT.
  • DBCC CLONEDATABASE no se admite.
  • Las tablas de libro de contabilidad no pueden tener índices de texto completo.
  • Las tablas de libro de contabilidad no pueden ser tablas de grafos.
  • Las tablas de libro de contabilidad no pueden ser FileTables.
  • Las tablas de libro de contabilidad no pueden tener un índice no agrupado del almacén de filas cuando tienen un índice de almacén de columnas agrupado.
  • No se permite Change Tracking en la tabla de historial, pero sí en las tablas de libro de contabilidad.
  • No se permite captura de datos modificados en la tabla de historial, pero sí en las tablas de libro de contabilidad.
  • No se admite la replicación transaccional para las tablas de libro de contabilidad.
  • No se admite la creación de reflejo de la base de datos.
  • Azure Synapse Link se admite, pero solo para la tabla de libro de contabilidad, no para la tabla de historial.
  • Cambie la ruta de resumen manualmente después de una restauración nativa de una copia de seguridad de base de datos en una instancia administrada de Azure SQL.
  • Cambie la ruta de acceso implícita manualmente después de crear un vínculo de Instancia administrada a una Instancia administrada de Azure SQL.
  • SQL Data Sync no se admite con tablas de libro de contabilidad.

Tipos de datos no admitidos

  • XML
  • SqlVariant
  • Tipos de datos definidos por el usuario
  • FILESTREAM

Limitaciones de tablas temporales

Las tablas de libro de contabilidad actualizables se basan en la tecnología de las tablas temporales y heredan la mayoría de las limitaciones, pero no todas ellas. A continuación se muestra una lista de las limitaciones que se hereda de las tablas temporales.

  • Si el nombre de una tabla de historial se especifica durante su creación, debe determinar el nombre del esquema y la tabla, y también el nombre de la vista del libro de contabilidad.
  • De forma predeterminada, es la tabla de historial es PAGE comprimida.
  • Si la tabla actual tiene particiones, la tabla de historial se crea en el grupo de archivos predeterminado, ya que la configuración de particiones no se replica automáticamente desde la tabla actual a la de historial.
  • Las tablas temporales y de historial no pueden ser de tipo FILETABLE y pueden contener columnas de cualquier tipo de datos compatible que no sea FILESTREAM. FILETABLE y FILESTREAM permiten la manipulación de datos fuera de SQL Server y, por tanto, no se puede garantizar el control de versiones del sistema.
  • Un nodo o una tabla perimetral no se puede crear o modificar como una tabla temporal. Graph no se admite con el libro de contabilidad.
  • Aunque las tablas temporales son compatibles con los tipos de datos BLOB, como (n)varchar(max), varbinary(max), (n)text y image, supondrán importantes costos de almacenamiento y afectarán al rendimiento debido a su tamaño. Por lo tanto, al diseñar el sistema, debe tener cuidado al usar estos tipos de datos.
  • La tabla de historial debe crearse en la misma base de datos que donde reside la actual. No se admiten las consultas temporales en el servidor vinculado.
  • La tabla de historial no puede tener restricciones (de clave principal, clave externa, tabla o columna).
  • La opción en línea ((WITH (ONLINE = ON) no tiene ningún efecto sobre ALTER TABLE ALTER COLUMN en las tablas temporales con versiones del sistema. ALTER COLUMN no se realiza en línea, independientemente del valor que se especificó para la opción ONLINE.
  • Las instrucciones INSERT y UPDATE no pueden hacer referencia a las columnas GENERATED ALWAYS. Se bloquearán los intentos de insertar valores directamente en estas columnas.
  • No se admiteUPDATETEXT ni WRITETEXT .
  • No se permiten desencadenadores en la tabla de historial.
  • El uso de tecnologías de replicación está limitado:
    • Always On : totalmente compatible.
    • Replicación de instantáneas, de mezcla y transaccional: no se admite para las tablas temporales
  • Una tabla de historial no se puede configurar como actual en una cadena de tablas de historial.
  • Los objetos o las propiedades siguientes no se replican desde la tabla actual en la de historial cuando se crea la tabla de historial:
    • Definición de periodo
    • Definición de identidad
    • Índices
    • Estadísticas
    • Restricciones CHECK
    • Desencadenadores
    • Configuración de partición
    • Permisos
    • Predicados de seguridad de nivel de fila

Consideración de los cambios de esquema

Adición de columnas

Se admite la adición de columnas que admiten un valor NULL. No se admite la adición de columnas que no aceptan valores NULL. El libro de contabilidad está diseñado para omitir los valores NULL al calcular el hash de una versión de fila. A partir de ahí, cuando se agrega una columna que admite un valor NULL, el libro de contabilidad modificará el esquema de las tablas de libro de contabilidad e historial para incluir la nueva columna; sin embargo, esto no afecta a los valores hash de las filas existentes. La adición de columnas en tablas de libro de contabilidad se captura en sys.ledger_column_history.

Eliminación de columnas y tablas

Normalmente, la eliminación de una columna o tabla hace que se borren completamente los datos subyacentes de la base de datos y es básicamente incompatible con la funcionalidad del libro de contabilidad que requiere que los datos sean inmutables. En lugar de eliminar los datos, el libro de contabilidad se limita a cambiar el nombre de los objetos que se quitan para que desaparezcan lógicamente del esquema de usuario, pero permanezcan físicamente en la base de datos. Las columnas que se quitan también se ocultan en el esquema de la tabla de libro de contabilidad, de modo que son invisibles para la aplicación de usuario. Sin embargo, los datos de estos objetos que se han quitado siguen estando disponibles durante el proceso de comprobación del libro de contabilidad y permiten a los usuarios inspeccionar datos históricos a través de las vistas del libro de contabilidad correspondientes. La eliminación de columnas en tablas de libro de contabilidad se captura en sys.ledger_column_history. La eliminación de una tabla de libro de contabilidad se captura en sys.ledger_table_history. Las tablas de libro de contabilidad que se han quitado y sus objetos dependientes se marcan como eliminados en las vistas de catálogo del sistema y cambian de nombre:

  • Las tablas de libro de contabilidad que se han quitado se marcan como eliminadas estableciendo is_dropped_ledger_table en sys.tables y cambian de nombre con el siguiente formato: MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>.
  • Las tablas de historial que se han quitado para las tablas de libro de contabilidad actualizables cambian de nombre con el siguiente formato: MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>.
  • Las vistas del libro de contabilidad que se han quitado se marcan como eliminadas estableciendo is_dropped_ledger_view en sys.tables y cambian de nombre con el siguiente formato: MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.

Nota:

El nombre de las tablas de libro de contabilidad quitadas, las tablas de historial y las vistas de libro de contabilidad se pueden truncar si la longitud de la tabla o vista cuyo nombre ha cambiado supera los 128 caracteres.

Modificación de columnas

Los cambios que no afectan a los datos subyacentes de una tabla de libro de contabilidad se admiten sin ningún control especial, ya que no afectan a los valores hash que se capturan en el libro de contabilidad. Entre estos cambios se incluyen los siguientes:

  • Cambio de nulabilidad
  • Intercalación para cadenas Unicode
  • Longitud de las columnas de longitud variable

Sin embargo, no se admiten las operaciones que pueden afectar al formato de los datos existentes, como cambiar el tipo de datos.