2009-03-13 4 views
12

GUID를 키로 사용하기에 적합한 Oracle 프로젝트가 있습니다. 내가 내 데이터베이스에 대해 실행하면 http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.htmlOracle SYS_GUID가 변경되지 않습니다.

에서 다음 코드

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

을 발견 내가 할 (나는 버전 10g 및 버전 11에 그것을 시도) 출력과 같은

64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

즉, 가치는 결코 변하지 않는다! 이 작업을 예상대로 수행하도록 설정해야 할 일이 있습니까?

편집 : GUID가 바뀌고 있지만 위의 링크가 말하는 순차 GUID 문제로 인해 고통 받고있는 것처럼 보입니다.

답변

16

괜찮아요. 설명으로부터 :

SYS_GUID 생성하여 16 바이트로 구성된 전역 고유 식별자 (생값) 를 반환한다. 가장 플랫폼에서 생성 된 식별자 는 호스트 식별자의 프로세스 또는 스레드에 대한 프로세스 또는 쓰레드 프로세스 식별자 또는 함수를 호출하는 스레드와 값 을 반복되지 않는 (바이트 순서)로 구성 . 귀하의 예제에서

는 :

 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

아무도 이러한 GUID 값의 분포에 대해 아무것도 언급하지 않습니다. 그들은 반복적이어서는 안되며 그들은 반복적이어야합니다. 매번 정확히 동일한 출력을 얻지 않는 한.

+1

좋은 눈! 나는 이것이 내가 생각하는 게시 된 문제가 문제라고 생각한다. –

15

값은 변경 않습니다 ....

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

감사합니다 - 지금 바보 같다고 생각합니다 ... –

+1

:-) 우리는 모두 거기에 있었으므로 ... 한 시간 동안 무엇인가 쳐다볼 수 있고 동료가 5 초 안에 얼룩을지게 할 수 있습니다. – cagcowboy

+1

형식을 잘 사용합니다. –