控制文件、数据文件损坏、异常关闭,数据文件被覆盖

SQL> set linesize 170
SQL> col name for a40
SQL> select tablespace_name,name from v$datafile_header;

TABLESPACE_NAME                NAME
------------------------------ ----------------------------------------
SYSTEM                         /u01/app/oracle/oradata/shujukuai/system
                               01.dbf

UNDOTBS1                       /u01/app/oracle/oradata/shujukuai/undotb
                               s01.dbf

SYSAUX                         /u01/app/oracle/oradata/shujukuai/sysaux
                               01.dbf

USERS                          /u01/app/oracle/oradata/shujukuai/users0
                               1.dbf

TABLESPACE_NAME                NAME
------------------------------ ----------------------------------------

TBS01                          /u01/app/oracle/oradata/shujukuai/tbs01.
                               dbf


SQL> drop tablespace tbs01 including contents and datafiles;

Tablespace dropped.

SQL> create tablespace tbs01 datafile '/u01/app/oracle/oradata/shujukuai/tbs01.dbf' size 10m;

Tablespace created.


SQL> create table t1(scn int) tablespace tbs01;

Table created.


SQL> insert into t1 select dbms_flashback.get_system_change_number from (select   rownum from dba_objects where rownum<=1000);

1000 rows created.

SQL> commit;

Commit complete.

SQL> select group#,bytes,archived,first_change#,sequence#,status from v$log;

    GROUP#      BYTES ARC FIRST_CHANGE#  SEQUENCE# STATUS
---------- ---------- --- ------------- ---------- ----------------
         1   52428800 YES        602821          1 INACTIVE
         2   52428800 NO         609406          2 INACTIVE
         3   52428800 NO         627969          3 CURRENT  当前日志文件

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter database backup controlfile to trace as '/u02/backup_files/shujukuai.sql' reuse;

Database altered.


SQL> shutdown abort;
ORACLE instance shut down.
SQL> host rm -rf /u01/app/oracle/oradata/shujukuai/tbs01.dbf

SQL> host rm -rf /u01/app/oracle/oradata/shujukuai/control01.ctl

SQL> host rm -rf /u01/app/oracle/oradata/shujukuai/control02.ctl

SQL> host rm -rf /u01/app/oracle/oradata/shujukuai/control03.ctl

SQL> host vi /u02/backup_files/shujukuai.sql

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "SHUJUKUA" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/shujukuai/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/shujukuai/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/shujukuai/redo03.log'  SIZE 50M
DATAFILE
  '/u01/app/oracle/oradata/shujukuai/system01.dbf',
  '/u01/app/oracle/oradata/shujukuai/undotbs01.dbf',
  '/u01/app/oracle/oradata/shujukuai/sysaux01.dbf',
  '/u01/app/oracle/oradata/shujukuai/users01.dbf',  注意这个逗号也要去掉,别粗心大意哈
 --- '/u01/app/oracle/oradata/shujukuai/tbs01.dbf'  注意删除此行,因为这个数据文件已经不存在了
CHARACTER SET ZHS16GBK
;


SQL> @/u02/backup_files/shujukuai.sql
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  2083368 bytes
Variable Size             113247704 bytes
Database Buffers          163577856 bytes
Redo Buffers                6303744 bytes

Control file created.


SQL> select group#,bytes,archived,first_change#,sequence#,status from v$log;

    GROUP#      BYTES ARC FIRST_CHANGE#  SEQUENCE# STATUS
---------- ---------- --- ------------- ---------- ----------------
         1   52428800 NO         631904          4 INACTIVE
         3   52428800 NO         627969          3 INACTIVE
         2   52428800 NO         631906          5 CURRENT

SQL> select substr(name,1,40) dname,recover,fuzzy,checkpoint_change#,checkpoint_count from v$datafile_header;

DNAME                                    REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
/u01/app/oracle/oradata/shujukuai/system     YES             627969               58
/u01/app/oracle/oradata/shujukuai/undotb     YES             627969               18
/u01/app/oracle/oradata/shujukuai/sysaux     YES             627969               58
/u01/app/oracle/oradata/shujukuai/users0     YES             627969               57

SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 5: '/u01/app/oracle/oradata/shujukuai/tbs01.dbf'


SQL> select substr(name,1,40) dname,recover,fuzzy,checkpoint_change#,checkpoint_count from v$datafile_header;

DNAME                                    REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
/u01/app/oracle/oradata/shujukuai/system YES YES             631815               58
/u01/app/oracle/oradata/shujukuai/undotb YES YES             631815               18
/u01/app/oracle/oradata/shujukuai/sysaux YES YES             631815               58
/u01/app/oracle/oradata/shujukuai/users0 YES YES             631815               57
                                                                                                                      0                0                  咦,这里多了行空白的东西,想一下,是不是添加了一个空白的数据文件



SQL> alter database create datafile '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00005' as  '/u01/app/oracle/oradata/shujukuai/tbs01.dbf';

Database altered.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/shujukuai/system01.dbf'


SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select substr(name,1,40) dname,recover,fuzzy,checkpoint_change#,checkpoint_count from v$datafile_header;

DNAME                                                             REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
--------------------------------------------------------- ----- ----                ------------------ ----------------
/u01/app/oracle/oradata/shujukuai/system NO  YES             651930               62
/u01/app/oracle/oradata/shujukuai/undotb NO  YES             651930               22
/u01/app/oracle/oradata/shujukuai/sysaux NO  YES             651930               62
/u01/app/oracle/oradata/shujukuai/users0 NO  YES             651930               61
/u01/app/oracle/oradata/shujukuai/tbs01. NO  YES             651930                5

SQL> select file#,status$,crscnbas from file$;

     FILE#    STATUS$   CRSCNBAS
---------- ---------- ----------
         1          2          5
         2          2     600647
         3          2       6678
         4          2      10685
         5          2     631813     --这里当然就是这个数据文件的生日啦,FILE$这个基表记录了数据文件生日

这里我们看到基表中STATUS$状态都为2,说明是可用的。但是如果这个数据文件被删除,那么状态为1。当数据文件被删除后不会立即在FILE$中体现出来。而是逻辑删除

SQL> select count(*) from t1;

  COUNT(*)
----------
      1000

 

 

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

转载于:http://blog.itpub.net/21158541/viewspace-666516/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值