oracle-SYSTEM表空间的备份与恢复
副标题[/!--empirenews.page--]
oracle-SYSTEM表空间的备份与恢复 这一篇在介绍备份及恢复数据文件的方法时,以备份和重做日志(包括归档日志和在线日志)没有丢失为前提 所谓关键数据文件:system表空间的数据文件与参数undo_tablespace指向的自动撤销表空间的数据文件(undo_tablespace数据文件)。 它们的损坏(整体或局部)会导致SQL命令执行失败、用户session强制断开、sys用户无法登陆、甚至整个实例崩溃。 SQL> select file_id,file_name from dba_data_files where tablespace_name in (‘SYSTEM‘,(select value from v$parameter where name=‘undo_tablespace‘)); FILE_ID FILE_NAME ---------- -------------------------------------------------- 3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1 /u01/app/oracle/oradata/orcl/system01.dbf 9.1 关键数据文件损坏的后果 9.1.1 system表空间数据文件损坏 SYSTEM表空间内部保存两类重要数据:oracle数据库的系统表(数据字典),是数据库正常运行的基本保障:以及名为SYS.SYSTEM的撤销段(undo segment)系统回滚段。 讨论情况:文件丢失、文件头损坏、数据库字段损坏及SYS.SYSTEM撤销段损坏 --1 若system01.dbf文件丢失或无法访问,startup启动到mount状态 --2 若system01.dbf文件头损坏,运行时检查点发起后实例崩溃,startup启动到mount状态 --3 如果数据字典损坏,数据库内的对象定义系统、名称解析系统、用户账号系统及权限管理都将崩溃。若损坏发生在实例运行时,通常会导致SQL命令产生ORA-00604的错误;若损坏发生在实例启动时,启动流程不一定会终止,但是alert log中会有ORA-01578和ORA-01110错误。 --4 system01.dbf 文件名中为SYS.SYSTEM撤销段头部损坏,在启动时startup实例会强制关闭,必须使用startup mount才能进入mount状态。 以下是一些各种是system01.dbf文件损坏的场景 场景1:启动数据库是发现system01.dbf文件丢失,启动中断 SQL> startup ORA-01157: cannot identify/lock data file 1 -see DBWR trace file ORA-01110:data file 1 : ‘/u01/app/oracle/oradata/orcl/system01.dbf’ 场景2:启动数据库发现system01.dbf文件头部损坏,启动中断 SQL> startup ORACLE instance started. Total System Global Area 784998400 bytes Fixed Size 2257352 bytes Variable Size 511708728 bytes Database Buffers 264241152 bytes Redo Buffers 6791168 bytes Database mounted. ORA-01122: database file 1 failed verification check ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ ORA-01210: data file header is media corrupt 场景3:数据库运行时,system01.dbf文件中保存用户账号信息的数据字典SYS.USER$的数据块损坏,使用后登录失败 $ sqlplus test/*** ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1,block # 213) ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ 场景4:数据库运行时system01.dbf文件中的数据字典SYS.TAB$数据块损坏 SQL> select * from test.t1; ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1,block # 83226) ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ 场景5:数据字典SYS.PROCEDURE$中数据块损坏,任何create、drop和rename都报错 SQL> create table test.t2 (id number,name varchar2(20)) tablespace test; ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1,block # 89226) ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ 场景6:SYS.SYSTEM撤销段头部损坏,实例被强制中断 SQL> startup ORA-01092: ORACLE instance terminated,Disconnection forced ORA-01578: ORACLE data block corrupted (file # 1,block # 128) ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ 场景7:SYS.SYSTEM撤销段与undo_tablespace表空间撤销段同时损坏,执行DDL时候报错 SQL> drop table test.t1; ORA-00603 : ORACLE server session terminated by fatal error 场景8:运行时,system01.dbf或undo_tablespace数据文件头部损坏,检查点无法顺利完成,在alter log中 ORA-01243: system tablespace file suffered media failure ORA-01122: database file 1 failed verification check 9.1.2 undo_tablespace数据文件损坏 undo_tablespace数据文件是undotbs01.dbf,它用来保存所有的变更类命令(DDLDML)所产生的撤销数据(undo data) --1 undotbs01.dbf文件丢失无法访问,startup启动到mount状态 --2 undotbs01.dbf文件头损坏,startup启动到mount,运行时检查点发起后实例崩溃 --3 若表空间中的某些块损坏,DML可能失败,若全部损坏,DML肯定全部失败 SQL> select name from v$rollname where name<> ‘SYSTEM‘; NAME ------------------------------ _SYSSMU1_1925302723$ _SYSSMU2_2273571325$ _SYSSMU3_798971445$ _SYSSMU4_2493343136$ _SYSSMU5_44098047$ _SYSSMU6_4194993272$ _SYSSMU7_3978436573$ _SYSSMU8_3643869769$ _SYSSMU9_4157155965$ _SYSSMU10_1224346732$ 10 rows selected. (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |