2009-03-13 18 views
12

Ich habe ein Oracle-Projekt, das eine gute Passform für die Verwendung von GUIDs als Schlüssel wäre. Ich fand den folgenden AusschnittOracle SYS_GUID ändert sich nicht

SET SERVEROUTPUT ON 
BEGIN 
FOR indx IN 1 .. 5 
LOOP 
DBMS_OUTPUT.put_line (SYS_GUID); 
END LOOP; 
END; 
/

Von http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

Als ich es gegen meine Datenbank ausführen (ich versuchte es auf Versionen 10g und Version 11) bekomme ich eine Ausgabe wie

64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

D.h. der Wert ändert sich nie! Gibt es etwas, was ich tun muss, um dies wie erwartet zu funktionieren?

Edit: Ich bin nicht sehr aufmerksam - die GUIDs ändern sich, aber es sieht so aus, als ob ich unter dem sequentiellen GUID-Problem leide, über das der obige Link spricht.

Antwort

16

Scheint OK. Aus der Beschreibung:

SYS_GUID erzeugt und gibt einen global eindeutige Bezeichner (Rohwert) aus 16 Bytes. Auf den meisten Plattformen, besteht der erzeugte Identifikator eines Host-Kennung, einen Prozess oder Thread-Kennung des Prozess oder Thread Aufrufen der Funktion und eine nichtwiederholendes Wert (Bytesequenz) für diesen Prozess oder faden .

Von Ihrem Beispiel:

 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

Niemand erwähnt nichts über die Verteilung dieser GUID-Werte. Sie sollten sich nicht wiederholen und sie sind es auch. Es sei denn, Sie erhalten jedes Mal genau die gleiche Ausgabe.

+1

Gute Augen! Ich denke, das ist das Problem, über das ich denke, über das ich geplaudert habe. –

15

Der Wert ändert ....

  * 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 
      * 
+1

Danke - Ich fühle mich jetzt blöd ... –

+1

:-) Wir waren alle dort ... man kann eine Stunde lang etwas anstarren und nicht etwas entdecken, das ein Kollege dann in 5 Sekunden sieht. – cagcowboy

+1

Schöne Verwendung der Formatierung. –