备份的目的是为了恢复。
一、备份类型
1.物理备份:核心是复制文件。如RMAN。
2.逻辑备份:核心是复制数据。如EXP和EXPDP,DBLINK+CREATE TABLE AS,但是exp和expdp在处理大量数据时,效率不佳,并且也没有对增量备份提供直接支持。
倒是更常被应用于数据迁移的解决方案。
二、数据库状态:启动状态,关闭状态。
1.热备份:启动状态,也叫联机备份,热备需要用到归档日志或联机重做日志,才能将数据库恢复到一致的状态,所以一般需要在归档模式下。
简单介绍一下归档命令:
查看数据库是否在归档模式下:archive log list;如果是disable
shutdown immediate ,然后启动到mount状态下startup mount,
开启归档alter database archivelog
打开数据库alter database open。
这里出现了一个名词叫闪回恢复区flash_recover_area,用archive log list可以看到的存档终点USE_DB_RECOVERY_FILE_DEST默认的存放归档的目录。可以用show parameter db_recover查看。也可以v$recovery_file_dest中查看相应信息。如果达到了闪回恢复区的大小,也就是归档满了,数据库就会夯住,通常的解决办法就是增大闪回恢复区,通过这条语句:alter system set db_recover_file_dest_size=nG;
当然也可以修改归档的存放目录,因为有时候业务会特别繁忙,即使oracle会自动管理闪回恢复区,也会很可能满掉。所以我们用以下语句来就该归档目录:
alter system set log_archive_dest_1='location=/u01/app/oracle/arch';
我在实际情况中遇到归档目录满的时候直接清除一部分归档日志:(这部分那就涉及到了rman的知识,稍后在学习RMAN过程中会写)
rman target sys/password@orcl在RMAN命令窗口中,输入如下命令:
crosscheck archivelog all;
delete expired archivelog all;
或者删除指定时间之前的archivelog:
DELETE (NOPROMPT) ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';(指定删除7天前的归档日志)
DELETE ARCHIVELOG UNTIL TIME 'sysdata - 1';
热备份不需要关闭数据库,在备份的时候用户仍然可以直接连接并操作数据,对于7*24小时的应用而言必须进行热备份。
2.冷备份:数据库关闭状态创建的备份就是冷备份,也叫脱机备份。也就是在不活跃状态下创建的备份。其中open read only模式不能算活跃状态,算是活着,不能进行写操作。因此,open read only下创建的备份你也是冷的。
冷备的通常步骤:
1.查询数据文件datafile的所在目录:
SQL>SELECT name FROM v$datafile;
查询控制文件controlfile的所在目录:
SQL>SELECT name FROM v$controlfile;
查询重做日志文件的所在目录:
SQL>SELECT member FROM v$logfile;
2.正常关闭数据库(非正常关闭的需要对数据库进行修复操作,需要用到归档日志或联机重做日志)
3.备份文件到备份的目录
cp 命令
4.然后启动数据库.
三、备份的状态
1.一致性备份
备份的数据文件和控制文件拥有相同的SCN,(数据库正常关闭,数据库置于未被打开状态,open read only)这几种情况下创建的备份才是一致性备份。
但是冷备份的一致性备份这种情况基本很少出现,因为应用一般都是7*24小时开机状态。
2.不一致性备份
通常数据库open read write或者shutdown abort 时都不是一致性备份。 因为备份不可能同时完成,而数据文件时刻都在写,SCN时刻在变,备份完第N个,然后第N+1个数据文件的SCN有可能已经与之前的不同了。恢复必须借助归档日志或者重做日志,将数据恢复到一致性状态才能打开。所以数据库一定要归档。
*注意:热备肯定是不一致性备份,但是不一致性备份不一定是都是热备份,如shutdown abort 关闭的数据库。
四、备份规模
1.完全备份
a.非归档模式
b.归档模式
它们的有效备份和无效备份都在前文中提到,是否是归档,是否是开机状态,开机下是否有效,关机下是否有效。如图:
2.表空间备份
总的来说备份表空间就是对数据文件的备份,比如users 表空间占用了三个数据文件,我想备份users那就针对性的备份这三个数据文件就可以了。
*注意:只有满足其中之一才是有效备份:
a.当数据库处于归档模式
b.表空间为只读或者数据库为脱机状态。
1.数据文件的备份:保证不会被修改,才是有效的。(已经多次提到,比如归档,read only,offline)
2.控制文件的备份:没有control file数据库就无法启动到mount状态。
3.归档日志的备份:一致性恢复的必要条件。