关于Oracle数据库的Dual表_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

关于Oracle的Dual表

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

黑客防线网安网讯:      有朋友问到关于Oracle的Dual表问题,并且提到了Tom的一个链接:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388     很多人关心的是Dua...

      有朋友问到关于Oracle的Dual表问题并且提到了Tom的一个链接:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388

    很多人关心的是Dual的内部实现Oracle自然是不会披露的,不过我们可以从一些有限的资料获得关于Dual的印象: 

There is internalized code that makes this happen. Code checks that ensure that a table scan of SYS.DUAL only returns one row. Svrmgrl behaviour is incorrect but this is now an obsolete product. 

The base issue you should always remember and keep is: DUAL table should always have 1 ROW. Dual is a normal table with one dummy column of varchar2(1).
This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or other prebuilt or application functions.
If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL has more than 1 row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception.

So DUAL should ALWAYS have 1 and only 1 row. 

    前两句话最为关键,实际上我们也容易猜到,Oracle通过内部代码来实现对于DUAL的访问和控制,并且通过Internal Code使得这个表与众不同

    Tom提到在Close了Database之后,可以看到这个表的内存地址及展现,这说明这个表的结构并不单纯:

sql> select * from dual;
D
-
X

sql> alter database close;

Database altered.

sql> select * from dual;

ADDR          INDX    INST_ID D
-------- ---------- ---------- -
0A4F8858          0          1 X 

    注意不要更改Dual表的内容,否则可能引起数据库的问题

    如果该表意外删除,可以通过设置初始化参数replication_dependency_tracking = FALSE,重启数据库来重建该表。

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12445-1.html
网站维护教程更新时间:2012-03-23 00:41:02  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer