Oracle参数文件与控制文件的备份与还原
一、参数文件的备份与启动(参数文件用于实例的启动)
1、创建初始化参数文件
create pfile[='全路径名'] from spfile[='全路径名']; 缺省时使用默认位置下的服务器参数文件创建初始化参数文件,默认路径可使用 show parameter spfile 查看
2、使用初始化文件创建服务器参数文件
SQL> create spfile[='全路径名'] from pfile[='全路径名'];
3、通过备份的参数文件启动实例
3.1使用初始化参数文件启动
SQL>startup <open|mount|nomount> pfile='';
3.2使用服务器参数文件启动实例
startup <open|mount|nomount> [spfile=''];缺省默认使用spfile启动实例
二、控制文件的备份与恢复
1、备份
1.1备份为二进制映像文件
SQL> alter database backup controlfile to '/home/oracle/controlfile01.ctl_2019-5-30bak';
1.2备份到跟踪文件,以sql语句的方式记录
SQL>alter database backup controlfile to trace;
更重文件位置可通过以下参数查看
SQL> show parameter user_dump_dest
2、恢复,可能存在的情况
情况一:控制文件丢失,在备份成映像文件后数据库结构未发生变化(如:创建或删除表空间,数据文件,重做日志文件等)
(1)还原控制文件 restore;
将之间备份的控制文件拷贝到参数文件中指定的路径,并将文件名改为同之前相同
(2)将实例启动到mount状态
SQL> startup nomount
SQL> alter database mount
(3)恢复控制文件
SQL>recover database using backup controlfile until cancel;
执行后有四个选项
输入回车:按顺序搜索归档文件,没回传一次,recover搜索一次
auto :根据时间自动寻找归档文件
输入归档日志的全路径名
输入cancel:恢复过程被取消
(4)执行以上恢复若未恢复到最新状态时,恢复将会报错,需要重做日志进行恢复
错误信息有如:
ORA_00289:change 342342 for thread 1 is in sequence#23
通过以上顺序号找到日志文件
SQL>select group# sequence# from v$log where sequence# = 23;
根据以上的group#的值找到日志文件
SQL>select group#,name from v$logfile where group#=x;
再次执行recover恢复,输入刚查询的日志全路径名
(5)恢复成功后启动实例
alter database open resetlogs;
情况二:备份后有数据库新增建了表空间或日志组或日志成员
(1)启动到mount状态
(2)还原控制文件 restore
(3)执行恢复recover
(4)结果可能同(4)的报错信息,处理方式相同
(5)之后recover可能出现以下错误提示
错误信息:
ORA_00283:recovery session canceled due to errors
ORA-01244:unameed datafile(s) added to control file by media recovery
ORA-0110:data file 5:'/opt/oracle/oradata/swdk.dbf'
ORA-0112:media recovery not started
这说明新增加的表空间、数据文件、或重做日志文件的纤细没有记录在备份的控制文件中,这时recover命令吧这些文件修改名称后记录到新的控制文件中,修改后的名称可以通过查询V$datafile和v$logfile获得
如:SQL> select file#,name from v$datafile where file#=5;
结果可能为: /opt/oracle/oradata/orcl/UNAMED0005
(6)将以上文件修改为原始的值
SQL>alter database rename file '/opt/oracle/12c/dbs/UNAMED0005' to '/opt/oracle/oradata/orcl/'
(7)然后在重新执行recover命令,联机重做日志文件
(8)将数据库实例切换到open状态
SQL> alter database open
情况三:备份后有数据库删除建了表空间或日志组或日志成员
步骤同上似
recover错误提示如:
ORA-00283:recover session canceled due to errors
ORA-01110:data file 4:'/opt/oracle/oradata/orcl/users01.dbf'
ORA-01157:cannot identify/lock data file 4-see DBWR trace file
出现上述错误是因为 RECOVER命令发现备份的控制文件中记录有些数据文件或日志文件,但这些文件已经不存在了
解决:删除不存在的数据文件或日志后,再次执行recover,当恢复成功后切换实例状态到open
删除数据文件:alter database datafile 4 offline drop;
删除重做日志组:alter database drop logfile group 组号
删除重做日志组成员ALTER DATABASE DROP LOGFILE member '/home/oracle_11/app/oradata/orcl/redoB2.log' --(不能删除当前日志组的成员 不然会出错)