分类目录归档:转载文章(档)

Oracle Database PSU/CPU

1. 什么是PSU/CPU?

CPU: Critical Patch Update
Oracle对于其产品每个季度发行一次的安全补丁包,通常是为了修复产品中的安全隐患。

PSU: Patch Set Updates
Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多的,并且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复而且还包含了最新的CPU。

2. 如何查找最新的PSU?
每个数据库版本都有自己的PSU,PSU版本号体现在数据库版本的最后一位,比如最新的10.2.0.5的PSU是10.2.0.5.3,而11.2.0.2的最新PSU则是11.2.0.2.2。
MOS站点中Oracle Recommended Patches — Oracle Database [ID 756671.1] 文档中查到各个产品版本最新的PSU。
如果你记不住这个文档号,那么在MOS中以“PSU”为关键字搜索,通常这个文档会显示在搜索结果的最前面。

注意:必须购买了Oracle基本服务获取了CSI号以后才有权限登陆MOS站点。

3. 如何正确安装PSU?
每个PSU安装包中都包含一个README.html文档,其中描述了如何安装该PSU,有些PSU是可以直接安装的,而有些PSU则必须要求安装了上一 个版本的PSU之后才能继续安装。比如对于10.2.0.4版本的数据库来说,PSU 10.2.0.4.4可以直接安装在最原始的10.2.0.4.0版本中,而最新的PSU 10.2.0.4.8则必须要求先安装10.2.0.4.4。这些信息在README.html中都可以找到,所以请仔细阅读该文档。

通常安装PSU是比较简单的,步骤如下:
1) 安装PSU需要使用到opatch,在README.html中有描述该PSU需要的最低版本opatch,如果当前opatch版本过低,则需要先下载 Patch 6880880,该Patch中包含最新的opatch,只需要解压覆盖原先的$ORACLE_HOME/OPatch目录即可。

查看当前的opatch版本,可以使用opatch version命令。

$ opatch version

Invoking OPatch 10.2.0.5.2

OPatch Version: 10.2.0.5.2

OPatch succeeded.

2)安装PSU,请仔细阅读README.html,确认安装命令,通常是简单的opatch apply。

$opatch apply

3)更新数据库,将修改过的SQL文件应用到数据库中,很多DBA在执行完上述安装命令以后就不再进行这一步,那么实际上PSU是没有完整安装的。

cd $ORACLE_HOME/rdbms/admin

sqlplus / as sysdba

SQL> STARTUP

SQL> @catbundle.sql psu apply

SQL> QUIT

注意:如果PSU是overlay PSU,比如10.2.0.4.8,则需要执行@catbundle.sql opsu apply,同样这些在README.html中都有详细描述。

4)重新编译CPU相关视图。该步骤在一个数据库上永远只需要执行一次,是为了完成在2008年1月份第一次发布CPU补丁时的后续工作,如果在安 装以前的PSU或者CPU时执行过这个步骤那么就可以无需再次执行,另外,即使不执行该步骤,数据库也是正常运行的,只不过意味着2008年1月份的 CPU补丁没有正常结束安装。

cd $ORACLE_HOME/cpu/view_recompile

sqlplus / as sysdba

SQL> @recompile_precheck_jan2008cpu.sql

SQL> SHUTDOWN IMMEDIATE

SQL> STARTUP UPGRADE

SQL> @view_recompile_jan2008cpu.sql

SQL> SHUTDOWN;

SQL> STARTUP;

SQL> QUIT

注意:该步骤由于需要重新编译大量视图,因此要启动数据库到upgrade状态才可以完成。也就是将引起停机时间。

4. 如何确认当前数据库已经安装了什么PSU/CPU?
无论是从V$VERSION或者DBA_REGISTRY或者PRODUCT_COMPONENT_VERSION视图中,都无法查找到PSU的信息,这些视图中始终显示的是最原始的版本,比如10.2.0.4.0。

最常用的方法是使用opatch命令。在打完最新的PSU 10.2.0.4.8的10.2.0.4数据库中会有以下显示。

$ opatch lsinventory -bugs_fixed | grep -i ‘DATABASE PSU’

9654991 11724977 Wed May 25 16:37:17 CST 2011 DATABASE PSU 10.2.0.4.5 (REQUIRES PRE-REQUISITE

9952234 11724977 Wed May 25 16:37:17 CST 2011 DATABASE PSU 10.2.0.4.6 (REQUIRES PRE-REQUISITE

10248636 11724977 Wed May 25 16:37:17 CST 2011 DATABASE PSU 10.2.0.4.7 (REQUIRES PRE-REQUISITE

11724977 11724977 Wed May 25 16:37:17 CST 2011 DATABASE PSU 10.2.0.4.8 (REQUIRES PRE-REQUISITE

8576156 9352164 Wed May 25 15:10:48 CST 2011 DATABASE PSU 10.2.0.4.1 (INCLUDES CPUJUL2009)

8833280 9352164 Wed May 25 15:10:48 CST 2011 DATABASE PSU 10.2.0.4.2 (INCLUDES CPUOCT2009)

9119284 9352164 Wed May 25 15:10:48 CST 2011 DATABASE PSU 10.2.0.4.3 (INCLUDES CPUJAN2010)

9352164 9352164 Wed May 25 15:10:48 CST 2011 DATABASE PSU 10.2.0.4.4 (INCLUDES CPUAPR2010)

另外的方法是查看registry$history表。

SQL> select action,comments from registry$history;

ACTION                       COMMENTS

——————————-          ——————–

APPLY                          PSU 10.2.0.4.4

APPLY                          PSU 10.2.0.4.8

CPU                               view recompilation

注意:该表的内容是在上述安装PSU步骤的第三步中运行catbundle.sql才会插入的,因此如果该步骤忘记执行,则此表中无记录。因此我们在作数据库健康检查的时候不但要用opatch检查当前数据库最新的PSU补丁,也要检查registry$history表,以确认其它DBA是否正确地完成了PSU的安装。

如果多个PSU的安装都忘记了执行上述第三步,可以通过以下方法依次补作。

$ ls -l $ORACLE_HOME/psu

total 0

drwxrwxrwx 2 oracle dba 96 Oct 16 2010 10.2.0.4.4

drwxrwxrwx 2 oracle dba 96 Oct 16 2010 10.2.0.4.5

$sqlplus / as sysdba

SQL> @?/psu/10.2.0.4.4/catpsu.sql

SQL> @?/psu/10.2.0.4.5/catopsu.sql

更多关于CPU的信息,可以参看:Maclean的了解Oracle Critical Patch Update

5. 参考文档。
Oracle Recommended Patches — Oracle Database [ID 756671.1]
Patch Set Updates for Oracle Products [ID 854428.1]
Introduction To Oracle Database catbundle.sql [ID 605795.1]
How to confirm that a Critical Patch Update (CPU) has been installed in Linux / UNIX [ID 821263.1]

查看psu信息(数据库用户):

[oratest@testfin ~]$ $ORACLE_HOME/OPatch/opatch lsinventory

路在何方-IT项目经理的职业生涯和成长规划(转载)

经常有学员问我项目经理的出路在哪儿,前段时间我专门做了一场职业发展的讲座。和学员互动的过程中,更加深知这个问题的严重性。一方面大多数公司的晋升通道不明朗;一方面自己对自己的认知不深刻。

这篇文章是针对IT行业的项目经理的,但是其他行业也可以借鉴。

一、IT行业PM的三个方向与特点

1、技术型项目经理

方向:可以是架构方向,可以是设计方向,也可以是技术经理方向

特点:

·除了完成项目管理的事务性工作,还要求有专业技术知识储备。

·项目中的各种难题,他都能以专家的身份给出合理的解决方案。

·遇到赶工或快速跟进,他可以切换身份和研发打成一片。

·项目加入新人时,又可以分身为带教,培养祖国花朵快速成长。

·可以在项目管理和技术专家之间自由切换。未来职业目标是技术总监或项目管理总监。

优点:

·老板的选择。技术型项目经理制定计划、指挥做事更容易,可以补位。

·技术人员的选择。项目经理是技术人员转管理的常见出路之一。

·客户的选择。从做事角度看,客户更愿意和技术型人员打交道。

缺点:

·不重视计划。计划无用论频出。

·亲力亲为。累死当头的,团队抵御外部风险能力极弱。

·过于强硬。技术派通常缺少耐心,沟通方式过于简单。

实践建议:

·项目经理的精力90%应投入到计划、沟通上。

·重视团队建设。让项目组成员比你更渴望项目成功,你就赢了;如果做不到,继续做,努力达成。

·能通过别人能做好的,你就一定不要直接做。

·防范项目外部风险,保持灵敏嗅觉,及时沟通、协调、调整。避免团队掉入无可挽回的悲剧陷阱。

2、业务型项目经理

方向:特别是互联网公司,产品经理不一定由项目经理兼任,项目经理有兴趣可以转到产品方向,这种转型跟技术,业务也很类似。

特点:

·需求型项目经理即管项目,也管需求。能设计需求,也能协调完成需求。

·其实就是半个产品经理,往往这类项目经理出现在没有产品经理(或产品经理很弱)

·如果是互联网项目,可能会按敏捷开发的思路按天排定优先级,这时候项目经理相当于产品经理+敏捷教练。

·如果是传统项目,按瀑布迭代的周期排定优先级,这时候项目经理相当于需求分析工程师+项目经理。

·他保留了管理型项目经理的部分通用性,同时又需要一定的技术积累。不依赖于管理,也不依赖于技术,要求样样懂一些,但不需要十分精通的人才。

3、管理型项目经理

方向:项目经理升总监,专业上有深度成体系化。从PM到PD,项目管理技能要求上没有太大变化,但是运用,能力,经验上是有差距的。

特点:

·做的是纯管理,也就是PMP强调的项目管理是一类职业,有通用性,可以跨行业

·只是负责项目管理工作,不掺杂项目的其他工作。

·未来的职业发展路径是PMO或项目总监,专职管理领域。

·做纯管理更侧重事务性工作(工作强调制度化、流程化),比较缺少创造性

·建议重视人际关系和服务型领导

二、从小白到高层的路…

1、 一入项目深似海(项目助理)

“项目助理”是“项目经理”的初级阶段;项目经理助理首先面向的是应届生为主,或转型或换行做项目管理工作的朋友,随着IT互联网的兴起,经过项目管理培训的人也很多。

你大可以向前辈“取经”,不用担心他会藏着掖着。另外,向前辈学习时,要看看他是用什么工具做计划的,平时的办事方法和风格如何,从而达到取长补短的目的

我从项目助理的岗位上,做了三年。用我师父的话讲,我天生愚钝。不过那个时候师父确实一职多责,干不完的活。所以我用热情和积极性(这个成了我现在最大的收获和武器)感动了他,从调研需求到排进度计划,甚至投标文件的编写在这个阶段也参与不少。

关键词:重学习!

常规工作内容:

第1、 旁听会议,有时候会帮助项目经理组织准备会议资料。

第2、 文档整理,这个是基本的工作能力,有很多小白就是眼高手低在这个工作上被师父PASS。

第3、 草拟初版文档,这种文档可能包括计划,建议书,需求等等,虽然后面环节有人把控,但是这种机会一定要珍惜再珍惜,细心再细心。

第4、 简单的沟通,主要是对接开发, 可能有时候觉得像个传话筒,但是次数多了感觉也就有了,这就是锻炼。

既然是起步,相应做的事情是以围绕项目的“杂”事,这里说的杂是一些重复化的工作。刚刚接触项目管理,都喜欢依葫芦画瓢;还有一个原因,那就是“心急吃不了热豆腐”,“饭要一口一口地吃,路要一步一步地走”。因此,师父的指导很重要。先找个师父吧!

2、 起步的小白(项目经理)

在掌握了基本知识、熟悉了基本技能之后,一旦开始独立负责一个项目,就正式踏入了项目经理的职业生涯了。哪怕是担任一个小型和中型项目的项目经理,都不能再想“撂挑子”了,否则对于项目、客户和团队都有重大的影响。

这个阶段的重点是掌握“实践技能”和“软技能”。

关键词:重管理、重沟通!

特点:

实践技能:包括撰写文档、需求分析、分配任务、管理团队、把控风险、启动规划、计划实施、监控收尾等。

软技能:这时可能会体会到:有没有师父保护的区别是很大的,遇到事情没有退路,遇到冲突没人补台。因此,需要学会有韧性和斡旋,通过沟通解决问题,需要努力锤炼沟通和协调能力,勇敢面对“谈判”。

当然要提一句的是,环境很重要,好的环境就是好风水,能带来更快的进步。这时候不要把收入看的太重,习大大说过,还是扎根阶段。

3、 项目老鸟(高级项目经理)

高级项目经理相对于项目经理来说,经历过很多项目,对于项目的把控很有经验,在遇到风险时,能够很快的冷静并提供一套比较可行的解决方案,并且相比于项目经理所经手的项目,因为经验原因,项目的认可度在项目发起人那里认可度会更高。

关键词:重思考、重体系!

特征:

第1、 这个阶段的成长主题是“传授和指导”。对子项目不能通过命令进行管理,更多需要的是经验传授和案例指导。例如,帮助解决子项目中的具体难题,预见风险并提前帮助项目经理进行防范,指导团队建设和塑造氛围,在项目组中传递“企业文化

第2、 善于在项目中去培养和指导新入行的项目经理,可以让自己的项目有吸引力,很多人都愿意加入这样的项目,主动当助手,谁不想跟着大师好好学习一下。传授的过程也是自我提高的过程,对经验和教训进行系统的总结,会将项目管理知识、技能和经验融会贯通,可以达到理论讲解而不是事例讲授层次

第3、 资深项目经理对于挖掘新的项目机会有得天独厚的优势。他们能够接触到客户的高层,对于客户的业务和组织情况都非常了解,如果具备一定行业知识,了解新产品和新技术,就能够将客户的需求和公司的能力有机结合起来形成新的商机。

4、 项目大神级(项目总监)

项目总监应该是每个项目管理人员在职业生涯的终极目标,但并不是人生追求的终极目标,在很多大型互联网公司中,往往项目总监+技术总监就是一个项目部;但一些公司是项目总监+高级项目经理作为部门的领导层。

也就是说,某些公司在title上可能高级项目经理就是项目总监,有可能项目总监就是高级项目经理。项目总监,更需要的是战略能力,更多的是能不能把控项目走向的能力。

关键词:定方向、搞项目、带队伍!

特点:

第1、 做什么,不做什么,确定优先级。

第2、 沟通,在整个团队里把这个愿景说清楚,千万不要假设说了团队就记住了,记住了就理解了。沟通不是一次性的工作,说什么不是最重要的,怎么说才是关键。把众多有独立思想的人拢在一起是顶困难的一件事,光靠理性是做不到的,靠行动,靠感情,靠榜样,靠利益,靠各种不怕麻烦的小事。

第3、 挖人。人几乎都只能靠价值观才能凝聚到一起去,所以与其说是挖人,不如说是寻找价值观匹配的soulmate。

第4、 成长。互联网更新换代快,所以仅仅挖到优秀的人是远远不够的,还要保证他们不停地成长。

第5、 协作。这需要一整套的磨合方法。最优秀的员工要能够保障内部协作、信息的传递、知识的积累、流程的控制,都需要CEO在管理层面的不断提升。

5、 高层的梦想要有的

万一实现了呢?

关键词:悟性、不忘初心、不断突破

特点:

第1、 确立组织中的核心地位

第2、 领导力培养

第3、 帮助组成达成业务目标.

第4、 战略与商务能力打磨

第5、 帮助组织更长远的实现企业愿景和使命

总结,从短期看,项目经理的目标主要体现在项目管理能力和职位的晋升,从项目经理到项目群经理,再到项目组合经理,项目管理能力层层进阶,经验和技能日益精进。

从长期看,项目管理能力给项目经理提供了一种结构化的做事风格,这种风格可以运用在日常生活中的每一件事上,提高成功率。项目经理也可以脱离职场的束缚,依靠精湛的项目管理能力,做自己想做的事。

转自:https://mp.weixin.qq.com/s/4KKHUJgiBzEPGDCPo8SGBw

Oracle ebs 克隆注意事项(APPLPTMP)

实际应用中,我们经常会遇到一台服务器多套环境的情况。如果将几套环境APPLPTMP设置为相同的值,将会导致如下错误:

ORA-20100: File o0000071.tmp creation for FND_FILE failed.

出现这种情况,我们需要修改APPLPTMP的值,修改步骤如下:

1)关闭应用节点

2)数据库节点创建目录

$ mkdir  /u01/PROD/temp

3)修改数据库初始化参数

修改inittest.ora中utl_file_dir的值为/u01/PROD/temp

4)重启数据库

5)修改$APPL_TOP下.env文件

修改$CONTEXT_NAME.env中APPLPTMP的值APPLPTMP=”/u01/PROD/temp”
export APPLPTMP

6)修改应用节点$CONTEXT_FILE

修改s_applptmp

<APPLPTMP oa_var=”s_applptmp” osd=”UNIX”>/u01/PROD/temp</APPLPTMP>

7)启动应用

重新应用环境变量,查看当前APPLPTMP的值

echo $APPLPTMP

/u01/PROD/temp

确认后重启应用

为避免上述问题的存在,建议为每一套环境创建一个temp目录。在clone时将数据库层utl_file_dir和应用层APPLPTMP指向该temp目录。

转自:https://www.it610.com/article/4441973.htm

oracle数据库报错:ORA-01555: 快照过旧: 回退段号 10 (名称为 “_SYSSMU10_3550978943$”) 过小

前缀:

比较奇怪的是,请求爆这个错误后,我在程序里面加了个when others的异常,然后就正常了。

oracle undo表空间

undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。

undo数据的作用

1.回退事务

当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。

2.读一致性

通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。

使用undo参数

1.undo_management

该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。

2,UNDO_TABLESPACE

该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.

在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间.

3,UNDO_RETENTION

该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.

手工管理回滚段的规划:

SQL> show parameter  undo;

NAME                                 TYPE        VALUE

———————————— ———– ——————————

undo_management                string      AUTO

undo_retention                       integer    900

undo_tablespace                    string      UNDOTBS1

SQL> show parameter  transactions;

NAME                                 TYPE        VALUE

———————————— ———– ——————————

transactions                         integer     187             ———-系统准备支持的事务连接数量。

transactions_per_rollback_segment    integer     5       ————–每个回滚段支持的事务连接数量。回滚段数=187/5

SQL> show  parameter rollback;

NAME                                 TYPE        VALUE

———————————— ———– ———-

fast_start_parallel_rollback         string      LOW

rollback_segments                      string ———————-设置回滚段的数量

transactions_per_rollback_segment    integer     5

错误原因:

SQL语句执行时间太长,或者UNDO表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的 前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。  这种情况最多。

解决办法:

第1种情况解决的办法:

(1)增加UNDO表空间大小

(2)增加undo_retention 时间,默认只有15分钟

alter  system set undo_retention=14400 ;

undo_retention这个值可以根据情况调大一些。

(3)优化出错的SQL,减少查询的时间,首选方法

(4)避免频繁的提交

还有一种情况,可能是oracle BUG,官网说法ORA-01555BUG比较多,

其他参考:

https://www.cnblogs.com/Richardzhu/archive/2013/03/25/2981610.html

查看表空间使用情况
SELECT a.tablespace_name,
ROUND (a.total_size) “total_size(MB)”,
ROUND (a.total_size) – ROUND (b.free_size, 3) “used_size(MB)”,
ROUND (b.free_size, 3) “free_size(MB)”,
ROUND (b.free_size / total_size * 100, 2) || ‘%’ free_rate
FROM ( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 total_size
FROM dba_data_files
GROUP BY tablespace_name) a,
( SELECT tablespace_name, SUM (bytes) / 1024 / 1024 free_size
FROM dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name(+);

TABLESPACE_NAME                total_size(MB) used_size(MB) free_size(MB) FREE_RATE
—————————— ————– ————- ————- —————————————–
SYSAUX                                    900       835.687        64.313 7.15%
UNDOTBS1                                24576        53.875     24522.125 99.78%
USERS                                       5         1.312         3.688 73.75%
SYSTEM                                   4170      4160.687         9.313 .22%
USER_DATA                                 150       105.062        44.938 29.96%

计算所需undo表空间的大小:

1.计算业务高峰期每秒产生undo数据块的个数
SQL> select max(undoblks / ((end_time – begin_time)*24*3600)) from v$undostat;

MAX(UNDOBLKS/((END_TIME-BEGIN_
——————————
11.305

2.得到undo数据块在undo表空间中可以保留的最长时间
SQL> show parameter undo_retention;

NAME                                 TYPE        VALUE
———————————— ———– ——————————
undo_retention                       integer     86400

3.得到数据块大小
SQL> show parameter db_blo

NAME                                 TYPE        VALUE
———————————— ———– ——————————
db_block_buffers                     integer     0
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL
db_block_size                        integer     8192

4.将以上三者的数据相乘就是所需undo表空间的大小数
SQL> select (11.305*86400*8192)/1024/1024/1024 undoTablespace_GB from dual;

UNDOTABLESPACE_GB
—————–
7.4520263671875

发现undo表空间不够的时候,赶紧增加undo表空间的大小,执行语句如下:
alter tablespace undotbs1 add datafile ‘/u01/database/instance_name/undotbs02.dbf’ size 100M autoextend on next 128M maxsize 24G;
alter tablespace undotbs1 add datafile ‘/u01/database/instance_name/undotbs03.dbf’ size 100M autoextend on next 128M maxsize 24G;
alter tablespace undotbs1 add datafile ‘/u01/database/instance_name/undotbs04.dbf’ size 100M autoextend on next 128M maxsize 24G;

–查看会话数
select count(*) from v$session;

–查看进程数
select count(*) from v$process;

–查看数据库的并发连接数
select * from v$session where status=’ACTIVE’;

–查看当前数据库建立的会话
SELECT SID,SERIAL#,USERNAME,PROGRAM,MACHINE,STATUS FROM V$SESSION;

–查看数据库允许的最大连接数
SELECT value FROM V$PARAMETER WHERE NAME=’processes’

–查看数据库允许的最大会话数
SELECT value FROM V$PARAMETER WHERE NAME=’sessions’
–查看后台正在运行着的sql语句
select a.program,b.spid,c.sql_text from v$session a,v$process b,v$sqlarea c where a.paddr=b.addr and a.sql_hashvalue=c.hash_value and a.username is not null;

查询所有数据库的连接数
select schemaname,count(*)from v$session group by schemaname;

查询终端用户使用数据库的连接情况。
select osuser,schemaname,count(*) fromv $session group by schemaname,osuser;

查看当前不为空的连接
select * from v$session where username is not null

查看不同用户的连接数
select username,count(username) from v$session where username is not null group by username

转自:https://blog.csdn.net/qiuzhi__ke/article/details/78937078

 

Oracle数据库评估undo 表空间大小

如何估算Oracle数据库所需的UNDO表空间的大小:

How To Size UNDO Tablespace For Automatic Undo Management (文档 ID 262066.1)

要确定Oracle需要的UNDO 表空间的大小,需要以下三条信息:

UR 以秒为单位的UNDO_RETENTION

UPS 每秒生成的还原数据块的数量

DBS db_block_size

UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)

UNDO_RETENTION是一个参数,此参数控制为提供读一致性而保留的还原数据量,以秒为单位定义,可以在初始化文件中设置,或使用 ALTER SYSTEM 命令来动态修改。

SQL>ALTER SYSTEM SET UNDO_RETENTION=900;

SQL> show parameter undo_retention

NAME TYPE VALUE

———————————— ———– ——————————

undo_retention integer 900

如果值为900,则可以使还原数据保留 15 分钟,当然需要足够的存储空间才行。

那么如何计算每秒生成的还原数据块的数量呢,可以通过v$undostat视图的begin_time、end_time和undoblks三个字段的值查询出来,计算的SQL语句如下:

SQL> SELECT (UR * (UPS * DBS)) + (DBS * 24) AS “Bytes” FROM (SELECT value AS UR  FROM v$parameter WHERE name = ‘undo_retention’),(SELECT (SUM(undoblks)/SUM(((end_time -begin_time)*86400))) AS UPS  FROM v$undostat),  (SELECT value AS DBS FROM v$parameter  WHERE name = ‘db_block_size’);

Bytes

———-

445814.844

详解:

一般应该在一天中数据库负载最繁重的时候进行计算。

对于UNDO表空间大小的定义需要考虑UNDO_RETNETION参数、产生的UNDO BLOCKS/秒、UNDO BLOCK的大小。undo_retention:对于UNDO表空间的数据文件属性为autoextensible,则undo_retenion参数必须设置,UNDO信息将至少保留至undo_retention 参数设定的值内,但UNDO表空间将会自动扩展。对于固定UNDO表空间,将会通过表空间的剩余空间来最大限度保留UNDO信息。如果FIXED UNDO表空间没有对保留时间作GUARANTEE(alter tablespace xxx retention guarantee;),则undo_retention参数将不会起作用。(警告:如果设置UNDO表空间为retention guarantee,则未过期的数据不会被复写,如果表空间不够则会导致DML操作失败或者transation挂起)

Oracle 10g 有自动Automatic Undo Retention Tuning 这个特性。设置的 undo_retention 参数只是一个指导值,,Oracle 会自动调整 Undo (会跨过 undo_retention 设定的时间) 来保证不会出现 Ora-1555 错误.。通过查询V$UNDOSTAT(该视图记录4天以内的UNDO表空间使用情况,超过4天可以查询DBA_HIST_UNDOSTAT视图) 的 tuned_undoretention (该字段在10G版本才有,9I是没有的)字段可以得到Oracle 根据事务量(如果是文件不可扩展,则会考虑剩余空间)采样后的自动计算出最佳的 retenton 时间.。这样对于一个事务量分布不均匀的数据库来说,,就会引发潜在的问题–在批处理的时候可能 Undo 会用光, 而且这个状态将一直持续, 不会释放。

SQL查询tuned_undoretention:

select to_char(begin_time,’DD-MON-RR HH24:MI’) begin_time,to_char(end_time,’DD-MON-RR HH24:MI’) end_time,tuned_undoretention from v$undostat order by end_time;

检查一天平均每秒产生的UNDO BLOCK

select (sum(undoblks)/sum((end_time-begin_time)*86400) from v$undostat;

生成的结果是UNDO BLOCK,如果需要计算出实际大小,则需要乘以db_block_size(通过show parameter db_block_size查出来)

如何计算合适的UNDO表空间大小:

select (UR*(UPS*DBS))+(DBS*24) as “bytes” from (select value as UR from v$parameter where name=’undo_retention’),(select (sum(undoblks)/sum(((end_time-begin_time)*86400))) as ups from v$undostat),(select value as DBS from v$parameter where name=’db_block_size’);

转自:http://blog.itpub.net/31397003/viewspace-2147515/