数据库备份与恢复
1.数据库备份
备份的简单方式就是复制数据,对于oracle数据库来说,需要复制的不仅仅是用户数据,还包括一些重要的数据库数据,例如数据文件、日志文件和控制文件等。oracle的数据库备份方法可以分为以下两种:
1.
物理备份:对数据库的物理文件进行复制,分为脱机(offline)备份和联机(online)备份。物理备份是将数据库的数据文件、重做日志文件和控制文件等在操作系统中进行复制,这些备份也称为“文件系统备份”,因为涉及到使用操作系统文件目录。物理备份可以实现数据库的完整恢复,但数据库必须运行在归档模式下。在进行物理备份时,可以进行如下三种操作:
a.完全数据库脱机备份
使用shutdown命令的normal、immediate或transactional选项,正常关闭数据库时(也就是说,不是由于实例失效而关闭)会发生一致的脱机备份。完全数据库脱机备份是对数据库中的全部数据文件、日志文件和控制文件,在数据库关闭的情况下进行操作系统备份。
技巧:完全数据库备份是在数据库正常关闭之后进行的。在数据库关闭时,构成数据库的所有文件都是关闭的,文件不再被用户使用和操作,数据库文件不存在不同步问题。完全数据库备份可以将数据备份到任何类型的存储介质上。
b.部分数据库脱机备份
部分数据库备份可以在数据库关闭或数据库运行时进行,将部分表空间切换到脱机状态后,将对应的数据文件进行备份。例如,对某一个表空间中全部数据文件备份或者单个数据文件备份等。
技巧:如果使用部分数据库脱机备份方式,由于数据库文件之间存在不同步,在备份文件复制回数据库时,需要实施数据库恢复,所以这种方式只可以在归档模式下使用,使用归档日志进行数据库恢复。
c.部分数据库联机备份
联机备份是在数据库正常运行时进行的,备份期间不会影响用户使用。部分数据库联机备份包括部分表空间、控制文件、数据文件和归档日志文件的备份,与完全数据库脱机备份相比,减少了备份的工作量。
脱机备份优点:备份和恢复迅速,容易达到低维护,高安全性,执行效率高。
脱机备份缺点:单独使用时,只能提供到某一时间点的恢复,不能按表和用户恢复,而且必须关闭数据库。
脱机备份使用时机:数据库可以暂时关闭,或者需要和联机备份配合使用时。
联机备份优点:
备份时间短;备份时数据库仍可使用;可达到秒级恢复(恢复到某一时间点上);对几乎所有数据库对象都可以实现恢复。
联机备份缺点:实现过程比较复杂;需要较大的空间存放归档文件;操作时不允许失误,否则恢复不能进行。
联机备份使用时机:数据访问量小,或者需要实现表空间或者
数据库文件级的备份,或者需要更高的精确备份时。
脱机备份也称为“冷备份”,联机备份也称为“热备份”。
2.逻辑备份:利用oracle导出工具进行备份。对一个数据库进行逻辑备份,包括读取一组数据库记录,并将它们写到一个文件中。这些记录的读取与它们的物理位置无关。在oracle中,使用Data Pump Export(数据泵导出)实用程序执行逻辑备份。为了恢复Data Pump Export产生的文件,应该使用Data Pump Import(数据泵导入)实用程序。使用这两个应用程序,可以进行高速的、并行的批量数据导出和导入。
在使用上面两个实用程序时需要注意以下几点:
a.不必将导出的数据导入到同一个数据库中,使用的模式也不必和原来用于生成导出转储文件来创建一组导出对象的副本。
b.如果完整的导入一个由全部数据库导出得到的转储文件,那么在导入过程中,将会创建包括表空间、数据文件和用户在内的所有数据库对象。
c.如果仅仅从转储文件中导入部分数据,那么在导入之前,首先应创建将拥有和存储这些数据的表空间、数据文件和用户。
逻辑备份优点:能够针对行对象进行备份;能够通过跨平台实施备份并迁移数据,而不需要关闭数据库。
逻辑备份缺点:导出方式并不能保证介质失效,仅仅是逻辑上的备份。
逻辑备份使用时机:一般用于有规律的日常备份。
2.数据库恢复
数据库备份的目的就是在数据库出现故障时,能够对数据库进行恢复。数据库恢复就是根据归档日志或联机日志文件中的记录以及数据库备份,将数据库恢复到需要的状态。由于数据库出现的故障主要包括实例故障和存储介质故障,因此对数据库的恢复可以分为实例恢复和介质恢复。
1.实例恢复
在数据库实例运行期间,当意外断电、后台进程出现故障或者人为中止(使用shutdown abort语句)时出现实例故障,这时需要使用实例恢复。实例恢复只需要联机日志文件,不需要归档日志文件。
提示:如果出现实例故障,oracle实例不能正常关闭,由于服务器可能正在管理数据库事务。在这种情况下,数据库来不及执行一个数据库检查点,以保存内存缓冲区中的数据到数据文件中,因此实例故障会造成数据文件中数据的不一致性。
实例恢复的目的:恢复在内存缓冲区中因实例故障而未保存到数据文件中的数据。
实例恢复的最大的特点:oracle在下次启动数据库时,会自动使用日志文件进行数据的恢复,不需要用户的参与。
实例恢复由系统自动实现,实现的操作步骤如下:
a.为了了解恢复数据文件中没有记录的数据,进行前滚操作。该数据记录在在线日志中,包括对回退段的内容恢复。
b.回退未提交的事务,按照步骤a重新生成回退段所指定的操作。
c.释放在发生故障时正在处理的事务所持有的资源。
d.解决在发生故障时正经历一阶段提交的任何悬而未决的分布事务。
2.介质恢复
介质恢复主要用于发生存储介质故障时进行恢复,即对被损坏的数据文件和控制文件进行修复。
提示:介质故障是当一个文件、文件的一部分或者磁盘不能读取(写入)时出现的故障。介质故障下的数据文件是不一致的,需要DBA手动来进行数据库的恢复。
介质恢复可以将一个数据库的备份更新到某一个指定的时刻。当进行介质恢复时,可以恢复整个数据库、某个表空间或某个数据文件。
按照介质恢复的内容,可以将介质恢复分为两种形式:完全介质恢复(Complete Recovery)和不完全介质恢复(Incomplete Recovery)。
a.完全介质恢复。完全介质恢复就是可以恢复所有已经提交的事务,即将数据库、表空间或数据文件的备份更新到最近的时间。应用完全恢复的典型情况就是在数据文件或控制文件遭受介质损失之后所进行的恢复。
注意:使用完全介质恢复时,必须保证有连续的归档日志记录可以使用。
b.不完全介质恢复。不完全介质恢复使用数据库的备份对数据库进行恢复。产生一个数据库的非当前数据内容,将数据库恢复到某一特定的时刻。
提示:不完全恢复并不是使用最近一次备份后的所有的重做日志记录,而是只应用有限数量的重做日志记录来恢复某些已经提交的事务。
通常在如下情况下需要进行不完全恢复:
(1)介质损坏破坏了联机日志文件的全部或部分记录。
(2)用户操作错误造成了数据损失,例如用户错误删除了一个表。
(3)由于丢失了归档日志文件,不能进行完全恢复。
(4)丢失了当前的控制文件,必须使用控制文件的备份打开数据库。
不完全介质恢复包括三种类型:基于撤销的恢复、基于时间的恢复和基于更改的恢复。
(1)基于撤销的恢复:基于撤销的恢复是由数据库管理员控制的,撤销某个恢复点指定的操作。
(2)基于时间的恢复:基于时间的恢复可以将数据库恢复到某个时间点上。
(3)基于更改的恢复:基于更改的恢复可以将数据库恢复到一个特定的系统修改序列号(SCN)上。
技巧:SCN全称system change number。oracle中有四个SCN:系统检查点SCN,数据文件检查点SCN,结束SCN和开始SCN。其中开始SCN存在于数据文件的文件头中,其他三个SCN存在于控制文件中。
用户管理的备份
1.备份命令
针对不同类型的文件,应该使用不同类型的备份命令,如下:
文件类型 | 备份命令 | 示例 |
数据文件 | 操作系统命令 | copy c:\datafile1.dbf d:\datafile1.dbf表示将c:\的文件复制到d:\目录下 |
日志文件 | 操作系统命令 | copy c:\logfile1.log d:\logfile1.log,表示将c:\的文件复制到d:\目录下 |
控制文件 | SQL命令 | alter database backup controlfile to confile1.ctl |
初始化参数文件 | SQL命令 | create pfile sidinit.ora from spfle |
数据库逻辑对象(表、索引等) | Export命令 | Export system/password |
2.完全数据库脱机备份
完全数据库脱机备份,是对构成数据库的全部数据文件(.dbf)、联机日志文件(.log)和控制文件(.ctl),在数据库关闭的状态下,使用操作系统命令进行的备份。
完全数据库脱机备份的操作步骤如下:
1.以sysdba身份连接数据库,如下:
connect sys/admin as dba;
2.通过数据字典获取备份文件列表:
查询数据字典视图dba_data_files,确认所有数据文件的路径
select file_name from dba_data_files;
查询数据字典视图v$logfile,确认所有日志文件的路径
select member from v$logfile;
查询数据字典视图v$controlfile,确认所有控制文件的路径
select name from v$controlfile;
3.使用shutdown命令正常关闭数据库,如下:
shut down immediate;
注意:为了确保数据库被安全的关闭,需要在使用shutdown命令关闭数据库时,带有normal、immediate或者transactional选项。
4.在操作系统的命令提示符窗口中,进入到数据文件所在的目录后,使用copy命令,通过操作系统方式复制所有的数据文件、日志文件和控制文件等。
5.使用startup命令重新启动数据库,如下:
startup;
3.部分数据库脱机备份
部分数据库脱机备份是将部分表空间脱机后对其进行备份,在备份期间,数据库中的其他表空间或数据文件仍然可以被用户使用。在对脱机的表空间备份之前,需要注意以下两点:
1.不能将system表空间,或者任何包含有活动回退段的表空间设置为脱机状态,因此,这些表空间也就不能在脱机状态下进行备份。
注意:由于system表空间包含了数据字典,而数据字典存储了与数据库对象有关的所有信息。如果system表空间脱机,那么将无法识别任何数据库对象,如表、索引等。
2.注意模式对象跨表空间存储。例如,表table1被存放在表空间tablespace1中,而该表的索引被存放在表空间tablespace2中。如果表空间tablespace2被设置为脱机状态,没有对表空间tablespace1进行脱机设置。这时,用户对表table1执行查询操作,并且需要使用索引时则会发生错误。
注意:要避免上述错误,可以将表空间tablespace1也设置为脱机状态;或者对表table1不进行任何DML操作。
部分数据库脱机备份的操作步骤如下:
a.对某个表空间备份前,首先查看数据字典视图dba_data_files,了解该表空间中的所有数据文件。
例如,需要对表空间users进行备份,如下:
select tablespace_name,file_name from dba_data_files where tablespace_name='users';
b.将表空间设置为脱机状态。如下:
alter tablespace users offline;
c.备份表空间中的数据文件。例如,需要将表空间users中的users01.dbf文件备份到e:\oracle11g\copy\目录下。在操作系统的命令提示符窗口中,进入到该数据文件所在的目录,然后执行copy命令,如下:
F:\Oracle11g\11gsetup\oradata\orcl> copy users01.dbf e:\oracle11g\copy\;
备份成功后,在e:\oracle11g\copy\目录下,将保存一个users01.dbf文件。
提示:使用物理备份时,不论数据文件中是否存在数据,整个数据文件都要被复制。
d.设置表空间为联机状态。将表空间users的状态设置为online,如下:
alter tablespace users online;
提示:使用alter tablespace online 命令设置表空间为联机状态后,系统会自动维持数据库文件之间的同步。
4.部分数据库联机备份
联机备份是在数据库打开的状态下进行的,在进行联机备份的同时,数据库仍然可以访问,用户有可能对数据进行修改和删除等操作,从而使得数据库文件之间存在不同步。在备份文件复制回数据库时,需要实施数据库恢复,所以这种方式只可以在归档模式下使用。
部分数据库联机备份的操作步骤如下:
1.确认数据库运行在归档模式,例如:
archive log list;
2.使用alter tablespace tablespace_name begin backup语句,设置表空间为备份状态。例如,对表空间users进行设置,如下:
alter tablespace users begin backup;
技巧:将表空间设置为备份状态后,该表空间数据文件的检验点号将停止修改,并对数据文件做联机备份标记。
3.查询数据字典v$datafile和dba_data_file,了解表空间的数据文件的检查点号,如下:
select a.file#,a.checkpoint_change#,b.file_name from v$datafile a,dba_data_file b where a.file#=b.file_id;
4.备份表空间的数据文件。
5.使用alter tablespace tablespace_name end backup语句,结束表空间的备份状态,如下:
alter tablespace users end backup;
提示:在使用部分数据库联机备份时,应该尽量缩短执行alter tablespace ..begin backup和alter tablespace ..end backup语句之间的时间间隔。因为在这段时间内,备份表空间的脏缓冲区块将被写到联机重做日志中,可能会对数据库的性能产生影响。
5.备份控制文件
由于数据库的结构信息存储在控制文件中,所以控制文件的备份和恢复在数据库的备份恢复过程中十分关键。
备份控制文件的实现主要有以下3种方法:
1.使用操作系统copy命令,在数据库关闭时对控制文件进行复制。
2.利用alter database backup controlfile to语句,将控制文件备份到二进制文件中。
alter database backup controlfile to location;
location指定控制文件备份副本的目标位置和文件名。
例如,对控制文件control01.dbf进行备份,如下:
alter database backup controlfile to 'F:\Oracle11g\11gsetup\oradata\orcl\control\control01.ctl';
3.利用alter database backup controlfile to trace语句,将控制文件备份到后台跟踪文件中。
该语法不带任何参数
alter database backup controlfile to trace
技巧:通过这种方式备份控制文件,备份文件中存放的是创建控制文件的脚本,可以用记事本等文本编辑器打开,通过这个脚本可以重新创建控制文件。
提示:oracle推荐使用第二种方法来备份控制文件。第一种方法备份的控制文件,一般用于全库一致性恢复。而第三种方法会丢失归档日志的历史信息、脱机表空间信息等。
用户管理的完全恢复
使用完全数据库恢复方法可以将数据库恢复到失败点,这时丢失的所有数据都被恢复。根据数据库文件的破坏情况不同,使用不同的方法。例如,如果数据库运行在归档模式下,可以考虑使用归档模式下的完全恢复;如果数据文件被物理破坏,而数据库还处于打开状态,可以进行脱机的表空间恢复。
1.用户管理的完全恢复机制
用户管理的完全恢复是指当数据文件出现介质失败时,使用操作系统命令转储数据文件,并使用SQL恢复命令执行重做日志和归档日志,最终将数据文件恢复到失败点之前的状态。对数据库进行完全恢复大致分为以下两个步骤:
1.当发生介质故障后,利用备份文件来修复损坏或丢失的数据文件。
2.修复数据文件后,因为被修复的数据文件与其他数据文件相比要“旧”,所以这时数据库中的数据文件并不同步(文件头部信息中的检查点号SCN不同)。由于数据文件之间不一致,数据库仍然无法打开,这时就需要通过SQL命令,使用归档日志对数据库进行恢复。
技巧:归档日志恢复过程又包含两个主要步骤:缓存恢复和事务恢复。在缓存恢复完成后,数据库即可打开。但此时数据库中可能含有提交的事务,因此使用事务恢复将提交所有的事务,使数据库文件达到一致状态。
2.非归档模式下的数据库恢复
如果数据库运行在非归档模式下,这时某一个数据文件被破坏,则数据库不能启动,对其恢复时,就需要使用非归档模式下的数据库恢复。
恢复非归档模式的数据库,必须恢复所有备份的数据库文件,恢复过程只需要DBA从最后一个有效的数据库备份中复制文件并覆盖当前文件,然后启动数据库即可。
注意:恢复非归档模式的数据库,即使只损坏或丢失其中一个数据文件,也必须恢复所有备份的数据文件。如果恢复过程没有包括某一个备份的数据文件,数据库就处于一种不一致的状态,就会产生一个错误信息。
下面介绍非归档模式下的数据库恢复。首先模拟需要使用非归档模式恢复数据库的情况,这里通过删除(或移动)一个数据文件实现,然后使用非归档模式执行恢复。
1.实现数据文件损坏
a.登录数据库,并启用SYSDBA权限,如下:
connect /as sysdba
b.关闭数据库,对数据库文件进行脱机备份
c.重新启动数据库,并在USERS表空间中创建一个表backuptest,如下:
create table backuptest(
id number(4),
name varchar2(40)
)
tablespace users;
commit;
d.使用shutdown immediate语句关闭数据库,然后删除(或移动)数据文件USERS01.DBF
e.重新启动数据库,数据库无法找到USERS01.DBF
2.使用非归档模式的恢复
由于缺少数据文件USERS01.DBF,数据库无法重新启动,接下来进行数据库恢复操作。如果只恢复被损坏的文件,数据文件之间不同步,那么数据库仍然无法启动,只有对全部备份数据库文件都实行操作,才能达到恢复的结果,具体步骤如下:
a.关闭数据库,然后将备份文件中的USERS01.DBF复制到数据库目录中,如下:
shutdown immediate;
host copy f:\oracle11g\11gsetup\oradata\users01.dbf
f:\oracle11g\11gsetup\oradata\orcl\users01.dbf;
b.在启动数据库时,由于被修复的数据文件与其他文件不同步,那么系统将要求对数据库进行介质恢复,表示使用单个数据文件不足以恢复数据库
提示:介质恢复需要使用归档的重做日志文件来使所恢复的数据文件处于一致的状态。因为数据库是在noarchivelog模式中运行的,所以无法对USERS01.DBF文件来执行介质恢复。
恢复数据库的唯一方法是从脱机备份中恢复所有数据文件,这个备份集中包含了处于一致状态的数据库,但是新创建的表backuptest不会存在。
c.使用操作系统命令,恢复在脱机备份中创建的所有数据库文件
d.使用startup命令打开数据库
e.使用select命令查看表backuptest,确认该表不存在
3.归档模式下的数据文件恢复
恢复归档模式下的数据库,实现过程是将备份的数据文件的副本放在数据库数据文件夹中,然后重新启动数据库,这将启动实例并打开控制文件,然后可以使用recover命令,并重新应用归档的重做日志中的事务。
提示:当数据文件出现介质损坏时,在执行SQL命令恢复数据库之前,必须通过操作系统命令修复数据文件。如果数据文件被误删除,那么只需将备份文件放回原位置即可。
如果是数据文件所在磁盘出现损坏,那么需要将数据文件复制到其他磁盘,并且还需要修改控制文件,定位该数据文件。
当数据库处于MOUNT状态时,DBA可以改变任何数据文件的位置,但主要改变SYSTEM表空间数据文件的位置。
当数据库处于OPEN状态下,DBA可以改变除SYSTEM表空间外的数据文件的位置。