现在的位置: 首页 > 综合 > 正文

数据库备份与恢复简析

2013年02月13日 ⁄ 综合 ⁄ 共 2590字 ⁄ 字号 评论关闭

Ø         数据库备份的必要性

       在数据库运行过程当中,难免会遇到诸如人为错误,硬盘损坏,电脑病毒,断电或是其他灾难,这些都会影响数据库的正常使用和数据的正确性,甚至破坏数据库,导致部分数据或是全部数据的丢失.因此数据库的备份技术在于建立冗余数据,也就是备份数据.

       一般数据库的故障可分为4:

1)   事务内部故障:有些是可以通过事务程序处理的,比如银行转帐中的事务一致性;但是还有一些是不能由事务程序处理的,比如运算过程中的溢出,并发控制中发生死锁等.

2)   系统故障:通常称为软故障,指造成系统停止运行的任何事件,比如系统重启,操作系统故障,突然停电等.

3)   介质故障:也称为硬故障,比如硬盘损坏,强磁场干扰等,发生几率较小,但是破坏最大.

4)   人为故障:是一种人为的故障或破坏方式,比如病毒感染,用户操作失误等.

 

Ø         数据库备份的原理和方式

       恢复故障的原理就是建立数据冗余,建立冗余数据的方式是进行数据转储和登记日志文件.数据转储在时间上又可分为静态转储和动态转储;在空间上可分为海量转储和增量转储.

1)   静态转储和动态转储:静态转储就是在转储期间不允许数据库进行任何存取和修改操作;动态转储可以进行存取和修改操作,因此转储和用户事务可以并发进行.

2)   海量转储和增量转储:海量转储是指每次转储全部的数据;增量转储是指只转储自上次转储以来更新过的数据.

3)   日志文件:在事务处理过程中,DBMS把事务开始,事务结束和对数据库的插入,修改和删除的每一次操作写入日志.一旦故障发生的时候,恢复系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态.

       当数据库文件损坏后,可重新装入备份文件恢复到数据库数据转储结束时刻的正确状态,在利用日志文件把已完成的事务进行重做.

 

Ø         数据库备份的案例

1)   SQLSERVER2000

存在三种备份方式:完全备份,事务日志备份和增量备份.

完全备份就是海量备份,将数据库完全复制到备份文件中.

事务日志备份将备份发生在数据库上的事务.

增量备份仅备份从上一次完全备份到当前的变化数据.

 

备份方案:

a)         完全备份方案:恢复时将最近一次的备份恢复.

b)        在完全备份的基础上使用事务日志文件恢复方案:即定期进行一次完全备份,再更频繁的进行事务日志备份.恢复时先使用最近一次的完全备份恢复数据库,再用最近一次完全备份之后创建的事务日志备份,按顺序恢复完全备份之后数据库操作.

c)        三种备份方式结合使用.与上种方式基本相同,只是使用增量备份的频率在完全备份和事务日志备份之间.

2)   ORACLE

oracle的备份方式可以分为物理上和逻辑上的两种.简单的说就是逻辑备份就是针对数据库的各个对象进行备份(也就是导入/导出功能),这种方式能够跨平台进行,但是不能保护介质失效;而物理备份是针对数据库的物理文件,如果数据文件,日志文件,控制文件等的备份,其中又分为两种方式分别是冷备份和热备份.

a)         逻辑备份

       逻辑备份就是利用oracleexportimport功能对数据进行导入导出.针对不同的操作类型可以分为表方式/全库方式/用户方式的.

       另外在导出方式上又有完全增量导出/增量型增量导出/累计型增量导出.

       完全增量导出:把整个数据库文件导出备份文件.

       增量型增量导出:只备份上一次备份后改变的结果.

       累计型增量导出:备份上一次完全增量导出后改变的结果

b)        冷备份(非归档模式)

       冷备份就是当数据库处于关闭状态时,拷贝这一时刻的数据库相关文件到安全区域,当数据库遭到破坏时将这些文件拷贝回原路径即可完成恢复.步骤为:

¨         关闭数据库

¨         拷贝相关文件到安全区域(包括数据文件,日志文件,控制文件,参数文件和口令文件等)

¨         重新启动数据库

c)        热备份(归档模式)

       在归档模式下可以做精度比较高的热备份,这可以恢复非常精确的表空间级和用户级数据,由于它是根据归档日志文件的时间轴来恢复的,理论上可以恢复到前一次操作,甚至前一秒的操作.操作步骤如下:

¨         查看数据库是否运行在Archive模式下,如果没有可以手动归档或将归档方式改为自动归档.

              则设定数据库运行于归档模式下:SQL>shutdown immediate

                     SQL>startup mount

              SQL> alter database archivelog;

              SQL> alter database open;

              或修改init.ora

              LOG_ARCHIVE_START=TRUE
                     LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(
归档日值位置可以自己定义)

¨         备份表空间文件

       ALTER TABLESPACE tablespace_name BEGIN BACKUP;

       !CP tablespace_name D_PATH;

       ALTER TABLESPACE tablespace_name END BACKUP;

¨         备份归档日志文件

       $   files `ls <归档文件路径>/arch*.dbf`;export files

¨         备份控制文件

       SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

注意:归档方式下的备份不但要求有效的日志文件还需要一个在归档方式下做的全库备份.恢复的步骤是关闭数据库,拷贝全库备份文件到系统目录,拷贝归档日志文件到LOG_ARCHIVE_DEST_1指定路径, startup mount;set autorecovery on;recover database;alter database open;

抱歉!评论已关闭.