06 2011 档案

Oracle PL/SQL 优化与调整 -- Bulk 说明
摘要:一. Bulk 概述 本来只想测试一下Bulk Collect 和update性能的,但发现Bulk 的东西还是很多的,在OTN上搜了一些,整理如下。 1.1 Bulk Binding 和 Bulk SQLFrom: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_packages.htm#ADFNS343 Oracle Database uses two engines to run PL/SQL blocks and subprograms. The PL/SQL engine runs proced 阅读全文

posted @ 2011-06-30 23:10 生活不是用来挥霍的

Oracle 利用 rowid 提升 update 性能
摘要:关于ROWID的介绍参考我的Blog: Oracle Rowid 介绍 http://blog.csdn.net/tianlesoftware/archive/2009/12/16/5020718.aspx关于大表Update 的一个讨论,参考itpub: http://www.itpub.net/viewthread.php?tid=1052077一. 在虚拟机上 使用rowid 进行update 测试 使用rowid 进行update能提高速度,是因为通过rowid 能够迅速的进行定位,不用全表进行扫描。-- 查看表dave 记录数SYS@dave2(db2)> select cou 阅读全文

posted @ 2011-06-30 00:34 生活不是用来挥霍的

Oracle DBWR,LGWR,CKPT,ARCH 触发条件 总结
摘要:一. DBWR写磁盘数据触发条件 1. 当进程在辅助LRU链表和主LRU链表上扫描以查找可以覆盖的buffer header[空闲缓冲区]时,如果已经扫描的buffer header的数量到达一定的限度(由隐藏参数:_db_block_max_scan_pct决定)时,触发DBWR进程。 _db_block_max_scan_pct表示已经扫描的buffer header的个数占整个LRU链表上buffer header总数的百分比。这时,搜索可用buffer header的进程挂起,在v$session_wait中表现为等待“free buffer wait”事件,同时增加v$sysstat 阅读全文

posted @ 2011-06-29 12:04 生活不是用来挥霍的

Orace ITL(Interested Transaction List) 说明
摘要:一.ITL 说明ITL: Interested Transaction List,也叫事务槽,它位于BLOCK Header。先dump 一个block,看一下这个ITL的信息。SELECTa.,extent_ida.,block_ida.blocks,bFROMa,segment_name file_idbfile# ;SELECT,nameFROM;当某个对象比较大时,占用的block也就会很多,Oracle 的存储结构是segment -->extent-->block.每个extent 由一些block组成。在上面的示例中每个extent 由8个blocks组成。我们dum 阅读全文

posted @ 2011-06-29 00:57 生活不是用来挥霍的

Oracle Buffer Cache 原理
摘要:一. 官网说明Memory Architecturehttp://download.oracle.com/docs/cd/B28359_01/server.111/b28318/memory.htm#i10221 The database buffer cache is the portion of the SGA that holds copies of data blocks read from datafiles. All users concurrently connected to the instance share access to the database buffer ca 阅读全文

posted @ 2011-06-28 19:40 生活不是用来挥霍的

Oracle B-Tree Index 原理
摘要:一. B-Tree Index 原理官网说明: No index structure can satisfy all needs, but the self-balancing B-tree index comes closest to optimizing the performance of searches on large sets of data. Each B-tree node holds multiple keys and pointers. The maximum number of keys in a node supported by a specific B-tree 阅读全文

posted @ 2011-06-27 19:50 生活不是用来挥霍的

Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262
摘要:一. Bug 问题表现 2011年安装Oracle 10.2.0.4 和10.2.0.5 版本时,在配置OEM的时候会报错。 忽略这个错误后,DB 可以成功创建或者升级。 MOS 上关于这个bug的说明,参考:[ID 1222603.1] 该bug 的表现为DBCA和DBUA 配置失败: Database Configuration Assistant (DBCA) and Database Upgrade Assistant (DBUA) will report the following error in the console:Could not complete the Enterp. 阅读全文

posted @ 2011-06-26 16:02 生活不是用来挥霍的

Oracle 大规模 delete,update 操作 注意事项
摘要:一. 说明 如果对大表进行大规模的delete 和update,那么可以注意一下如下说明: (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index entry。而且对于多CPU 情况,全表扫描还可以使用并行的特性。 Oracle Parallel Execution(并行执行) http://blog.csdn.net/tianlesoftware/archive/2010/09/01/5854583.aspx (2)如果表上有索引,B-Tree 索引可以unusable索引,函数索引则disable 索引,等操作结束之后在 阅读全文

posted @ 2011-06-25 15:40 生活不是用来挥霍的

由 bind_mismatch 引起的 大量 version_count 问题
摘要:从AWR报告里发现一个SQL存在大量的version_count. SYS@xezf(qs-xezf-db1)> select sql_id,version_count from v$sqlarea where version_count> 500 order by 2 desc ;SQL_ID VERSION_COUNT------------- -------------9rwd4wkwm4bsy 3046cpqsn8zak6sw4 298566x4djqka2ppy 9760z7n7sst85222 617 在v$sqlarea 中保存了SQL的cursor,当有大量的ver 阅读全文

posted @ 2011-06-24 22:01 生活不是用来挥霍的

Oracle PL/SQL之自定义函数的读一致性
摘要:读一致性即确保查询的结果与发起查询的时刻的数据一致,不管在此查询期间其他事务有没有更改数据。首先假设我们有如下函数用来根据部门id求该部门的总薪资:CREATE OR REPLACE FUNCTION sum2(p_deptno IN NUMBER) RETURN NUMBER IS --PRAGMA AUTONOMOUS_TRANSACTION; l_ret NUMBER; BEGIN dbms_lock.sleep(5); --DBMS_BACKUP_RESTORE.SLEEP(5); dbms_output.put_line(systimestamp); SELECT... 阅读全文

posted @ 2011-06-24 20:47 生活不是用来挥霍的

Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
摘要:SET TRANSACTION READ ONLY实际上是实现数据库四大事务(ACID)中隔离性(Isolation)的一种手段,用来将数据的读一致性定在某一时间点,即不管其他事务如何更改数据(不能在当前session中再使用自治事务),在当前事务中进行查询的结果始终不变。由于Oracle的读一致性是通过undo段来实现的,所以如果在此期间DML修改的数据量很大而undo空间设置过小可能会导致ORA-01555(快照过旧)错误。Test Code:Step 1, @session 1(SET TRANSACTION READ ONLY):Connected to Oracle Database 阅读全文

posted @ 2011-06-24 20:11 生活不是用来挥霍的

Oracle PL/SQL之不能在function里面调用DBMS_LOCK(Grant to role OR Grant to user)
摘要:已知:测试用户tuser1,测试角色trole1,trole1已经授权给了tuser1。在测试一段程序时需要用到延时,于是就把dbms_lock授权给了trole1,放在匿名块里测试没有问题:SQL> set serveroutput on; SQL> SQL> BEGIN 2 dbms_output.put_line(systimestamp); 3 -- dbms_backup_restore.sleep(3); 4 dbms_lock.sleep(3); 5 dbms_output.put_line(systimestamp); 6 EN... 阅读全文

posted @ 2011-06-24 16:39 生活不是用来挥霍的

Oracle PL/SQL之IN OUT NOCOPY
摘要:Suppose a subprogram declares an IN parameter, an OUT parameter, and an IN OUT parameter. When you call the subprogram, the IN parameter is passed by reference. That is, a pointer to the IN actual parameter is passed to the corresponding formal parameter. So, both parameters reference the same memor 阅读全文

posted @ 2011-06-24 13:59 生活不是用来挥霍的

使用DBMS_SHARED_POOL包将对象固定到共享池
摘要:--******************************************-- 使用DBMS_SHARED_POOL包将对象固定到共享池--****************************************** DBMS_SHARED_POOL包提供存储过程来将PL/SQL对象或SQL游标固定到Oracle 共享池。一旦这些对象固定之后,将不再参与aged out,而是常驻内存,即便是使用alter system flush shared_pool也不会将对象清除出共享池。 对于一些大值对象装载进共享池时容易引发两种类型的问题: ORA-04031 errors.. 阅读全文

posted @ 2011-06-24 09:45 生活不是用来挥霍的

Oracle EBS之MO_GLOBAL-Dive into R12 Multi Org Design
摘要:I hope you have already read article Basics of Multi Org in R12 . A few questions come to mind when we think about Multi Org in R12. The best way to analyse those questions is by opening package MO_GLOBAL. Don't worry if you are not yet on R12, package MO_GLOBAL is installed 11.5.10 too.Lets get 阅读全文

posted @ 2011-06-23 18:43 生活不是用来挥霍的

ORA-00054 故障处理一例
摘要:--************************-- ORA-00054 故障处理一例--************************ 最近index job出现失败,于是尝试手动执行试试。收到了ORA-00054的错误消息。一、错误消息 SQL> ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild; ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified 阅读全文

posted @ 2011-06-23 11:14 生活不是用来挥霍的

共享池中保留池的调整(shared_pool_reserved_size)
摘要:--*************************************************-- 共享池中保留池的调整(shared_pool_reserved_size)--*************************************************1.何谓保留池 简言之,保留一部分内存空间以备不时之需。通常情况下,Oracle会将大的内存请求分割成小的内存块来满足需求。而对于大的内 存且为连续的内存空间请求,如果在共享池中未找到,则会动用共享池中的保留池。当然,共享池在内存压力的情况下,也会使用到 保留池中的部分。保留池部分满足较大的内存需求更高效。缺省情况 阅读全文

posted @ 2011-06-23 10:59 生活不是用来挥霍的

oracle的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤
摘要:产生问题的原因主要以下两点:1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况;2. 有较大事务没有收缩或者没有提交所导制;说明:本问题在ORACLE系统管理中属于比较正常的一现象,日常维护多注意对磁盘空间的监控。UNDO表空间介绍UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管 阅读全文

posted @ 2011-06-22 22:34 生活不是用来挥霍的

Oracle v$session_longops 视图说明
摘要:一. 官网说明1.1 v$session_longops V$SESSION_LONGOPS displays the status of various operations that run for longer than 6 seconds (in absolute time). These operations currently include many backup and recovery functions, statistics gathering, and query execution, and more operations are added for every Or 阅读全文

posted @ 2011-06-22 21:42 生活不是用来挥霍的

Oracle Recursive Calls 说明
摘要:一. Recursive Calls 说明在执行计划的统计信息里有如下信息:SYS@anqing2(rac2)> set autot trace statisticsSYS@anqing2(rac2)> select * from ta,tb where ta.id=tb.id and ta.id <10; 9 rows selected.Statistics---------------------------------------------------------- 5 recursive calls 0 db block gets 2081 consistent g 阅读全文

posted @ 2011-06-22 17:15 生活不是用来挥霍的

Oracle Shared pool 详解
摘要:一. Shared Pool 概述 在之前的blog对Oracle 的内存架构也做了一个概述,参考: Oracle 内存 架构 详解 http://blog.csdn.net/tianlesoftware/archive/2010/05/15/5594080.aspx 在网上搜到一篇介绍shared pool 非常详细的pdf资料。 原文链接以找不到,但还是要感谢作者Kamus的辛勤劳动。 结合Kamus 的pdf和csdn 网友的blog,重新整理了一下,链接如下: http://blog.csdn.net/robinson1988/archive/2010/11/26/6037925... 阅读全文

posted @ 2011-06-22 14:30 生活不是用来挥霍的

Oracle 从缓存里面查找真实的执行计划
摘要:有关Oracle 的执行计划说明,参考我的Blog: Oracle Explain Plan http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5827245.aspx一. 查看当前session 的SID SYS@anqing1(rac1)> SELECT USERENV('SID') FROM DUAL; USERENV('SID')--------------137SYS@anqing1(rac1)> SELECT SID FROM V$MYSTAT WHERE ROWNUM =1;S 阅读全文

posted @ 2011-06-20 17:48 生活不是用来挥霍的

Oracle 10G中轻松发送email -- UTL_MAIL
摘要:10G之前,如果要从oracle中发送email,必须借助oracle的utl_smtp和utl_tcp功能包,自己包装一个email发送程序,然后使用.自从10G后,这个流程将变得非常简单.因为oracle给我们提供了一个utl_mail包,我们可以直接调用发送email.其实这个包底层也是调用了utl_smtp、utl_tcp的相关api. 不过utl_mail只能用于无安全验证的stmp服务器.如果smtp服务器需要安全验证,只能只用utl_smtp来实现.1、确定是否安装了utl_mail,如果没有用下面的语句安装utl_mail sqlplus sys/ SQL> @$ORAC 阅读全文

posted @ 2011-06-20 16:02 生活不是用来挥霍的

Oracle Logminer 做数据恢复 说明示例
摘要:在IBM DBA 小荷的blog上看到一个用Logminer 做数据恢复的例子。 虽然对Logminer 也了解一点,但是用Logminer 做恢复还真没用过,所以也测试一下。 原文链接地址如下: 客户的一次疏忽,DBA的一次噩梦 http://www.oracleblog.org/working-case/dba-always-bad-luck-with-careless-customer/一. 在测试之前讲一点理论知识1.1. 补充日志(supplemental logging)先看一下补充日志都包含哪些信息和特性: (1)索引簇、链行和迁移行; (2)直接路径插入; (3)摘取LogM. 阅读全文

posted @ 2011-06-19 14:52 生活不是用来挥霍的

Oracle 下 unpin 的cursor 才能被移除
摘要:最近南方的雨下的很烦人。 暴雨,一下就是一天,不过平时我也不怎么出门,所以也就无所谓了。 在家看看电影,做做测试,在补补觉,周末2天也就过去了。 刚才owind 让我做了个测试。 正在使用的cursor 能否被移除。 关于cursor的东西, 几个星期前就准备整理一下的,可是看了一下官方文档,东西太多了。 一时也没不知道从哪下手。 就放那了。 今天这个测试也算对cursor 知识的一个开始。 测试就为证明以下两句话: cursor is pined ,can't be age out. only freeable cursor can be flush. The buffer is n 阅读全文

posted @ 2011-06-18 21:07 生活不是用来挥霍的

Oracle cursor_sharing 参数 详解
摘要:一. 官网的说明http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN100251.1 CURSOR_SHARINGPropertyDescriptionParameter typeStringSyntaxCURSOR_SHARING = { SIMILAR | EXACT | FORCE }Default valueEXACTModifiableALTER SESSION, ALTER SYSTEMBasicNo CURSOR_SHARING determines what 阅读全文

posted @ 2011-06-17 14:24 生活不是用来挥霍的

Oracle cursor pin S wait on X 等待事件 说明
摘要:这个等待事件也算一个常见的等待事件。 在warehouse blog和 itpub 上有相关的2个帖子。 连接如下:cursor: pin S wait on X等待事件模拟http://warehouse.itpub.net/post/777/493962cursor: pin S wait on Xhttp://space.itpub.net/756652/viewspace-348176一. Mutex 说明 Oracle Mutex 机制 说明 http://blog.csdn.net/tianlesoftware/archive/2011/05/30/6455517.aspx To. 阅读全文

posted @ 2011-06-16 17:00 生活不是用来挥霍的

还原真实的 cache recovery
摘要:在maclean blog 上看到的这篇文章,很不错,转贴过来,原文链接如下:http://www.oracledatabase12g.com/archives/whats-smon-enabling-cache-recovery.html 我们在学习Oracle基础知识的时候会了解到实例恢复(Instance Recovery)或者说崩溃恢复(Crash recovery)的概念,有时候甚至于这2个名词在我们日常的语言中表达同样的意思。 实际上Instance Recovery与Crash Recovery是存在区别的:针对单实例(single instance)或者RAC中所有节点全部崩溃 阅读全文

posted @ 2011-06-16 10:37 生活不是用来挥霍的

Oracle 多表 连接 顺序 与 性能关系 测试
摘要:一. 创建表并insert 数据create table ta (id number,name varchar2(10));create table tb(id number,job varchar2(10));beginfor i in 1..1000000 loopbegininsert into ta values(i,'dave');commit;end;end loop;end;beginfor i in 1..1000000 loopbeginif i<10 theninsert into tb values(i,'boy');elsif i& 阅读全文

posted @ 2011-06-16 00:57 生活不是用来挥霍的

Linux Shell之export
摘要:export使在父shell中定义的环境变量在子shell中仍然有效。eg:[oracle@ora10g ~]$ echo $AA[oracle@ora10g ~]$ echo $BB[oracle@ora10g ~]$ AA=aaa[oracle@ora10g ~]$ BB=bbb[oracle@ora10g ~]$ export BB[oracle@ora10g ~]$ bash[oracle@ora10g ~]$ echo $AA[oracle@ora10g ~]$ echo $BBbbb[oracle@ora10g ~]$ exitexit[oracle@ora10g ~]$ echo 阅读全文

posted @ 2011-06-16 00:55 生活不是用来挥霍的

在Red Hat 4 AS U7上安装oracle10gR2
摘要:软件:Red Hat 4 AS U7, Oracle 10g R2 for linux32, VMWare 7, Windows 7详细步骤清单:在Red Hat 4 AS U7上安装oracle10gR2 1. 硬件需求: =========================================== 至少1024MB物理内存 # grep MemTotal /proc/meminfo =========================================== 交换空间大小分配需求 物理内存:1024 MB ~ 2048 MB, 1.5倍物理内存 物理内存:2049... 阅读全文

posted @ 2011-06-15 22:10 生活不是用来挥霍的

Oracle ORA-04031 错误 说明
摘要:在 老熊 的Blog上看到他们写的有关ORA-04031的文章,转到blog。老熊的Blog:http://www.laoxiong.net/an-ora-04031-case.html ORA-04031这个错误,几乎每一个专业的DBA都遇到过。这是一个相当严重的错误,Oracle进程在向SGA申请内存时,如果申请失败,则会报这个错误。大部分情况下是在向SGA中的shared pool申请内存时失败,而少有向large pool等池中申请内存失败。比如下面的报错:Wed Apr 27 16:00:25 2011Errors in file /oracle/app/oracle/admin/. 阅读全文

posted @ 2011-06-15 14:42 生活不是用来挥霍的

在windows下访问linux图形界面之vncserver
摘要:环境:server:redhat 4 as update 7client:windows 7software:vncviewer 4生产环境下server一般都没有显示器,但是如果我们需要在server上安装oracle的话,就必须使用图形界面。如果client是linux的话,我们可以使用xhost,同样windows下也有相应的解决办法。如果客户端是windows,可以在在windows上装一个vncviewer来登录linux图形界面,而且一般linux server上都装有vncserver。1.1 服务端配置:1.1.1 如果是第一次使用vncserver,需要配置vncserver 阅读全文

posted @ 2011-06-14 20:41 生活不是用来挥霍的

Oracle PL/SQL之GROUP BY GROUPING SETS
摘要:使用GROUP BY GROUPING SETS相当于把需要GROUP的集合用UNION ALL联合起来。当GROUPING SETS里面的分组元素越多时,使用GROUPING SETS比使用UNION ALL性能更好,这可能和使用GROUPING SETS只需要访问一次表有关。如下两段查询的结果是相等的:q1(GROUPING SETS):SELECT department_id, job_id, manager_id, AVG (salary) FROM employees GROUP BY GROUPING SETS ((department_id, job_id), (jo... 阅读全文

posted @ 2011-06-12 00:00 生活不是用来挥霍的

Oracle PL/SQL之GROUPING 函数
摘要:在使用ROLLUP或CUBE进行GROUP操作时会产生内容为空的字段,即值为NULL的字段,那我们如何区分这些显示为空的字段到底是该字段本身值就是NULL还是由ROLLUP和CUBE生成的呢?这时可以用GROUPING(groupingfield) 来解决,如果列中的值来自事实数据,则 GROUPING 函数返回 0;如果列中的值是ROLLUP或CUBE操作所生成的 NULL,则返回 1。eg:SELECT department_id deptid, job_id job, SUM (salary), GROUPING (department_id) grp_dept, ... 阅读全文

posted @ 2011-06-11 23:46 生活不是用来挥霍的

Oracle PL/SQL之GROUP BY CUBE
摘要:ROLLUP会根据GROUP BY后面的字段从右到左逐步以去掉右边一个字段,逐步向上累计求和,CUBE则会对GROUP BY后面的字段所有的组合进行分组求和。CUBE eg1:SELECT department_id, job_id, SUM (salary) FROM employees WHERE department_id < 60 GROUP BY CUBE (job_id, department_id); DEPARTMENT_ID JOB_ID SUM(SALARY) ------------- ---------- ----------- ... 阅读全文

posted @ 2011-06-11 23:34 生活不是用来挥霍的

Oracle PL/SQL之GROUP BY ROLLUP
摘要:ROLLUP字面意思大概就是向上卷,用在GROUP BY 里面可起到累积求和的作用:没有ROLLUP的情况下,以下查询按department_id和job_id进行分组求和:SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id < 60 GROUP BY department_id, job_id; Output: DEPARTMENT_ID,JOB_ID,SUM(SALARY) 50,ST_CLERK,55700 50,ST_MAN,36400 30,PU_CLERK,1... 阅读全文

posted @ 2011-06-11 22:58 生活不是用来挥霍的

使用 runcluvfy 校验Oracle RAC安装环境
摘要:--*****************************************-- 使用 runcluvfy 校验Oracle RAC安装环境--***************************************** 所谓工欲善其事,必先利其器。安装 Orale RAC 可谓是一个浩大的工程,尤其是没有做好前期的规划与配置工作时将导致安装的复杂度绝非想象。幸好有runcluvfy工具,这大大简化了安装工作。下面的演示是基于安装Oracle 10g RAC / Linux来完成的。1.从安装文件路径下使用runcluvfy实施安装前的校验 [oracle@node1 cluv 阅读全文

posted @ 2011-06-09 08:42 生活不是用来挥霍的

参数CONTROL_FILE_RECORD_KEEP_TIME和MAXLOGHISOTRY
摘要:--**************************************************-- 参数CONTROL_FILE_RECORD_KEEP_TIME和MAXLOGHISOTRY--************************************************** 参数control_file_record_keep_time是一个位于控制文件中比较重要的参数之一。它决定了控制文件里可重复使用的记录所能保存的最小天数。当一条新的记录需要添加到可重用记录的空间时,并且最老的记录在可重用记录空间中还没有老化,即实际保留的天数未超过这个参数规定的天数,则控制文 阅读全文

posted @ 2011-06-08 09:02 生活不是用来挥霍的

DBVERIFY 工具的使用
摘要:--**********************-- DBVERIFY 工具的使用--********************** Oracle 数据库运行过程中由于硬件故障或操作系统故障导致导致Oracle无法以Oracle格式来识别或所包含的内容即为出现数据块损坏故障,这个坏块可以分为介质损坏以及逻辑损坏。下面给出了块的检查,以及使用DBVERIFY 工具实施块检查。一、块检查 1.何时检查块 当一个数据块被读或写的时候,将对块的进行一致性检查,检查的内容包括 块的版本 比较块在cache与block buffer中的数据块地址 根据要求进行校验(checksum) 2.损坏的数据块的错. 阅读全文

posted @ 2011-06-08 08:47 生活不是用来挥霍的