实验环境:centos7+11.2.0.4+单实例
这个实验的目的是在没有使用DG、RAC、RMAN的情况下,丢失了控制文件,
总结分为几种情况:
开机状态
1.noresetlog模式;
2.resetlog模式
关机状态
有备份:直接还原备份的控制文件
无备份:1.noresetlog模式;2.resetlog模式
验证结果:
1.数据库能够正常启动
2.表中的数据正常
实验前步骤:
1.创建两个表空间:test1
2.在表空间test1中创建表 users并添加数据,设置为只读变空间
3.备份控制文件
创建表空间test1
create tablespace test1
datafile '/u01/app/oracle/oradata/orcl/test1.dbf'
size 10M
autoextend on
next 5M maxsize 100M;
创建表users1并添加数据
create table users1(id int,name varchar(200)) tablespace test1;
insert into users1(id,name) values(1,'张三');
insert into users1(id,name) values(1,'李四');
insert into users1(id,name) values(1,'王五');
commit;
修改test1表空间为只读表空间
alter tablespace test1 read only;
SQL> create tablespace test2
datafile '/u01/app/oracle/oradata/orcl/test2.dbf'
size 10M
autoextend on
next 5M maxsize 100M;
SQL> create table users2(id int,name varchar(200)) tablespace test2;
insert into users2(id,name) values(1,'张三');
insert into users2(id,name) values(2,'李四');
insert into users2(id,name) values(3,'王五');
commit;
备份控制文件
alter database backup controlfile to '/oracle/backup/control.bkp';
删除所有控制文件
1.noresetlog 方式
启动数据库到nomount状态,这里直接启动会报错的,也只会启动到nomount状态
SQL> startup nomount
执行创建控制文件语句。
CREATE CONTROLFILE REUSE
DATABASE orcl
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/orcl/
redo01.log',
GROUP 2 '/u01/app/oracle/oradata/orcl
/redo02.log',
GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'
NORESETLOGS
DATAFILE '/u01/app/oracle/oradata/orcl
/system01.dbf',
'/u01/app/oracle/oradata/orcl
/sysaux01.dbf',
'/u01/app/oracle/oradata/orcl
/users01.dbf',
'/u01/app/oracle/oradata/orcl
/undotbs01.dbf',
'/u01/app/oracle/oradata/orcl
/test2.dbf'
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG
character set ZHS16GBK;
SQL> recover database
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required
SQL> alter system archive log all;
SQL> alter database open;
恢复只读表空间
SQL> alter database rename file 'MISSING00005'
2 to '/u01/app/oracle/oradata/orcl/test1.dbf';