Oracle의 SYS_GUID() UUID RFC 4122가 호환됩니까?
Oracle의 SYS_GUID() 함수가 RFC 4122 호환 UUID를 반환하는지 궁금합니다.예:
SQL> select sys_guid() from dual;
SYS_GUID()
--------------------------------
A6C1BD5167C366C6E04400144FD25BA0
SYS_GUID()가 16바이트 RAW 데이터 유형을 반환합니다.Oracle은 RAWTOHEX()와 TO_CHAR()를 사용하여 위 ID를 출력합니다.이를 다음과 같은 UUID 호환 문자열 형식으로 해석하는 것이 맞습니까?
A6C1BD51-67C3-66C6-E044-00144FD25BA0
정의에 따르면 유효한 UUID는 UUID 자체 내에서 UUID-Version의 이름을 지정해야 하므로 RFC 4122 표준을 준수하지 않습니다.
RFC 4122 호환 UUID(버전 3) 구문:
xxxxxxxx-xxxx-3xxx-xxxx-xxxxxxxxxxxx
해당 형식을 사용하려면 다음을 수행합니다.
select regexp_replace(rawtohex(sys_guid())
, '([A-F0-9]{8})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{12})'
, '\1-\2-\3-\4-\5')
as FORMATTED_GUID
from dual
예 결과:
FORMATTED_GUID
------------------------------------
F680233E-0FDD-00C4-E043-0A4059C654C9
SYS_GUID는 Oracle의 UUID에 해당합니다.그것은 세계적으로 유일합니다.그러나 RFC 4122를 준수하지 않습니다. Java XML 설명서 외부에 UUID에 대한 참조가 없기 때문에 규정 준수가 부족하다고 생각합니다.
Oracle은 RFC 4122가 확장되지 않는다고 생각하기 때문에 RFC 4122를 기본적으로 구현하지 않은 것 같습니다.왜 그들이 표준을 따르는 대신 그들만의 것을 발명했는지 상상할 수 없습니다.
충분한 권한이 있으면 Oracle이 호환되는 UUID를 생성하도록 할 수 있습니다.
SQL 함수를 정의함으로써
https://stackoverflow.com/a/13956771, 에서 다음을 수행할 수 있습니다.
함수 random_uuid 반환 RAW를 생성하거나 대체합니다.v_uuid RAW(16);시작한다.v_vmdk : = sys.dbms_vmdk.dbbytes(16);return(utl_raw.dll(utl_raw).bit_or(utl_raw).bit_and (utl_raw.substr(v_uuid, 7, 1), '0F'), '40', v_uuid, 7);end random_details;
이 기능은 다음을 필요로 합니다.dbms_crypto
그리고.utl_raw
둘 다 실행 허가가 필요합니다.
grant execute on sys.dbms_crypto to uuid_user;
Java 절차 사용
호환되는 UUID를 생성하기 위한 Java 절차를 만들려면 https://stackoverflow.com/a/13951615 을 참조하십시오.
RFC 4122 » 3. 네임스페이스 등록 템플릿(5페이지)
유효성 검사 메커니즘:
UUID의 타임스탬프 부분을 확인하는 것과는 별도로
미래에 있으므로 아직 할당할 수 없습니다.
UUID가 '유효'한지 확인하는 메커니즘입니다.
RFC 4122에 대한 "준수"를 결정하는 것은 생성 프로세스이며, UUID 자체는 128비트 ID 식별자에 불과합니다.
그러므로 답은 "그렇습니다, 왜 그것이 준수되지 않습니까?"입니다.UUID는 128비트 Universaly Unique IDentifier에 불과하며, 나머지 사양은 UUID 식별자를 생성하는 다른 시스템과 충돌하지 않는 식별자를 생성하는 데 도움이 되는 권장 방법일 뿐입니다.사용자 또는 오라클이 권장 사항을 따르지 않으려면 자유롭게 수행할 수 있습니다.그럼에도 불구하고, 변형 필드가 비트 시퀀스로 시작하기 때문에 당신이 준 UUID는 RFC 4122를 "준수"합니다.111
이는 "미래 정의를 위해 예약됨"입니다.이 사양은 과거에 작성되었으며 "미래 정의"를 지정할 수 있는 사용자를 제한하지 않으며 Oracle이 자체 변형을 정의하는 것을 방해하지는 않습니다.그러므로 그것은 "준수 중"입니다... 하하.
p.s. 저는 원작자들이 당신의 질문을 예상하고 '유효한' 주위에 빈정거리는 인용문을 추가한 것이 마음에 듭니다.
언급URL : https://stackoverflow.com/questions/6505837/is-oracles-sys-guid-uuid-rfc-4122-compliant
'programing' 카테고리의 다른 글
Python Infinity - 주의 사항이 있습니까? (0) | 2023.06.12 |
---|---|
iOS에서 뷰 계층을 검사하려면 어떻게 해야 합니까? (0) | 2023.06.12 |
작업 시트에 UI Picker View 및 버튼 추가 - 어떻게? (0) | 2023.06.12 |
여러 data.frame을 여러 Excel 워크시트로 쉽게 내보낼 수 있는 방법 (0) | 2023.06.12 |
createReducer 함수를 사용할 때 생산을 위해 angular+ngrx 8을 빌드하는 동안 오류가 발생했습니다. (0) | 2023.06.12 |