实验:
SQL> alter database backup controlfile to 'd:/ctl.bak';--提前对控制文件做备份
数据库已更改。
SQL> archive log list; --查看归档的状态
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 12
下一个存档日志序列 14
当前日志序列 14
SQL> create table tb_temp(id int,col1 varchar2(20));
表已创建。
SQL>
SQL> insert into tb_temp select 1,'Robinson' from dual;
已创建 1 行。
SQL>
SQL> select * from tb_temp;
ID COL1
---------- --------------------
1 Robinson
SQL> commit;
提交完成。
alter system switch logfile;--切换日志
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 13
下一个存档日志序列 15
当前日志序列 15
--模拟控制文件全部丢失,把控制文件全部删了
shutdown immediate
我手动去给控制文件全部删了
然后启动报错
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 482347260 bytes
Database Buffers 121634816 bytes
Redo Buffers 7094272 bytes
ORA-00205: ?????????, ??????, ???????
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
control_file_record_keep_time integer 7
control_files string D:\ORACLE\PRODUCT\10.2.0\ORADA
TA\TEST\CONTROL01.CTL, D:\ORAC
LE\PRODUCT\10.2.0\ORADATA\TEST
\CONTROL02.CTL, D:\ORACLE\PROD
UCT\10.2.0\ORADATA\TEST\CONTRO
L03.CTL
然后把备份的控制文件BAK,复制在相应的目录中来
SQL> hoST COPY D:\ctl\ctl.bak D:\oracle\product\10.2.0\oradata\TEST\CONTROL01.CTL
已复制 1 个文件。
SQL> hoST COPY D:\ctl\ctl.bak D:\oracle\product\10.2.0\oradata\TEST\CONTROL02.CTL
已复制 1 个文件。
SQL> hoST COPY D:\ctl\ctl.bak D:\oracle\product\10.2.0\oradata\TEST\CONTROL03.CTL
已复制 1 个文件。
SQL> alter database open;
第 1 行出现错误:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
shutdown immediate;
startup mount;
alter database open resetlogs;