*在使用数据库管理数据的过程中,很多时候我们可能会因为进行了某些错误的操作或者因被恶意攻击导致数据丢失,这个时候我们需要使用数据库的备份和还原功能来恢复数据库。
一、数据库包括三种恢复模式
右键数据库属性--选项--可以看到“恢复模式”,SQL Server 2008数据库恢复模式分为三种:完整恢复模式、大容量日志恢复模式、简单恢复模式,如下:
1.完整恢复模式
为默认恢复模式。 它会完整记录下操作数据库的每一个步骤。使用完整恢复模式可以将整个数据库恢复到一个特定的时间点,这个时间点可以是最近一次可用的备份、一个特定的日期和时间或标记的事务。这玩意就跟系统还原似得,你的先设置还原点,然后才能进行还原。
2.大容量日志恢复模式
简单地说就是要对大容量操作进行最小日志记录,节省日志文件的空间(如导入数据、批量更新、SELECT INTO等操作时)。比如一次在数据库中插入数十万条记录时,在完整恢复模式下每一个插入记录的动作都会记录在日志中,使日志文件变得非常大,在大容量日志恢复模式下,只记录必要的操作,不记录所有日志,这样一来,可以大大提高数据库的性能,但是由于日志不完整,一旦出现问题,数据将可能无法恢复。因此,一般只有在需要进行大量数据操作时才将恢复模式改为大容量日志恢复模式,数据处理完毕之后,马上将恢复模式改回完整恢复模式。这玩意虽然能节省一点存储空间,但是它有风险,不安全,很可能导致你的数据库无法恢复,所以呢,如果你不在乎那一点点存储空间的话,最好还是使用完整恢复模式。
3.简单恢复模式
在该模式下,数据库会自动把不活动的日志删除,因此简化了备份的还原,但因为没有事务日志备份,所以不能恢复到失败的时间点。通常,此模式只用于对数据库数据安全要求不太高的数据库,并且在该模式下,数据库只能做完整和差异备份。
可以看出三种恢复模式的区别在于对“日志”的处理方式不同,就“日志”大小来看:完全恢复模式 > 大容量日志恢复模式 > 简单恢复模式。
二.备份方式
SQL Server 2008提供了四种备份方式:完整备份、差异备份、事务日志备份、文件和文件组备份。
1.完整备份
备份整个数据库的所有内容,包括事务日志。该备份类型需要比较大的存储空间来存储备份文件,备份时间也比较长,在还原数据时,也只要还原一个备份文件。
2.差异备份
差异备份是完整备份的补充,只备份上次完整备份后更改的数据。相对于完整备份分来说,差异备份的数据量比完整数据备份小,备份的速度也比完整备份要快。因此,差异备份通常作为常用的备份方式。在还原数据时,要先还原前一次做的完整备份,然后还原最后一次所做的差异备份 ,这样才能让数据库里的数据恢复到与最后一次差异备份时的内容相同。通过这种方法备份,只需要进行一次完整备份,接下来只需要进行差异备份,可以节约不少空间。
3.事务日志备份
事务日志备份只备份事务日志里的内容。事务日志记录了上一次完整备份或事务日志备份后数据库的所有变动过程。事务日志记录的是某一段时间内的数据库变动情况,因此在进行事务日志备份之前,必须要进行完整备份。与差异备份类似,事务日志备份生成的文件较小、占用时间较短,但是在还原数据时,除了先要还原完整备份之外,还要依次还原每个事务日志备份,而不是只还原最后一个事务日志备份(这是与差异备份的区别)。这玩意虽然节省空间,但是比较复杂,操作难度也是有的。
4.文件和文件组备份
如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。使用文件和文件组备份方式可以只备份数据库中的某些文件,该备份方式在数据库文件非常庞大时十分有效,由于每次只备份一个或几个文件或文件组,可以分多次来备份数据库,避免大型数据库备份的时间过长。另外,由于文件和文件组备份只备份其中一个或多个数据文件,当数据库里的某个或某些文件损坏时,可能只还原损坏的文件或文件组备份。当数据库含量较大时,使用这种备份方式可以很大程度上节约时间和空间。
三、举例说明
完整备份
例如,在2012年1月1日早上8点进行了完整备份,那么将来在还原时,就可以恢复到2012年1月有1日早上8点时的数据库状态。
差异备份
差异备份是备份完整备份后的数据变动情况。例如,在2012年1月1日早上8点进行了完整备份后,在1月2日和1月3日又分别进行了差异备份,那么在1月2日的差异备份里记录的是从1月1日到1月2日这一段时间里的数据变动情况,而在1月3日的差异备份里记录的是从1月1日到1月3日这一段时间里的数据变动情况。因此,如果要还原到1月3日的状态,只要先还原1月1日做的完整备份,再还原1月3日做的差异备份就可以了。
事务日志备份
事务日志备份是以事务日志文件作为备份对象,相当于将数据库里的每一个操作都记录下来了。假设在2012年1月1日早上8点进行了完整备份后,到1月2日早上8点为止,数据库里的数据变动了100次,如果此时做了差异备份,那么差异备份记录的是第100次数据变动后的数据库状态,而如果此时做了事务日志备份,备份的将是这100次的数据变动情况。
再举一个例子,例如在2012年1月1日早上8点进行了完整备份后,在1月2日和1月3日又进行了事务日志备份,那么在1月2日的事务日志备份里记录的是从1月1日到1月2日这一段时间里的数据变动情况,而在1月3日的事务日志备份里记录的是从1月2日到1月3日这一段时间里的数据变动情况。因此,如果要还原到1月3日的数据,需要先还原1月1日做的完整备份,再还原1月2日做的事务日志备份,最后还要还原1月3日所做的事务日志备份。
四.用SQL语句实现数据库的备份和还原
备份操作SQL语句
BACKUP DATABASE "备份还原测试" TO DISK ='F:\SPL\数据库备份\6666.db' with init //以指定名称备份到指定文件夹
还原操作SQL语句
alter DATABASE [备份还原测试] set offline with rollback immediate;
alter DATABASE [备份还原测试] set online;
use master
RESTORE DATABASE "备份还原测试" FROM DISK='F:\SPL\数据库备份\6666.db'WITH REPLACE;
use 备份还原测试
五.对数据库的备份和还原操作可以使用JDBC 编程的方式实现,我已经实现了,你们自己去研究吧。