闪回的用途与实战(闪回表,闪回删除,闪回重名删除,闪回版本查询)
閃回可以做的操作有如下幾種類型:
1、當(dāng)數(shù)據(jù)錯(cuò)誤刪除,并且提交時(shí)(flashback table)
2、當(dāng)錯(cuò)誤刪除了一張表drop table(flashback drop)
3、通過(guò)閃回獲取表的歷史記錄(flashback version query)
4、當(dāng)錯(cuò)誤地執(zhí)行了一個(gè)事務(wù),并且提交了(flashback transaction query)
5、將整個(gè)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)。
使用閃回條件:
1、切換到管理員上。
假設(shè)開(kāi)始登錄的用戶名和密碼是MISPS
如果是連接遠(yuǎn)程的,連接sqlplus的方式是:
sqlplus MISPS/MISPS@ip:1521/nmcdb.nmc.gov.cn as sysdba;(此時(shí)用戶名為MISPS,密碼為MISPS,nmcdb.nmc.gov.cn為servicename)。
?執(zhí)行下面的命令切換到管理員:
conn / as sysdba;
2、查詢undo表空間(undo是一個(gè)表空間,這個(gè)表空間對(duì)應(yīng)著很多物理上的存儲(chǔ)文件,這些文件中記錄了所有的操作日志,閃回就是通過(guò)undo這個(gè)表空間里的日志來(lái)做的)
查看表空里的參數(shù)
show parameters undo;
結(jié)果為:
注意:undo_retention這個(gè)參數(shù)表示的是閃回的時(shí)間限制,其后面的value表示900秒。表示超過(guò)2個(gè)G的數(shù)據(jù),在過(guò)了900秒之后不可以回復(fù)了。在900秒之內(nèi)可以恢復(fù)!
將900秒改成20分鐘的命令:?alter system set undo_retention=1200 scope=both;
scope的取值:1、memory(在當(dāng)前的會(huì)話中有效),2.spfile(在配置文件修改,不修改當(dāng)前會(huì)話),3.both(既修改當(dāng)前會(huì)話也修改配置文件)
3閃回表概念:
閃回表,實(shí)際上是將表中的數(shù)據(jù)快速恢復(fù)到過(guò)去的一個(gè)是焦點(diǎn)或者系統(tǒng)改變號(hào)SCN上。實(shí)際表的閃回,需要使用到與撤銷表空間相關(guān)的undo信息,通過(guò)
show parameter undo命令可以了解這些信息。
用戶對(duì)表數(shù)據(jù)的修改操作,都記錄在撤銷表空間中,這為表的閃回提供了數(shù)據(jù)恢復(fù)的基礎(chǔ)。例如,修改某個(gè)操作在提交后被記錄在撤銷表空間,保留時(shí)間
為900秒,用戶可以在這900秒的時(shí)間內(nèi)對(duì)表進(jìn)行閃回操作,從而將表中的數(shù)據(jù)恢復(fù)到修改之前的狀態(tài)。
執(zhí)行表的閃回,需要有flashback any table的權(quán)限。
4、授予MISPS用戶閃回表的權(quán)限
?grant flashback any table to MISPS;
這時(shí)候MISPS就可以執(zhí)行閃回表的相關(guān)操作了。
5、這時(shí)候回到MISPS用下:conn MISPS/MISPS
6、閃回表的語(yǔ)法:
FLASHBACK TABLE [schema.]<table_name>
TO?
{[BEFORE DROP [RENAME TO table]]?
[SCN|TIMESTAMP]expr
[ENABLE|DISABLE]TRIGGERS}
schema:模式名,一般為用戶名
TO TIMESTAMP:系統(tǒng)郵戳,包含年、月、日、時(shí)、分、秒。
TO SCN:系統(tǒng)改變好(system change number,對(duì)應(yīng)修改時(shí)的時(shí)間)
ENABLE TRIGGERS:表示觸發(fā)器恢復(fù)以后為enable狀態(tài),而默認(rèn)為disable狀態(tài)。
TO BEFORE DROP:表示恢復(fù)到刪除之前。
RENAME TO table:表示更換表名。
7、通過(guò)時(shí)間獲取SCN
select timestamp_to_scn(sysdate) from dual;
8、單獨(dú)創(chuàng)建一張表,來(lái)做實(shí)驗(yàn)
create table flashback_table
(fid number,
fname varchar(20))
插入3條數(shù)據(jù)insert into flashback_table values(1,'tom'):
查詢一下結(jié)果:
select * from flashback_table;
10、記錄當(dāng)前的SCN
select timestamp_to_scn(sysdate) from dual;
11、刪除一條數(shù)據(jù):delete from flashback_table where fid=2;
執(zhí)行:commit
12、現(xiàn)在的業(yè)務(wù)是fid=2的數(shù)據(jù)刪除錯(cuò)了,要把它改回來(lái),這時(shí)候使用的命令為,這時(shí)候就要執(zhí)行閃回操作。
給出一個(gè)錯(cuò)誤案例:flashback table flashback_table to scn 8029021
錯(cuò)誤原因:
select rowid,fid,fname from flashback_table;
注意:這里的rowid表示的是在硬盤上的位置。錯(cuò)誤原因的是Oracle將fid為1和3的數(shù)據(jù)進(jìn)行了優(yōu)化,現(xiàn)在給它的rowid變成連續(xù)的了,也就是說(shuō)在AAASP4AAHAAAAaFAAA和AAASP4AAHAAAAaFAAC之間沒(méi)有位置了:
默認(rèn)是不能夠移動(dòng)rowid的,所以出現(xiàn)了上面的錯(cuò)誤,所以下面進(jìn)行配置的修改:開(kāi)啟行移動(dòng)功能。
語(yǔ)句為:alter table flashback_table enable row movement;
再執(zhí)行閃回操作:flashback table flashback_table to scn 8029021
select rowid,fid,fname from flashback_table;
這時(shí)發(fā)現(xiàn)刪除的數(shù)據(jù)再次恢復(fù)了。
注意:
1、需要flashback any table的權(quán)限
2、開(kāi)啟行移動(dòng)功能
3、如何獲取回退的scn/時(shí)間?
4、系統(tǒng)表不能被閃回(管理員的表不能被閃回)
5、數(shù)字字典不能被閃回。不能跨越DDL操作。
----------------------------------------------------------------------------------------------------------------------------------
二、閃回刪除(drop)
實(shí)際上從系統(tǒng)的回收站中的將已刪除的對(duì)象,回復(fù)到刪除之前的狀態(tài)。
系統(tǒng)的回收站只對(duì)普通用有用。
---關(guān)于Oracle系統(tǒng)回收站。(講解一個(gè)案例)
1、刪除一個(gè)表
首先查詢當(dāng)前用戶下有哪些表
select * from tab;
刪除表:
查看系統(tǒng)回收站
?show recyclebin;
這時(shí)候發(fā)現(xiàn)了drop掉的表在recyclebin中發(fā)現(xiàn)了。
查看當(dāng)前是哪個(gè)用戶:show user;
因?yàn)橛脩鬗ISPS為普通用戶所以才有回收站,如果是管理員,就沒(méi)有回收站:
徹底刪除一張表的方式是:drop table T_USER_L purge;purge參數(shù)表示徹底刪除。
清空回收站的方式:purge recyclebin;
執(zhí)行閃回刪除,?flashback table T_USERS_L to before drop;
select * from tab;
發(fā)現(xiàn)表恢復(fù)了。
?
方式二:通過(guò)回收站中的名字閃回刪除。
1、刪除表:?drop table T_USERS_L;
2、查看回收站的名字:show recyclebin;
通過(guò)回收站的名字返回:?flashback table "BIN$hIr1xeS0RY2sls0cyMHE3g==$0"to before drop;
?
--閃回重名的對(duì)象
執(zhí)行閃回刪除,這時(shí)候恢復(fù)的是最后刪除的那個(gè)次表
flashback table test to before drop;
如果在此執(zhí)行閃回表,這時(shí)候?qū)⒊霈F(xiàn)錯(cuò)誤,這時(shí)候要對(duì)刪除的表進(jìn)行重命名:
查看返回的表:select * from tab;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
閃回版本查詢(側(cè)重點(diǎn)查詢)
《未完待續(xù)》
?
?
總結(jié)
以上是生活随笔為你收集整理的闪回的用途与实战(闪回表,闪回删除,闪回重名删除,闪回版本查询)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 法国第5共和国宪法所确立的一种中央政府体
- 下一篇: 部队退伍回来医疗保险怎么续