oracle 的DML命令的详细处理过程
原文地址:http://book.csdn.net/bookfiles/732/10073222578.shtml
对于DML语句来说,只要修改了数据块,Oracle数据库就会将修改前的数据保留下来,保存在undo segment里,而undo segment则保存在undo表空间里。从Oracle 9i起,有两种undo的管理方式:自动Undo管理(Automatic Undo Management,简称AUM)和手工Undo管理(Manual Undo Management,简称MUM)。Oracle 9i之前只能使用MUM,而且在MUM中,undo segment又叫做rollback segment。从Oracle 9i起,Oracle就建议使用AUM,而不应再使用MUM了。
7.1 DML语句与undo
当我们发出一条DML(比如update t set col1='A' where col1='B')语句时,其执行过程可大致概括为以下几步。
1. 在shared pool里进行解析,从而生成执行计划。具体解析过程见第5章。
2.假设根据执行计划,得出col1='B'的记录存放在10号数据文件的54号数据块里。
3. 服务器进程在buffer cache里找一个可用的undo数据块,如果没有发现,则到undo表空间里找一个可用的undo块,并调入buffer cache。假设获得的undo数据块号为24号,位于11号undo数据文件里。
4. 将改变前的值,也就是A放入11号undo数据块。
5. 由于undo数据块发生了变化,于是产生重做记录,假设重做记录号为120。
行号 事务id file# block# row column value
120 T1 24 11 10 col1 A
6.在buffer cache里找到54号数据块。如果没有发现,则从10号数据文件里调入。
7. 将改变后的值,也就是B放入54号数据块。
8. 由于数据块发生了变化,于是产生重做记录,假设重做记录号为121。
行号 事务id file# block# row column value
121 T1 10 54 10 col1 &n
相关文档:
declare
sqlstring varchar2(100);
emprow emp_bak%rowtype;
myno emp_bak.empno%type;
begin
--sqlstring:='create table emp_bak as select * from emp';
sqlstring:='select * from emp_bak where empno=:myno and sal>:mysal';
myno:='&请输入员工编号';
--动态SQ ......
GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。
关于ROLLUP和CUBE函数的使用,请参见我的另一篇文章。
http://blog.csdn.net/wh62592855/archive/2009/1 ......
1.安装jdk(版本6u7);
2.配置jdk环境变量(安装目录:D:\tools\java\jdk1.6.0_07):
1). JAVA_HOME = D:\tools\java\jdk1.6.0_07;
2). Path的最前面追加"D:\tools\java\jdk1.6.0_07\bin;D:\tools\java\jre1.6.0_07\bin";
3). CLASSPATH = D:\tools\java\jdk1.6.0_07\lib;D:\tools\java\jdk1.6.0_07\lib\too ......
1.oracle设置不同权限的用户去访问同一表空间
1.create user testa identified by testa;
2.alter user testa default tablespace users temporary tablespace temp;
3.grant connect to testa;
4.grant select any table to testa;
2.ORACLE中设置同一个用户对两个表空间的权限的代码
alter user 用户 quota unlimi ......