找到冷备路径
[oracle@yang ~]$ls/u02/orcl
control01.ctl orapworcl redo2b.rdo system01.dbf users01.dbf
control02.ctl redo1a.rdo redo3a.rdo
example01.dbf redo1b.rdo redo3b.rdo
initorcl.ora redo2a.rdo sysaux01.dbf undotbs01.dbf
查看二进制控制文件找到所有数据文件路径
[oracle@yang ~]$strings /u02/orcl/control01.ctl |grep dbf
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf
/u01/app/oracle/oradata/orcl/temp01.dbf
可以得到建立控制文件的语句
查看控制文件路径
SQL>show parameter control_files
NAME TYPE VALUE
------------------------------------
----------- ------------------------------
control_files string /u01/app/oracle/oradata/orcl/
control01.dbf, /u01/app/oracle/oradata/orcl/
control02.dbf
SQL>
将备份的控制文件拷贝到原路径
SQL>ho cp /u02/orcl/control* /u01/app/oracle/oradata/orcl/
将数据库启动到mount状态
SQL>alter database mount;
得到建立控制文件语句
SQL>alter database backup controlfile to trace as '/u02/orcl/ctl.sql';
Database altered.
SQL>
删除拷贝的控制文件
SQL>ho rm /u01/app/oracle/oradata/orcl/control*
关闭数据库
SQL>shutdown abort
编辑脚本(将所有注释与前面空格都删除)
[oracle@yang ~]$vi /u02/orcl/ctl.sql
改成如下格式
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE
"ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'/u01/app/oracle/oradata/orcl/redo1a.log',
'/u01/app/oracle/oradata/orcl/redo1b.log'
) SIZE 50M,
GROUP 2 (
'/u01/app/oracle/oradata/orcl/redo2a.log
',
'/u01/app/oracle/oradata/orcl/redo2b.log'
) SIZE 50M,
GROUP 3 (
'/u01/app/oracle/oradata/orcl/redo3a.log
',
'/u01/app/oracle/oradata/orcl/redo3b.log
'
) SIZE 50M
DATAFILE
'/u01/app/oracle/oradata/orcl/system01.dbf',
' /u01/app/oracle/oradata/orcl/undotbs01.dbf',
' /u01/app/oracle/oradata/orcl/sysaux01.dbf',
' /u01/app/oracle/oradata/orcl/users01.dbf',
'/u01/app/oracle/oradata/orcl/example01.dbf',
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
最后执行创建脚本
SQL>@/u02/orcl/ctl.sql
完成后需要在次对数据库进行备份(控制文件重建,以前的备份就无效了)