ORACLE备份恢复操作文档
系统环境
- 服务器系统版本为centos7 64位
- oracle版本11gR2
源服务器1:192.168.1.2
源服务器2: 192.168.1.3
目标服务器:192.168.1.4
- 两台oracle服务器
1、设置数据库启动模式为归档模式
1.1 查看数据库是否为归档模式
archive log list;
1.2 启动归档模式
SQL> shutdow immediate;
1.2.2 启动mount模式
SQL> startup mount;
1.2.3 设置归档模式
SQL> ALTER DATABASE ARCHIVELOG;
1.2.4 查看归档状态
SQL> archive log list;
2 备份
2.1 设置备份目录
mkdir /oracle/backup
2.2 配置自动备份控制文件
开启自动备份控制文件
CONFIGURE CONTROLFILE AUTOBACKUP ON;
设置自动备份控制文件的路径
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/backup/controlfile_%F.bak';
2.3 配置文件过期策略
设置文件7天后过期
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
2.4 全量备份
备份内容:数据文件、归档日志文件、参数文件、控制文件
使用RMAN连接目标数据库
$rman target /
备份参数文件
RMAN> backup spfile format '/oracle/backup/spfile_%T.bak';
备份数据库数据文件和归档日志文件
RMAN> backup incremental level 0
RMAN> database format '/oracle/backup/db_level0_%T_%U.bkp'
RMAN> plus archivelog format '/oracle/backup/archivelog_level0_%T_%U.bkp' delete input;
因为设置了自动备份控制文件,所以会自动生成备份文件到指定目录,无需手动备份。
2.5 增量备份
手动增加几条数据到自建的库的表中
例如:insert into t1 values(1,‘test’,222);commit;
备份增量数据文件和归档日志文件
RMAN> backup incremental level 1
RMAN> database format '/oracle/backup/db_level1_%T_%U.bkp'
RMAN> plus archivelog format '/oracle/backup/archivelog_level1_%T_%U.bkp' delete input;
3、全量恢复
3.1 将数据文件、参数文件、归档日志文件、控制文件拷贝到目标机器下的备份目录
#rsync -azvp * 139.224.17.170:/oracle/backup/
3.1 设置参数文件
将参数文件spfile拷到$ORACLE_HOME/dbs/并修改名字为.ora结尾的文件
cp spfile_20190530.bak /oracle/app/dbs/spfilezws.ora
将spfile文件转化成pfile文件
登录数据库
$sqlplus / as sysdba
SQL> create pfile from spfile;
生成pfile文件到默认目录下
3.1 设置DBID
关闭数据库
RMAN> shutdown immediate;
设置DBID
从源数据库查询DBID
设置DBID在新的数据库
RMAN>set dbid 4264323144;
3.2 启动数据库为nomount模式,默认以默认的pfile参数文件启动
RMAN> startup nomount;
Oracle 实例已启动
系统全局区域总计 780955648 字节
Fixed Size 2257032 字节
Variable Size 553652088 字节
Database Buffers 201326592 字节
Redo Buffers 23719936 字节
RMAN> startup nomount force;
Oracle 实例已启动
系统全局区域总计 213789655040 字节
Fixed Size 2265864 字节
Variable Size 20937968888 字节
Database Buffers 192736657408 字节
Redo Buffers 112762880 字节
3.3 恢复控制文件
RMAN> restore controlfile from '/oracle/backup/controlfile_c-4264323144-20190530-02.bak';
恢复成功后启动数据库为mount模式
RMAN> alter database mount;
3.4 恢复数据文件
RMAN> restore database;
RMAN> recover database;
启动 recover 于 23-9月 -16
使用通道 ORA_DISK_1
正在开始介质的恢复
通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=15
通道 ORA_DISK_1: 正在读取备份片段 /u01/backup/db_full_04rghdmh_1_1.bkp
通道 ORA_DISK_1: 段句柄 = /u01/backup/db_full_04rghdmh_1_1.bkp 标记 = 2011-09-23-FULL
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
归档日志文件名=/data/oracle/archivelog1_15_923216095.dbf 线程=1 序列=15
无法找到归档日志
归档日志线程=1 序列=16
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/23/2016 14:22:45 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 16 的归档日志以及起始 SCN 1051085
报错按下面执行步骤
SQL> conn /as sysdba
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1051085 (在 09/23/2016 13:12:49 生成) 对于线程 1 是必需的
ORA-00289: 建议: /data/oracle/archivelog1_16_923216095.dbf
ORA-00280: 更改 1051085 (用于线程 1) 在序列 #16 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log '/data/oracle/archivelog1_16_923216095.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> alter database open resetlogs;
数据库已更改。
到此全量恢复已完毕
4 增量恢复
4.1 启动数据库为nomount模式
RMAN> shutdown immediate;
RMAN> startup nomount;
4.2 恢复最新的控制文件并启动为mount模式
RMAN> restore controlfile from '/oracle/backup/controlfile_c-4264323144-20190530-04.bak';
RMAN> startup mount;
4.3 查看scn最大的号
RMAN> list backup;
找到最后一个归档日志的最大scn号
4.4 恢复数据到该位置
RMAN> run {
set until scn=1084796;
restore database;
recover database;
}
成功后就恢复到最新数据库了
将数据库模式设置为open
SQL> alter database open resetlogs;
到此就恢复完毕
5 定时备份和异地备份
5.1 在两台源服务器上设置定时任务
登录139.224.43.135服务器上
切换到oracle用户
# su - oracle
$ crontab -l
0 1 * * * /data/script/oracle_bak_new.sh &> /dev/null
使用oracle用户进行每天凌晨1点的备份任务
切回root用户
# exit
# crontab -l
0 5 * * * /data/script/oracle_rsync.sh &> /dev/null
使用root用户进行每天5点的oracle数据传输任务,将输入传送到目标服务器
同理登录到47.100.94.8服务器上
# su - oracle
$ crontab -l
0 1 * * * /data/script/oracle_bak_new.sh &> /dev/null
使用oracle用户进行每天凌晨1点的备份任务
切回root用户
# exit
# crontab -l
0 8 * * * /data/script/oracle_rsync.sh &> /dev/null
使用root用户进行每天8点的oracle数据传输任务,将输入传送到目标服务器
5.2 将目标服务器的数据备份到异地服务器
登录到目标服务器
# crontab -l
0 12 * * * /data/script/oracle_rsync.sh
每天中午12点进行当天的数据文件异地灾备,将文件传输到192.168.1.4这台备份服务器上