在Oracle中,一致性备份和非一致性备份的区别有哪些?
一致性备份(Consistent Backup)是指备份集所包含的各个文件都具备相同的系统变化编号(System Change Number,SCN)。也就是说,备份所包含的各个文件中的所有数据均来自同一时间点。使用一致性数据库完全备份(Consistent Whole Database Backup)进行还原(Restore)后,不需要执行恢复操作(Recovery)。所以,一致性备份也称之为冷备或脱机备份,在执行数据库一致性备份之前需要先将数据库正常关闭再进行备份。
对数据库整体或部分进行的一致性备份(Consistent Backup)后,备份中所有数据文件(Datafile)及控制文件(Control File)都经历过相同检查点(Checkpoint),拥有相同的SCN。
进行一致性数据库完全备份(Consistent Whole Database Backup)的唯一方法是:首先使用Normal,Immediate,或Transactional选项关闭数据库并在数据库处于关闭状态时进行备份。
Oracle通过数据库检查点操作使数据文件和控制文件拥有相同的SCN,即具备一致性。在一致性备份中,只有只读表空间(Read-Only Tablespace)及脱机表空间(Offline Tablespace)的Scn可以比备份中其他文件的Scn滞后。这两种表空间内的数据不会被修改,因此它们也能满足一致性的要求。
一致性数据库完全备份的重要特点是,使用此种备份还原(Restore)的数据库无须恢复(Recovery)即可打开(Open),这是因为还原的数据库具备一致性:还原的数据文件内的数据是正确的,无须用户进行任何处理。用户可以使用一年前的一致性备份还原数据库,而无须进行介质恢复(Media Recovery),Oracle也不必执行实例恢复(Instance Recovery)。但是,如果使用一致性备份还原数据库而没有应用重做日志(Applying Redo),备份之后产生的事务将全部丢失。
非一致性备份(Inconsistent Backup)是指在数据库处于打开(Open)状态时,或数据库异常关闭(Shut Down Abnormally)后,对数据库的数据文件、控制文件等进行一系列备份操作。非一致性备份也称为热备或联机备份(Online Database Backup)。
如果数据库没有完全关闭,例如出现实例故障,或用户使用了SHUTDOWN ABORT语句,此时数据库的数据文件是非一致性的,即控制文件和Redo Log、数据文件这三个拥有的SCN不一致,除非此数据库为只读数据库。
如果数据库运行在NOARCHIVELOG(非归档)模式下,那么一致性数据库完全备份是唯一有效的备份方案,因为使用非一致性备份(Inconsistent Backup)还原数据库后需要执行恢复操作来确保数据一致性。在NOARCHIVELOG模式下,Oracle不会对重做日志进行归档,因此恢复所需的重做日志可能已经不存在了。对于运行在ARCHIVELOG(归档)模式下的数据库,如果采用一致性数据库完全备份,那么当使用此种备份还原数据库后,用户可以立即打开数据库,使备份后发生的事务全部丢失;如果归档的重做日志存在,那么用户也可以应用这些日志从而恢复备份后发生的事务。