【DB笔试面试684】在Oracle中,什么是DUAL表?_Oracle

♣  

题目         部分

在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才能启动数据库。