查看数据库是否打开归档模式,如果无归档则只能脱机备份。
SQL> archive log list;
打开归档模式
SQL> shutdonw immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
脱机备份
完全脱机备份,如果没有归档日志就得脱机备份。
如果直接执行
backup database将会默认备份到闪回目录,可以指定备份目录。
rman target /
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
RMAN> alter database open;
可以写成脚本来备份,建立e:\dbbak\offline-full.rman文件
run {
shutdown immediate;
startup mount;
allocate channel ch1 type disk;
backup as compressed backupset database format 'e:\dbbak\offline-full\%d_%u_%c_%T';
release channel ch1;
alter database open;
}
%d:数据库ID;
%u:产生唯一的文件名称;
%c:第几份备份;
%T:备份时间。
建立备份批处理e:\dbbak\offline-full.bat文件
SET BAKDIR=%~dp0
SET ORACLE_SID=HIS
MKDIR %BAKDIR%offline-full
rman target / @%BAKDIR%\offline-full.rman
执行批处理完成备份
e:\dbbak\offline-full.bat
脱机恢复
rman target /
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
联机备份
online-full.rman
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
backup as compressed backupset database format 'w:\dbbak\online-full\%d_%u_%c_%T';
backup as compressed backupset archivelog all format 'w:\dbbak\online-full\%d_%u_%c_%T';
release channel ch1;
release channel ch2;
}
online-full.bat
SET BAKDIR=%~dp0
SET ORACLE_SID=food
MKDIR %BAKDIR%online-full
rman target / @%BAKDIR%\online-full.rman log %BAKDIR%\online-full.log
备份的清理
日志或者数据库备份文件如果在被人工删除后,RMAN备份将不能被执行,需要进行检查和处理
-- 清理无效归档日志
crosscheck archivelog all;
delete noprompt expired archivelog all;
-- 清理无效备份文件
crosscheck backup;
delete noprompt expired backup;
有时候需要删除一定时间之前的归档日志,如下是删除30日之前的归档日志
delete noprompt archivelog all completed before 'sysdate-30';
当需要删除过期备份时可以使用如下命令,这个命令将根据配置的策略RETENTION POLICY进行删除
DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;
备份清理策略有两种,可在RMAN中事先配置:
1)是根据备份的数量,保留最近N份,默认是1份;
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
2)是根据时间窗口保留备份,如果保留最近7天的备份;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
Oracle备份的模式
Oracle有2中备份模式,详细参考:https://docs.oracle.com/cd/B19306_01/backup.102/b14192/bkup004.htm
1、完全备份:对整个数据库进行备份;
2、增量备份:增量中有2种增量方式;
1)差异增量Differential,可以相对于Level 0或者Level 1;
BACKUP INCREMENTAL LEVEL 1 DATABASE;
2)累积增量INCREMENTAL,累积增量总是对最近一次Level 0来说;
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE; # blocks changed since level 0
如果每天做完全备份会很浪费空间。所以我们一般都会根据数据库所支持的功能,根据时间推进执行不同的备份策略,让可以最少的空间占用和最短的的恢复周期和时间。
