1 方便起見(jiàn)一般:執(zhí)行如下即可不用往下看: 2 3 4 ① 啟用行移動(dòng)功能 5 6 alter table tbl_a enable row movement; 7 8 ② 閃回表數(shù)據(jù)到某個(gè)時(shí)間點(diǎn) 9 10 flashback table tbl_a to timestamp to_timestamp( ' 2013-07-19 15:10:00 ' , ' yyyy-mm-dd hh24:mi:ss ' ); 11 12 詳解: 13 14 15 利用ORACLE的閃回功能恢復(fù)數(shù)據(jù) 16 17 一、 閃回表數(shù)據(jù) 18 19 20 從9i開(kāi)始,Oracle提供了閃回(FLASHBACK)功能。使用FLASHBACK TABLE語(yǔ)句從撤消段中(undo segment)讀取該表的過(guò)去映像,并利用Oracle9i中引入的回閃查詢重建表行。UNDO_RETENTION給出了閃回支持的最小時(shí)間。也就是說(shuō),F(xiàn)LASHBACK最少可以支持UNDO_RETENTION給出的時(shí)間,如果系統(tǒng)比較閑,則可以閃回更長(zhǎng)的時(shí)間。(當(dāng)然,如果回滾表空間的空間分配不足,當(dāng)系統(tǒng)處于忙時(shí),有可能重用還沒(méi)有達(dá)到UNDO_RETENTION時(shí)間限制的數(shù)據(jù)的空間)。使用閃回的一個(gè)前提是表不能進(jìn)行DDL操作。不但不能對(duì)DDL操作進(jìn)行回閃,而且,也無(wú)法閃回到DDL操作以前的數(shù)據(jù)了。 21 22 23 SQL > select * from v$version; 24 25 26 BANNER 27 28 -- -------------------------------------------------------------- 29 30 31 Oracle Database 10g Enterprise Edition Release 10.2 . 0.1 . 0 - Prod 32 33 34 PL / SQL Release 10.2 . 0.1 . 0 - Production 35 36 37 CORE 10.2 . 0.1 . 0 Production 38 39 40 TNS for 32 - bit Windows: Version 10.2 . 0.1 . 0 - Production 41 42 43 NLSRTL Version 10.2 . 0.1 . 0 – Production 44 45 46 -- 獲得系統(tǒng)變更號(hào) 47 48 49 C:\Documents and Settings\linyuefeng > sqlplus / nolog 50 51 52 SQL * Plus: Release 10.2 . 0.1 . 0 - Production on 星期四 10月 26 20 : 41 : 28 2006 53 54 55 Copyright (c) 1982 , 2005 , Oracle. All rights reserved. 56 57 58 SQL > conn scott / scott @ora10g ; 59 60 61 已連接。 62 63 64 SQL > var scn number 65 66 67 SQL > exec :scn : = dbms_flashback.get_system_change_number 68 69 70 PL / SQL 過(guò)程已成功完成。 71 72 73 SQL > print scn 74 75 76 SCN 77 78 79 -- -------- 80 81 82 914958 83 84 85 SQL > select count ( * ) from emp; 86 87 88 COUNT ( * ) 89 90 91 -- -------- 92 93 94 14 95 96 97 SQL > delete from emp; 98 99 100 已刪除14行。 101 102 103 SQL > select count ( * ) from emp; 104 105 106 COUNT ( * ) 107 108 109 -- -------- 110 111 112 0 113 114 115 SQL > commit ; 116 117 118 提交完成。 119 120 121 SQL > select count ( * ) from emp as of scn :scn; 122 123 124 COUNT ( * ) 125 126 127 -- -------- 128 129 130 14 131 132 133 SQL > flashback table emp to scn :scn; 134 135 136 flashback table emp to scn :scn 137 138 139 * 140 141 142 第 1 行出現(xiàn)錯(cuò)誤: 143 144 145 ORA - 08189 : 因?yàn)槲磫⒂眯幸苿?dòng)功能, 不能閃回表 146 147 148 SQL > alter table emp enable row movement; 149 150 151 表已更改。 152 153 154 這個(gè)命令的作用就是允許ORACLE修改分配給行的rowid。在ORACLE中,插入一行時(shí)就會(huì)為它分配一個(gè)rowid,而且這一行永遠(yuǎn)擁有這個(gè)rowid。閃回表處理時(shí)會(huì)對(duì)EMP表完成DELETE 操作,并且重新插入行,這樣就會(huì)為這些行分配一個(gè)新的rowid。要支持閃回功能就必須允許ORACLE執(zhí)行這個(gè)操作。 155 156 157 SQL > flashback table emp to scn :scn; 158 159 160 閃回完成。 161 162 163 SQL > select count ( * ) from emp; 164 165 166 COUNT ( * ) 167 168 169 -- -------- 170 171 172 14 173 174 175 -- -也可以通過(guò)時(shí)間進(jìn)行閃回 176 177 178 SQL > select to_char(sysdate, ' yyyy-mm-dd hh24:mi:ss ' ) TIME from dual; 179 180 181 TIME 182 183 184 -- ----------------- 185 186 187 2006 - 10 - 26 20 : 55 : 48 188 189 190 SQL > select count ( * ) from emp; 191 192 193 COUNT ( * ) 194 195 196 -- -------- 197 198 199 14 200 201 202 SQL > delete from emp; 203 204 205 已刪除14行。 206 207 208 SQL > commit ; 209 210 211 提交完成。 212 213 214 SQL > flashback table emp to timestamp to_date( ' 2006-10-26 20:55:48 ' , ' yyyy-mm-dd 215 216 217 hh24:mi:ss ' ); 218 219 220 閃回完成。 221 222 223 SQL > select count ( * ) from emp; 224 225 226 COUNT ( * ) 227 228 229 -- -------- 230 231 232 14 233 234 235 二、 閃回刪除的表 236 237 238 flashback drop特性從Oracle10g開(kāi)始才有的,這個(gè)新特性,允許你從當(dāng)前數(shù)據(jù)庫(kù)中恢復(fù)一個(gè)被drop了的對(duì)象。在執(zhí)行drop操作時(shí),現(xiàn)在Oracle不是真正刪除它,而是將該對(duì)象自動(dòng)將放入回收站(一個(gè)虛擬的容器,用于存放所有被刪除的對(duì)象)。對(duì)于一個(gè)對(duì)象的刪除,ORACLE的操作僅僅就是簡(jiǎn)單的重令名而已。 239 240 241 在回收站中,被刪除的對(duì)象將占用創(chuàng)建時(shí)的同樣的空間,可以利用flashback功能來(lái)恢復(fù)它, 這個(gè)就是flashback drop功能。 242 243 244 SQL > create table emp_test as select * from emp; 245 246 247 Table created 248 249 250 SQL > drop table emp_test; 251 252 253 Table dropped 254 255 256 當(dāng)一個(gè)表被刪除并移動(dòng)到"回收站"中,它的名字要進(jìn)行一些轉(zhuǎn)換。這樣的目的顯而易見(jiàn)是為了避免同類對(duì)象名稱的重復(fù)。 257 258 259 SQL > select owner, object_name ,original_name,DROPTIME from dba_recyclebin order by droptime; 260 261 262 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 263 264 265 -- ---------------------------- ------------------------------ 266 267 268 SCOTT BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 EMP_TEST 2006 - 10 - 26 : 22 : 23 : 06 269 270 271 SQL > create table emp_test as select * from emp; 272 273 274 Table created 275 276 277 SQL > drop table emp_test; 278 279 280 Table dropped 281 282 283 SQL > select owner, object_name ,original_name, DROPTIME from dba_recyclebin order by droptime; 284 285 286 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 287 288 289 -- ---------------------------- ------------------------------ 290 291 292 SCOTT BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 EMP_TEST 2006 - 10 - 26 : 22 : 23 : 06 293 294 295 SCOTT BIN$roQhkx6tQneThvaRlsjrhw == $ 0 EMP_TEST 2006 - 10 - 26 : 22 : 23 : 50 296 297 298 -- 使用flashback table 進(jìn)行恢復(fù),默認(rèn)恢復(fù)最近刪除的表 299 300 301 SQL > flashback table emp_test to before drop ; 302 303 304 Done 305 306 307 SQL > select owner, object_name ,original_name,DROPTIME from dba_recyclebin order by droptime; 308 309 310 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 311 312 313 -- ---------------------------- ------------------------------ 314 315 316 SCOTT BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 EMP_TEST 2006 - 10 - 26 : 22 : 23 : 06 317 318 319 -- 也可以指定表名進(jìn)行恢復(fù) 320 321 322 SQL > flashback table "BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 " to before drop ; 323 324 325 flashback table "BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 " to before drop 326 327 328 ORA - 38312 : 原始名稱已被現(xiàn)有對(duì)象使用 329 330 331 此時(shí)被恢復(fù)的表名稱仍然采用以前的名字,我們之前已經(jīng)恢復(fù)一次EMP_TEST,所以現(xiàn)在恢復(fù)就出現(xiàn)了重名,不過(guò)可以為其指定新的名字。 332 333 334 SQL > flashback table "BIN$rtpdTNe6SIysmO + ZB0t3aQ == $ 0 " to before drop rename to emp_test2; 335 336 337 Done 338 339 340 SQL > select table_name from user_tables where table_name like ' %EMP_TEST% ' ; 341 342 343 TABLE_NAME 344 345 346 -- ---------------------------- 347 348 349 EMP_TEST 350 351 352 EMP_TEST2 353 354 355 -- 刪除回收站里的對(duì)象,不能使用DROP命令進(jìn)行刪除,必須使用PURGE命令 356 357 358 SQL > drop table emp_test; 359 360 361 Table dropped 362 363 364 SQL > drop table emp_test2; 365 366 367 Table dropped 368 369 370 SQL > select owner, object_name ,original_name,DROPTIME from dba_recyclebin order by droptime; 371 372 373 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 374 375 376 -- ---------------------------- ------------------------------ 377 378 379 SCOTT BIN$M4Q0Pb94SOWSFGarOpI5Og == $ 0 EMP_TEST 2006 - 10 - 26 : 22 : 46 : 07 380 381 382 SCOTT BIN$7P + osQdjSs + 5CcSXBc0NAA == $ 0 EMP_TEST2 2006 - 10 - 26 : 22 : 46 : 10 383 384 385 SQL > drop table "BIN$M4Q0Pb94SOWSFGarOpI5Og == $ 0 "; 386 387 388 drop table "BIN$M4Q0Pb94SOWSFGarOpI5Og == $ 0 " 389 390 391 ORA - 38301 : 無(wú)法對(duì)回收站中的對(duì)象執(zhí)行 DDL / DML 392 393 394 395 SQL > purge table "BIN$M4Q0Pb94SOWSFGarOpI5Og == $ 0 "; 396 397 398 Done 399 400 SQL > select owner, object_name ,original_name,DROPTIME from dba_recyclebin order by droptime; 401 402 403 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 404 405 406 -- ---------------------------- ------------------------------ 407 408 409 SCOTT BIN$7P + osQdjSs + 5CcSXBc0NAA == $ 0 EMP_TEST2 2006 - 10 - 26 : 22 : 46 : 10 410 411 412 -- 刪除整個(gè)回收站里的對(duì)象 413 414 415 SQL > purge recyclebin; 416 417 418 Done 419 420 421 SQL > select owner, object_name ,original_name,DROPTIME from dba_recyclebin order by droptime; 422 423 424 OWNER OBJECT_NAME ORIGINAL_NAME DROPTIME 425 426 427 -- ---------------------------- ------------------------------ 428 429 430 未選定行
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
