♣
题目 部分
在Oracle中,什么是DUAL表?
♣
答案部分
有关Oracle的DUAL表,需要掌握以下几点内容:
① 系统提供的一个DUMMY表,临时显示结果的表,里边的内容没有特定的意义,就是为了存在而存在。
② DUAL是属于SYS用户的一个表,然后以公共同义词的方式供其他数据库用户使用,这一点可以由以下SQL验证:
1SELECT D.OWNER,D.OBJECT_NAME,D.OBJECT_ID,D.OBJECT_TYPE FROM DBA_OBJECTS D WHERE D.OBJECT_NAME='DUAL';
③ Oracle对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录。当然这些内部操作是不可见的。
④ 若DUAL表出现问题,则所有相关的基础操作都会受到影响;若DUAL表被删除的话,则数据库将不能启动,报ORA-01775的错误。
⑤ DUAL在数据库OPEN状态下是一行一列的表,但是在MOUNT和NOMOUNT状态下是一行四列的表。
⑥ DUAL的常用方式如下所示:
a. 查看当前连接用户 SELECT USER FROM DUAL;
b. 查看当前日期、时间 SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
c. 当作计算器用 SELECT 8*9 FROM DUAL;
d. 查看序列值 SELECT MYSEQ.NEXTVAL FROM DUAL;
需要注意的是,如果DUAL被删除的话,那么总体的恢复思路是在数据库OPEN的情况下重建DUAL表,重建的语句如下所示:
1CREATE TABLE SYS.DUAL(DUMMY VARCHAR2(1)) STORAGE(INITIAL 1) TABLESPACE SYSTEM; 2INSERT INTO DUAL VALUES('X'); 3COMMIT; 4CREATE OR REPLACE PUBLIC SYNONYM DUAL FOR DUAL; 5GRANT SELECT ON DUAL TO PUBLIC WITH GRANT OPTION; 6@?/rdbms/admin/utlrp.sql
如果是DUAL被删除后重启了数据库,那么就需要设置参数REPLICATION_DEPENDENCY_TRACKING为FALSE才能启动数据库。
& 说明:
有关DUAL表破坏后的恢复可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2123291
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。