深入学习和研究Oracle,希望结交更多志同道合的朋友。
【ITPUB论坛】求助!删除表空间出错
上一篇 / 下一篇 2008-05-02 19:23:59 / 个人分类:Oracle
查看( 335 ) /
评论( 14 )
TAG:
-
yxming1677发布于2008-05-02 20:36:58
-
跟踪一下看看
-
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
发布于2008-05-03 00:06:32
-
系统的东西最好还是不要乱动
-
木头一个
发布于2008-05-03 01:35:29
-
QUOTE:
原帖由 jieyancai 于 2008-5-2 23:54 发表
sys@TEST>alter table dual drop column a;
把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='d
file.bak' from spfile
SQL> shutdown immediate
在d
file.bak文件中最后加入一条:replication_dependency_tracking = FALSE
重新启动数据库:
SQL> startup pfile='d
file.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里插了一行
-
paulyibinyi
发布于2008-05-03 13:38:49
-
我也有过往dual 表插入过一行 导致rman 备份错误
-
木头一个
发布于2008-05-03 13:46:53
-
QUOTE:
原帖由 棉花糖ONE 于 2008-5-3 13:31 发表
在dual表插入记录,在toad中能看到,但是在sqlplus中看不到,很奇怪,感觉是被屏蔽掉了
我有次往dual表上插了条记录,但是dual表只是显示一行,我以为没事,第二天删除表都报错,结果才想起来往dual里插了一行
-
star_guan2008
发布于2008-05-03 17:48:39
-
和木头大哥学习!!
-
xiaodong_1567
发布于2008-05-03 18:06:01
-
还有这关系
学习