柚子快報(bào)激活碼778899分享:Oracle—數(shù)據(jù)恢復(fù)
柚子快報(bào)激活碼778899分享:Oracle—數(shù)據(jù)恢復(fù)
??1、recyclebin(回收站)
? ? ?從ORACLE 10g開(kāi)始,引入了一個(gè)叫回收站(RecycleBin)的概念,全稱(chēng)為T(mén)ablespace Recycle Bin。回收站實(shí)際是一個(gè)邏輯區(qū)域,它以表空間中現(xiàn)有已經(jīng)分配的空間為基礎(chǔ),而不是從表空間上物理劃出一個(gè)固定區(qū)域用作回收站。這意味著回收站和表空間中的對(duì)象共用存儲(chǔ)區(qū)域、系統(tǒng)沒(méi)有給回收站預(yù)留空間。
? ? ? ?當(dāng)表被DROP后,如果可用空間充足,并且沒(méi)有對(duì)回收站進(jìn)行清理,那么被DROP掉的對(duì)象會(huì)一直存在回收站中,仍然會(huì)占用空間。但是如果可用空間緊張的情況下,數(shù)據(jù)庫(kù)會(huì)根據(jù)先進(jìn)先出的順序覆蓋Recycle Bin中的對(duì)象。所以回收站機(jī)制也不是百分百的保險(xiǎn)機(jī)制。另外從原理上來(lái)說(shuō)它就是一個(gè)數(shù)據(jù)字典表,放置用戶Drop掉的數(shù)據(jù)庫(kù)對(duì)象信息。
1.1、查詢(xún)回收站是否開(kāi)啟:
方法一:show parameter recyclebin
show parameter recyclebin;
?方法二:sql語(yǔ)句查詢(xún)
select t.NAME, t.VALUE, t.DISPLAY_VALUE
from v$parameter t
where t.NAME = 'recyclebin';
運(yùn)行結(jié)果:
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE ? ? ? ?VALUE ------------------------------------ ----------- ------------------------------ recyclebin ? ? ? ? ? ? ? ? ? ? ? ? ? string ? ? ?on ——————————————————————————
1.2、開(kāi)啟|關(guān)閉回收站:
回收站的開(kāi)啟和關(guān)閉可以按照時(shí)效分為會(huì)話級(jí)別和系統(tǒng)級(jí)別;
1.2.1、會(huì)話級(jí)別(session)
alter session set recyclebin=on/off;
1.2.2、系統(tǒng)級(jí)別(System)
alter system set recyclebin=on/off;
1.2.3、對(duì)象查找
select owner,
object_name,
original_name,
operation,
type,
ts_name,
createtime,
droptime,
dropscn,
partition_name,
can_undrop,
can_purge,
related,
base_object,
purge_object,
space
from DBA_RECYCLEBIN t
where t.owner = '&username'
order by t.createtime desc;
1.3、示例
1、創(chuàng)建測(cè)試數(shù)據(jù)
-- 創(chuàng)建測(cè)試表
create table A
(
id VARCHAR2(20),
name VARCHAR2(20),
address VARCHAR2(20)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- 插入數(shù)據(jù)
insert into A (ID, NAME, ADDRESS)
values ('1', '1', '1');
insert into A (ID, NAME, ADDRESS)
values ('2', '2', '2');
commit;
2、刪除表
drop table A;
3、查詢(xún)回收站
select * from user_recyclebin;
執(zhí)行結(jié)果:
恢復(fù)表:
flashback table A to before drop;
1.4、總結(jié):
oracle提供以上機(jī)制保證了安全操作,但同時(shí)也代來(lái)了另外一個(gè)問(wèn)題,就是空間占用,由于以上機(jī)制的運(yùn)行,使用drop一個(gè)表或者delete數(shù)據(jù)后,空間不會(huì)自動(dòng)回收,對(duì)于一些確定不使用的表,刪除時(shí)要同時(shí)回收空間,可以有以下2種方式:
1、采用truncate方式進(jìn)行截?cái)?。(但不能進(jìn)行數(shù)據(jù)回恢復(fù)了)
2、在drop時(shí)加上purge選項(xiàng):
drop table 表名 purge
該選項(xiàng)還有以下用途: 刪除當(dāng)前用戶的回收站:
purge recyclebin;
刪除全體用戶在回收站的數(shù)據(jù): ?
purge dba_recyclebin;
2、undo恢復(fù)(閃回)
2.1、通過(guò)閃回查詢(xún)確定刪除前的記錄:
select * from 表名 as of timestamp to_timestamp('2023-07-26 17:00:50','yyyy-mm-dd hh24:mi:ss')
2.2、閃回操作:
flashback table 表名 to timestamp to_timestamp('2023-07-26 17:00:50','yyyy-mm-dd hh24:mi:ss');
2.2.3、示例
通過(guò)時(shí)間恢復(fù)刪除且已提交的數(shù)據(jù) ? 1)查詢(xún)當(dāng)前系統(tǒng)時(shí)間
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2)查詢(xún)刪除數(shù)據(jù)的時(shí)間點(diǎn)之前的數(shù)據(jù)
-- 如果不是,則繼續(xù)縮小范圍
select * from 表名 as of timestamp to_timestamp('2024-02-02 15:00:00','yyyy-mm-dd hh24:mi:ss');
3)恢復(fù)刪除且已提交的數(shù)據(jù)
--恢復(fù)某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)
flashback table 表名 to timestamp to_timestamp('2024-02-02 15:00:00','yyyy-mm-dd hh24:mi:ss');
-- 如果報(bào)錯(cuò) 則開(kāi)啟移動(dòng)功能,然后再執(zhí)行上述sql,最后關(guān)閉移動(dòng)功能
--開(kāi)啟行移動(dòng)功能
alter table 表名 enable row movement;
?
--關(guān)閉行移動(dòng)功能
alter table 表名 disable row movement;
柚子快報(bào)激活碼778899分享:Oracle—數(shù)據(jù)恢復(fù)
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。