- 最后登录
- 2016-8-16
- 在线时间
- 147 小时
- 威望
- 207
- 金钱
- 2622
- 注册时间
- 2011-10-31
- 阅读权限
- 60
- 帖子
- 170
- 精华
- 0
- 积分
- 207
- UID
- 75
|
1#
发表于 2011-11-15 17:17:10
|
查看: 4911 |
回复: 1
之前有同事问我compress导出的时候可以压缩多少比例,可以压缩成什么格式的。唉,想当初我也是这么认为的,其实这个参数的作用是在导入过程中创建表的时候,初始的INITIAL_EXTENT设置。
compress默认值是Y,也就是说在创建表的时候会建立一个包含所有数据块容量的初始extent,该参数只在导出的时候有效,导入的时候无效(其实你如果加上该参数会报错)。
具体看下面例子。
首先是导出之前的表的信息:
SQL> Select segment_name,bytes/1024,blocks,Extents,initial_extent From user_segments;
SEGMENT_NAME BYTES/1024 BLOCKS EXTENTS INITIAL_EXTENT
--------------------------------------------------------------------------------- ---------- ---------- ---------- --------------
T1 704 88 11 65536
做一个默认的compress=y导出之后,重新导入之后表的信息:
SQL> /
SEGMENT_NAME BYTES/1024 BLOCKS EXTENTS INITIAL_EXTENT
--------------------------------------------------------------------------------- ---------- ---------- ---------- --------------
T1 704 88 11 720896
再做一个compress=n导出之后,重新导入之后表的信息:
SQL> /
SEGMENT_NAME BYTES/1024 BLOCKS EXTENTS INITIAL_EXTENT
--------------------------------------------------------------------------------- ---------- ---------- ---------- --------------
T1 704 88 11 65536
具体的也可以在创建表的dml中看到差异:
-- Create table
create table T1
(
id NUMBER(4),
name VARCHAR2(4)
)
tablespace STORE1
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 704K
minextents 1
maxextents unlimited
);
-- Create table
create table T1
(
id NUMBER(4),
name VARCHAR2(4)
)
tablespace STORE1
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
其实这里还可以解答一个疑惑:为什么我的一个表明明没有数据,但是在导入的时候执行了很长时间,其实就是这个参数在作怪,通常由于频繁的insert、update然后delete表之后,这个表的extent参数还是没有该表,还是维持在当初扩展到最大的值,因此在导入创建表指定extent的时候耗费了大量时间。 |
爱老婆,爱FM,爱音乐;挨踢,爱折腾,爱Oracle
|
|