知识大全 细化解析如何共享Oracle数据库身份空间

Posted 序列

篇首语:天下之事常成于困约,而败于奢靡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 细化解析如何共享Oracle数据库身份空间相关的知识,希望对你有一定的参考价值。

细化解析如何共享Oracle数据库身份空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我在 个月前才刚刚开始接触Oracle 我最开始觉得古怪的是 Oracle没有身份类型 你无法建立一个本身自动递增的栏

  后来的事实证明 这个与众不同的特点也有它的有用之处 例如可以方便地在多个数据库之间共享同一个身份空间

  首先我们来看一个简单的例子 假设你在数据库中有一个表 一般你会首先建立一个序列

  create sequence seq_my_identity_type

  然后你建立一个从这个序列中选择下一个新值的触发器 并把那个值作为ID字段保存 选择下一个值的过程使得Oracle自动递增序列

  在这个简单的例子中 假设你建立了一个名为id_test的表 它只有两个字段 一个叫做ID的数字字段和一个叫做message的文本字段

  CREATE TABLE id_test

  ( id NUMBER primary key not null

  message VARCHAR ( ) )

  然后一个触发器会使用我们前面建立的序列自动增加那个ID字段 就像是这样

  CREATE OR REPLACE TRIGGER t_id_test_bi

  BEFORE INSERT ON id_test

  REFERENCING NEW AS NEW

  OLD AS OLD

  FOR EACH ROW

  begin

  if inserting then

  if :new id is null then

  select seq_my_identity_type nextval

  into :new id

  from dual;

  end if;

  end if;

  end;

  当许多其它DBMS环境有一个自动递增类型时 你似乎可以给ID字段分配许多工作 以便在表中插入任何内容时 它都会得到一个唯一的键 但这种用法的优点在于 你可以使用序列保证在几个表之间 或者在数据库的几个实例的同一个表中共享唯一的ID

  我们来看另一个更详细的例子 假设我们有两个数据库 一个叫做content_prod的当前生产数据库和叫做content_qa的QA服务器 假设你已经在content_qa数据库中创建了一个名为content_prod的链接 以便你可以从QA中访问它

  我们之前创建的序列 触发器和表位于content_prod中 在QA中也有一个id_test表 但是 我们希望保证 如果在QA表中添加任何新内容 可以方便地把它复制到生产数据库中 而不必担心两个表的ID字段发生冲突

  要保证这一点 如果QA和生产数据库从同一个序列生成它们的ID 那么在一个数据库中插入的任何新内容将会生成一个在两个数据库中唯一的ID 所以 我们不需要在QA中建立一个单独的序列 只需建立一个在生产数据库中访问序列的同义字

  create synonym syn_my_identity_type for

  seq_my_identity_type@content_prod

  然后你在QA中的触发器将使用这个同义字获取ID字段

  CREATE OR REPLACE TRIGGER t_id_test_bi

  BEFORE INSERT ON id_test

  REFERENCING NEW AS NEW

  OLD AS OLD

  FOR EACH ROW

  begin

  if inserting then

  if :new id is null then

  select syn_my_identity_type nextval

  into :new id

  from dual;

  end if;

  end if;

  end;

  虽然我不是一位Oracle性能专家 但我怀疑在一个或两个数据库的序列出现迅速递增时 你是否想要这样做 就像是一个事件记录器或我的错误记录系统一样 我一直担心在数据库之间争论共享序列造成的性能影响

cha138/Article/program/Oracle/201311/18748

相关参考

知识大全 实例解析Oracle是共享模式还是专用模式

实例解析Oracle是共享模式还是专用模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  是否配

知识大全 oracle的共享连接和专用连接方式之初探

在专用连接方式中每一个连接到数据库服务器的客户端请求服务器会和客户端之间建立起连接这个连接用于专门处理该客户端的所有请求直到用户主动断开连接或网络出现中断在连接处于空闲时后台进程PMON会每隔一段时间

知识大全 Oracle数据库的空间管理

Oracle数据库的空间管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    在Oracle数

知识大全 Oracle 数据库表空间容量调整脚本

Oracle数据库表空间容量调整脚本  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (表空间缩容

知识大全 oracle将数据导入指定表空间

在使用oracle的exp和imp导出导入的时候有时遇到需要导入的数据不是同一个用户的也不一定是同一个表空间例如源数据库上用户为aaa表空间aa目标数据库用户为bbb表空间bb当用imp导入以后查看发

知识大全 更改Oracle数据库表的表空间

更改Oracle数据库表的表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oracle数

知识大全 Oracle数据库空间管理和规划

Oracle数据库空间管理和规划  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文希望通过系统

知识大全 查询Oracle数据库表空间信息的方法

查询Oracle数据库表空间信息的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  表空间是数

知识大全 怎么监控oracle数据库表和表空间

  怎么监控oracle数据库表和表空间的现状  declare  unfnumber;  unfbnumber;  fsnumber;  fsbnumber;  fsnumber;  fsbnumb

知识大全 oracle数据库UNDO表空间释放

oracle数据库UNDO表空间释放  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天早上在检