深入学习和研究Oracle,希望结交更多志同道合的朋友。

【ITPUB论坛】求助!删除表空间出错

上一篇 / 下一篇  2008-05-02 19:23:59 / 个人分类:Oracle

查看( 335 ) / 评论( 14 )
在删除数据的表空间的时候出现下面的错误,sys有drop tablespace的权限,这是为什么呢?

sys@TEST>DROP TABLESPACE temp01 including contents and datafiles;
DROP TABLESPACE temp01 including contents and datafiles
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges

平台:WinXP
版本:10.2.0.1,使用了asm,但temp01不在asm上(删除asm上的表空间也有同样的问题)

TAG:

yxming1677发布于2008-05-02 20:36:58
跟踪一下看看
bosonmaster的个人空间 bosonmaster 发布于2008-05-02 21:57:11
先创建个临时表空间,然后把数据库缺省的改为新创建的,在删除TEMP01看看
木头小屋 木头一个 发布于2008-05-02 22:45:49

QUOTE:

原帖由 bosonmaster 于 2008-5-2 21:57 发表
先创建个临时表空间,然后把数据库缺省的改为新创建的,在删除TEMP01看看
temp01不是目前数据库的缺省表空间,删除所有的表空间都有这个问题
木头小屋 木头一个 发布于2008-05-02 23:35:05

QUOTE:

原帖由 yxming1677 于 2008-5-2 20:36 发表
跟踪一下看看
谢谢,跟踪了一下,可能找到问题的原因了,trace文件有下列内容
The following statement encountered a error during parse:

select dummy from dual where  ora_dict_obj_type = 'TABLE'

Error encountered: ORA-01031

查看了一下dual表,原来上次做实验,给dual添加了一列,可能是就是这个原因造成的,现在不仅是drop tablespace出错,好像所有的drop操作都会出错
sys@TEST>select * from dual;

D          A
- ----------
X
jieyancai发布于2008-05-02 23:54:05
把a列删除后看看结果
warehouse的个人空间 warehouse 发布于2008-05-03 00:06:32
系统的东西最好还是不要乱动
木头小屋 木头一个 发布于2008-05-03 01:35:29

QUOTE:

原帖由 jieyancai 于 2008-5-2 23:54 发表
把a列删除后看看结果
sys@TEST>alter table dual drop column a;
alter table dual drop column a
*
ERROR at line 1:
ORA-12988: cannot drop column from table owned by SYS

sys用户下表的列是不能直接删除的(不知道Oracle为什么要这么设计,sys用户下的表可以添加列,但是不能删除 ),我通过col$、tab$数据字典删除A列后还是不行

[ 本帖最后由 木头一个 于 2008-5-3 01:39 编辑 ]
木头小屋 木头一个 发布于2008-05-03 01:35:56
谢谢大家!问题找到了 ,是因为上次做实验的时候把dual表给弄坏了,drop操作看来是要用到dual表的,解决的步骤如下(主要是把dual表修复了一下):

1.先创建了一个自定义的dual表暂时顶替
sys@TEST>create table my_dual as select dummy from dual;

Table created.

sys@TEST>select * from my_dual;

D
-
X

2.创建临时dual表的同义词,并赋给所有用户select的权限
sys@TEST>create public synonym dual for my_dual;

Synonym created.

sys@TEST>grant select on my_dual to public;

Grant succeeded.

3.删除dual表
sys@TEST>drop table sys.dual;

Table dropped.

4.重建dual表
sys@TEST>create table dual as select * from dual;

Table created.

5.删除在临时dual表上建立的同义词
sys@TEST>drop public synonym  dual;

Synonym dropped.

sys@TEST>select * from dual;

D
-
X

6.创建dual表的同义词,并赋给所有用户select的权限
sys@TEST>create public synonym dual for sys.dual;

Synonym created.

sys@TEST>grant select on dual to public;

Grant succeeded.

删除表空间没有问题了
sys@TEST>drop tablespace temp01 including contents and datafiles;

Tablespace dropped.

看样在dual表在Oracle数据库中还是很重要的

[ 本帖最后由 木头一个 于 2008-5-3 01:39 编辑 ]
jieyancai发布于2008-05-03 10:47:56
如果dual表不在了,也可以用下面的方法恢复:(借此做个记录)
可以通过执行以下步骤来进行恢复。可以用sys用户登陆。
SQL> create pfile='dfile.bak' from spfile
SQL> shutdown immediate
在dfile.bak文件中最后加入一条:replication_dependency_tracking = FALSE
重新启动数据库:
SQL> startup pfile='dfile.bak'
SQL> create table "sys"."DUAL"
     ( "DUMMY" varchar2(1) )
     pctfree 10 pctused 4;
SQL> insert into dual values('X');
SQL> commit;
SQL> Grant select on dual to Public;
授权成功。

SQL> select * from dual;

D
-
X

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>
棉花糖ONE发布于2008-05-03 13:31:55
我有次往dual表上插了条记录,但是dual表只是显示一行,我以为没事,第二天删除表都报错,结果才想起来往dual里插了一行
paul oracle my love paulyibinyi 发布于2008-05-03 13:38:49
我也有过往dual 表插入过一行 导致rman 备份错误
木头小屋 木头一个 发布于2008-05-03 13:46:53

QUOTE:

原帖由 棉花糖ONE 于 2008-5-3 13:31 发表
我有次往dual表上插了条记录,但是dual表只是显示一行,我以为没事,第二天删除表都报错,结果才想起来往dual里插了一行
在dual表插入记录,在toad中能看到,但是在sqlplus中看不到,很奇怪,感觉是被屏蔽掉了
star_guan2008的个人空间 star_guan2008 发布于2008-05-03 17:48:39
和木头大哥学习!!
xiaodong_1567的个人空间 xiaodong_1567 发布于2008-05-03 18:06:01
还有这关系
学习
我来说两句

(可选)

Open Toolbar