Oracle数据库完全恢复和不完全恢复以及执行用户管理备份恢复
比较完全恢复和不完全恢复:
一、完全恢复:将数据库恢复到当前最新状态,包括直至请求恢复时进行的所有已提交的数据更改
二、不完全恢复:将数据库恢复到请求恢复操作之前指定的过去时间点
一、完全恢复过程
下面的步骤说明了执行完全恢复期间要采取的操作:
1. 通过备份还原损坏或丢失的文件。
2. 根据需要应用增量备份、归档重做日志文件和联机重做日志文件中的更改。将重做日志更改应用于数据文件,直到到达当前联机日志,并且重新输入了最新的事务处理。在整个过程中会生成还原块。这称为前滚或高速缓存恢复。
3. 此时,还原的数据文件中包含已提交和未提交的更改。
4. 还原块用于回退任何未提交的更改。有时也称为事务处理恢复。
5. 此时,数据文件处于已恢复状态,且与数据库中的其它数据文件一致。
--------------------------------------分割线 --------------------------------------
--------------------------------------分割线 --------------------------------------
二、不完全恢复过程:
不完全恢复或数据库时间点恢复使用备份来生成非当前版本的数据库。也就是说,不会应用最新备份之后生成的所有重做记录。仅当绝对必要时才执行此类恢复。要执行不完全恢复,需要:
恢复点之前生成的所有数据文件的有效脱机或联机备份
从备份时间到指定恢复时间的所有归档日志
下面列出了执行不完全恢复的过程:
1.从备份还原数据文件:如果还原点目标并不很新,则使用的备份可能也不是最新的。这需要使用 OS 命令或 RMAN RESTORE 命令来复制文件。
2.使用 RECOVER 命令:从归档重做日志文件应用重做,根据需要包括尽可能多的数据以达到还原点目标。
3.恢复以后的状态:此时,数据文件包含一些已提交的事务处理和未提交的事务处理,因为重做可以包含未提交的数据。
4.使用 ALTER DATABASE OPEN 命令:应用还原块之前数据库已打开。这是为了提供更高的可用性。
5.应用还原数据:应用重做时,同时会应用支持还原数据文件的重做。这样,还原可以应用于数据文件,以便还原任何未提交的事务处理。这是接下来要完成的操作。
6.过程完成:此时,数据文件已恢复到所选择的时间点。
如果必须执行恢复且发现包含事务处理的归档日志丢失,其中的事务处理是在还原所用的备份的创建时间与目标恢复 SCN 之间发生的,则时间点恢复是唯一的选择。没有丢失的日志,则没有该期间内对数据文件进行更新的记录。唯一的选择就是从还原备份的时间点恢复数据库,直到未损坏的归档日志系列所允许的时间点,然后使用 RESETLOGS 选项打开数据库。丢失的重做日志文件中的或之后的所有更改都将丢失。
备份和恢复的使用类型:
数据库备份和恢复的类型包括:
用户管理的:不使用 RMAN。
--使用 OS 命令移动文件 --DBA 需要手动维护备份活动记录
服务器管理的:使用 RMAN
1.执行用户管理的数据库备份
可以使用 OS 命令创建数据文件的副本,从而备份数据库。操作过程取决于数据库是否处于 ARCHIVELOG 模式。如果是,则通过在复制表空间的数据文件之前将每个表空间置于备份模式,可以使数据库处于打开且可用状态。否则,在复制数据文件之前必须先关闭数据库。
1)手动备份 NOARCHIVELOG 数据库:
通过关闭数据库并将所有数据文件和控制文件复制到备份目录,可以对 NOARCHIVELOG 数据库进行一致的整体数据库备份。由于文件复制操作是使用 OS 命令完成的,因此必须先关闭数据库。这会将数据库置于一致状态。
SQL> SHUTDOWN IMMEDIATE
$ cp $ORACLE_BASE/ORCL/datafile/*.dbf /u02/backup/datafile
--将数据文件复制到备份位置
$ cp $ORACLE_BASE/ORCL/controlfile/*.ctl /u02/backup/controlfile --将控制文件复制到备份位置
SQL> STARTUP
2)手动备份 ARCHIVELOG 数据库
如果数据库处于 ARCHIVELOG 模式下,则复制文件前不一定必须关闭数据库。最终会得到不一致备份,但应用重做数据后会使其恢复到一致状态。
启动备份模式:
复制数据文件之前,必须将每个数据文件都置于备份模式。请使用 ALTER TABLESPACE 和 ALTER DATABASE 命令的 BEGIN BACKUP 子句来执行此操作。以下是每个命令的语法:
ALTER TABLESPACE <tablespace> BEGIN BACKUP;
--ALTER TABLESPACE 命令仅影响属于该表空间的那些数据文件。
ALTER DATABASE BEGIN BACKUP;
--ALTER DATABASE 影响数据库中的所有数据文件。
结束备份模式:
使数据文件退出备份模式非常重要。关闭数据库时,不能有任何数据文件处于备份模式。如果尝试关闭处于该状态的数据库,将收到错误。此外,由于备份模式会导致生成额外的重做数据,因此会给系统带来额外的负载。如果您不主动备份数据文件,则没有理由使任何数据文件处于备份模式。
具体操作:
备份数据文件:
SQL> select file_name, tablespace_name from dba_data_files;
--查看所有数据文件位置及表空间
SQL> ALTER TABLESPACE users BEGIN BACKUP;
--将表空间置于备份模式
$ cp $ORACLE_HOME/oradata/orcl/users*.dbf /u02/backup/datafile
--将该表空间的数据文件复制到备份位置
SQL> ALTER TABLESPACE users END BACKUP;
--使该表空间退出备份模式
备份控制文件的方式包括:
(1).创建为映像副本,写入到指定名称的文件:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO
'/u01/backup/controlfile.bak';
Database altered.
(2).生成重新创建控制文件的脚本,写入到跟踪文件:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
Database altered.
--重建控制文件的脚本在$ORACLE_BASE/diag/rdbms/prod/PROD/trace
查看刚生成脚本文件,会发现里面会有两种创建控制文件的方式:
NORESETLOGS ARCHIVELOG,表示日志文件等完好,重启数据库是不用resetlog;
RESETLOGS ARCHIVELOG;日志文件损坏丢失,不能执行完全恢复,将日志组号清零;