Oracle备份恢复基础

1.1.   什么是SCN?

SCN(System ChangNumber)作为Oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。SCN是一个数字,确切的说是一个只会增加、不会减少的数字。所以通常又将SNC理解为Oracle的内部时钟。

在Oracle中总共有4种SCN:系统检查点(System Checkpoint)SCN、数据文件检查点(Datafile Checkpoint)SCN、结束SCN(Stop SCN)、开始SCN(Start SCN)。其中前面3种SCN存在于控制文件中,最后一种则存在于数据文件的文件头中。

当Oracle数据库每次启动时,Oracle先检查控制文件中的每个Data fileCheckpoint SCN和数据文件中的开始SCN是否相同,再检查每个Data file Checkpoint SCN和数据文件的文件头中的结束SCN是否相同。如果发现有不同,就需要从日志文件中进行恢复,这种恢复也就被称为介质恢复。

1.2.   数据库备份

1.2.1.逻辑备份

逻辑备份是指使用大家通常使用的传统数据导出工具EXP,或者Oracle10g开始出现的数据泵工具EXPDP,将数据导出成DMP格式的操作系统文件保存的备份方式。数据泵工具EXPDP虽然在导出数据的速度方面有不小的提升,但面对数百GB的数据量这两种导出数据的备份方式还是达不到速度的要求,显得力不从心。逻辑备份通常作为物理备份的补充,在诸如快速恢复单张变化不大的字典表时就有一定的意义,比如恢复ZLHIS中的“部门表”。

1.2.2.物理备份

物理备份就是转储Oracle数据库的物理文件(如数据文件、控制文件、归档日志文件等)的备份。一旦数据库发生故障,再利用这些文件进行还原。其中如我们通常使用的在安全关闭数据库的情况下复制Oracle数据库物理文件到备份磁盘的方式称作冷备份。在Oracle数据库处于打开状态,但通过Oracle数据库命令将表空间或数据库置于备份(backup)状态,然后再复制Oracle数据库物理文件到备份磁盘的方式称作热备份。热备份要求Oracle数据库运行在归档模式下。同时RMAN备份也是一种物理备份,不是对象级的逻辑备份,可以用RMAN来备份数据文件、控制文件、参数文件、归档日志文件。在数据库出现问题的时候可以通过RMAN物理备份来恢复数据库。

1.2.3.恢复原理(REDO应用)

前面我们讲了Oracle数据库的物理结构包括有数据文件、日志文件、控制文件。其中日志文件又分为联机重做日志文件和归档重做日志文件。并且也介绍日志文件的记录机制和Oracle数据库的SCN。我们这里讲的恢复原理其实质就是在以往Oracle数据库备份文件恢复的基础上,应用备份之后到当前为止的重做日志文件,使其达到快速将数据恢复到当前时间的目的。在应用重做日志恢复数据时,系统会对比重做日志中记录的SCN和待恢复数据库中的SCN。然后再根据重做日志,把其中记录的对数据库的操作再在待恢复的数据库上重现,最后将数据库恢复到当前时间。

1.2.4.完全恢复

所谓完全恢复是指Oracle在利用备份文件还原数据库后,并在此基础上应用了所使用的备份文件后所产生的归档日志和联机重做日志中所有的修改,将数据库恢复到最接近当前时间点的恢复。完全恢复(complete recovery)主要包括两个步骤:首先使用数据库、表空间或数据文件(datafile)的物理备份进行还原(restore),再使用重做日志(redo log)将数据更新到最接近当前的时间点。

 

以下示例是users表空间的数据文件users01.dbf被误删除后的恢复情况:

1.模拟表空间数据文件丢失。

SQL> conn /as sysdba

Connected.

SQL> create table t_users (idnumber) tablespace users;

Table created.

SQL> insert into t_usersselect *from dba_objects;

9478 row created.

SQL> commit;

Commit complete

$ rm -i/u01/app/oradata/ora10g/users01.dbf

rm: remove regular file`/u01/app/oradata/ora10g/users01.dbf'? y

2.模拟出故障现象。

SQL> conn /as sysdba

Connected.

SQL> create table t_users_1 (idnumber) tablespace users;

create table t_users_1 (id number)tablespace users

*

ERROR at line 1:

ORA-01116: error in opening databasefile 4

ORA-01110: data file 4: '/u01/app/oradata/ora10g/users01.dbf'

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such fileor directory

Additional information: 3

3.执行恢复,检查恢复情况。

$ rman target /

RMAN> sql "alter tablespaceusers offline immediate";

RMAN> restore tablespace users;

RMAN> recover tablespace users;

检查一下数据:

SQL> conn /as sysdba

Connected.

SQL> select count(*) fromsys.t_users;

COUNT(*)

----------

9478

1.2.5.不完全恢复

不完全恢复(incomplete recovery),平常也被称为按时间点的恢复(point-in-timerecovery),是指没有将数据库恢复到最接近当前时间点的恢复。换句话说,恢复时没有将还原所使用的备份文件之后产生的所有重做日志应用到已经还原(RESTORE)的数据库上。其中不完全恢复又分为:

Ø  基于时间点的恢复:比如从alter警告文件中查到drop table操作是什么时候发生的,恢复时就恢复到drop table前一刻,命令示例:

recover database until time 'yyyy-mm-ddhh24:mi:ss'

Ø  基于Cancel的恢复:可能中间某个归档损坏或丢失,命令示例:

recover database untill cancel

Ø  基于SCN的恢复(系统改变号),命令示例:

recover database until scn

Ø  使用备份的控制文件进行不完全恢复,命令示例:

recover database until cancel using backup control file

以下示例是基于时间点的不完全恢复:

1.模拟数据损失

$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.1.0.2.0 -Production on Tue Apr 5 09:26:04 2005

Copyright (c) 1982, 2004, Oracle.  All rights reserved

Connected to:

Oracle Database 10g EnterpriseEdition Release 10.1.0.2.0 - 64bit Production

With the Partitioning, OLAP and DataMining options

SQL>create table t as select *from dba_objects;

Table created.

SQL>alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';

Session altered.

记录数据误删除前的时间与表中记录数。

SQL>select sysdate from dual;

SYSDATE

-------------------

2005-04-05 09:26:55

SQL>select count(*) from t;

 COUNT(*)

----------

     9478

模拟误删除数据:

SQL>drop table t;

Table dropped.

SQL>exit

Disconnected from Oracle Database10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production

With the Partitioning, OLAP and DataMining options

2.执行恢复

设置时间环境变量,执行(基于时间点)until time的不完全恢复。

$ exportNLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"

$ rman target /

Recovery Manager: Release 10.1.0.2.0- 64bit Production

Copyright (c) 1995, 2004,Oracle.  All rights reserved.

connected to target database: ORCL(DBID=1337390772)

RMAN> run {

2> set until time '2005-04-0509:26:55';

3> restore database;

4> recover database;

5> }

executing command: SET until clause

using target database controlfileinstead of recovery catalog

Starting restore at 2005-04-0509:36:51

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=160devtype=DISK

datafile 8 not processed becausefile is read-only

channel ORA_DISK_1: startingdatafile backupset restore

channel ORA_DISK_1: specifyingdatafile(s) to restore from backup set

restoring datafile 00001 to/opt/oracle/oradata/eygle/system01.dbf

………………..

media recovery complete

Finished recover at 2005-04-0509:50:42

3.恢复完成,使用RESETLOGS选项打开数据库。检查数据恢复情况。

RMAN> alter database openresetlogs;

database opened

RMAN> exit

Recovery Manager complete.

$ sqlplus '/ as sysdba'

SQL*Plus: Release 10.1.0.2.0 -Production on Tue Apr 5 09:58:00 2005

Copyright (c) 1982, 2004,Oracle.  All rights reserved.

Connected to:

Oracle Database 10g EnterpriseEdition Release 10.1.0.2.0 - 64bit Production

With the Partitioning, OLAP and DataMining options

SYS AS SYSDBA on 2005-04-05 09:58:00>archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     1

Next log sequence to archive   1

Current log sequence           1

SQL>select count(*) from t;

 COUNT(*)

----------

     9478

SQL>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值