ITPub博客

首页 > Linux操作系统 > Linux操作系统 > undo表空间数据表空间的数据文件同时丢失的恢复

undo表空间数据表空间的数据文件同时丢失的恢复

原创 Linux操作系统 作者:小被子0000 时间:2010-12-29 09:19:54 0 删除 编辑
昨日杭州电销jira有个数据库出现问题,运维人员说由于前天机房停电,数据库停机,昨日来了启动数据库,但是启动不了,报错。

alert文件如下:
Errors in file /u01/app/oracle/admin/oracle10/bdump/oracle10_dbw0_3493.trc:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/u01/app/oracle/oradata/oracle10/abcc.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Tue Dec 28 22:33:18 2010
Errors in file /u01/app/oracle/admin/oracle10/bdump/oracle10_dbw0_3493.trc:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/oracle10/cardbfile.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Tue Dec 28 22:33:18 2010
Errors in file /u01/app/oracle/admin/oracle10/bdump/oracle10_dbw0_3493.trc:
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/u01/app/oracle/oradata/oracle10/undotbs01.DBF'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Tue Dec 28 22:36:19 2010

我查了下,两个数据表空间的数据文件均已丢失,undo表空间的一个数据文件丢失。
经过和运维人员交流,得知,这两个数据表空间已经早就不用了。据我推测,可能是
运维人员想删掉这两个表空间,就在系统上直接rm了数据文件,以为这样表空间就删了。
undo的数据文件也可能是这样。

解决办法如下:
查了一些资料。按照二 进行的操作。如红字部分。
大体解决方案,首先重建undo表空间,使系统能启动,再对那两个没有数据文件的表空间进行删除。


UNDO损坏修复------使用到了第二条,abort的情况

      undo损坏后的修复分为以下三种情况:

一、数据库正常关闭immediate或normal
    ①、创建pfile并使用pfile启动数据库
        startup nomount
        create pfile= from spfile;
        shutdown abort
        startup mount restrict pfile=
    ②、尝试恢复文件
        select name,file#,status from v$datafile;
        recover datafile ;
    ③、创建新的undo表空间替换损坏的undo表空间
        alter database datafile offline drop;
        alter database open;
        CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '' SIZE 10M AUTOEXTEND ON RETENTION NOGUARANTEE;
        shutdown immediate;
    ④、修改pfile:
       undotablespace=UNDOTBS2
    ⑤、删除损坏undo表空间并创建新的SPFILE   
        startup pfile=      
        drop tablespace UNDOTBS1 including contents and datafile;
        create spfile from pfile=''shshutdown immediate
        startup         
二、abort或crash        
    ①、创建pfile        
        startup nomount         
        create pfile= from spfile;
                
    ②、修改pfile       
        undo_tablespace='SYSTEM'       
        undo_management='MANUAL'       
        *._allow_resetlogs_corruption=true
        (注:允许在数据库文件SCN不一致的情况下启动数据库)
        *._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
        (注:允许在rollback segments损坏的情况下启动数据库)
         (注:rollback的名称要与已经损坏的undo表空间的rollback segment号保持一致,不然导致无法删除损坏的undo表空间)
    ③、使用修改后pfile启动数据库
        startup mount restrict pfile=''
    ④、修改损坏数据文件状态
        select name,file#,status from v$datafile;
        alter database datafile offline drop;
    ④、打开数据库
        alter database open;
    ⑤、并创建新的undo表空间并关闭数据库
        CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '' SIZE 10M AUTOEXTEND ON RETENTION NOGUARANTEE;
        shutdown immediate;
    ⑥、修改pfile
        undo_tablespace='UNDOTBS2'
        undo_management='AUTO'
    ⑦、启动数据库并删除损坏undo表空间
        startup restrict pfile=
        修改损坏undo表空间状态
        alter tablespace undotbs1 offline immediate;
        删除损坏undo表空
        drop tablespace UNDOTBS1 including contents and datafiles;
       
三、online
    ①、创建新的undo表空间
        CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '' SIZE 10M AUTOEXTEND ON RETENTION NOGUARANTEE;
    ②、改变默认undo表空间
        ALTER SYSTEM SET UNDO_TABLESPACE='';
    ③、删除损坏undo表空间
        DROP TABLESPACE INCLUDING CONTENTS AND DATAFILE;
四、相关视图:
    v$datafile
    v$rollname
    v$rollstat
    v$tablespace
    dba_rollback_segs
    dba_data_files
    dba_talbespaces
    dba_segments
 (以上也是从网上搜索的资料)      
经过上面的修复,undo的问题解决了。
再解决数据表空间的问题。
       
数据文件被删除了,想要删除表空间但报错-----如下:
SQL> drop tablespace carspace including contents and datafiles;
drop tablespace carspace including contents and datafiles
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-31496: must use DBMS_CDC_PUBLISH.DROP_CHANGE_TABLE to drop change tables
ORA-06512: at "SYS.DBMS_CDC_IPUBLISH", line 12
ORA-06512: at line 5


SQL> select change_table_name from CHANGE_TABLES ;

CHANGE_TABLE_NAME
------------------------------
J$COMMENT_USER
J$PAYDATATB
J$LPDATATB
J$LCRECORDTB

SQL> desc CHANGE_TABLES
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 CHANGE_TABLE_SCHEMA               NOT NULL VARCHAR2(30)
 CHANGE_TABLE_NAME               NOT NULL VARCHAR2(30)
 CHANGE_SET_NAME               NOT NULL VARCHAR2(30)
 SOURCE_SCHEMA_NAME               NOT NULL VARCHAR2(30)
 SOURCE_TABLE_NAME               NOT NULL VARCHAR2(30)
 CREATED                   NOT NULL DATE
 CREATED_SCN                        NUMBER
 CAPTURED_VALUES               NOT NULL VARCHAR2(1)
 PUB_ID                    NOT NULL NUMBER

SQL> select change_table_name,CHANGE_TABLE_SCHEMA from CHANGE_TABLES ;

CHANGE_TABLE_NAME           CHANGE_TABLE_SCHEMA
------------------------------ ------------------------------
J$COMMENT_USER               CARUSER
J$PAYDATATB               CARUSER
J$LPDATATB               CARUSER
J$LCRECORDTB               CARUSER
使用一下包,进行删除那些change的表。然后在进行删除表空间。
exec dbms_cdc_publish.drop_change_table('CARUSER','J$COMMENT_USER','Y');
exec dbms_cdc_publish.drop_change_table('CARUSER','J$PAYDATATB','Y');
exec dbms_cdc_publish.drop_change_table('CARUSER','J$LPDATATB','Y');
exec dbms_cdc_publish.drop_change_table('CARUSER','J$LCRECORDTB','Y');

 (以上也是从网上搜索的解决方案使用这个包。)      

 删除损坏数据表空间:
 drop tablespace carspace including contents and datafiles;
 成功。
 
 
经验教训:
这次也尝试了rman 的restore和recover的工作,但是需要归档文件,需要rman的备份片,但
都已经不存在。逻辑备份也一个多月没做了。
1。备份,再备份,再再备份,再再再备份。
2。在系统上根本就不要使用rm命令,对于不懂数据库的人更应该遵守。不要轻易删除那些名字怪异的文件。有可能是关键文件。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22782896/viewspace-682759/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-05-08

  • 博文量
    10
  • 访问量
    28433