今天在测试环境本来想模拟一个数据块讹误的错误,但是在实际的操作中却碰到了另外一个问题。 修改完数据文件后,启动数据库碰到ora-1122的错误,没办法只能做数据恢复了,幸亏我在在实验之前冷备整个数据文件。 以下是我的操作步骤:
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/app/oracle/oradata/gbk/system01.dbf
/app/oracle/oradata/gbk/undotbs01.dbf
/app/oracle/oradata/gbk/sysaux01.dbf
/app/oracle/oradata/gbk/users01.dbf
SQL>
SQL> create tablespace block
2 datafile '/app/oracle/oradata/gbk/block.dbf'
3 size 100M
4 extent management local;
SQL> alter user wwx identified by 'password' default tablespace block;
SQL>grant resource,create session to wwx;
SQL> create table test as select * from all_users;
Table created.
SQL> insert into test select * from test;
23 rows created.
SQL> /
46 rows created.
。。。。。。
SQL> /
2944 rows created.
SQL> select count(*) from test;
COUNT(*)
----------
5888
SQL> show user
USER is "WWX"
SQL> conn /as sysdba
Connected.
SQL> alter system switch logfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host cp /app/oracle/oradata/gbk/block.dbf /tmp/
SQL> startup
ORACLE instance started.
Total System Global Area 264241152 bytes
Fixed Size 1266944 bytes
Variable Size 96471808 bytes
Database Buffers 163577856 bytes
Redo Buffers 2924544 bytes
Database mounted.
ORA-01122: database file 5 failed verification check
ORA-01110: data file 5: '/app/oracle/oradata/gbk/block.dbf'
ORA-01251: Unknown File Header Version read for file number 5
SQL> desc v$instance
Name Null? Type
----------------------------------------- -------- ----------------------------
INSTANCE_NUMBER NUMBER
INSTANCE_NAME VARCHAR2(16)
HOST_NAME VARCHAR2(64)
VERSION VARCHAR2(17)
STARTUP_TIME DATE
STATUS VARCHAR2(12)
PARALLEL VARCHAR2(3)
THREAD# NUMBER
ARCHIVER VARCHAR2(7)
LOG_SWITCH_WAIT VARCHAR2(15)
LOGINS VARCHAR2(10)
SHUTDOWN_PENDING VARCHAR2(3)
DATABASE_STATUS VARCHAR2(17)
INSTANCE_ROLE VARCHAR2(18)
ACTIVE_STATE VARCHAR2(9)
BLOCKED VARCHAR2(3)
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
gbk MOUNTED
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
SQL> host cp /tmp/block.dbf /app/oracle/oradata/gbk/
SQL> recover tablespace block
ORA-00279: change 697183 generated at 11/03/2010 11:08:17 needed for thread 1
ORA-00289: suggestion :
/app/oracle/flash_recovery_area/GBK/archivelog/2010_11_03/o1_mf_1_10_%u_.arc
ORA-00280: change 697183 for thread 1 is in sequence #10
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: change 700629 generated at 11/03/2010 14:53:14 needed for thread 1
ORA-00289: suggestion :
/app/oracle/flash_recovery_area/GBK/archivelog/2010_11_03/o1_mf_1_11_%u_.arc
ORA-00280: change 700629 for thread 1 is in sequence #11
ORA-00278: log file
'/app/oracle/flash_recovery_area/GBK/archivelog/2010_11_03/o1_mf_1_10_6f21ptfj_.
arc' no longer needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
。。。。。。
ORA-00279: change 709250 generated at 11/03/2010 14:55:22 needed for thread 1
ORA-00289: suggestion :
/app/oracle/flash_recovery_area/GBK/archivelog/2010_11_03/o1_mf_1_21_%u_.arc
ORA-00280: change 709250 for thread 1 is in sequence #21
ORA-00278: log file
'/app/oracle/flash_recovery_area/GBK/archivelog/2010_11_03/o1_mf_1_20_6f21tw39_.
arc' no longer needed for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
Log applied.
Media recovery complete.
SQL>
SQL> alter database open;
Database altered.
SQL> select count(*) from wwx.test;
COUNT(*)
----------
5888
到此恢复完成,实验需要的数据又重新出现在了我的面前。
也可以使用SQL> recover datafile '/app/oracle/oradata/gbk/block.dbf';恢复数据