Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3672100
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2022-11-01 06:30:08

1

  1. 问题复现
  2. col force_logging for a15
  3. select force_logging,LOG_MODE from v$database;
  4.  NO ARCHIVELOG

  5. set lines 100
  6. col name for a40
  7. select name, UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;
  8. select FILE#,BLOCK#,NONLOGGED_START_CHANGE# from v$nonlogged_block;

  9. 先备份数据库
  10. rman target /
  11. validate database;
  12. report unrecoverable;
  13. 目前为止没有任何异常,为了通过recover 复现问题,先备份全库
  14. backup database format '/arch/db_%U';

  15. --DROP USER a CASCADE;
  16. create user a identified by a;
  17. grant connect,resource,select_catalog_role to a;
  18. alter user a quota unlimited on users;
  19. conn a/a

  20. create table t1 nologging as select * from dba_users;

  21. COL TABLE_NAME FOR A30
  22. select table_name,LOGGING from user_tables where LOGGING='NO';
  23. 创建的nologging表已经能看到

  24. set lines 100
  25. col name for a40
  26. select name, UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;
  27. 查询v$datafile有不为0的,但是查询表本身数据没事
  28. select count(0) from a.t1;

  29. 检查当前没有坏块
  30. rman target /
  31. report unrecoverable;
  32. 提示有不可修复的了

  33. validate database;
  34. 这时还是看不到异常,需要recover后才能看到问题

  35. select FILE#,BLOCK#,NONLOGGED_START_CHANGE# from v$nonlogged_block;
  36. 无异常,v$nonlogged_block应该是只有recover database后,再validate database,如果发现无法修复的块才有数据

  37. 整体来说,数据查询没影响,但是能看到数据库内部已经能察觉到问题了,report unrecoverable和 v$datafile的UNRECOVERABLE_CHANGE#
  38. 即使此时删除用户a,v$datafile仍然有异常信息(UNRECOVERABLE_CHANGE#不为空)

  39. rman target /
  40. shutdown immediate
  41. startup mount
  42. restore database;
  43. recover database;
  44. alter database open;

  45. select FILE#,BLOCK#,NONLOGGED_START_CHANGE# from v$nonlogged_block;
  46. 有数据了!


  47. 结论:
  48. nologging 的表不恢复数据库,v$nonlogged_block中看不出来

  49. nologging 检测方法:

  50. col OWNER for a32
  51. COL TABLE_NAME FOR A30
  52. select owner,table_name,LOGGING from dba_tables where LOGGING='NO' and owner not in ('SYS','SYSTEM','DBSNMP','GSMADMIN_INTERNAL','MDSYS','DVSYS','WMSYS','ORDDATA','XDB') order by 1,2;

  53. set lines 100
  54. col name for a40
  55. select name, UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;

  56. rman target /
  57. report unrecoverable;

  58. 解决方法:
  59. 备份相关文件

  60. 参考:
  61. ORA-1578 ORA-26040 - NOLOGGING 操作引起的坏块 - 错误解释和解决方案 (Doc ID 1623284.1)

阅读(771) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~