Oracle Dual表

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)重启数据库


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值