当前位置:  数据库>oracle

基于时间点的不完全恢复的例子

    来源: 互联网  发布时间:2017-06-18

    本文导语: 说到不完全恢复,一般有三种场景,基于时间点的不完全恢复,基于scn的不完全恢复,基于cancel的不完全恢复。 三种情况都是不完全恢复采用的方式,而不完全恢复都是在完全恢复的过程中出现了这样那样的错误,数不胜数,...

说到不完全恢复,一般有三种场景,基于时间点的不完全恢复,基于scn的不完全恢复,基于cancel的不完全恢复。
 三种情况都是不完全恢复采用的方式,而不完全恢复都是在完全恢复的过程中出现了这样那样的错误,数不胜数,基本就是归档,redo损坏丢失,控制文件丢失,备份的问题,手工失误等等。
 我们可以举一个不完全恢复的案例,其实在实际操作的过程中还是有一些值得总结和学习的地方。
 第一步准备基本的数据。目前我们可以看到在表空间data上只有一个表new_recover

SQL> select owner,segment_name,segment_type from dba_segments where tablespace_name='DATA';

OWNER    SEGMENT_NAME  SEGMENT_TYPE
 TEST      NEW_RECOVER        TABLE
里面有一些数据。

SQL> select count(*)from test.new_recover;

  COUNT(*)
 ----------
      4667
第二步开始热备份,为了明白整个过程,我们手工来完成这个不完全恢复。
 使用下面的语句生成热备份的动态sql
  select 'alter tablespace '||tablespace_name||' begin backup;' from dba_tablespaces where l
 ogging='LOGGING';
然后拷贝物理文件到指定的备份目录即可。
 拷贝完成之后,使用下面的语句声明完成了热备份
select 'alter tablespace '||tablespace_name||' end backup;' from dba_tablespaces where l
 ogging='LOGGING';
第三步我们开始删除表空间data,然后停掉数据库开始尝试恢复。
drop tablespace data including contents and datafiles;
 shut immediate
删除之后,不要担心自己没记下时间戳,其实在数据库日志里面会有记录。
Sun Jul 26 19:29:37 2015
 drop tablespace data including contents and datafiles
 Deleted file /u02/ora11g/oradata/TEST/data01.dbf
 Completed: drop tablespace data including contents and datafiles
 Sun Jul 26 19:29:54 2015
第四步我们开始尝试还原数据文件
 我们把数据文件从热备份的路径还原到数据文件的路径下
startup mount
 !cp xxxx/hot_backup/*.dbf  /u02/ora11g/oradata/TEST

第五步我们可以尝试开始基于时间点的恢复,基于时间点的这种恢复就是不完全恢复了,因为时间点之后的数据变更就会丢失。

SQL> recover database until time '2015-07-26 19:29:37';
 Media recovery complete.
恢复的过程很快就会完成。这个时候删除的数据文件还没有体现在控制文件里面,在v$datafile里也看不到。
SQL> Select name from v$datafile;

NAME
 --------------------------------------------------------------------------------
 /u02/ora11g/oradata/TEST/system01.dbf
 /u02/ora11g/oradata/TEST/sysaux01.dbf
 /u02/ora11g/oradata/TEST/undotbs01.dbf
 /u02/ora11g/oradata/TEST/testdata.dbf
第6步我们把数据库使用resetlogs的方式打开

SQL> alter database open resetlogs;

Database altered.

这个时候去查看v$datafile就会发现多了一个陌生的文件。但是从名字我们看出来提示我们是曾经丢失的一个文件,但是不知道怎么回事就给恢复回来了。
SQL> select name from v$datafile;
 NAME
 --------------------------------------------------------------------------------
 /u02/ora11g/oradata/TEST/system01.dbf
 /u02/ora11g/oradata/TEST/sysaux01.dbf
 /u02/ora11g/oradata/TEST/undotbs01.dbf
/u02/ora11g/product/11.2.0/dbhome_1/dbs/MISSING00004
 /u02/ora11g/oradata/TEST/testdata.dbf
这个时候去尝试ls -l查看文件是否存在,发现没有这个文件。
SQL> !ls -l /u02/ora11g/product/11.2.0/dbhome_1/dbs/MISSING00004
 ls: /u02/ora11g/product/11.2.0/dbhome_1/dbs/MISSING00004: No such file or directory
我们先把这个文件给rename一下。

alter database rename file '/u02/ora11g/product/11.2.0/dbhome_1/dbs/MISSING00004' to '/ora11g/oradata/TEST/data01.dbf';

Database altered.
第七步我们开始恢复这个数据文件
 恢复的时候很可能提示你选择恢复的方式,我们还是选择auto

SQL> recover datafile '/u02/ora11g/oradata/TEST/data01.dbf';
 ORA-00279: change 970750 generated at 07/26/2015 19:26:36 needed for thread 1
 ORA-00289: suggestion :
 /u02/ora11g/product/11.2.0/dbhome_1/dbs/arch1_1_886076275.dbf
 ORA-00280: change 970750 for thread 1 is in sequence #1


 Specify log: {=suggested | filename | AUTO | CANCEL}
 auto
 Log applied.
 Media recovery complete.
恢复完成之后,查看v$recover_file看看是否还有其它数据文件需要恢复。

SQL> select *from v$recover_file;

no rows selected
恢复之后查看表空间的状态,显示是online,但是实际上还不是。

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
 ------------------------------ ---------
 SYSTEM                        ONLINE
 SYSAUX                        ONLINE
 UNDOTBS                        ONLINE
 TEMP                          ONLINE
 DATA                          ONLINE
 TESTDATA                      ONLINE

因为这个时候我们查看数据还是有问题的。

SQL> select count(*)from test.new_recover;
 select count(*)from test.new_recover
                          *
 ERROR at line 1:
 ORA-00376: file 4 cannot be read at this time
 ORA-01110: data file 4: '/u02/ora11g/oradata/TEST/data01.dbf'

第八步我们把表空间置为Online,整个恢复的过程就完成了。
SQL> alter tablespace data online;

Tablespace altered.

SQL> select count(*)from test.new_recover;

  COUNT(*)
 ----------
      4667

在整个不完全的恢复过程中碰到了不少的Ora错误,有些错误是自己的问题从一个演变为另外一个错误,最终导致不可恢复。不管怎么样从这个过程中还是能够看到在数据恢复的过程中,Oracle还是做了很多的工作来保证了数据恢复成为可能。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • linux设置时间和把时间从UTC转成本地时间的
  • Linux下用ntpdate同步时间及date显示设置时间
  • 用哪些函数可以得到执行一个程序的系统CPU时间,用户CPU时间,时钟时间啊?
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 用户CPU时间 系统CPU时间 时钟时间 不懂
  • Python将日期时间按照格式转换成字符串
  • 用touch命令修改访问时间时,却发现连修改时间和状态时间也改了.疑惑
  • Linux/CentOS下的CST和UTC时间的区别以及不一致的解决方法
  • ★★怎样获得一个文件的创建时间,修改时间,和访问时间?急!在线等待...
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • arm2440下,系统时间和硬件时间一致,但创建文件得到的时间不一致,想过几种方法,似乎无用
  • php将unix时间戳转换成字符串时间函数(date)
  • 获取系统时间和修改系统时间
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 关于内核时间与用户时间;我在线等你回复,所以你要告诉我!
  • mysql中字符串和时间互相转换的方法(自动转换及DATE_FORMAT函数)
  • 求助,Linux系统时间总比硬件时间慢!
  • aps.net session全面介绍(生命周期,超时时间)
  • UNIX的时间为什么会隔一段时间就提前一个小时
  • php时间格式化函数date介绍及用法参考
  • 如何让centos系统时间和另外一台window系统时间保持同步


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3