导数据遇见OR.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
导数据遇见ORA-01555错误 昨天在对CALLCENTER系统的主库导入CUSTOMER数据的时候,遇到了ORA-01555 错误。 软件环境:两台DB都是oracle9.2.0.4 导入工具使用:powercenter8.6 主库是redhat? linux4.7 备库是windows2003(32位)环境 在导入过程中,报: ORA-01555: 快照过旧: 回退段号 1 在名称为 _SYSSMU1$ 过小 错误。 1555错误产生的原因,就需要知道 ORACLE的两个特性:一致性读(Consistent Get)和延迟块清除(Delayed Block Cleanout)。此外,还要知道关于回滚段的一些配置参数: 相关参数 先看下Oracle中关于UNDO有哪些配置参数: SQL show parameter undo NAME TYPE VALUE undo_management string MANUAL undo_retention integer 900 undo_suppress_errors Boolean FALSE undo_tablespace string UNDOTBS1 undo_management 回滚段的 管理方式。值可以为MANUAL/AUTO。9i中默认是MANUAL, 10g中默认是AUTO。 从9i后,回滚段就以表空间的形式管理,并且支持系统自动管理回滚段。一个回滚表空间上可以创建多个回滚段,一个 数据库可以创建多个回滚表空间。但是,一个实例(Instance)只能使用一个回滚表空间。 如果undo_management设置为MANUAL,就是手动创建回滚段: SQL create rollback segment undo1 tablespace UNDOTBS1; 如果设置为AUTO,Oracle就自动管理回滚段的创建,而手工创建就会失败。 undo_retention 这个参数设置回滚段中的被提交或回滚的数据强制保留时间,单位是秒。请注意,这个参数和1555错误有非常大的关系。但是,需要提醒的是,并不是回滚段中的数据超过这个时间以后就会被清除掉,而是等到后面事务产生的回滚数据覆盖掉“超期”数据。所以这就是为什么我们往往看到系统的回滚表空间占有率始终是100%的原因了。 undo_suppress_errors 是否报与回滚段有关的错误。如果为FALSE,就不会产生与回滚段有关的错误。但是,请注意,并不是不会发生回滚段错误,而只是屏蔽错误信息,错误发生了就会存在滴。在10g中,这个参数是隐含参数。 undo_tablespace 为每个实例制定的唯一当前使用的回滚段表空间。 面我们就模拟一下1555错误发生的情况: 首先建立测试环境。由于我们只是要模拟1555错误的发生,所以需要建立一个小的回滚表空间,并且设置undo_retention时间为1(秒),以便回滚数据尽快被覆盖(呵呵,要防止1555错误发生,这就一定要避免的)。 CREATE UNDO TABLESPACE rbs_ts DATAFILE rbs_ts2.dbf SIZE10MAUTOEXTEND OFF; ? altersystem set undo_retention=1 scope=spfile; altersystem set undo_management=auto scope=spfile; altersystem set undo_tablespace=rbs_tsscope=spfile; startup force alter tablespace rbs_tsonline; create table demo.t_dualas select * from dual; ? insert intot_dual values(1); ? commit; ? 一致性读导致的1555错误 开始读取表。 SQL SQLvar cl refcursor SQL begin 2open:clfor select * from demo.t_multiver; 3end; 4/ PL/SQL procedure successfully completed. SQL 更新表数据,产生回滚信息。 SQL updated mo.t_multiver set b = 111 where a = 1; 1 row updated. SQL commit; Commit complete. 运行大批其他事务,充满所有回滚段,以致覆盖上面的回滚信息。回滚段可以通

文档评论(0)

剑影 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档