溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

oracle 回收站recyclebin

發(fā)布時(shí)間:2020-08-17 11:00:35 來(lái)源:ITPUB博客 閱讀:185 作者:595117995 欄目:關(guān)系型數(shù)據(jù)庫(kù)
 oracle 回收站recyclebin是10g才有的新特性,當(dāng)我們drop table cube_scope 【purge】時(shí),如果不指定purge時(shí),系統(tǒng)只是將這個(gè)表重命名為BIN$開(kāi)頭的名稱(chēng),并在數(shù)據(jù)字典中修改了相關(guān)數(shù)據(jù),表所占用的物理空間并沒(méi)有真正的回收,此時(shí)所占用的空間還是原來(lái)的表空間,當(dāng)表空間不夠用時(shí),ORACLE會(huì)跟據(jù)DROPSCN#自動(dòng)進(jìn)行逐個(gè)清理回收站中對(duì)像所占用的空間,10g默認(rèn)是打開(kāi)回收站功能的。
一、如何查看是否開(kāi)啟回收站功能?
SQL> show parameter recyclebin
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     recyclebin                           string      on
     on:表示表空間啟用的回收站功能,建議所有數(shù)據(jù)都開(kāi)啟這個(gè)功能,百利而無(wú)一害!
     備注:該參數(shù)可以設(shè)置成session級(jí)別打開(kāi),也可以設(shè)置成system級(jí)別,不用重啟就可以生效
二、如何不經(jīng)過(guò)回收站直接刪除并釋放所占用空間?
SQL> drop table cube_scope purge
     備注:此命令相當(dāng)于truncate+drop操作,一般不建議這么操作!
三、如何將回收站recyclebin中的對(duì)像還原?
SQL> flashback table cube_scope to before drop
     表名可以是回收站系統(tǒng)的dba_recyclebin.object_name也可以是dba_recyclebin.original_name
     但是此時(shí)問(wèn)題來(lái)了,我已經(jīng)用備份的DDL語(yǔ)句重建了一個(gè)新的表,這個(gè)時(shí)候再用此命令還原顯然會(huì)報(bào)錯(cuò),這個(gè)時(shí)候怎么辦呢,只能還原成一個(gè)別名,具體操作命令是
SQL> flashback table cube_scope to before drop rename to cube_scope_old
     既然恢復(fù)了刪除前的表中數(shù)據(jù),現(xiàn)在只能從cube_scope_old中的數(shù)據(jù)插入cube_scope中
SQL> insert into cube_scope select * from cube_scope_old t
     成功恢復(fù)了數(shù)據(jù),是不是可以收工了?沒(méi)有,還有什么忘記做了?想想?
     注意:如果將表drop掉,那么索引也被drop掉了,用這種方法把表找回來(lái)了,但是你的索引呢?你的約束呢?表恢復(fù)后一定要將表上的索引重建建立起來(lái)(切記),索引丟了最多影響性能,約束沒(méi)了可能會(huì)造成業(yè)務(wù)數(shù)據(jù)混亂(一定要注意)
四、如何手工清除回收站中的對(duì)像?
SQL> purge table orabpel.cube_scope_old --清除具體的對(duì)像
    注意:如果此時(shí)是DBA用戶(hù)操作其它用戶(hù)數(shù)據(jù),清除回收站中的表時(shí)要加上用戶(hù)名,否則報(bào)表不在回收站中
SQL> purge tablespace ORAPEL   --清除指定的表空間對(duì)像
SQL> purge tablespace ORAPEL user orabpel --刪除表空間指定用戶(hù)下的所有對(duì)像
SQL> purge recyclebin  --清空整個(gè)回收站
五、show recyclebin為什么沒(méi)有數(shù)據(jù)呢?
    首先們需要明白一點(diǎn),recyclebin是user_recyclebin的同義詞,如此你當(dāng)前的登陸用戶(hù)是system此時(shí)運(yùn)用
show recyclebin是沒(méi)有數(shù)據(jù)據(jù)的
六、如果同一對(duì)像多次刪除怎么在recyclebin中識(shí)別?
    dba_recyclebin中對(duì)每刪除一個(gè)對(duì)像都會(huì)以BIN$進(jìn)行命名,同時(shí)會(huì)有相應(yīng)的dropscn、createtime、droptime可以跟據(jù)這些對(duì)像進(jìn)行定位,然后進(jìn)行恢復(fù)
七、ORACLE空間利用原則
    1. 使用現(xiàn)有的表空間的未使用空間
    2. 如果沒(méi)有了空閑空間,則檢查回收站,對(duì)于回收站的對(duì)象按照先進(jìn)先出的原則,對(duì)于最先刪除的對(duì)象,
       oracle在空間不足之時(shí)會(huì)最先從回收站刪除以滿(mǎn)足新分配空間的需求
    3. 如果回收站也沒(méi)有對(duì)象可以清理,則檢查表空間是否自擴(kuò)展,如果自擴(kuò)展則擴(kuò)展表空間,然后分配新空
       間
    4.如果表空間非自擴(kuò)展,或者已經(jīng)不能自擴(kuò)展(到達(dá)最大限制),則直接報(bào)表空間不足錯(cuò)誤,程序終止
八、DROP掉的對(duì)像是不是都會(huì)經(jīng)過(guò)回收站?
    以下幾種drop不會(huì)將相關(guān)對(duì)像放進(jìn)回收站recyclebin中
    * drop tablespace :會(huì)將recyclebin中所有屬于該tablespace的對(duì)像清除
    * drop user :會(huì)將recyclebin中所有屬于該用戶(hù)的對(duì)像清除
    * drop cluster : 會(huì)將recyclebin中所有屬于該cluster的成員對(duì)像清除
    * drop type : 會(huì)將recyclebin中所有依賴(lài)該type對(duì)像清除
    另外還需要注意一種情況,對(duì)像所在的表空間要有足夠的空間,不然就算drop掉經(jīng)過(guò)recyclebin由于空間不足oracle會(huì)自動(dòng)刪除的哦(切記)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI