控制文件是整个数据库中非常重要的文件,必须保证控制文件的安全,原则上多个控制文件应该分别放在不同的磁盘上。但是oracle默认安装时将所有的控制文件放在了同一个磁盘的相同目录下,这种做法是非常危险的,必须把现有的oracle系统上的多个控制文件分别移动到不同的物理磁盘上安全备份。具体步骤如下:
一、利用数据字典获得现有控制文件的名字和绝对路径
select name,status from v$controlfile;
二、如果使用的是spfile的话因为不能使用文本编辑器来改变spfile中的control_files参数,故必须使用sql中的alter system命令来修改spfile使其能够指向新添加的控制文件。
要判断当前oracle系统使用的是pfile还是spfile可以使用一下指令;
show parameter pfile;
三、在确定使用的是spfile的情况下使用alter system命令修改spfile中的control_files参数将新移动的控制文件路径添加到control_files参数中
alter system set control_files=
'D:\app\Administrator\oradata\orclyg\control1\CONTROL01.CTL',
'D:\app\Administrator\oradata\orclyg\control2\CONTROL02.CTL',
'D:\app\Administrator\oradata\orclyg\control3\CONTROL03.CTL' scope=spfile;
四、关闭数据库shutdown,复制原来的控制文件到指定的新添加的目录路径中。
注意:必须是在关闭数据库以后才能复制控制文件,因为在没有关闭数据库的情况下控制文件随时可能被oracle服务器修改,如果此时没有关闭数据库就将对应的控制文件复制到了指定的目录下,那么在后续的用户进程对数据库结构所做的修改就被记录在原来的控制文件中,这样如果重启数据库加载新的控制文件的话就会造成原来的修改被覆盖,造成数据的丢失和不完全的恢复。所以必须关闭数据库后在复制控制文件到指定的目录下。
五、启动数据库startup查看控制文件的路径
select name,status from v$controlfile;
显示当前加载的控制文件的绝对路径。
六、由于控制文件是一个极其重要的文件,除了以上所说的多个控制文件的副本存在于多个不同的磁盘上之外,在数据库的结构变化之后应该立即对控制文件进行备份。
对控制文件进行备份的命令如下:
alter database backup controlfile to 'D:\backup\control.bak';
注意:在创建备份文件时路径必须已经存在'D:\backup目录必须可以找到,否则不能成功创建。
另外要将创建控制文件的命令备份到一个追踪文件中,该追踪文件包含有重建控制文件所需的全部sql语句
alter database backup controlfile to trace;
该追踪文件在用户文件的目录下通过如下sql查找到用户追踪文件的存储目录:
select name,value from v$parameter where name like '%_dest';
其中查询的结果集中参数background_dump_dest表示的是报警日志文件存储路径
user_dump_dest参数表示的是用户进程追踪文件存储路径。
按照时间排序用户进程追踪目录下的文件,最后面的就是刚才新建的控制文件追踪文件,将该文件复制保存到另外的目录中,并重命名为一个有意义的名字。