您的位置:首页 > 数据库 > Oracle

Oracle Dual表

2016-09-19 09:11 429 查看
Dual表是被oracle数据库自动创建单独存放在数据字典中。dual属于sys用户,但是又可以被所有的用户进行访问。只有一个“DUMMY"列,默认varchar2(1),仅仅只有一行数据(值为X);

一、DUAL表的用途

dual是Oracle中的一个实际存在的表,任何用户均可以读取,常用在没有目标表的select语句块中

-----查看当前连接用户

SQL> select user from dual;

USER

------------------------------

SYS

----查看当前日期、时间

SQL> select sysdate from dual;

SYSDATE

-----------

2016/9/18 2

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2

------------------------------

2016-09-18 23:46:52

----当计算器使用

SQL> select 1+2 from dual;

       1+2

----------

         3

-----查看序列值

SQL> create sequence aaa increment by 1 start with 1;

Sequence created

SQL> select aaa.nextval from dual;

   NEXTVAL

----------

         1

二、关于dual表的测试与分析

dual就是一个一行一列的表,如果你往里执行了insert、delete、truncate操作,就会导致很多程序出问题。

dual表本身是创建在system表空间的,第一是因为dual表是sys这个用户建的,本来默认的表空间就是system表空间;第二,把这个可能经常被查询的表和用户表分开来存放,对于系统性能是有好处的。

有了创建表、创建了同义词还是不够的,dual在sys这个schema下面,因此用别的用户登录是无法查询这个表的,因此还需要授权:

grant select on sys.dual to public with grant opetion;

将select权限受予公众。

三、dual表行数的问题

在创建数据库之后,dual表中便已经被插入了一条数据记录。个人认为:重要的是dual表中的记录数。

需要保证dual表内有且只有一条记录,当然,也不能把dual表的update、insert、delete权限随意释放出去。

四、删除dual表

dual表可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop操作。否则系统就不能使用,数据库就起不来了,会报database startup crashes with ORA-1092错误。

如果dual不幸被删除了,恢复步骤如下:

(1)用sys用户登录。

(2)创建dual表。

(3)授予公众select权限(不要update、insert、delete权限)

(4)向dual表插入一条记录(仅此一条):insert into dual values (“X");

(5)提交修改;

具体操作过程如下:

(1)创建pfile文件

SQL> create pfile='/tmp/pfileSBDB.ora' from spfile;

(2)添加一下参数

replication_dependency_tracking=FALSE

_SYSTEM_TRIG_ENABLED=FLASE

(3)使用pfile启动数据库

SQL> startup pfile='/tmp/pfileSBDB.ora';

(4)创建dual表

create table sys.DUAL

(dummy VARCHAR2(1))

tablespace system

pctfree 10

pctused 40

initrans 1

maxtrans 255

storage

(

initial 16K

next 1M

minextents 1

maxextents unlimited

);

(5)授予权限

SQL> grant select on sys.dual to public with grant option;

(6)插入一条数据

SQL> insert into dual values('x');

(7)提交commit

(8)重启数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle