代码之家  ›  专栏  ›  技术社区  ›  Greg Reynolds

Oracle系统的GUID未更改

  •  12
  • Greg Reynolds  · 技术社区  · 15 年前

    我有一个Oracle项目,它非常适合将guid用作键。我找到了下面的片段

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

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

    当我在我的数据库中运行它(我在10g和11版上尝试过)时,我得到的输出如下

    64FE4083D6BA7CB4E0400F0A0E0A18B0
    64FE4083D6BB7CB4E0400F0A0E0A18B0
    64FE4083D6BC7CB4E0400F0A0E0A18B0
    64FE4083D6BD7CB4E0400F0A0E0A18B0
    64FE4083D6BE7CB4E0400F0A0E0A18B0
    

    也就是说,价值永远不会改变!我需要做些什么来设置它以按预期工作吗?

    编辑:我不是很有观察力-guid正在改变,但看起来我正遭受着上面链接所说的顺序guid问题。

    2 回复  |  直到 14 年前
        1
  •  17
  •   Anonymous    15 年前

    似乎可以。从描述中:

    sys_guid生成并返回 全局唯一标识符(原始值) 由16个字节组成。对大多数 平台,生成的标识符 由主机标识符组成,a 进程或线程标识符 进程或线程调用 函数和A 非重复 价值 (字节序列)用于该进程 或线程。

    从你的例子来看:

    64FE4083D6BA7CB4E0400F0A0E0A18B0
    64FE4083D6BB7CB4E0400F0A0E0A18B0
    64FE4083D6BC7CB4E0400F0A0E0A18B0
    64FE4083D6BD7CB4E0400F0A0E0A18B0
    64FE4083D6BE7CB4E0400F0A0E0A18B0
    

    没有人提到这些guid值的分布。它们应该是不重复的。除非每次都得到完全相同的输出。

        2
  •  16
  •   cagcowboy    15 年前

    值确实会改变….

               *
    64FE4083D6BA7CB4E0400F0A0E0A18B0
    64FE4083D6BB7CB4E0400F0A0E0A18B0
    64FE4083D6BC7CB4E0400F0A0E0A18B0
    64FE4083D6BD7CB4E0400F0A0E0A18B0
    64FE4083D6BE7CB4E0400F0A0E0A18B0
               *