Discussione:
contatore che salta nel db localhost
(troppo vecchio per rispondere)
g***@gmail.com
2015-07-09 14:10:20 UTC
Permalink
Salve, ho un db localhost che funziona con un programma scritto in C#. Quando inserisco un record tutto ok. Se poi inserisco dopo qualche minuto un altro record, il contatore, invece di aumentare regolarmente di uno alla volta, salta e addirittura arriva a 1002, 10003 ecc.Come mai? Dove sbaglio? Dipende da qualche cursore?

Grazie

Giuseppe
Vittorio
2015-07-09 20:16:16 UTC
Permalink
ha scritto nel messaggio news:ed111470-4e78-4012-88bb-***@googlegroups.com...

<Salve, ho un db localhost che funziona con un programma scritto in C#.
Quando inserisco un record tutto ok. Se poi inserisco dopo <qualche minuto
un altro record, il contatore, invece di aumentare regolarmente di uno alla
volta, salta e addirittura arriva a 1002, <10003 ecc.Come mai? Dove sbaglio?
Dipende da qualche cursore?


ma è una colonna di tipo IDENTITY con incremento automatico?

Se hai dei riavvii del database e\o connessione può succedere

https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restart-results-in-reseed-of-identity
Vittorio
2015-07-09 20:18:53 UTC
Permalink
"Vittorio" ha scritto nel messaggio news:mnmkqg$64m$***@speranza.aioe.org...


<Se hai dei riavvii del database e\o connessione può succedere



se fosse questo il caso, si risolve così:


Run SQL Server Configuration Manager.

Select SQL Server Services.
Right-click SQL Server and select Properties.
In the opening window under Startup Parameters, type -T272 and click Add,
then press Apply button and restart.
g***@gmail.com
2015-07-09 22:16:36 UTC
Permalink
E' una colonna identity con incremento automatico, ciò avviene in tutte le tabelle, uso per accedere sqldatadapter e a volte sqlcommand apro e chiudo sempre la connessione.
Cosa intendi per riavvii?

Grazie.
Vittorio
2015-07-09 22:25:23 UTC
Permalink
<<<Cosa intendi per riavvii?

restart dell'istanza di Sql Server.

Se è quello, prova comunque il parametro trace flag -T272 come detto prima
, e riavvia l'istanza.
DeepThought
2015-07-15 12:55:08 UTC
Permalink
Credo ( ma mi riservo il diritto di controllare ) che la questione sia
la CACHE della colonna identity. SPiego meglio: la colonna identity
"stacca" un numero intero aggiornato dall'incremento ogni volta che si
aggiunge una riga. Per default, 1000 valori di quell'incremento vengono
caricati subito in memoria e poi usati all'occorrenza. Se l'istanza va
giu', i numeri già in cache vengono buttati via ma vengono segnati come
usati e si ricomincia dall'unità successiva ( 1002 in questo caso ).

Il Flag t272 è deprecato da SQL Server 2012 in poi. .

Da MSDN :
"Consecutive values after server restart or other failures –SQL Server
might cache identity values for performance reasons and some of the
assigned values can be lost during a database failure or server restart.
This can result in gaps in the identity value upon insert. If gaps are
not acceptable then the application should use its own mechanism to
generate key values. Using a sequence generator with the NOCACHE option
can limit the gaps to transactions that are never committed."

Bye
Post by g***@gmail.com
Salve, ho un db localhost che funziona con un programma scritto in C#. Quando inserisco un record tutto ok.
Se poi inserisco dopo qualche minuto un altro record, il contatore,
invece di aumentare regolarmente di uno alla volta,

salta e addirittura arriva a 1002, 10003 ecc.Come mai? Dove sbaglio?
Dipende da qualche cursore?
Post by g***@gmail.com
Grazie
Giuseppe
g***@gmail.com
2015-07-25 12:36:56 UTC
Permalink
Un ragionamento che fila, visto che in altre sessioni iniziava nuovamente con incrementi di mille record alla volta. Come posso risolverlo allora? Grazie molte.

Giuseppe
DeepThought
2015-07-29 06:41:21 UTC
Permalink
Post by g***@gmail.com
Un ragionamento che fila, visto che in altre sessioni iniziava nuovamente
con incrementi di mille record alla volta. Come posso risolverlo allora?
Grazie molte.
Post by g***@gmail.com
Giuseppe
Utilizzando l'opzione NOCACHE credo ( Sempre seguendo lo stesso
ragionamento ) che il "salto" dovrebbe essere al piu' di una unità.

ALternativamente si potrebbe risolvere il problema applicativamente ( ma
non è detto sia possibile ) , ad esempio non usando affatto una colonna
identity , gestendo l'id applicativamente.

Continua a leggere su narkive:
Loading...