没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-05-25 14:06:17.000|阅读 763 次
概述:在本文的第一部分,简单的讨论了如何正确地设置Oracle 11g的撤消表空间令其达到最佳效果。这一部分将为大家解密Oracle撤消表空间里会出现的一些典型错误。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
在本文的第一部分,简单的讨论了如何正确地设置Oracle 11g的撤消表空间令其达到最佳效果。这一部分将为大家解密Oracle撤消表空间里会出现的一些典型错误。
对于很多开发人员和数据库管理人员来说,撤消表空间往往是带来混乱和疑惑的根源之一。对于撤消表空间引起的诸多问题,数据库管理人员的应对之策往往是修正一下错误的代码,而从来没有真正地了解撤消表空间的内部机制,也不去弄清楚为什么要修正这些代码。所以下面我们会剖析在撤消表空间里会出现的最基本的一些错误。通过打破撤消机制,来让错误无所遁形。
首先要牢记,撤消表空间不是什么让人避之唯恐不及的瘟神,UNDO只是Oracle存储的一些用来回滚或进行撤消操作的数据信息。而且,所有的UNDO问题都来源于用户在数据库内部执行的两类DML操作之一,这两类操作简单地说就是:
修改DML操作:插入(INSERT)、更新(UPDATE)和删除(DELETE)
查询DML操作:选择(SELECT)
确实就是这么简单。我们可以简单地认为在数据库内部只有查询 SQL和更新SQL。通常情况下,如果撤消表空间设置调整得当的话,这两类SQL操作就能够共存并共同顺利执行。但是,只要撤消表空间的设置出现一些微小的瑕疵,就会把一切搅乱得一塌糊涂,不论是对单独的更新 SQL而言,还是对不得不试图重构正在发生变化的更新SQL的查询SQL而言。下面我们就来解决这个难题。
我们首先创建一个撤消表空间,容量要小,且代表了还没有切换到自动撤消管理的数据库。注意,这里没有使用AUTOEXEND ON从句。SQL语句如下:
SQL> CREATE UNDO TABLESPACE undotbs2
DATAFILE '/oradata/db11FS/undotbs02.dbf' SIZE 2M;
SQL> alter system set undo_tablespace=undotbs2;
如上所示,我们引入了一个2M大小的静态撤消表空间。当我们开始执行更新SQL操作使其数据容量接近2M时,问题很快就会出现。由于我们没有启用撤消表空间的AUTOEXTEND功能,因此撤消表空间在执行更新操作会话时无法自动扩展容量,所以我们会很快收到Oracle发来的传票:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
这个ORA-30036错误和另外一个执行查询操作的会话一点关系都没有,只和执行更新SQL操作的会话有关。当我们碰到该类型的错误时,要分析起来很简单,一个原因,两个解决方法。原因就是更新会话(很可能正在执行更新操作的会话不止一个)没有为应用程序定义符合撤消表空间可用空间大小的作业单元,基本上就是数据更新太多了,撤消表空间那小小的龙王庙不堪重负了。想要纠正这个错误,你可以选择增加撤消表空间的大小,也可以选择修改应用程序的作业单元(增加更多的提交)。因为存取代码往往比较困难,所以通常会选择增加撤消表空间大小这条路。只是要牢记,增加空间大小并不是一劳永逸的解决办法。我们应该意识到应用程序并没有正确地定义作业单元这个问题的存在,而且这有可能会在接下来的其他操作中导致更严重的问题出现,特别是在接下来要谈到的查询(SELECT)会话中。
当有查询会话试图使用数据库而同时更新会话也在进行的时候,就会引发另外一个问题。因为更新会话正在用新数据覆盖撤消表空间的旧数据,所以查询会话将无法正确提取结果集。Oracle里有一个叫“读一致性(read consistency)”的特性,该特性是这样描述的:当查询会话开始从Oracle数据库的表查询数据时,会保持并返回该查询语句开始执行时的行值。如果撤消表空间被过多的更新操作所覆盖,那么要维持这个特性就需要耗费大量的撤消表空间,因此可能会出现以下的错误提示:
ORA-01555 caused by SQL statement below (SQL ID: 4fwzm0uu3kx8w, Query Duration=15 sec, SCN:0x0000.00181a0e):
这就是为什么我们要启用AUTOEXTEND的原因。下面来看看正确的设置和操作方式及其得到的结果。利用本文的第一部分所描述的方法,首先创建一个可自动扩展的撤消表空间:
CREATE UNDO TABLESPACE undotbs2 DATAFILE '/oradata/db11FS/undotbs02.dbf' SIZE 2M AUTOEXTEND ON;
SQL> SELECT dt.tablespace_name, dt.contents,
ddf.file_name, ddf.bytes/1024/1024 size_MEG
FROM dba_tablespaces dt,
dba_data_files ddf
WHERE dt.tablespace_name = ddf.tablespace_name
AND dt.contents = 'UNDO';
TABLESPACE_NAME CONTENTS FILE_NAME SIZE_MEG
--------------- --------- ----------------------------------- --------
UNDOTBS1 UNDO /oradata/db11FS/undotbs02.dbf 2
接着,执行两个对话,其中一个执行大量更新操作,另外一个执行长时间运行的SELECT语句。
SQL> INSERT & UPDATE a bunch of rows
SQL>> SELECT from those rows being INSERTed and UPDATEd
两个对话都成功并顺利地执行完毕后,我们可以重新查询撤消表空间的大小,从返回结果可以看到已经扩展为11.5M了。没有出现任何错误,也不需要担心空间大小的管理。
SQL> SELECT dt.tablespace_name, dt.contents,
ddf.file_name, ddf.bytes/1024/1024 size_MEG
FROM dba_tablespaces dt,
dba_data_files ddf
WHERE dt.tablespace_name = ddf.tablespace_name
AND dt.contents = 'UNDO';
TABLESPACE_NAME CONTENTS FILE_NAME SIZE_MEG
--------------- --------- ----------------------------------- ----------
UNDOTBS2 UNDO /oradata/db11FS/undotbs02.dbf 11.5
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:IT专家网面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号