查看数据库是否打开归档模式,如果无归档则只能脱机备份。

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

如果每天做完全备份会很浪费空间。所以我们一般都会根据数据库所支持的功能,根据时间推进执行不同的备份策略,让可以最少的空间占用和最短的的恢复周期和时间。

[ 编辑 | 历史 ]
最近由“jilili”在“2021-09-01 15:24:00”修改