恢复Set unused的字段数据
2017-05-02 10:48
363 查看
如何修复被设置为UNUSED的字段,以下的方法可以恢复(以下步骤执行前要做好备份
1、创建实验表TTTA
SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C
VARCHAR2(10),D INTEGER);
表已创建。
SQL> INSERT INTO TTTA VALUES (1,2,'3',4);
已创建 1 行。
SQL> INSERT INTO TTTA VALUES (2,3,'4',5);
已创建 1 行。
SQL> COMMIT;
提交完成。
ALTER TABLE TTTA SET UNUSED COLUMN C;
将ttta表中的C字段设置成不可用的
2、以下进行恢复
以管理员的身份登陆,其中的oracle是当时安装oracle10g时设置的密码
SQL> conn sys/oracle as sysdba
查找ttta在数据库中分配的编号
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
------字段数变为3了
关于col$数据字典中col#,intcol#的意义参考下面的链接
http://blog.sina.com.cn/s/blog_48e13c9e0100xfhw.html
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、重启数据库
SQL> SELECT * FROM SCOTT.TTTA;
A
B
C
D
---------- ---------- ---------- ----------
1
2
3
4
2
3
4
5
恢复完成
1、创建实验表TTTA
SQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C
VARCHAR2(10),D INTEGER);
表已创建。
SQL> INSERT INTO TTTA VALUES (1,2,'3',4);
已创建 1 行。
SQL> INSERT INTO TTTA VALUES (2,3,'4',5);
已创建 1 行。
SQL> COMMIT;
提交完成。
ALTER TABLE TTTA SET UNUSED COLUMN C;
将ttta表中的C字段设置成不可用的
2、以下进行恢复
以管理员的身份登陆,其中的oracle是当时安装oracle10g时设置的密码
SQL> conn sys/oracle as sysdba
查找ttta在数据库中分配的编号
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
------字段数变为3了
关于col$数据字典中col#,intcol#的意义参考下面的链接
http://blog.sina.com.cn/s/blog_48e13c9e0100xfhw.html
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、重启数据库
SQL> SELECT * FROM SCOTT.TTTA;
A
B
C
D
---------- ---------- ---------- ----------
1
2
3
4
2
3
4
5
恢复完成
相关文章推荐
- 大量数据文件恢复时,set new…
- 修改数据库表 字段参考的数据…
- set unused column column_name 和…
- RMAN 恢复实际操作(模拟数据文件…
- MYSQL 备份恢复数据
- ORACLE删除字段(set unused…
- set unused的用法(ORACLE删…
- MAN 恢复实际操作(模拟数据文件丢…
- 修改数据库表 字段参考的数据…
- SYBASE ASE数据误删除之后的恢复处…
- sqlldr加载 数据文件的字段超出最…
- mysql 数据恢复 案例: “恢复/导入…
- SQL SERVER 2005恢复数据错误解决:The backup set holds a backup of a database other than the existing 'XXX' database
- 汇出数据表字段(&属性)清单
- oracle 导入导出数据
- Windows 自动备份 MySQL 数据库方…
- java多线程网络数据采集  1
- sql server中的 SET&nbs…
- cnzz 数据专家,免费网张流量统计
- 判断数据类型 python