這篇文章主要為大家展示了“Oracle set unused怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Oracle set unused怎么用”這篇文章吧。
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有孟津免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
Oracle set unused的用法
SET UNUSED的用法
原理:清楚掉字典信息(撤消存儲(chǔ)空間),不可恢復(fù)。
可以使用 SET UNUSED 選項(xiàng)標(biāo)記一列或者多列不可用。
使用DROP SET UNUSED 選項(xiàng)刪除被被標(biāo)記為不可用的列。
語(yǔ)法:
ALTER TABLE table SET UNUSED (COLlist多個(gè)) 或者 ALTER TABLE table SET UNUSED COLUMN col單個(gè);
ALTER TABLE table DROP UNUSED COLUMNS;
set unused不會(huì)真地刪除字段。
除了alter table drop field外,也可以
alter table set unused field;
alter table drop unused;
set unused系統(tǒng)開銷比較小,速度較快,所以可以先set unuased,然后在系統(tǒng)負(fù)載較小時(shí),再drop。如系統(tǒng)負(fù)載不大,也可以直接drop。
不管用何種方法,都不會(huì)收回空間。
如果你有這個(gè)需求,要?jiǎng)h除某一個(gè)表格上的某些欄位,但是由於這個(gè)表格擁有非常大量的資料,如果你在尖峰時(shí)間直接執(zhí)行 ALTER TABLE ABC DROP(COLUMN);可能會(huì)收到 ORA-01562 - failed to extend rollback segment number string,
這是因?yàn)樵谶@個(gè)刪除欄位的過(guò)程中你可能會(huì)消耗光整個(gè)RBS,造成這樣的錯(cuò)誤出現(xiàn),因此這樣的做法并不是一個(gè)好方法,就算你拼命的加大RBS空間來(lái)應(yīng)付這個(gè)問題,也不會(huì)是個(gè)好主意。
我的建議做法:
1>
CREATE TABLE T1 (A NUMBER,B NUMBER);
SQL> begin 2 for i in 1 …… 100000 3 loop 4 insert into t1 values (i,100);5 end loop;6 commit;7 end;
SQL> select count(*) from t1;
COUNT(*)
100000
2>
SQL> ALTER TABLE T1 SET UNUSED COLUMN A CASCADE CONSTRAINTS;
不要馬上drop column,應(yīng)該先set unused讓column無(wú)法使用,避開系統(tǒng)尖峰時(shí)間再來(lái)處理刪除欄位里的資料,要注意的是一但你set unused column,這個(gè)欄位是無(wú)法再回復(fù)使用的。
3>
重點(diǎn)來(lái)了,若你的欄位有一百萬(wàn)筆資料,我們應(yīng)該避免一次寫入那么多的undo log,所以我準(zhǔn)備每刪除一千筆資料就commit一次。
SQL> alter table t1 drop unused columns checkpoint 1000;
Table altered.
在離峰的時(shí)間進(jìn)行這樣的動(dòng)作,應(yīng)該可以避免 ORA-01562 的錯(cuò)誤發(fā)生。
剛才有個(gè)人問我如何修復(fù)被設(shè)置為UNUSED的字段,我考慮了一下,以下的方法可以恢復(fù)(以下步驟執(zhí)行前要做好備份),沒有經(jīng)驗(yàn)的DBA不要輕易嘗試。
1、創(chuàng)建實(shí)驗(yàn)表TTTA
SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C VARCHAR2(10),D INTEGER);
表已創(chuàng)建。
SQL> INSERT INTO TTTA VALUES (1,2,'3',4);
已創(chuàng)建 1行。
SQL> INSERT INTO TTTA VALUES (2,3,'4',5);
已創(chuàng)建 1行。
SQL> COMMIT;
提交完成。
ALTER TABLE TTTA SET UNUSED COLUMN C;
2、以下進(jìn)行恢復(fù)
SQL> SELECT OBJ# FROM OBJ$ WHERE NAME='TTTA';
OBJ#
----------
32067
SELECT COL#,INTCOL#,NAME FROM COL$ WHERE OBJ#=32067;
COL# INTCOL# NAME
---------- ---------- ------------------------------
1 1 A
2 2 B
0 3 SYS_C00003_08031720:09:55$ 被UNUSED的字段
3 4 D
SQL> SELECT COLS FROM TAB$ WHERE OBJ#=32067;
COLS
----------
3 ------字段數(shù)變?yōu)?了
SQL> UPDATE COL$ SET COL#=INTCOL# WHERE OBJ#=32067;
已更新4行。
SQL> UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=32067;
已更新 1行。
UPDATE COL$ SET NAME='C' WHERE OBJ#=32067 AND COL#=3;
UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=32067;
SQL> COMMIT;
3、重啟數(shù)據(jù)庫(kù)
SQL> SELECT * FROM SCOTT.TTTA;
A B C D
---------- ---------- ---------- ----------
1 2 3 4
2 3 4 5
恢復(fù)完成
以上是“Oracle set unused怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:Oraclesetunused怎么用
文章源于:http://jinyejixie.com/article44/pggche.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、電子商務(wù)、企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)