恢復被設定為Unused的欄位
有時為了刪除某個大數量量表上的某個欄位,會採用先把這個欄位設定為Unused,等系統空閒時,再drop掉該欄位的方式。那假如我們不想刪除,怎樣恢復被設定為Unused的欄位咧?
開啟視窗1,已普通使用者連線資料庫:
SQL> create table deployee ( ID integer,NAME varchar2(10),ID_CARD varchar(20));
Table created
SQL> insert into deployee values (1,'湯小娟','32068219950223628X');;
1 row inserted
SQL> insert into deployee values (2,'鄒豔麗','32068219940801326X');;
1 row inserted
SQL> insert into deployee values (3,'郭其蒙','32068219941220410X');
1 row inserted
SQL> commit;
Commit complete
這個時候,開啟視窗2,透過sysdba的身份連線資料庫,檢視該表的欄位數如下:
SQL> select obj# from sys.obj$ where name=upper('deployee');
OBJ#
----------
189690
SQL> select cols from sys.tab$ where obj#=189690;
----------
189690
SQL> select cols from sys.tab$ where obj#=189690;
COLS
----------
3
----------
3
然後,我們在視窗1中,設定欄位Name為unused
SQL> alter table deployee set unused column NAME;
Table altered
此時,回到視窗2,再執行剛才的查詢,檢視該表現在的欄位數如下:
SQL> select cols from sys.tab$ where obj#=189690;
COLS
----------
2
----------
2
回到視窗1中,在該表中,新增同名欄位Name varchar(20);
SQL> alter table deployee add NAME varchar(20);
Table altered
此時,回到視窗2,再執行剛才的查詢,檢視該表現在的欄位數如下:
SQL> select cols from sys.tab$ where obj#=189690;
COLS
----------
3
----------
3
回到視窗1中,開始考慮怎樣恢復名稱已被佔用的列:
SQL> select COL#,INTCOL# from sys.COL$ WHERE OBJ#=189690;
COL# INTCOL#
---------- ----------
1 1
0 2
2 3
3 4
---------- ----------
1 1
0 2
2 3
3 4
SQL> update col$ set col#=intcol# where obj#=189690;
已更新 4 行。
SQL> update sys.tab$ set cols=cols+1 where obj#=189690;
已更新 1 行。
SQL> select name,col# from sys.col$ where obj#=189690;
NAME COL#
------------------------------ ----------
ID 1
SYS_C00002_10122214:33:06$ 2
ID_CARD 3
NAME 4
------------------------------ ----------
ID 1
SYS_C00002_10122214:33:06$ 2
ID_CARD 3
NAME 4
SQL> update sys.col$ set name='OLD_NAME' where obj#=189690 and col#=2;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select name,col# from sys.col$ where obj#=189690;
NAME COL#
------------------------------ ----------
ID 1
OLD_NAME 2
ID_CARD 3
NAME 4
------------------------------ ----------
ID 1
OLD_NAME 2
ID_CARD 3
NAME 4
SQL> select property from sys.col$ where obj#=189690;
PROPERTY
----------
0
32800
0
0
----------
0
32800
0
0
SQL> update col$ set property=0 where obj#=189690;
已更新4行。
SQL> commit;
提交完成。
SQL> select property from sys.col$ where obj#=189690; PROPERTY
----------
0
0
0
0
----------
0
0
0
0
SQL>
至此,修改完成,重啟資料庫即可。
至此,修改完成,重啟資料庫即可。
附:
透過rename可以把原來欄位名稱還原回去。
alter table deployee rename column name to new_name;
alter table deployee rename column old_name to name;
alter table deployee rename column old_name to name;
重新命名後結構如下:
create table DEPLOYEE
(
ID INTEGER,
NAME VARCHAR2(10),
ID_CARD VARCHAR2(20),
NEW_NAME VARCHAR2(20)
)
(
ID INTEGER,
NAME VARCHAR2(10),
ID_CARD VARCHAR2(20),
NEW_NAME VARCHAR2(20)
)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-682384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【實戰】使用“基表修改法”恢復被“set unused”方式誤刪除的列
- 如何將android studio設定復位,將設定恢復到初始化Android
- 【實戰】使用“基表修改法”恢復被“set unused”方式誤刪除的列(續)
- 為React Ant-Design Table增加欄位設定React
- sql設定欄位預設值SQL
- 對錶中的欄位設定了預設值,新增記錄後卻發現該欄位為nullNull
- SqlSugar code first 欄位為列舉型別,預設生成資料庫欄位為bigint如何設定為int型別SqlSugar型別資料庫
- win10開啟方式被修改怎麼恢復_win10恢復開啟方式的設定方法Win10
- 恢復IpTables的預設設定(Script)(轉)
- SQLLDR——CTL檔案:欄位設定SQL
- windows10恢復出廠設定的方法_win10出廠設定如何恢復WindowsWin10
- Oracle自動恢復設定Oracle
- ORACLE設定 快速恢復區Oracle
- 如何恢復出廠設定的Mac?Mac
- SQL SERVER設定恢復模式的策略SQLServer模式
- MySQL欄位預設值設定詳解MySql
- 如何為MacBook或Mac電腦恢復出廠設定Mac
- w10如何恢復出廠設定_w10恢復出廠設定的步驟
- ElasticSearch 設定某個欄位不分詞Elasticsearch分詞
- oracle和mysql設定自增欄位OracleMySql
- 【Mongo】mongo更新欄位為另一欄位的值Go
- Recovery恢復出廠設定方法
- 表設定為nologging能恢復出來嗎?
- jpa~為欄位新增insert的預設值
- 表的列被set unused的機制
- 為什麼索引的PCTUSED被設定為0索引
- win10如何一鍵恢復出廠設定 win10恢復出廠設定的步驟Win10
- mysql-欄位設定Default值問題MySql
- 恢復 Git 被刪除的分支Git
- Git恢復被刪除的分支Git
- 去除站點的資料庫欄位中包含的關鍵詞,並恢復資料庫
- 設定並修改快速恢復區的引數
- Oracle資料庫的可恢復性設定Oracle資料庫
- jz2440恢復出廠設定
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- 怎麼把c盤恢復出廠設定 電腦c盤怎麼恢復出廠設定
- Win10設定裡沒有恢復選項怎麼辦 win10設定恢復選項的方法Win10
- win10電腦如何恢復出廠設定 win10系統恢復出廠設定的步驟Win10