久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle set unused怎么用

160次閱讀
沒有評論

共計 2184 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章主要為大家展示了“Oracle set unused 怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Oracle set unused 怎么用”這篇文章吧。

Oracle set unused 的用法

SET UNUSED 的用法

原理:清楚掉字典信息(撤消存儲空間),不可恢復。

  可以使用  SET UNUSED  選項標記一列或者多列不可用。

  使用 DROP SET UNUSED  選項刪除被被標記為不可用的列。

語法:

  ALTER TABLE table SET UNUSED (COLlist 多個)  或者  ALTER TABLE table SET UNUSED COLUMN col 單個;

  ALTER TABLE table DROP UNUSED COLUMNS;

set unused 不會真地刪除字段。
除了 alter table drop field 外,也可以
alter table set  unused field;
alter table drop unused;
set unused 系統(tǒng)開銷比較小,速度較快,所以可以先 set unuased,然后在系統(tǒng)負載較小時,再 drop。如系統(tǒng)負載不大,也可以直接 drop。
不管用何種方法,都不會收回空間。

如果你有這個需求,要刪除某一個表格上的某些欄位,但是由於這個表格擁有非常大量的資料,如果你在尖峰時間直接執(zhí)行  ALTER TABLE ABC DROP(COLUMN);可能會收到  ORA-01562 – failed to extend rollback segment number string,
這是因為在這個刪除欄位的過程中你可能會消耗光整個 RBS,造成這樣的錯誤出現(xiàn),因此這樣的做法并不是一個好方法,就算你拼命的加大 RBS 空間來應付這個問題,也不會是個好主意。

  我的建議做法:

  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,應該先 set unused 讓 column 無法使用,避開系統(tǒng)尖峰時間再來處理刪除欄位里的資料,要注意的是一但你 set unused column,這個欄位是無法再回復使用的。

  3

  重點來了,若你的欄位有一百萬筆資料,我們應該避免一次寫入那么多的 undo log,所以我準備每刪除一千筆資料就 commit 一次。

  SQL alter table t1 drop unused columns checkpoint 1000;

  Table altered.

  在離峰的時間進行這樣的動作,應該可以避免  ORA-01562  的錯誤發(fā)生。

剛才有個人問我如何修復被設置為 UNUSED 的字段,我考慮了一下,以下的方法可以恢復(以下步驟執(zhí)行前要做好備份),沒有經驗的 DBA 不要輕易嘗試。

1、創(chuàng)建實驗表 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、以下進行恢復

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)?3 了

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ù)據庫
SQL SELECT * FROM SCOTT.TTTA;

  A  B C  D
———- ———- ———- ———-
  1  2 3  4
  2  3 4  5

恢復完成

以上是“Oracle set unused 怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-07-20發(fā)表,共計2184字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 赤城县| 卢龙县| 双流县| 彰化市| 同心县| 昌邑市| 枞阳县| 永胜县| 淮滨县| 称多县| 楚雄市| 宜黄县| 龙井市| 赣榆县| 德清县| 华池县| 右玉县| 东海县| 调兵山市| 高唐县| 抚远县| 上蔡县| 濉溪县| 昂仁县| 青浦区| 广河县| 晋城| 海城市| 那曲县| 蓬溪县| 定边县| 连城县| 德兴市| 盈江县| 吴忠市| 忻州市| 吉水县| 嫩江县| 贵溪市| 南江县| 隆安县|