none
trace flag 272 en SQL Server RRS feed

  • คำถาม

  • Buenos días comunidad,

            Tengo un problema con el IDENTITY de una Base de Datos, que cada tanto salta 1000 en el Identity de las tablas... Estuve buscando y veo que es por el SQL Server y esto se soluciona activando el trace flag 272. El tema que tengo es que mi base de datos esta en un Host (SmarterASP.Net) y no se como activarla.

    Saben si se puede activar desde el SQL Server Management Studio? o como podría hacer?

    Cambiar a Secuence no es una opcion porque ya tengo un monton de datos registrados que no se pueden borrar.

    Muchas Gracias!

    Saludos

    Mariano


    MarianoRN

    20 ตุลาคม 2562 11:55

คำตอบ

  • No, desde SSMS no se puede poner el Trace Flag. Lo puedes poner desde SQL Server Configuration Manager (propiedades del servicio -> parámetros de inicio), o desde la herramienta "Servicios" en la MMC. No sé si en el hosting te permitirán acceder a una de estas dos herramientas.

    Pero aunque el Trace Flag solucione el salto de 1000 unidades, si lo que necesitas es que el Identity sea consecutivo sin que pierda ningún valor, entonces no te servirá. Es un error común pensar que el Identity sirve para generar datos consecutivos sin saltos (por ejemplo para un número de factura). No es así; el Identity solo garantiza que sean valores crecientes, pero no que no tengan "huecos" en la secuencia. El Trace Flag evitará los huecos de 1000 unidades, pero aún así seguirás teniendo saltos de una unidad cada vez que una grabación no se pueda realizar por cualquier motivo, tal como un error en un constraint o un rollback de una transacción. Y la secuencia tampoco lo solucionaría. Al igual que el Identity, el Sequence también se salta una unidad cada vez que hay un rollback.

    Si tienes necesidad de que la secuencia no tenga nunca ningún salto, la alternativa es hacer un Select del Max (o usar una tabla auxiliar), incrementarlo, y grabar. Todo ello dentro de una transacción.

    • เสนอเป็นคำตอบโดย Pablo RubioModerator 21 ตุลาคม 2562 18:25
    • ทำเครื่องหมายเป็นคำตอบโดย Mariano RN 21 ตุลาคม 2562 18:29
    20 ตุลาคม 2562 12:48

ตอบทั้งหมด

  • No, desde SSMS no se puede poner el Trace Flag. Lo puedes poner desde SQL Server Configuration Manager (propiedades del servicio -> parámetros de inicio), o desde la herramienta "Servicios" en la MMC. No sé si en el hosting te permitirán acceder a una de estas dos herramientas.

    Pero aunque el Trace Flag solucione el salto de 1000 unidades, si lo que necesitas es que el Identity sea consecutivo sin que pierda ningún valor, entonces no te servirá. Es un error común pensar que el Identity sirve para generar datos consecutivos sin saltos (por ejemplo para un número de factura). No es así; el Identity solo garantiza que sean valores crecientes, pero no que no tengan "huecos" en la secuencia. El Trace Flag evitará los huecos de 1000 unidades, pero aún así seguirás teniendo saltos de una unidad cada vez que una grabación no se pueda realizar por cualquier motivo, tal como un error en un constraint o un rollback de una transacción. Y la secuencia tampoco lo solucionaría. Al igual que el Identity, el Sequence también se salta una unidad cada vez que hay un rollback.

    Si tienes necesidad de que la secuencia no tenga nunca ningún salto, la alternativa es hacer un Select del Max (o usar una tabla auxiliar), incrementarlo, y grabar. Todo ello dentro de una transacción.

    • เสนอเป็นคำตอบโดย Pablo RubioModerator 21 ตุลาคม 2562 18:25
    • ทำเครื่องหมายเป็นคำตอบโดย Mariano RN 21 ตุลาคม 2562 18:29
    20 ตุลาคม 2562 12:48