邊學習邊分享哈,以下方法已經過本人測試
可以使用 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不會真地刪除字段,可恢復。
如何修復被設定為unused的字段,以下的方法可以恢復(以下步驟執行前要做好備份),沒有經驗的dba不要輕易嘗試。
建立實驗表test_unused_columns
1、create table test_unused_columns
test_1 varchar2(2),
test_2 varchar2(2),
test_3 varchar2(2),
test_4 varchar2(2),
test_5 varchar2(2)
insert into test_unused_columns values('a1','a2','a3','a4','a5');
insert into test_unused_columns values('b1','b2','b3','b4','b5');
insert into test_unused_columns values('c1','c2','c3','c4','c5');
commit;
2、select * from test_unused_columns;
--查詢結果
test_1 test_2 test_3 test_4 test_5
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
3、 ---設定test_5不可用
alter table test_unused_columns set unused column test_5;
select * from test_unused_columns;
--查詢結果
test_1 test_2 test_3 test_4
a1 a2 a3 a4
b1 b2 b3 b4
c1 c2 c3 c4
以下進行恢復
1、用管理員身份登入,sys、system均可
2、查詢test_unused_columns在資料庫中分配的編號
sselect obj# from obj$ where name='test_unused_columns';
--查詢結果
obj#
select col#,intcol#,name from col$ where obj#=53916;
--查詢結果
col# intcol# name
1 1 test_1
2 2 test_2
3 3 test_3
4 4 test_4
0 5 sys_c00005_11022820:28:45$
3、更新
update col$ set col#=intcol# where obj#=53916;
update tab$ set cols=cols+1 where obj#=53916;
update col$ set name='test_5' where obj#=53916 and col#=5;
update col$ set property=0 where obj#=53916;
commit;
4、重啟資料庫
select * from test_unused_columns;
--查詢結果
test_1 test_2 test_3 test_4 test_5
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5
恢復完成
恢復SET UNUSED操作
可以使用 set unused 選項標記一列或者多列不可用。使用drop set unused 選項刪除被被標記為不可用的列。語法 alter table table set unused collist多個 或者 alter table table set unused column col單個 ...
rman 恢復操作
rman恢復機制 修復命令 restore object name option 子主題 2 恢復命令 recover device type object name option 子主題 2 noarchivelog 模式下恢復的步驟 以dba許可權登陸sql plus sys oacl as s...
git reflog恢復本地操作 誤操作
git reflog 可以檢視所有分支的所有操作記錄 包括 包括commit和reset的操作 包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄 具體乙個例子,假設有三個commit,git st commit3 add test3.c commit2 add ...