专著oracle 技术 记录维护生产数据库的点点滴滴....

ora-08104 不重启数据库 解决

上一篇 / 下一篇  2007-12-11 19:08:41 / 个人分类:Oracle DBA

查看( 123 ) / 评论( 7 )
oralce : 9201
os       : win2000 sp4

ora-08104 The index is being created or rebuild or waited for recovering from the online (re)build.

alter index index_name rebulid online ;

kill掉session后。
drop index index_name ;
还是提示:ora-08104 ;
drop table table_name ;-- 索引所在的表
还是提示:ora-08104 ;

drop table SYS_JOURNAL_[objid];

truncate table table_name; -- 要做好备份。

drop index index_name ;
就是提示:ora-08104 ; (看到ifree的帖子说他truncte后,就可以drop index 了。我在这里不行)

之后select * from tab_name , 就出现600错误了。越搞越复杂了。
ORA-00600: 内部错误代码,参数: [kkdlfjou_1], [], [], [], [], [], [], []


解决办法:
    重建临时表空间
     
    step1 : 为临时表空间添加一个临时文件
        ALTER TABLESPACE temp ADD  TEMPFILE 'xxx' SIZE 1024m ;
      step2 : drop 原来的临时文件
        alter database tempfile 'xxx' drop including datafiles
   
    这时在alert.log 中会出现无法删除文件os文件的错误。但是在数据库中已经删除的临时文件。(估计需要重启数据库才能删除了。所以metalink说需要shutdown oracle ,这样才能真正解决问题。)
    ORA-01258: 无法删除临时文件 xxxx
                ORA-27056: skgfrdel: 无法删除文件
                OSD-04024: 无法删除文件。
                O/S-Error: (OS 32) 进程无法访问文件,因为另一个程序正在使用此文件。
               
    然后在执行 drop index index_name ; 就没有问题了。
   
参考:http://www.itpub.net/209621,2.html
      http://www.itpub.net/viewthread. ... p;extra=&page=2
简单总结一下!

TAG:

棉花糖ONE发布于2007-12-11 19:10:25
http://www.ningoo.net/html/2007/ ... nter_ora-08104.html

[ 本帖最后由 棉花糖ONE 于 2007-12-11 19:12 编辑 ]
oradbHome oradbHome 发布于2007-12-11 19:18:25

QUOTE:

原帖由 棉花糖ONE 于 2007-12-11 19:10 发表
http://www.ningoo.net/html/2007/ ... nter_ora-08104.html
谢谢。如果能使用dbms_repair.online_index_clean 就更好了。
棉花糖ONE发布于2007-12-11 19:21:49
metalink 怎么给出个update ind$,无语了,当时能rename table吗,对了要多大数据量才会出现,怎么我每次都不遇到
oradbHome oradbHome 发布于2007-12-11 19:30:08
rename table 是可以的。
oradbHome oradbHome 发布于2007-12-11 19:39:15
不遇到是好事啊。
rebuild online 后一定要耐心等待。因为我当时是做了 move 所以必须要rebulid 。
而那时表还需要被select ,index 已经无效了。之后做了个ctas。那个表已经不大了,之前delete好多,但是hwm很大。
oradbHome oradbHome 发布于2007-12-11 19:40:55
要是ddl 也能够 rollback 就好了
mhy119的个人空间 mhy119 发布于2008-02-15 14:27:00
今天恰巧碰到这个问题了,给出DBMS_REPAIR.ONLINE_INDEX_CLEAN 的语法。
DECLARE
  RetVal BOOLEAN;
  OBJECT_ID BINARY_INTEGER;
  WAIT_FOR_LOCK BINARY_INTEGER;

BEGIN
  OBJECT_ID := 39852;
--  我的数据库中非法索引的id为39852.
  WAIT_FOR_LOCK := NULL;

  RetVal := SYS.DBMS_REPAIR.ONLINE_INDEX_CLEAN ();
  COMMIT;
END;
/

-- 注意这个过程一定要执行完,不能中断。 还是比较快的。
我来说两句

(可选)

日历

« 2008-09-06  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 7091
  • 日志数: 667
  • 建立时间: 2007-12-21
  • 更新时间: 2008-09-05

RSS订阅

Open Toolbar