查看数据库是否打开归档模式,如果无归档则只能脱机备份。
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
如果每天做完全备份会很浪费空间。所以我们一般都会根据数据库所支持的功能,根据时间推进执行不同的备份策略,让可以最少的空间占用和最短的的恢复周期和时间。