查看: 8517|回复: 14

求助!删除表空间出错

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2008-5-2 19:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在删除数据的表空间的时候出现下面的错误,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上的表空间也有同样的问题)
论坛徽章:
3
2#
发表于 2008-5-2 20:36 | 只看该作者
跟踪一下看看

使用道具 举报

回复
论坛徽章:
10
每日论坛发贴之星
日期:2007-09-10 01:02:15金色在线徽章
日期:2007-10-03 04:03:16ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44数据库板块每日发贴之星
日期:2007-12-20 01:04:15生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:摔跤
日期:2008-09-04 09:51:27生肖徽章2007版:狗
日期:2009-03-10 21:24:29ITPUB社区12周年站庆徽章
日期:2013-10-08 17:44:42
3#
发表于 2008-5-2 21:57 | 只看该作者
先创建个临时表空间,然后把数据库缺省的改为新创建的,在删除TEMP01看看

使用道具 举报

回复
论坛徽章:
0
4#
 楼主| 发表于 2008-5-2 22:45 | 只看该作者
原帖由 bosonmaster 于 2008-5-2 21:57 发表
先创建个临时表空间,然后把数据库缺省的改为新创建的,在删除TEMP01看看

temp01不是目前数据库的缺省表空间,删除所有的表空间都有这个问题

使用道具 举报

回复
论坛徽章:
0
5#
 楼主| 发表于 2008-5-2 23:35 | 只看该作者
原帖由 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

使用道具 举报

回复
论坛徽章:
190
生肖徽章:狗
日期:2006-11-23 04:26:03生肖徽章:羊
日期:2007-09-26 17:08:21生肖徽章:马
日期:2007-09-26 17:08:49授权会员
日期:2007-12-31 19:14:41生肖徽章2007版:牛
日期:2008-03-28 10:02:30奥运会纪念徽章:柔道
日期:2008-04-30 16:28:44奥运会纪念徽章:垒球
日期:2008-05-12 21:28:28奥运会纪念徽章:体操
日期:2008-06-26 10:00:41奥运会纪念徽章:沙滩排球
日期:2008-07-27 12:41:59奥运会纪念徽章:艺术体操
日期:2008-07-30 11:09:47
6#
发表于 2008-5-2 23:54 | 只看该作者
把a列删除后看看结果

使用道具 举报

回复
论坛徽章:
150
蓝锆石
日期:2011-11-16 22:31:22萤石
日期:2011-11-17 13:05:31祖母绿
日期:2008-06-14 15:23:26海蓝宝石
日期:2011-11-16 22:25:15紫水晶
日期:2011-11-16 22:31:22红宝石
日期:2011-10-09 08:54:30蓝锆石
日期:2009-01-31 15:20:54萤石
日期:2008-12-22 15:22:00祖母绿
日期:2011-11-17 13:13:26海蓝宝石
日期:2008-07-05 14:52:18
7#
发表于 2008-5-3 00:06 | 只看该作者
系统的东西最好还是不要乱动

使用道具 举报

回复
论坛徽章:
0
8#
 楼主| 发表于 2008-5-3 01:35 | 只看该作者
原帖由 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 编辑 ]

使用道具 举报

回复
论坛徽章:
0
9#
 楼主| 发表于 2008-5-3 01:35 | 只看该作者
谢谢大家!问题找到了 ,是因为上次做实验的时候把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 编辑 ]

使用道具 举报

回复
论坛徽章:
190
生肖徽章:狗
日期:2006-11-23 04:26:03生肖徽章:羊
日期:2007-09-26 17:08:21生肖徽章:马
日期:2007-09-26 17:08:49授权会员
日期:2007-12-31 19:14:41生肖徽章2007版:牛
日期:2008-03-28 10:02:30奥运会纪念徽章:柔道
日期:2008-04-30 16:28:44奥运会纪念徽章:垒球
日期:2008-05-12 21:28:28奥运会纪念徽章:体操
日期:2008-06-26 10:00:41奥运会纪念徽章:沙滩排球
日期:2008-07-27 12:41:59奥运会纪念徽章:艺术体操
日期:2008-07-30 11:09:47
10#
发表于 2008-5-3 10:47 | 只看该作者
如果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>

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表