【原創】通過資料字典操作刪除表的列
這幾天做實驗的時候不小心給dual表新增了一列,造成了資料庫所用的drop操作都不能執行了,而sys使用者下的表是不能通過alter table ... drop column ... 刪除列,最後通過其他方式解決了,請參考:http://space.itpub.net/498744/viewspace-258714。但實際上也可以通過下面的方法直接刪除列(主要是操作col$和tab$資料字典表)
注意:一定不要在生產資料庫嘗試下面的操作,要不然就算黎叔不生氣,後果照樣很嚴重
實驗環境:WinXP SP2
資料庫版本:10.2.0.1
具體步驟如下:
1.建立實驗表test,包行a和b兩列
sys@TEST>create table test
2 (a number,
3 b number);
Table created.
2.檢視col$資料字典表中test表的記錄
sys@TEST>select obj#,name from col$ where obj# in (select object_id from dba_objects where object_name='TEST');
OBJ# NAME
---------- ------------------------------
61201 A
61201 B
3.刪除test表的中b列
sys@TEST>delete col$ where obj#=61201 and name='B';
1 row deleted.
sys@TEST>commit;
Commit complete.
4.檢視tab$資料字典表中test表的記錄。可以看到tab$中記錄了表的列數
sys@TEST>select cols,intcols,kernelcols from tab$ where obj#=61201;
COLS INTCOLS KERNELCOLS
---------- ---------- ----------
2 2 2
5.將test表的列數改為1
sys@TEST>update tab$ set cols=1,intcols=1,kernelcols=1 where obj#=61201;
1 row updated.
sys@TEST>commit;
Commit complete.
6.desc test表依舊有兩列,改動沒有成功?這是因為資料字典表是在資料庫啟動的時候載入的,重啟資料庫就可以了
sys@TEST>desc test
Name Null? Type
----------------------------------------------------- -------- --------------------------
A NUMBER
B NUMBER
7.重啟資料庫
sys@TEST>shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@TEST>startup
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1248504 bytes
Variable Size 125829896 bytes
Database Buffers 134217728 bytes
Redo Buffers 7139328 bytes
Database mounted.
Database opened.
8.修改完成,可以看到test表只有一列了
sys@TEST>desc test
Name Null? Type
----------------------------------------------------- -------- -------------------------
A NUMBER
這個實驗只是刪除表的一列,實際上對列改名、新增列、刪除表等操作也是可以類似的完成的,主要就是操作col$、tab$、obj$三張資料字典表表
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/498744/viewspace-258710/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過修改資料字典,變更表的owner
- MySQL超大表刪除資料過程MySql
- 通過ROWID刪除重複資料
- MySQL通過Binlog恢復刪除的表MySql
- 大資料表的truncate,列刪除,shrink回收高水位大資料
- MySQL刪除資料表MySql
- 刪除大表資料
- 通過flashback database恢復被刪除的表空間Database
- 工作隨筆——mysql子查詢刪除原表資料MySql
- oracle 失誤刪掉資料檔案後,刪除表空間操作Oracle
- 海量資料表刪除方案
- 通過shell指令碼得到資料字典的資訊指令碼
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- 如何刪除大表中的資料
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- MySQL(四) 資料表的插入、更新、刪除資料MySql
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- MySQL之資料庫和表的基本操作(建立表、刪除表、向表中新增欄位)MySql資料庫
- oracle修改表增加列刪除列修改列Oracle
- python 刪除大表資料Python
- 刪除表裡重複資料
- 刪除資料庫表空間資料庫
- 通過SQL儲存過程刪除過期的資料庫Bak備份檔案SQL儲存過程資料庫
- 【原創】你誤刪除了一張表,請使用備份+歸檔來將資料庫恢復到刪除表之前的狀態資料庫
- git操作基礎:刪除資料夾Git
- oracle資料庫備份刪除操作Oracle資料庫
- 刪除a表中和b表相同的資料
- mysql 刪除表中重複的資料MySql
- sql server:刪除表資料,標識列Id從1開始SQLServer
- Laravel 批量插入(如果資料存在刪除原資料)Laravel
- EMC UNITY 400儲存卷刪除資料恢復操作過程Unity資料恢復
- 通過檔案控制程式碼恢復刪除的資料檔案
- whk我【資料刪除】你個【資料刪除】的
- 【Oracle】刪除大表操作一則Oracle
- 表管理之二:表資料的插入修改與刪除
- ORACLE刪除-表分割槽和資料Oracle
- PostgreSQL刪除表中重複資料SQL
- sql 多表關聯刪除表資料SQL