oracle 基於使用者管理的不完全恢復

邱東陽發表於2014-06-03

轉:

http://blog.csdn.net/leshami/article/details/7909887

 

 Oracle 資料恢復從恢復型別來說,拋開具體的檔案,總共可分為兩大型別的恢復,一是完全恢復,一個是不完全恢復。其實,熟悉了Oracle
體系結構之後,對於Oracle恢復就會有一個總體的概念。因為Oracle組成的外圍部分,主要由不同的檔案來組成,每種不同型別的檔案有不同的
作用,因此只要瞭解了其作用,更利於瞭解與掌握Oralce資料庫的備份與恢復。言歸正傳,完全恢復即是把資料庫恢復到最新的SCN,出故障前
的那一刻,是無損恢復。而不完全恢復即是有損恢復,多用於恢復使用者誤操作,歸檔日誌丟失等情形。本文主要描述基於使用者管理的不完全恢復。

 

一、不完全恢復特性

1、不完全恢復

      不完全恢復僅僅是將資料恢復到某一個特定的時間點或特定的SCN,而不是當前時間點。不完全恢復會影響整個資料庫,需要在MOUNT
  
態下進行。在不完全恢復成功之後,通常需要使用 resetlogs 選項來開啟資料庫。當使用resetlogs後,SCN 計數器不會被重置,原來的日
  
志序號 log sequence 會結束,從新開始新的日誌序列號。在Oracle裡稱之為產生一個新的incarnation。同時Oracle還會重置聯機重做日
  
志內容,因此resetlogs之後建議重新全備資料庫。
        
2、不完全恢復的情形

      介質故障(media failure)導致部分或全部聯機重做日誌(online redo log)損壞
     
使用者操作失誤(user error)導致資料丟失,例如,使用者由於疏忽而移除了表,提交了無效的資料到表
     
由於歸檔重做日誌(archived redo log)丟失而無法進行完全恢復(complete recovery) 
     
當前控制檔案(control file)丟失,必須使用備份的控制檔案開啟(open)資料庫

3、不完全恢復的步驟

      關閉資料庫並備份資料庫(以防止恢復失敗)
     
啟動資料庫到mount 狀態
     
還原所有資料檔案,同時可以選擇還原控制檔案(注意需要還原所有資料檔案,而不僅僅是受損檔案)
     
將資料庫恢復至某個時間點、序列、或系統改變號
     
使用RESETLOGS關鍵字開啟資料庫

4、注意

      不完全恢復的前提條件是Oracl資料庫夠到mount狀態,即引數檔案,控制檔案存在並且可用
     
在做不完全恢復前建議在恢復前後做一次備份,避免恢復失敗導致不必要的損失
      
不完全恢復完成後,需要使用OPEN RESETLOGS 方式開啟(open)資料庫,併產生一個新的incarnation
     
檢查資料庫是否恢復到正確的時間點,也就是能否找到所需的資料,如果恢復的時間點有誤,需要重置資料庫incarnation進行再次恢復

      本文中的示例為便於演示,沒有在恢復前備份故障資料,也沒有在resetlog之後進行備份
     
:Oracle 10g中已經可以在 resetlogs 之後不備份資料庫,恢復的時候能夠穿越resetlogs

5、不完全介質恢復的幾種型別

      基於時間的恢復(Time-based recovery) 將資料恢復到指定的時間點
     
使用者控制的恢復(Cancel-based recovery) 當使用者提交CANCEL後停止恢復(此選項在使用RMAN時無效)
     
基於SCN 的恢復(Change-based recovery) 將資料恢復到指定的SCN
     
按重做日誌序號恢復(Log sequence recovery)將資料恢復到指定的重做日誌序號(僅使用RMAN時有效)

 

二、演示基於使用者管理的不完全恢復

[sql] view plaincopyprint?

1.  --1、until time 恢復(恢復到指定時間點)  

2.    

3.  sys@SYBO2SZ> conn / as sysdba  

4.  Connected.  

5.  sys@SYBO2SZ> archive log list;  --&gt當前資料庫處於歸檔模式  

6.  Database log mode              Archive Mode  

7.  Automatic archival             Enabled  

8.  Archive destination            /u02/database/SYBO2SZ/archive/  

9.  Oldest online log sequence     0  

10. Next log sequence to archive   1  

11. Current log sequence           1  

12.   

13. sys@SYBO2SZ> @db_hot_bak       --&gt對資料庫進行熱備份  

14. ho cp /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak  

15. ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak  

16. ho cp /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak  

17. ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf /u02/database/SYBO2SZ/backup/hotbak  

18. ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_system_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak  

19. ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak  

20. ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak  

21. ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_l_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak  

22.   

23. sys@SYBO2SZ> set time on;  

24. 12:40:07 sys@SYBO2SZ> create table dept as select * from scott.dept;  

25.   

26. 12:40:31 sys@SYBO2SZ> create table emp as select * from scott.emp;  

27.   

28. 12:40:41 sys@SYBO2SZ>     

29. 12:40:55 sys@SYBO2SZ> truncate table emp;    --&gt對錶emp進行truncate  

30.   

31. Table truncated.  

32.   

33. 12:41:02 sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual;  --&gt為表dept新增兩條記錄並提交  

34.   

35. 12:41:14 sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;  

36.   

37. 12:41:19 sys@SYBO2SZ> commit;  

38.   

39. Commit complete.  

40.   

41. 12:41:22 sys@SYBO2SZ> alter system checkpoint;   --&gt執行檢查點程式以寫入日誌  

42.   

43. System altered.  

44.   

45. 12:41:31 sys@SYBO2SZ> shutdown immediate;        --&gt關閉資料庫  

46.   

47. 12:42:25 sys@SYBO2SZ> startup mount;             --&gt啟動資料庫到mount狀態   

48. ORACLE instance started.  

49.   

50. Total System Global Area  599785472 bytes  

51. Fixed Size                  2074568 bytes  

52. Variable Size             213911608 bytes  

53. Database Buffers          377487360 bytes  

54. Redo Buffers                6311936 bytes  

55. Database mounted.                          --&gt下面將備份的資料進行還原,由於並非所有資料檔案位於相同路徑,因此進行多次cp      

56. 12:42:36 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.  

57.   

58. 12:42:57 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.  

59.   

60. 12:43:24 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.  

61.   

62. 12:43:50 sys@SYBO2SZ> recover database until time '2012-08-22:12:40:55';   --&gt使用 until time 恢復到指定時間點  

63. Media recovery complete.  

64. 12:44:07 sys@SYBO2SZ> alter database open resetlogs;                       --&gt介質分恢復成功之後,resetlog方式開啟資料庫   

65.   

66. Database altered.  

67.   

68. 12:44:20 sys@SYBO2SZ> select count(*) from emp;                            --&gtemp表被成功恢復      

69.   

70.   COUNT(*)  

71. ----------  

72.         14  

73.   

74. 12:44:28 sys@SYBO2SZ> select * from dept;                                  --&gt由於恢復時間點在插入新記錄之前,因此新記錄丟失  

75.   

76.     DEPTNO DNAME          LOC  

77. ---------- -------------- -------------  

78.         10 ACCOUNTING     NEW YORK  

79.         20 RESEARCH       DALLAS  

80.         30 SALES          CHICAGO  

81.         40 OPERATIONS     BOSTON  

82.   

83. 4 rows selected.  

84.   

85. --2、unitl scn 恢復(基於系統改變號的恢復)  

86.   

87. sys@SYBO2SZ> @db_hot_bak              --&gt熱備資料庫  

88.   

89. sys@SYBO2SZ> select * from dept;  

90.   

91.     DEPTNO DNAME          LOC  

92. ---------- -------------- -------------  

93.         10 ACCOUNTING     NEW YORK  

94.         20 RESEARCH       DALLAS  

95.         30 SALES          CHICAGO  

96.         40 OPERATIONS     BOSTON  

97.   

98. 4 rows selected.  

99.   

100. sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual;   --&gt為表dept新增記錄  

101.   

102. 1 row created.  

103.   

104. sys@SYBO2SZ> commit;  

105.   

106. Commit complete.  

107.   

108. sys@SYBO2SZ> select current_scn from v$database;   --&gt檢視當前SCN以便後續恢復使用  

109.   

110. CURRENT_SCN  

111. -----------  

112.      471613  

113.   

114. sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;   --&gt再次為表dept新增記錄,以便檢視恢復後是否丟失  

115.   

116. sys@SYBO2SZ> commit;  

117.   

118. Commit complete.  

119.   

120. sys@SYBO2SZ> delete from emp where deptno=10;      --&gt刪除表emp上deptno=10的記錄  

121.   

122. 3 rows deleted.  

123.   

124. sys@SYBO2SZ> commit;  

125.   

126. Commit complete.  

127.   

128. sys@SYBO2SZ> alter system checkpoint;             --&gt執行檢查點程式  

129.   

130. System altered.  

131.   

132. sys@SYBO2SZ> shutdown immediate;  

133.   

134. sys@SYBO2SZ> startup mount;  

135. ORACLE instance started.  

136.   

137. Total System Global Area  599785472 bytes  

138. Fixed Size                  2074568 bytes  

139. Variable Size             218105912 bytes  

140. Database Buffers          373293056 bytes  

141. Redo Buffers                6311936 bytes  

142. Database mounted.  

143.   

144. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.   --&gt還原資料庫  

145.   

146. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.  

147.   

148. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.  

149.   

150. sys@SYBO2SZ> recover database until change 471613     --&gt基於 SCN 恢復資料庫  

151. Media recovery complete.  

152. sys@SYBO2SZ> alter database open resetlogs;           --&gt使用resetlog方式開啟資料庫  

153.   

154. Database altered.  

155.   

156. sys@SYBO2SZ> select * from dept;                      --&gtSCN之後的操作丟失  

157.   

158.     DEPTNO DNAME          LOC  

159. ---------- -------------- -------------  

160.         10 ACCOUNTING     NEW YORK  

161.         20 RESEARCH       DALLAS  

162.         30 SALES          CHICAGO  

163.         40 OPERATIONS     BOSTON  

164.         50 DEV            SZ  

165.   

166. 5 rows selected.  

167.   

168. --3、until cancel 恢復(基於放棄的恢復)  

169.   

170. --&gt Author: Robinson Cheng --&gt Blog: http://blog.csdn.net/robinson_0612   

171. sys@SYBO2SZ> @db_hot_bak           --&gt熱備資料庫  

172. sys@SYBO2SZ> select * from dept;  

173.   

174.     DEPTNO DNAME          LOC  

175. ---------- -------------- -------------  

176.         10 ACCOUNTING     NEW YORK  

177.         20 RESEARCH       DALLAS  

178.         30 SALES          CHICAGO  

179.         40 OPERATIONS     BOSTON  

180.         50 DEV            SZ  

181.   

182. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive    --&gt當前已經存在的歸檔日誌  

183. total 348K  

184. -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc  

185. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc  

186. -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc  

187.   

188. sys@SYBO2SZ> alter system switch logfile;                --&gt切換日誌  

189.   

190. System altered.  

191.   

192. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive   --&gt可以看到新增了arch_792003491_1_4.arc  

193. total 416K  

194. -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc  

195. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc  

196. -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc  

197. -rw-r----- 1 oracle oinstall  66K 2012-08-22 17:04 arch_792003491_1_4.arc  

198.   

199. sys@SYBO2SZ> insert into dept select 60,'HR','SHANGHAI' from dual;  

200.   

201. sys@SYBO2SZ> insert into dept select 70,'INFRA','HONGKONG' from dual;  

202.   

203. sys@SYBO2SZ> commit;  

204.   

205. Commit complete.  

206.   

207. sys@SYBO2SZ> alter system checkpoint;    --&gt切換日誌  

208.   

209. System altered.  

210.   

211. sys@SYBO2SZ> alter system archive log current;  

212.   

213. System altered.  

214.   

215. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  

216. total 420K  

217. -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc  

218. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc  

219. -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc  

220. -rw-r----- 1 oracle oinstall  66K 2012-08-22 17:04 arch_792003491_1_4.arc  

221. -rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc  

222.   

223. sys@SYBO2SZ> insert into dept select 80,'MARKET','BEIJING' from dual;  

224.   

225. sys@SYBO2SZ> commit;  

226.   

227. Commit complete.  

228.   

229. sys@SYBO2SZ> alter system archive log current;  

230.   

231. System altered.  

232.   

233. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive   --&gt系統又新增了幾個歸檔日誌  

234. total 424K  

235. -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc  

236. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc  

237. -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc  

238. -rw-r----- 1 oracle oinstall  66K 2012-08-22 17:04 arch_792003491_1_4.arc  

239. -rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc  

240. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc  

241.   

242. sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc | grep HONGKONG  --&gt新記錄已存在於歸檔日誌  

243. HONGKONG  

244.   

245. sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc | grep BEIJING  

246. BEIJING  

247.   

248. sys@SYBO2SZ> ho rm /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc     --&gt模擬部分歸檔日誌丟失  

249.   

250. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  

251. total 420K  

252. -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc  

253. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc  

254. -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc  

255. -rw-r----- 1 oracle oinstall  66K 2012-08-22 17:04 arch_792003491_1_4.arc  

256. -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc  

257.   

258. sys@SYBO2SZ> shutdown immediate;  

259.   

260. sys@SYBO2SZ> startup mount;  

261. ORACLE instance started.  

262.   

263. Total System Global Area  599785472 bytes  

264. Fixed Size                  2074568 bytes  

265. Variable Size             243271736 bytes  

266. Database Buffers          348127232 bytes  

267. Redo Buffers                6311936 bytes  

268. Database mounted.  

269. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.  --&gt還原資料庫  

270.   

271. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.  

272.   

273. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.  

274.   

275. sys@SYBO2SZ> recover database until cancel;     --&gt 基於 cancel 恢復資料庫  

276. ORA-00279: change 494124 generated at 08/22/2012 17:02:30 needed for thread 1  

277. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc  

278. ORA-00280: change 494124 for thread 1 is in sequence #4  

279.   

280. Specify log: {=suggested | filename | AUTO | CANCEL}  

281. /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc     --&gt恢復到尾數為4的歸檔日誌  

282. ORA-00279: change 494189 generated at 08/22/2012 17:04:46 needed for thread 1  

283. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc  

284. ORA-00280: change 494189 for thread 1 is in sequence #5  

285. ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc' no longer needed for this recovery  

286.   

287. Specify log: {=suggested | filename | AUTO | CANCEL}  

288. cancel                                                 --&gt第5個日誌檔案丟失,輸入cancel  

289. Media recovery cancelled.  

290. sys@SYBO2SZ> alter database open resetlogs;            --&gt resetlogs 方式開啟資料庫  

291.   

292. Database altered.  

293.   

294. sys@SYBO2SZ> select * from dept;                      --&gt由於歸檔日誌5丟失,因此後續所有操作的資料丟失  

295.   

296.     DEPTNO DNAME          LOC  

297. ---------- -------------- -------------  

298.         10 ACCOUNTING     NEW YORK  

299.         20 RESEARCH       DALLAS  

300.         30 SALES          CHICAGO  

301.         40 OPERATIONS     BOSTON  

302.         50 DEV            SZ  

303.   

304. 5 rows selected.

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29532781/viewspace-1174710/,如需轉載,請註明出處,否則將追究法律責任。

相關文章