??? ORACLE数据库有两种运行方式:一是归档方式(ARCHIVELOG),归档方式的目的是当数据库发生故障时最大限度恢复所有已提交的事务;二是不归档方式(NOARCHIVELOG),恢复数据库到最近的回收点。在创建数据库时,作为创建数据库的一部分,就决定了数据库初始的存档方式。一般情况下为NOARCHIVELOG方式。当数据库创建好以后,根据需要可以把需要运行在归档方式的数据库改成ARCHIVELOG方式。
??? ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。数据库逻辑备份方法ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份模式。
??? 非归档模式下常用的imp/exp工具来进行备份,是逻辑备份。
??? 优点为:1、使用简单;2、可以指定导出某个逻辑对象(整个数据库或用户或表)。
??? 缺点为:1、不能进行完全恢复(Complete Recovery);2、只能备份数据文件(Data File);3、全库导出对数据库压力较大;4、占用空间较大。
??? 常用备份方法策略:一个星期作一次全备份,每天一次增量备份,具体的是星期一到星期五作增量备份,星期六做全备份,每次做完备份后自动传到独立的存储设备上存储,该备份方案在做恢复时最多时只要恢复之前一个星期的全备份+5个增量备份文件。
??? 备份脚本:
??? 星期一:exp user/password inctype=INCREMENTAL rows=y buffer=65536 feedback=100000 full=y file=01_yyyymmdd.dmp log=01_yyyymmdd.log
??? 星期二:exp user/password inctype=INCREMENTAL rows=y buffer=65536 feedback=100000 full=y file=02_yyyymmdd.dmp log=02_yyyymmdd.log
??? 星期三:exp user/password inctype=INCREMENTAL rows=y buffer=65536 feedback=100000 full=y file=03_yyyymmdd.dmp log=03_yyyymmdd.log
??? 星期四:exp user/password inctype=INCREMENTAL rows=y buffer=65536 feedback=100000 full=y file=04_yyyymmdd.dmp log=04_yyyymmdd.log
??? 星期五:exp user/password inctype=INCREMENTAL rows=y buffer=65536 feedback=100000 full=y file=05_yyyymmdd.dmp log=05_yyyymmdd.log
??? 星期六:exp user/password rows=y buffer=65536 feedback=100000 full=y file=full_yyyymmdd.dmp log=full_yyyymmdd.log
??? 备份时间安排:由于备份时对系统I/O有较大影响,建议在晚上11点以后进行。
??? 备份用户权限:用户必须有EXP_FULL_DATABASE的系统角色。
??? 备份存储设备:建议存储在独立的磁盘上,如通过磁盘阵列连接的单独磁盘,备份时文件参数file后可添加存储路径。
??? 归档模式下一般用恢复管理器(RMAN)来备份,这是由Oracle提供的专业的备份与恢复工具,是物理备份。
??? 优点为:1、可以进行完全恢复与不完全恢复;2、可以备份所有数据库文件(控制文件,服务器参数文件,归档日志文件,数据文件);3、具有功能强大的控制能力和脚本编写语言;4、支持在线热备份;5、支持多级增量备份;6、支持并行备份,恢复;7、减少备份数据量(压缩、块级备份);8、可将文件备份到磁盘或磁带;9、支持在线块级别恢复;10、可以限制速率,减少备份中对系统的造成的影响。
??? 常用备份方法策略:多级备份策略。采用多级备份是为了减少了恢复所需要的时间和减少每天备份所需要的时间,而又保证系统有很好的恢复性。但是在恢复时间和备份时间要有一个权衡。每个月做一次零级备份,每个星期做一次一级增量备份,每天做一次一级差异备份,当需要时(如不到二十四个小时归档文件系统就要满了)备份归档文件。做恢复时最多只要恢复当月的一个零级备份+三个一级增量备份+6个一级差异备份+当天的归档文件。如果不能接受这样的恢复时间,就只能够减少零级备份之间的时间间隔(如可以每个星期做一个零级备份,这样恢复时最多只需要恢复一个星期的数据量),对于负载极低的系统甚至可以半年做一次零级备份
??? 备份脚本:
??? 1、零级备份脚本
RMAN> RUN {
ALLOCATE CHANNEL ‘DEV1’ TYPE DISK;
ALLOCATE CHANNEL ‘DEV2’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV3’ TYPE DISK ;
BACKUP INCREMENTAL LEVEL 0 TAG ‘LV0’ FORMAT ‘D:/ORACLE/BACKUP/%U’ DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}
??? 2、一级增量备份脚本
RMAN> RUN {
ALLOCATE CHANNEL ‘DEV1’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV2’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV3’ TYPE DISK ;
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE TAG ‘LV1C’ FORMAT ‘D:/ORACLE/BACKUP/%U’ DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}
??? 3、一级差异备份脚本
RMAN> RUN {
ALLOCATE CHANNEL ‘DEV1’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV2’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV3’ TYPE DISK ;
BACKUP INCREMENTAL LEVEL 1 TAG ‘LV1D’ FORMAT ‘D:/ORACLE/BACKUP/%U’ DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}
??? 4、归档文件备份脚本
RMAN> RUN {
ALLOCATE CHANNEL ‘DEV1’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV2’ TYPE DISK ;
ALLOCATE CHANNEL ‘DEV3’ TYPE DISK ;
BACKUP FILESPERSET 3 ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL DEV1;
RELEASE CHANNEL DEV2;
RELEASE CHANNEL DEV3;
}