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ì)您有幫助就好】元

