Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103632175
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-15 13:36:45

     来源:赛迪网技术社区    作者:yuanshang



也可以在表空间级别上定义COMPRESS属性,既可以在生成时利用CREATE TABLESPACE来定义,也可以稍后时间利用ALTER TABLESPACE来定义。与其他存储参数类似,COMPRESS属性也具有一些继承特性。当在一个表空间中创建一个表时,它从该表空间继承COMPRESS属性。为了确定是否已经利用COMPRESS对一个表空间进行了定义,可查询USER_TABLESPACES数据字典视图并查看DEF_TAB_COMPRESSION列,如下面的例子所示:

  
  SELECT TABLESPACE_NAME,
  DEF_TAB_COMPRESSION
  FROM DBA_TABLESPACES;
  
  TABLESPACE_NAME   DEF_TAB_COMPRESSION
  ---------------  -------------------
  DATA_TS_01     DISABLED
  INDEX_TS_01     DISABLED
 
 

正如你所预计的那样,你可以在一个表空间直接压缩或解压缩一个表,而不用考虑表空间级别上的COMPRESS属性。

向一个压缩的表中加载数据

请注意,当你像上面那样指定COMPRESS时,你并没在实际压缩任何数据。上面的这些命令只是修改了一个数据字典的设置。只有你向一个表中加载或插入数据时才会实际压缩数据。

而且,为了确保数据被实际压缩,你需要利用一种正确的方法将数据加载或插入到表中。只有在利用以下4种方法之一批量加载或批量插入过程中才会进行数据压缩:

 

 
  直接路径SQL*Loader
  带有APPEND提示的串行INSERT
  并行INSERT
  CREATE TABLE ... AS SELECT
 
 

如果在一个平面文件中有输入数据是可用的,那么直接路径SQL*Loader方法是将这些输入数据加载至一个表格中最方便的手段。下面给出一个示例:

 

 
  $sqlldr sanjay/sanjay@proddb control=sales_history.ctl direct=true
 
 

如果在一个登台表中有输入数据,那么你可以使用带有APPEND提示的串行INSERT方法或者并行INSERT方法。

作为一个例子,请看一个名为SALES_HISTORY的未压缩登台表中的可用输入数据。用串行INSERT方法时,你可以使用以下的语句向已压缩表中插入数据:

  
  INSERT /*+ APPEND */
  
  INTO SALES_HISTORY_COMP
  SELECT * FROM SALES_HISTORY;
 
 

或者,你也可以用并行INSERT方法将数据由一个登台表转移到一个已压缩表中,如下所示:

 

 
  ALTER SESSION ENABLE PARALLEL DML;
  
  INSERT /*+PARALLEL(SALES_HISTORY_COMP,4)*/
  INTO SALES_HISTORY_COMP
  SELECT * FROM SALES_HISTORY;
 
 
阅读(403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~