1、建立测试数据
- SQL> insert into tt select rownum, 'test...........' from dba_objects;
- 已创建52142行。
- SQL> commit;
- 提交完成。
- SQL> alter system switch logfile;
- 系统已更改。
- SQL> insert into tt select rownum, 'test...........' from dba_objects;
- 已创建52142行。
- SQL> /
- 已创建52142行。
- SQL> /
- 已创建52142行。
- SQL> commit;
- 提交完成。
- SQL> alter system switch logfile;
- 系统已更改。
- SQL> delete from tt;
- 已删除208568行。
- SQL> commit;
- 提交完成。
- SQL> alter system switch logfile;
- 系统已更改。
- SQL> insert into tt select rownum, 'test...........' from dba_objects;
- 已创建52142行。
- SQL> commit;
- 提交完成。
- SQL> select count(*) from tt;
- COUNT(*)
- ----------
- 52142
2、backup to trace
- SQL> alter database backup controlfile to trace;
3、添加数据文件,此时控制文件结构改变
- SQL> alter tablespace users add datafile 'C:/oracle/product/10.2.0/oradata/orcl/user02.dbf' size 10M;
- 表空间已更改。
- SQL>
- SQL> select status ,name from v$datafile;
- STATUS NAME
- ------- ----------------------------------------------------------------------------
- SYSTEM C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1
- ONLINE D:/WORK/DATA/SCGL.ORA
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USER02.DBF
- 已选择10行。
- SQL>
4、shutdown 数据库,删除数据文件模拟数据文件损坏
- SQL> shutdown immediate
- 数据库已经关闭。
- 已经卸载数据库。
- ORACLE 例程已经关闭
5、重建控制文件
- SQL> startup nomount;
- ORACLE 例程已经启动。
- Total System Global Area 167772160 bytes
- Fixed Size 1247900 bytes
- Variable Size 75498852 bytes
- Database Buffers 88080384 bytes
- Redo Buffers 2945024 bytes
- SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
- 2 MAXLOGFILES 16
- 3 MAXLOGMEMBERS 3
- 4 MAXDATAFILES 100
- 5 MAXINSTANCES 8
- 6 MAXLOGHISTORY 292
- 7 LOGFILE
- 8 GROUP 1 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG' SIZE 50M,
- 9 GROUP 2 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG' SIZE 50M,
- 10 GROUP 3 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG' SIZE 50M
- 11 -- STANDBY LOGFILE
- 12 DATAFILE
- 13 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF',
- 14 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF',
- 15 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF',
- 16 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF',
- 17 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF',
- 18 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF',
- 19 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1',
- 20 'D:/WORK/DATA/SCGL.ORA',
- 21 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF'
- 22 CHARACTER SET ZHS16GBK
- 23 ;
- 控制文件已创建。
6、打开数据库,查看数据文件状态。C:/ORACLE/PRODUCT/10.2.0/DB_1/DATABASE/MISSING00010并不存在,只不过是个标记而已。
- SQL> alter database open;
- 数据库已更改。
- SQL> select status ,name from v$datafile;
- STATUS NAME
- ------- --------------------------------------------------------------------------------
- SYSTEM C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1
- ONLINE D:/WORK/DATA/SCGL.ORA
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF
- RECOVER C:/ORACLE/PRODUCT/10.2.0/DB_1/DATABASE/MISSING00010
- 已选择10行。
7、如果用备份控制文件,且备份控制文件少了新增加的几个文件,恢复时会提示错误,我们可以用rename来解决
- SQL> alter database rename file 'MISSING00010' to 'C:/oracle/product/10.2.0/oradata/orcl/user02.dbf';
- 数据库已更改。
- SQL> select status ,name from v$datafile;
- STATUS NAME
- ------- --------------------------------------------------------------------------------------------
- SYSTEM C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1
- ONLINE D:/WORK/DATA/SCGL.ORA
- ONLINE C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF
- RECOVER C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USER02.DBF
- 已选择10行。
- SQL> select count(*) from tt;
- COUNT(*)
- ----------
- 52142
- SQL>