Rman数据库备份:
rmanbklevel_0.sh内容:
#!/bin/sh
export ORACLE_SID=instance_name
rman log='/home/oracle/rmanbk/bakl0.log' append <<EOF
connect target /;
run{
allocate channel cha1 type disk;
backup
incremental level 0
format '/home/oracle/rmanbk/incremental_level0_%u_%T'
tag backup_inc0
database;
release channel cha1;
}
EOF
exit
1. 将rmanbklevel_0.sh这个文件放置在/home/oralce目录下面。sh脚本里面的ORACLE_SID里面的值要根据当前数据的ORACLE_SID来填写。
2. 在root身份下添加crontab任务计划,每月更新备份一次
crontab –e
添加一下定时任务
42 4 1 * 0 su - oracle -c /home/oracle/rmanbklevel_0.sh
添加完保存
重启定时任务:
service cron restart
3. 手动进行备份,在oracle用户下,执行一下命令:
bash /home/oracle/rmanbklevel_0.sh
还原数据库库:
1. 完全恢复数据库:
sqlplus / as sysdba
shutdown immediate
startup mount
进入rman:
rman target /
run{
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
restore database;
recover database;}
退出rman
exit;
sqlplus / as sysdba
shutdown immediate
startup
2. 基于时间点不完全恢复
sqlplus / as sysdba
shutdown immediate
startup mount
进入rman:
rman target /
查看数据库的备份状态,记录当前数据库状态,防止不完整恢复到具体时间不合符我们要求时,重置到那个状态,进行重新还原
list incarnation;
执行以下命令进行还原:
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
sql'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
SETUNTIL TIME = '2018-04-12 14:42:09';
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS; }
若不满足我们的需求我们可以通过以下命令,重置到还原前的状态来进行下一次的还原:
RESET DATABASE TO INCARNATION 5;
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
sql'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
SETUNTIL TIME = '2018-04-12 14:30:09';
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS; }
还原后退出rman
exit;
bash /home/oracle/rmanbklevel_0.sh //执行一下以下脚本来进行重新备份(注意这一点尤为重要,进行完不完全恢复后,必须从新备份下数据库,不然后面修改数据库的信息我们是不会备份到的,因为进行不完全恢复过程中ALTER DATABASE OPEN RESETLOGS; 这个命令是要求数据库从新开新的日志文件和控制文件来来记录数据库的信息,这个时候我们要重新备份)
列出备份信息:listbackup;
删除无用备份:DELETE OBSOLETE;