楼主: lues

当前联机日志损坏后,怎么操作能够100%的恢复数据库数据。

[复制链接]
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
21#
发表于 2008-4-2 08:43 | 只看该作者
shutdown immediate以后,丢失current redo log,我认为应该不会丢失数据
shutdown immediate会发生完全检查点,所有数据已经全部写入数据文件,不需要任何redo做恢复。所以不会丢数据~

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
22#
发表于 2008-4-2 09:06 | 只看该作者

  1. 1.确认当前日志组为3
  2. 2.创建redotest表,并insert数据,确定这些操作保存到当前日志组3中
  3. 3.shutdown immediate数据库,把日志组3的成员改名(损坏)
  4. 4.启动数据库mount,检查当前日志组为3,已经损坏无法open数据库,作recover database until cancel; open resetlogs
  5. 5.检查redotest表,无数据损失。

  6. Microsoft Windows XP [Version 5.1.2600]
  7. (C) Copyright 1985-2001 Microsoft Corp.

  8. Z:>sqlplus mydb

  9. SQL*Plus: Release 9.2.0.7.0 - Production on 星期三 4月 2 08:55:01 2008

  10. Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

  11. 请输入口令:

  12. 连接到:
  13. Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
  14. With the Partitioning, OLAP and Oracle Data Mining options
  15. JServer Release 9.2.0.7.0 - Production

  16. MYDB@MYDB> select group#,status,archived from v$log;

  17.     GROUP# STATUS                           ARCHIV
  18. ---------- -------------------------------- ------
  19.          1 INACTIVE                         YES
  20.          2 INACTIVE                         YES
  21.          3 CURRENT                          NO

  22. 已用时间:  00: 00: 00.00
  23. MYDB@MYDB> select group#,member from v$logfile;

  24.     GROUP#
  25. ----------
  26. MEMBER
  27. ----------------------------------------------------------------------------------------------------

  28.          3
  29. C:ORACLEDBORA92ORADATAMYDBREDO03.LOG

  30.          2
  31. C:ORACLEDBORA92ORADATAMYDBREDO02.LOG

  32.          1
  33. C:ORACLEDBORA92ORADATAMYDBREDO01.LOG


  34. 已用时间:  00: 00: 00.00
  35. MYDB@MYDB> create table redotest as select * from v$version where 1=0;

  36. 表已创建。

  37. 已用时间:  00: 00: 00.01
  38. MYDB@MYDB> insert into redotest select * from v$version;

  39. 已创建5行。

  40. 已用时间:  00: 00: 00.00
  41. MYDB@MYDB> commit;

  42. 提交完成。

  43. 已用时间:  00: 00: 00.00
  44. MYDB@MYDB> select * from redotest;

  45. BANNER
  46. ----------------------------------------------------------------------------------------------------

  47. Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
  48. PL/SQL Release 9.2.0.7.0 - Production
  49. CORE    9.2.0.7.0       Production
  50. TNS for 32-bit Windows: Version 9.2.0.7.0 - Production
  51. NLSRTL Version 9.2.0.7.0 - Production

  52. 已用时间:  00: 00: 00.00
  53. MYDB@MYDB> select group#,status,archived from v$log;

  54.     GROUP# STATUS                           ARCHIV
  55. ---------- -------------------------------- ------
  56.          1 INACTIVE                         YES
  57.          2 INACTIVE                         YES
  58.          3 CURRENT                          NO

  59. 已用时间:  00: 00: 00.00
  60. MYDB@MYDB> shutdown immediate;
  61. ORA-01031: 权限不足
  62. MYDB@MYDB> conn / as sysdba
  63. 已连接。
  64. MYDB@MYDB> shutdown immediate;
  65. 数据库已经关闭。
  66. 已经卸载数据库。
  67. ORACLE 例程已经关闭。
  68. MYDB@MYDB> host
  69. Microsoft Windows XP [Version 5.1.2600]
  70. (C) Copyright 1985-2001 Microsoft Corp.

  71. Z:>dir C:ORACLEDBORA92ORADATAMYDBREDO03.LOG
  72. Volume in drive C has no label.
  73. Volume Serial Number is 2848-3F2D

  74. Directory of C:ORACLEDBORA92ORADATAMYDB

  75. 2008-04-02  08:56       104,858,112 REDO03.LOG
  76.                1 File(s)    104,858,112 bytes
  77.                0 Dir(s)  23,216,091,136 bytes free

  78. Z:>rename C:ORACLEDBORA92ORADATAMYDBREDO03.LOG C:ORACLEDBORA92ORADATAMYDBREDO03.test
  79. The syntax of the command is incorrect.

  80. Z:>mv C:ORACLEDBORA92ORADATAMYDBREDO03.LOG C:ORACLEDBORA92ORADATAMYDBREDO03.test

  81. Z:>dir C:ORACLEDBORA92ORADATAMYDBREDO03.LOG
  82. Volume in drive C has no label.
  83. Volume Serial Number is 2848-3F2D

  84. Directory of C:ORACLEDBORA92ORADATAMYDB

  85. File Not Found

  86. Z:>dir C:ORACLEDBORA92ORADATAMYDBREDO03.test
  87. Volume in drive C has no label.
  88. Volume Serial Number is 2848-3F2D

  89. Directory of C:ORACLEDBORA92ORADATAMYDB

  90. 2008-04-02  08:56       104,858,112 REDO03.test
  91.                1 File(s)    104,858,112 bytes
  92.                0 Dir(s)  23,216,082,944 bytes free

  93. Z:>sqlplus " / as sysdba"

  94. SQL*Plus: Release 9.2.0.7.0 - Production on 星期三 4月 2 08:59:03 2008

  95. Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

  96. 已连接到空闲例程。

  97. SQL/IDLE> startup mount;
  98. ORACLE 例程已经启动。

  99. Total System Global Area  127475516 bytes
  100. Fixed Size                   454460 bytes
  101. Variable Size              83886080 bytes
  102. Database Buffers           37748736 bytes
  103. Redo Buffers                5386240 bytes
  104. 数据库装载完毕。
  105. SQL/IDLE> select group#,status,archived from v$log;

  106.     GROUP# STATUS                           ARCHIV
  107. ---------- -------------------------------- ------
  108.          1 INACTIVE                         YES
  109.          2 INACTIVE                         YES
  110.          3 CURRENT                          NO

  111. 已用时间:  00: 00: 00.00
  112. SQL/IDLE> alter database open;
  113. alter database open
  114. *
  115. ERROR 位于第 1 行:
  116. ORA-00313: 无法打开日志组 3 (线程 1) 的成员
  117. ORA-00312: 联机日志 3 线程 1: 'C:ORACLEDBORA92ORADATAMYDBREDO03.LOG'


  118. 已用时间:  00: 00: 00.06
  119. SQL/IDLE> recover database until cancel;
  120. 完成介质恢复。
  121. SQL/IDLE> alter database open;
  122. alter database open
  123. *
  124. ERROR 位于第 1 行:
  125. ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


  126. 已用时间:  00: 00: 00.04
  127. SQL/IDLE> alter database open resetlogs;

  128. 数据库已更改。

  129. 已用时间:  00: 00: 16.01
  130. SQL/IDLE> select group#,status,archived from v$log;

  131.     GROUP# STATUS                           ARCHIV
  132. ---------- -------------------------------- ------
  133.          1 UNUSED                           YES
  134.          2 UNUSED                           YES
  135.          3 CURRENT                          NO

  136. 已用时间:  00: 00: 00.00
  137. SQL/IDLE> select * from mydb.redotest;

  138. BANNER
  139. ----------------------------------------------------------------------------------------------------

  140. Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
  141. PL/SQL Release 9.2.0.7.0 - Production
  142. CORE    9.2.0.7.0       Production
  143. TNS for 32-bit Windows: Version 9.2.0.7.0 - Production
  144. NLSRTL Version 9.2.0.7.0 - Production

  145. 已用时间:  00: 00: 00.00
  146. SQL/IDLE>
复制代码

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
23#
发表于 2008-4-2 09:16 | 只看该作者
原帖由 棉花糖ONE 于 2008-4-2 08:22 发表
不一定说数据不丢失就没问题,这时候可能会导致数据库不是处于一种一致的状态,该回滚的没回滚


既然是做了完全检查点,那么回滚块也是没有丢失。此时立即shutdown abort,启动后应该可以回滚的。当然能shutdown immediate成功最好。

使用道具 举报

回复
论坛徽章:
11
数据库板块每日发贴之星
日期:2007-10-10 01:04:092010新春纪念徽章
日期:2010-01-04 08:33:08祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:马
日期:2009-04-12 17:19:242009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2008-05-06 11:10:422008新春纪念徽章
日期:2008-02-13 12:43:03生肖徽章2007版:鼠
日期:2008-01-02 17:35:53授权会员
日期:2007-11-02 16:47:52ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
24#
发表于 2008-4-2 09:19 | 只看该作者
ls,如果current redo log有活动事务,并且突然crash,比如shutdown abort或者断电,总有可能要丢失数据的。


to:solearn
如果oracle正在运行,current redo log突然损坏了,oracle不会crash么?我感觉应该就直接当掉啊。

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
25#
发表于 2008-4-2 09:20 | 只看该作者
原帖由 solearn 于 2008-4-2 09:16 发表


既然是做了完全检查点,那么回滚块也是没有丢失。此时立即shutdown abort,启动后应该可以回滚的。当然能shutdown immediate成功最好。


你怎么做回滚呢

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
26#
发表于 2008-4-2 09:21 | 只看该作者
原帖由 likaiabc 于 2008-4-2 09:19 发表
ls,如果current redo log有活动事务,并且突然crash,比如shutdown abort或者断电,总有可能要丢失数据的。


to:solearn
如果oracle正在运行,current redo log突然损坏了,oracle不会crash么?我感觉应该就直接当掉啊。


这情况应该是和os的文件处理方式有关

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
27#
发表于 2008-4-2 09:27 | 只看该作者
原帖由 zergduan 于 2008-4-2 08:43 发表
shutdown immediate以后,丢失current redo log,我认为应该不会丢失数据
shutdown immediate会发生完全检查点,所有数据已经全部写入数据文件,不需要任何redo做恢复。所以不会丢数据~


估计楼主说的是online的时候,current log file突然坏了吧。

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
28#
发表于 2008-4-2 09:30 | 只看该作者
原帖由 棉花糖ONE 于 2008-4-2 09:20 发表


你怎么做回滚呢


回滚是不需要日志的,该怎么回滚就怎么回滚。做检查点的目的就是避免应用日志前滚啊。

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
29#
发表于 2008-4-2 09:34 | 只看该作者
原帖由 likaiabc 于 2008-4-2 09:19 发表
ls,如果current redo log有活动事务,并且突然crash,比如shutdown abort或者断电,总有可能要丢失数据的。


to:solearn
如果oracle正在运行,current redo log突然损坏了,oracle不会crash么?我感觉应该就直接当掉啊。


我想这个要靠人品了。 如果运气好,在你发现日志坏的时候,lgwr没有写日志,而你又来得及做完检查点,还是可以出现奇迹的。当然这个概率很低。

使用道具 举报

回复
论坛徽章:
23
生肖徽章:狗
日期:2006-09-07 10:14:43喜羊羊
日期:2015-03-13 17:41:592014年新春福章
日期:2014-04-10 09:43:05蛋疼蛋
日期:2012-05-23 22:26:07鲜花蛋
日期:2012-01-16 17:28:092012新春纪念徽章
日期:2012-01-04 11:51:22双黄蛋
日期:2011-12-21 09:05:53ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猴
日期:2008-11-21 15:08:48
30#
发表于 2008-4-2 10:14 | 只看该作者
原帖由 solearn 于 2008-4-2 08:12 发表
如果current log file发现坏了而数据库没有crash,那么做个checkpoint再shutdown是不是可以避免丢失数据呢?


checkpoint 能完成么?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表