ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 2542|回复: 49

为何truncate后表还占空间,如何回收?没有记录,truncate时间还挺长,什么原因? [复制链接]

精华贴数
12
技术积分
56553
社区积分
11423
注册时间
2008-1-16
论坛徽章:
238
ITPUB年度最佳版主
日期:2011-12-28 15:24:18蛋疼蛋
日期:2012-02-09 18:55:27
发表于 2009-6-25 17:03:52 |显示全部楼层
SQL> truncate table V_8600000002008030607000002;

表被截断。

SQL> truncate table N_8600000002008030607000002;

表被截断。

SQL> truncate table SYS_C0010056;
truncate table SYS_C0010056
               *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> truncate table PLTM; (怎么删除)
truncate table PLTM
               *
第 1 行出现错误:
ORA-02266: 表中的唯一/主键被启用的外键引用


SQL> truncate table V_8600000002008030607000005;

表被截断。

SQL> truncate table V_8600000002008030607000001;

表被截断。

SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

'TRUNCATETABLE'||SEGMENT_NAME||';'
------------------------------------------------------------------------------------------------------------------------------------
truncate table V_8600000002008030607000002;
truncate table N_8600000002008030607000002;
truncate table SYS_C0010056;
truncate table PLTM;
truncate table V_8600000002008030607000005;
truncate table V_8600000002008030607000001;

已选择6行。

SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

SEGMENT_NAME                                                                               S
--------------------------------------------------------------------------------- ----------
V_8600000002008030607000002                                                       3.0535E+10
N_8600000002008030607000002                                                       3026190336
SYS_C0010056                                                                        59768832
PLTM                                                                                56295424
V_8600000002008030607000005                                                        900726784
V_8600000002008030607000001                                                       3156213760

已选择6行。
SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> set timi on
SQL> truncate table V_8600000002008030607000002;

表被截断。

已用时间:  00: 00: 28.73

精华贴数
0
技术积分
2255
社区积分
6
注册时间
2008-5-17
论坛徽章:
10
数据库板块每日发贴之星
日期:2009-06-04 01:01:02祖国60周年纪念徽章
日期:2009-10-09 08:28:002009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-06-28 01:01:02数据库板块每日发贴之星
日期:2009-06-15 01:01:02数据库板块每日发贴之星
日期:2009-06-14 01:01:02数据库板块每日发贴之星
日期:2009-06-09 01:01:02数据库板块每日发贴之星
日期:2009-06-07 01:01:02授权会员
日期:2009-06-06 10:43:16数据库板块每日发贴之星
日期:2010-12-01 01:01:01
发表于 2009-6-25 17:24:53 |显示全部楼层
I believe I can do it

http://www.eygle.com

使用道具 举报

注册会员

高级会员

精华贴数
0
技术积分
5266
社区积分
3237
注册时间
2002-9-29
论坛徽章:
27
会员2006贡献徽章
日期:2006-04-17 13:46:342008北京奥运纪念徽章:自行车
日期:2008-09-04 16:35:57数据库板块每日发贴之星
日期:2008-09-24 01:03:37生肖徽章2007版:鼠
日期:2008-11-14 12:38:47生肖徽章2007版:马
日期:2008-11-24 08:53:01生肖徽章2007版:羊
日期:2008-12-05 09:36:23生肖徽章2007版:龙
日期:2008-12-08 09:33:53八级虎吧徽章
日期:2008-12-08 16:10:58数据库板块每日发贴之星
日期:2008-12-09 01:01:05生肖徽章2007版:龙
日期:2009-03-16 17:39:22生肖徽章2007版:马
日期:2009-04-15 17:04:342009日食纪念
日期:2009-07-22 09:30:00
发表于 2009-6-25 17:25:12 |显示全部楼层
为啥TRUNCATE 了就不能FLASH BACK 了而DROP 却可以?


使用道具 举报

精华贴数
0
技术积分
2255
社区积分
6
注册时间
2008-5-17
论坛徽章:
10
数据库板块每日发贴之星
日期:2009-06-04 01:01:02祖国60周年纪念徽章
日期:2009-10-09 08:28:002009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-06-28 01:01:02数据库板块每日发贴之星
日期:2009-06-15 01:01:02数据库板块每日发贴之星
日期:2009-06-14 01:01:02数据库板块每日发贴之星
日期:2009-06-09 01:01:02数据库板块每日发贴之星
日期:2009-06-07 01:01:02授权会员
日期:2009-06-06 10:43:16数据库板块每日发贴之星
日期:2010-12-01 01:01:01
发表于 2009-6-25 17:33:35 |显示全部楼层

回复 #3 suniori 的帖子

我都看到你问过好多次了

truncate 不会产生redo等信息,所以flashback不了
I believe I can do it

http://www.eygle.com

使用道具 举报

注册会员

西太平洋大学博士后

精华贴数
2
技术积分
20269
社区积分
805
注册时间
2007-12-5
论坛徽章:
5
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
发表于 2009-6-25 17:39:34 |显示全部楼层

回复 #4 fengjin821 的帖子

flashback跟redo有啥关系?
生活就像被轮奸,如果你无力反抗,就闭上眼睛享受吧。没准还能高潮呢。

使用道具 举报

精华贴数
8
技术积分
49203
社区积分
22313
注册时间
2001-10-15
论坛徽章:
184
蜘蛛蛋
日期:2012-02-03 17:20:24迷宫蛋
日期:2011-12-20 08:39:39茶鸡蛋
日期:2011-12-01 22:49:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41咸鸭蛋
日期:2012-01-06 16:55:17蜘蛛蛋
日期:2011-10-20 15:51:252012新春纪念徽章
日期:2012-01-04 11:49:54迷宫蛋
日期:2011-10-29 11:12:59复活蛋
日期:2011-12-14 09:37:30灰彻蛋
日期:2011-12-30 14:51:36ITPUB年度最佳版主
日期:2011-12-28 15:24:18紫蛋头
日期:2011-08-31 10:57:28
发表于 2009-6-25 17:47:41 |显示全部楼层
原帖由 〇〇 于 2009-6-25 17:03 发表
SQL> truncate table V_8600000002008030607000002;

表被截断。

SQL> truncate table N_8600000002008030607000002;

表被截断。

SQL> truncate table SYS_C0010056; --- 你确定这个是当前用户的表.
truncate table SYS_C0010056
               *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> truncate table PLTM; (怎么删除) --- disable 掉引用该表主键的外键约束.
truncate table PLTM
               *
第 1 行出现错误:
ORA-02266: 表中的唯一/主键被启用的外键引用


SQL> truncate table V_8600000002008030607000005;

表被截断。

SQL> truncate table V_8600000002008030607000001;

表被截断。

SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

'TRUNCATETABLE'||SEGMENT_NAME||';'
------------------------------------------------------------------------------------------------------------------------------------
truncate table V_8600000002008030607000002;
truncate table N_8600000002008030607000002;
truncate table SYS_C0010056;
truncate table PLTM;
truncate table V_8600000002008030607000005;
truncate table V_8600000002008030607000001;

已选择6行。

SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

SEGMENT_NAME                                                                               S
--------------------------------------------------------------------------------- ----------
V_8600000002008030607000002                                                       3.0535E+10
N_8600000002008030607000002                                                       3026190336
SYS_C0010056                                                                        59768832
PLTM                                                                                56295424
V_8600000002008030607000005                                                        900726784
V_8600000002008030607000001                                                       3156213760

已选择6行。
SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> set timi on
SQL> truncate table V_8600000002008030607000002;

表被截断。

已用时间:  00: 00: 28.73

使用道具 举报

精华贴数
8
技术积分
49203
社区积分
22313
注册时间
2001-10-15
论坛徽章:
184
蜘蛛蛋
日期:2012-02-03 17:20:24迷宫蛋
日期:2011-12-20 08:39:39茶鸡蛋
日期:2011-12-01 22:49:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41咸鸭蛋
日期:2012-01-06 16:55:17蜘蛛蛋
日期:2011-10-20 15:51:252012新春纪念徽章
日期:2012-01-04 11:49:54迷宫蛋
日期:2011-10-29 11:12:59复活蛋
日期:2011-12-14 09:37:30灰彻蛋
日期:2011-12-30 14:51:36ITPUB年度最佳版主
日期:2011-12-28 15:24:18紫蛋头
日期:2011-08-31 10:57:28
发表于 2009-6-25 17:47:53 |显示全部楼层
原帖由 〇〇 于 2009-6-25 17:03 发表
SQL> truncate table V_8600000002008030607000002;

表被截断。

SQL> truncate table N_8600000002008030607000002;

表被截断。

SQL> truncate table SYS_C0010056; --- 你确定这个是当前用户的表.
truncate table SYS_C0010056
               *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> truncate table PLTM; (怎么删除) --- disable 掉引用该表主键的外键约束.
truncate table PLTM
               *
第 1 行出现错误:
ORA-02266: 表中的唯一/主键被启用的外键引用


SQL> truncate table V_8600000002008030607000005;

表被截断。

SQL> truncate table V_8600000002008030607000001;

表被截断。

SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

'TRUNCATETABLE'||SEGMENT_NAME||';'
------------------------------------------------------------------------------------------------------------------------------------
truncate table V_8600000002008030607000002;
truncate table N_8600000002008030607000002;
truncate table SYS_C0010056;
truncate table PLTM;
truncate table V_8600000002008030607000005;
truncate table V_8600000002008030607000001;

已选择6行。

SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> select segment_name,sum(bytes) s from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

SEGMENT_NAME                                                                               S
--------------------------------------------------------------------------------- ----------
V_8600000002008030607000002                                                       3.0535E+10
N_8600000002008030607000002                                                       3026190336
SYS_C0010056                                                                        59768832
PLTM                                                                                56295424
V_8600000002008030607000005                                                        900726784
V_8600000002008030607000001                                                       3156213760

已选择6行。
SQL> select count(*) from V_8600000002008030607000002;

  COUNT(*)
----------
         0
SQL> set timi on
SQL> truncate table V_8600000002008030607000002;

表被截断。

已用时间:  00: 00: 28.73

使用道具 举报

精华贴数
12
技术积分
56553
社区积分
11423
注册时间
2008-1-16
论坛徽章:
238
ITPUB年度最佳版主
日期:2011-12-28 15:24:18蛋疼蛋
日期:2012-02-09 18:55:27
发表于 2009-6-25 19:14:48 |显示全部楼层

drop stroage也没有用

原帖由 fengjin821 于 2009-6-25 17:24 发表
see this

http://space.itpub.net/13165828/viewspace-607258


SQL> select 'truncate table '||segment_name||' drop storage;' from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

'TRUNCATETABLE'||SEGMENT_NAME||'DROPSTORAGE;'
------------------------------------------------------------------------------------------------------------------------------------
truncate table V_8600000002008030607000002 drop storage;
truncate table N_8600000002008030607000002 drop storage;
truncate table SYS_C0010056 drop storage;
truncate table PLTM drop storage;
truncate table V_8600000002008030607000005 drop storage;
truncate table V_8600000002008030607000001 drop storage;

已选择6行。

已用时间:  00: 00: 00.11
SQL> truncate table V_8600000002008030607000002 drop storage;

表被截断。

已用时间:  00: 00: 28.31
SQL> truncate table N_8600000002008030607000002 drop storage;

表被截断。

已用时间:  00: 00: 06.69
SQL> truncate table SYS_C0010056 drop storage;
truncate table SYS_C0010056 drop storage
               *
第 1 行出现错误:
ORA-00942: 表或视图不存在


已用时间:  00: 00: 00.00
SQL> truncate table PLTM drop storage;
truncate table PLTM drop storage
               *
第 1 行出现错误:
ORA-02266: 表中的唯一/主键被启用的外键引用


已用时间:  00: 00: 00.01
SQL> truncate table V_8600000002008030607000005 drop storage;

表被截断。

已用时间:  00: 00: 05.14
SQL> truncate table V_8600000002008030607000001 drop storage;

表被截断。

已用时间:  00: 00: 07.12
SQL> select 'truncate table '||segment_name||' drop storage;' from dba_segments where owner='OO'group by segment_name having sum(bytes)>2*1024*1024;

'TRUNCATETABLE'||SEGMENT_NAME||'DROPSTORAGE;'
------------------------------------------------------------------------------------------------------------------------------------
truncate table V_8600000002008030607000002 drop storage;
truncate table N_8600000002008030607000002 drop storage;
truncate table SYS_C0010056 drop storage;
truncate table PLTM drop storage;
truncate table V_8600000002008030607000005 drop storage;
truncate table V_8600000002008030607000001 drop storage;

已选择6行。

已用时间:  00: 00: 00.09
SQL>

使用道具 举报

精华贴数
0
技术积分
23982
社区积分
1684
注册时间
2007-2-21
论坛徽章:
107
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14咸鸭蛋
日期:2011-09-04 19:58:09紫蛋头
日期:2011-08-30 19:51:59蛋疼蛋
日期:2011-08-01 15:04:51复活蛋
日期:2011-07-19 20:04:42现任管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB9周年纪念徽章
日期:2010-10-08 09:34:03茶鸡蛋
日期:2012-01-17 14:36:21ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
发表于 2009-6-25 19:37:08 |显示全部楼层
10046看看时间花哪了

使用道具 举报

精华贴数
0
技术积分
50
社区积分
0
注册时间
2009-4-8
论坛徽章:
0
发表于 2009-6-25 19:47:21 |显示全部楼层

回复 #5 我上面有人 的帖子

Looks like it is by design, flashback table does not work when DDL is used (truncate is a DDL as we know).

<quoto>

Flashback Table is extremely useful when a user accidentally inserts, deletes, or updates the wrong rows in a table. It provides a way for users to easily and quickly recover a table to a previous point in time.

However, if the following DDL commands are issued, the flashback table command does not work:

- ALTER TABLE ... DROP COLUMN
- ALTER TABLE ... DROP PARTITION
- CREATE CLUSTER
- TRUNCATE TABLE
- ALTER TABLE ... MOVE

</quoto>

When a table is dropped, it goes to the recyclebin, then flashback table .. before drop can pick it up from the erecyclebin

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部