Spread the love

ID TEMPO
---------- ------------------- 65304 02/12/2015 10:55:27 65297 02/12/2015 12:37:38
Il mio DBA di fiducia mi ricorda che lo scopo della sequence è quella di fornire valori UNIVOCI, più che valori ordinati nel tempo, ma la cosa succede perché, nella definizione della sequence, ho dichiarato la direttiva NOORDER.
Questa direttiva, nel caso di DB in cluster a più nodi (nel mio caso la macchina che contiene il DB è bilanciata con 2 nodi: significa che c’è tra il database ed il client c’è un bilanciatore che decide se smistare le chiamate verso un nodo o verso il suo gemello identico a seconda del carico computazionale dei sottonodi), può portare a comportamenti di questo tipo (le sequence vengono staccate un po’ di qua un po di là ma il DB al momento della generazione non le ordina tra i vari nodi – questo il significato del NOORDER).
Per converso, non dichiarare la clausola NOORDER, affinché Oracle si preoccupi distribuire le sequenze in ordine, potrebbe portare a situazioni ben più gravi, come quella di mettere in LOCK il database (vedi ad esempio http://www.dba-oracle.com/t_rac_proper_sequence_usage.htm).
Una possibile soluzione, se si vuole che venga ricordato l’ordine di inserimento, sarebbe quella di prevedere un campo data valorizzato a sysdate al momento della creazione del record ed usare quello per l’ordinamento.
Commenti recenti