Oracle数据库备份与恢复
需要备份的文件
- 数据文件
- 控制文件 投入使用的时候备份,数据库结构变化后需要备份
- 归档日志文件可以考虑备份 也可产生多个归档日志文件放到不同磁盘
控制文件
控制文件的备份 (两个方法)
- 产生一个二进制映像文件
- 在跟踪文件中产生一条creat controlfile语句
控制文件恢复(两个方法)
- 实例启动到nomount状态
- 将create controlfile语句复制到sqlplus中执行
- 打开数据库
alter database open;
- 将二进制文件复制到以前所在的每个位置,并改名为以前的名称
- 打开数据库
alter databser opne resetlogs;
数据文件
非归档模式下每次都需要备份整个数据数据库
归档模式下可以备份单个表空间和数据文件,针对不同的表空间执行不同方案
- system和sysaux:只需要备份一次
- undo表空间:不需要备份
- 临时表空间:不需要备份
- 只读表空间:只需要备份一次
- 数据表空间:频繁备份
方法
- 查询数据字典视图dba_data_files中查询所包含数据文件;
- 开始备份
alter tablespace users begin backup;
- 将造作系统中数据文件复制到存储介质上;
- 结束备份
alter tablespace users end backup;
其它表空间同上。
redo log文件
在数据库打开情况下,如果某个重做日志文件损坏,由于文件无法进行归档将导致数据库停止运行,需要清空该日志,既不关闭数据库的情况下初始化震哥哥日志组。
later database clear logfile group 3;
如果redo log 还未归档,可通过下面命令清空
alter database clear unarchived logfile group 3;
数据库的完全恢复
归档模式下可在实例open或mount状态下恢复。
-
将数据文件offline;
alter tablespace users offline;
alter database datafile 2 offline;
-
确定损坏的数据文件
- 查询v$recover_file
select file#,online_status,error from v$recover_file;
- 查看告警文件或者dbwr进程的跟踪文件
- 重启实例时查看sqlplus中的错误提示
-
恢复
- restore:将备份文件复制到原来数据文件所在位置
- recover:利用redo log产生最后一段时间的数据
- 普通表空间:可以在实例open或mount状态恢复(以下语句三选一)
recover tablespace users;
recover datafile 2;
alter databaser recover datafile 2;
- system表空间或者整个数据库:需实例转入mount状态(数据库正常时无法将system转入offline状态)
recover database; recover datafile 1; recover tablesapce system; alter database recover database;
-
实例转入open状态