如何使用Oracle设置未使用

分类:编程技术 时间:2024-02-20 15:57 浏览:0 评论:0
0
本文主要向您展示“如何使用Oracle设置未使用”。内容简单、易懂、清晰。希望可以帮助您解答疑惑。让小编带领大家学习学习《如何使用Oracle设置未使用》。本文。

Oracle set unused 的使用

SET UNUSED 的使用


原理:清除字典信息(撤消存储空间),且不可恢复。

您可以使用 SET UNUSED 选项将一列或多列标记为不可用。

使用 DROP SET UNUSED 选项删除标记为不可用的列。

语法:

ALTER TABLE table SET UNUSED(多个 COLlist)或 ALTER TABLE 表 SET UN使用的列 col single;

ALTER TABLE 表 DROP UNUSED COLUMNS;


设置未使用实际上并不会删除该字段。 除了alter table drop字段外,还可以
alter table set unused field;
alter table drop unused ;
设置unused的系统开销比较小,速度也比较快,所以可以先设置unused,当系统负载小时再drop。如果系统负载不重,也可以直接掉。
无论使用什么方法,空间都不会被回收。


如果你有这个需求,你需要删除某个表上的某些字段,但由于这张表有一个 ve数据量较大时,如果在高峰时段直接执行ALTER TABLE ABC DROP (COLUMN);您可能会收到 ORA-01562 - failed to Extend rollback segment number string,
这是因为在删除字段的过程中,您可能会消耗整个 RBS,从而导致此类错误。因此,这种做法并不是一个好方法,即使你拼命增加RBS空间来应对这个问题。 ,也不是一个好主意。

我建议的方法:

1 >

  创建表 T1(A 数字,B 数字);

SQL> begin 2 for i in 1... 100000 3 循环 4 insert into t1 值(i, 100); 5结束循环; 6 提交; 7结束;

SQL> select count (*) from t1 ;

COUNT(*)

100000

2>

SQL> ALTER TABLE T1 设置未使用的列 A 级联约束;

   不要立即删除该列,应先设置为未使用,使该列无法使用。避开系统高峰时段,然后删除数据需要注意的是,一旦设置了未使用的列,该列将无法恢复使用。.

3>

重点来了,如果你的字段有一百万条数据,我们应该避免一次写这么多undo log,所以我打算每删除一千条数据就提交一次。

SQL> alter 表 t1 删除未使用的列检查点 1000;

表已更改。

在非高峰时段执行此操作应避免 ORA-01562 错误。



有人刚刚问我如何修复设置为 UNUSED 的字段。我想了想,下面的方法可以恢复它(在执行以下步骤之前先进行备份)。没有经验的 DBA 不应轻易尝试。

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;

提交完成。
更改选项卡LE TTTA 设置未使用的 C 列;

2.恢复如下

SQL> SELECT OBJ# FROM OBJ$ WHERE NAME='TTTA';

OBJ#< br data-filtered="filtered"/>---------
32067

从 COL$ 中选择 COL#、INTCOL#、NAME OBJ#=32067;
COL# INTCOL# NAME
---------- -------- -- ---------------------------------- -----------
1   1 A
2 2 B
0 3 SYS_C00003_08031720:09:55$ 未使用的字段
       3       4 D

SQL> SELECT COLS FROM TAB$ WHERE OBJ#=32067;

      COLS
-------- ----
3 ------字段数量变成了3


SQL> UPDATE COL $ SET COL#=INTCOL# WHERE OBJ#=32067;

已更新 4 行。

SQL> UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=32067;

1 行已更新。

更新 COL$ SET NAME='C' WHEREOBJ#=32067 AND COL#=3;

更新 COL$ SET PROPERTY=0 WHERE OBJ#=32067;
SQL> COMMIT;

3.重新启动数据库
SQL> SELECT * FROM SCOTT.TTTA;

A A B C D
--- ----- -- ---------- ---------- ----------
1 2 4

以上就是《如何使用Oracle设置未使用》一文的全部内容。感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用Oracle设置未使用

用户评论