Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

131

积分

1

好友

13

主题
1#
发表于 2012-3-20 15:09:42 | 查看: 6547| 回复: 4
群里发起的一个话题,请刘总普及一下基础知识
5#
发表于 2012-8-1 15:12:20

回复 只看该作者 道具 举报

4#
发表于 2012-8-1 15:10:30
原帖由 不了峰 于 2012-3-20 15:19 发表
我来试一下,引用tom的书,不知道 能不能讲清楚

open cursor 时,Oracle不复制任何数据,只是将游标打开,它会边行进,边查询。换句话说,他只是在你获得数据时,才从表时读取数据。

open cursor时,在open的那一刻,返回的结果集就已 ...


TOM的书 是这样说的吗? 显然错了?

回复 只看该作者 道具 举报

3#
发表于 2012-3-20 20:04:01
ODM TEST:

SQL> oradebug setmypid;
Statement processed.


SQL> alter session set events '10046 trace name context forever,level 12';

Session altered.

SQL> oradebug tracefile_name;

/s01/admin/G10R21/udump/g10r21_ora_14946.trc


declare
cursor vCUR is select 121 from mac;
v_cur  number;
begin
open vCUR;
dbms_lock.sleep(60);
fetch vCUR into  v_cur;
end ;
/





PARSING IN CURSOR #2 len=19 dep=1 uid=0 oct=3 lid=0 tim=1301019645435103 hv=2424324144 ad='9973f268'
SELECT 121 FROM MAC
END OF STMT
PARSE #2:c=0,e=334,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1301019645435096
BINDS #2:
EXEC #2:c=0,e=37,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,tim=1301019645435205



PARSE
....................................................

WAIT 60 SECONDS



FETCH #2:c=0,e=70,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=1,tim=1301019782012990
EXEC #3:c=6999,e=58609703,p=0,cr=77,cu=0,mis=0,r=1,dep=0,og=1,tim=1301019782013055
WAIT #3: nam='SQL*Net message to client' ela= 4 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1301019782013144
WAIT #3: nam='SQL*Net message from client' ela= 979 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1301019782014152
STAT #2 id=1 cnt=1 pid=0 pos=1 obj=56331 op='TABLE ACCESS FULL MAC (cr=3 pr=0 pw=0 time=57 us)'
WAIT #0: nam='SQL*Net message to client' ela= 5 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1301019782014262


当OPEN CURSOR 操作发生时, PL/SQL引擎转到SQL引擎负责PARSE SQL语句获得执行计划, 同时它会记录OPEN CURSOR这一刻的SNAPSHOT SCN 快照SCN, 但是Oracle并不会实际FETCH相关的数据,也不会将这些数据复制到某个地方。  

直到实际FETCH 数据时才会去访问实际的数据块,这些块一般都是Current Block, The most recent version of block , 这样的块的SCN >> Snapshot scn, 需要通过UNDO数据构建 出一个SCN 合适的Best Block ,以满足Read Consistentcy;如果此时 存在的UNDO SNAPSHOT不足以构造出这样一个很久之前的Best Block的话,那么就可能出现ORA-1555错误。

回复 只看该作者 道具 举报

2#
发表于 2012-3-20 15:19:07
我来试一下,引用tom的书,不知道 能不能讲清楚

open cursor 时,Oracle不复制任何数据,只是将游标打开,它会边行进,边查询。换句话说,他只是在你获得数据时,才从表时读取数据。

open cursor时,在open的那一刻,返回的结果集就已经确定。

在返回的结果时,有可能需要构建读一致性。。当然 也会象刘总说的,可能会出现ora-01555的错误

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 03:24 , Processed in 0.052597 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569