2009-03-13 34 views
12

Tôi có một dự án Oracle có thể phù hợp để sử dụng GUID làm khóa. Tôi thấy đoạn mã sauOracle SYS_GUID không thay đổi

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

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

Khi tôi chạy nó chống lại cơ sở dữ liệu của tôi (Tôi đã thử nó trên các phiên bản 10g và phiên bản 11) Tôi nhận được kết quả như

64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

Tức là giá trị không bao giờ thay đổi! Có điều gì tôi phải làm để thiết lập công việc này như mong đợi không?

Chỉnh sửa: Tôi không thực sự quan sát - GUID đang thay đổi, nhưng có vẻ như tôi đang gặp vấn đề GUID tuần tự mà liên kết ở trên đang nói đến.

Trả lời

16

Dường như OK. Từ mô tả:

SYS_GUID tạo và trả về một Globally Unique Identifier (giá trị RAW) tạo thành từ 16 byte. Trên hầu hết các nền tảng, nhận dạng được tạo ra bao gồm một định danh máy chủ, một quá trình hoặc thread nhận dạng của quá trình hoặc sợi viện dẫn chức năng, và một nonrepeating giá trị (chuỗi các byte) cho quá trình đó hoặc chủ đề .

Từ ví dụ của bạn:

 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

Không ai nói bất cứ điều gì về sự phân bố của các giá trị GUID. Họ nên không ăn năn và họ đang có. Trừ khi bạn nhận được chính xác cùng một đầu ra mỗi lần.

+1

Tốt mắt! Tôi nghĩ rằng đây là vấn đề mà suy nghĩ tôi đăng là nói về mặc dù. –

15

Giá trị không thay đổi ....

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

Cảm ơn - Tôi cảm thấy ngu ngốc bây giờ ... –

+1

:-) Tất cả chúng tôi đã ở đó .... bạn có thể nhìn chằm chằm vào một cái gì đó trong một giờ và không phát hiện ra thứ gì đó mà một đồng nghiệp sau đó phát hiện trong 5 giây. – cagcowboy

+1

Sử dụng định dạng tốt. –

Các vấn đề liên quan