精华内容
下载资源
问答
  • 公司的Oracle数据库表都建立到了默认的users表空间中,导致表空间很大,所以需要进行空间压缩,但是执行压缩的过程,有点无奈. 首先要压缩一个表空间就要查看当前表空间的大小,以及表空间对应的最大块. SELECT dd....

    公司的Oracle数据库表都建立到了默认的users表空间中,导致表空间很大,所以需要进行空间压缩,但是执行压缩的过程,有点无奈.

    首先要压缩一个表空间就要查看当前表空间的大小,以及表空间对应的最大块.

    <span style="font-family:FangSong_GB2312;font-size:18px;">SELECT dd.tablespace_name,
    dd.autoextensible,
    file_name,
       round(SUM(dd.bytes) / (1024 * 1024), 2) <strong>tot_grootte_mb   </strong>
    from sys.dba_data_files dd   
    WHERE dd.tablespace_name='USERS'
    group BY dd.tablespace_name,
    dd.autoextensible,
    file_name</span>
    tot_grootte_mb就是换算完成后这个表空间的实际大小了单位:MB

    然后我们看看这个表空间中最大块的位置计算下可以缩小的大小是多少

    <span style="font-family:FangSong_GB2312;font-size:18px;">SELECT MAX(block_id) <strong>maxblock</strong>,
           MAX(block_id) * 8192 / 1024 / 1024 <strong>maxblock_mb</strong>
      FROM dba_extents
     WHERE tablespace_name = 'USERS';
    </span>
    </pre><p></p><p><span style="font-family:FangSong_GB2312;font-size:18px;">如果差别比较大那就直接压缩了:</span></p><p><pre name="code" class="sql"><span style="font-family:FangSong_GB2312;font-size:18px;">alter database datafile '/path/data.dbf' resize 1024M;  </span>

    1024是看你最大块计算后得到的maxblock_mb来的


    结果...我这个最大块和现在的大小基本没区别..坑了.


    这时候去看看这个表空间中最大块都是什么东西,能转走,转走..

    SELECT t.block_id,t.tablespace_name,t.segment_name,t.segment_type
    FROM dba_extents t
    WHERE t.tablespace_name=upper('users')
    ORDER BY t.block_id DESC

    用这个查看什么东东在数据库数据块的最上面,我比较惨.最上面是lob文件的字段信息和索引信息.不了解的可以根据: LOBSEGMENTLOBINDEX 去查下,反正我查了有一会儿..才找明白怎么转走这两个大神

    根据表空间排在最上面的数据信息找到对应的数据文件然后转到你希望他存在的位置.

    转移使用的语句:

    1转移数据表:

    alter table <strong>table_name </strong>move tablespace <strong>tablespace_name </strong>
    写的肯定是你要转的表名和你希望他去的表空间了.

    2转移索引:

    alter index <strong>index_name </strong>rebuild tablespace <strong>tablespace_name</strong>
    写的当然是索引名和要去的表空间了..

    3转移坑爹的lob字段:

    -1你要根据查到的LOBINDEX 去找到对应属于什么表什么字段.好坑爹有木有.

    查找方式:

    SELECT table_name, column_name, t.tablespace_name,segment_name, index_name FROM user_lobs t
    WHERE t.index_name='<strong><span style="color:#ff0000;">SYS_IL0000208950C00032$$</span></strong>'
    其中意乱凌乱的东西就是数据库自动给你生成的lob字段的索引名了,根据这个你可以得到,其所在的表,表空间,以及对应的字段.然后在转移这个东东.

    转移语句如下:

    alter table <strong>table_name </strong>move lob(<strong>column_name</strong>) store as (tablespace <strong>tablespace_name</strong>);
    反正我是查了好多地方才看明白这么写的.可能是我比较笨吧..

    然后如愿我转走了这个坑爹的字段.

    再然后我开始压缩我的表空间了..

    这个博文只是记录下操作过程.防止下次被坑,也帮助下遇到相同情况的同志们.










    展开全文
  • 基于ORACLE数据库传输表空间的数据压缩解决方案.pdf
  • 表空间不够时新增表空间大小 alter tablespace testspace add datafile 'D:/oracle/oradata/orcl/testspace3.dbf' size 32000M; alter tablespace testspace add datafile 'D:/oracle/oradata/orcl/testspace4.dbf' ...

    表空间不够时新增表空间大小
    alter tablespace testspace add datafile 'D:/oracle/oradata/orcl/testspace3.dbf' size 32000M;
    alter tablespace testspace add datafile 'D:/oracle/oradata/orcl/testspace4.dbf' size 16000M;

    展开全文
  • Oracle9iR2 开始,ORACLE提供了/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。 表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间...

    从Oracle9iR2 开始,ORACLE提供了表/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。

            表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压缩是在数据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库数据块中保留空间,以便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保留的空间被称作符号表(symbol table)。被标识为要进行压缩的数据只存储在该符号表中,而不是在数据库行本身内。当在一个数据库行中出现被标识为要压缩的数据时,该行在该符号表中存储一个指向相关数据的指针,而不是数据本身。节约空间是通过删除表中数据值的冗余拷贝而实现的。

    1.表级别

     1.1 创建一个压缩表:创建表时使用COMPRESS关键字,COMPRESS关键字指示Oracle数据库尽可能以压缩的格式存储该表中的行。

    create table test compress as select * from dba_objects where 1=2;
    
    create table test (id number,name varchar2(20),time date) compress;

    1.2 修改现有表为压缩表:

    alter table test compress;

            取消表的压缩:

    alter table test nocompress;

     

    1.3    确定表是否被压缩:确定一个表是否使用了压缩,查询user_tables,compression字段表明表是否被压缩

    select table_name,compression from user_tables where table_name not like 'BIN%';
    SQL> select table_name,compression from user_tables where table_name not like 'BIN%';
    
    TABLE_NAME COMPRESS
    
    ----------------------------- --------
    
    CLASSES      ENABLED
    
    ROOMS        ENABLED
    
    STUDENTS     DISABLED
    
    MAJOR_STATS  DISABLED

    2.表空间级别

        2.1创建表压缩空间

    create tablespace TEST datafile '/export/home/oracle/ora10g/oradata/test/test.dbf' size 10M default compress

            与其他存储参数类似,COMPRESS属性也具有一些继承特性。当在一个表空间中创建一个表时,它从该表空间继承COMPRESS属性。

       2.2.使现有表空间转换为压缩表空间

    alter tablespace test default compress;
    
    alter tablespace test default nocompress;

        2.3.确定是否已经利用compress对一个表空间进行了定义,可查询user_tablespaces数据字典视图并查看def_tab_compression列

    select tablespace_name,def_tab_compression from user_tablespaces;
    SQL> select tablespace_name,def_tab_compression from user_tablespaces;
    
    TABLESPACE DEF_TAB_
    
    ---------- --------
    
    USERS      DISABLED
    
    TEST       DISABLED
    
    UNDOTBS01  DISABLED
    
    STATPACK   DISABLED

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

    注:当像上面那样指定compress时,其它表中(表空间)的数据并没有压缩,它只是修改了数据字典的设置;只有在向一个表中加裁/插入数据时,才会压缩数据.

    只有在使用下面4种方法时,表中的数据才会被压缩存放:

    (1).直接路径的 sql*load
    (2).带有/*+ append*/的 insert语句
    (3).create table .. as select..
    (4).并行insert

    4.压缩一个已经存在但并未压缩的表

    使用alter table .. move compress使一个已存在但未压缩的表转换为压缩表.

    alter table tmp_test move compress;

    同样,也可以使用alter table.. move nocompress来解压一个已经压缩的表:

    alter table tmp_test move nocompress;

    5.压缩一个物化视图

    使用用于压缩表的类似方式来压缩物化视图。

    基于多个表的联接生成的物化视图通常很适于压缩,因为它们通常拥有大量的重复数据项。

    create materialized view mv_tmp_test
    
    compress
    
    as 
    
    select a.phone,b.create_time from tmp_test a,recv_stat b
    
    where a.id=b.id;

    可以使用ALTER MATERIALIZED VIEW命令来改变一个物化视图的压缩属性。

    当你使用此命令时,请注意通常是在下一次刷新该物化视图时才会进行实际的压缩。

    alter materialized view mv_temp_test compress;

    6.压缩一个已分区的表

    在对已分区的表应用压缩时,可以有很多种选择。你可以在表级别上应用压缩,也可以在分区级别上应用压缩。

    你可以利用ALTER TABLE ...MOVE PARTITION命令对此分区进行压缩

    alter table tmp_test move partition create_200606 compress;

    要找出一个表中的哪些分区被压缩了,可以查询数据字典视图USER_TAB_PARTITIONS

    SELECT TABLE_NAME, PARTITION_NAME,COMPRESSION FROM USER_TAB_PARTITIONS;

    7.压缩表的性能开销

    一个压缩的表可以存储在更少的数据块中,从而节省了储存空间,而使用更少的数据块也意味着性能的提高。 在一个I/O受到一定限制的环境中对一个压缩的表进行查询通常可以更快速地完成,因为他们需要阅读的数据库数据块要少得多。

    使用sql*load加载100万数据:

     表名               行数               路径             是否是压缩的            消耗的时间
     test_nocom   1000000          直接             非压缩的                 00:00:21.12
     test_comp     1000000          直接             压缩的                     00:00:47.77

    由此可以看出,向压缩表中加入数据的时间是正常表的一倍.加载压缩的表所需要的额外时间来自于在数据加载过程中所执行的压缩操作。

    可以得出的结论是:在很少改变的表上使用压缩技术还是可以的.表中数据经常变动的情况下,尽量不要使用表压缩,它影响插入操作.

    展开全文
  • oracle 数据库表压缩

    千次阅读 2016-07-08 17:08:13
    随着数据库的增长,我们可以考虑使用oracle表压缩技术。表压缩可以节省磁盘空间、减少data buffer cache的内存使用量、并可以显著的提升读取和查询的速度。当使用压缩时,在数据导入和DML操作时,将导致更多的CPU...
    随着数据库的增长,我们可以考虑使用oracle的表压缩技术。表压缩可以节省磁盘空间、减少data buffer cache的内存使用量、并可以显著的提升读取和查询的速度。当使用压缩时,在数据导入和DML操作时,将导致更多的CPU开销,然而,由于启用压缩而减少的I/O需求将抵消CPU的开销而产生的成本。
    

    表的压缩对于应用程序来说是完全透明的,对于决策支持系统(DSS)、联机事务处理系统(OLTP)、归档系统(Archive Systems)来说表的压缩是有益处的。我们可以压缩表空间,表和分区。如果压缩表空间,那么在默认的情况下,表空间上创建的所有表都将被压缩。只有在表执行插入、更新或批量数据载入时,才会执行数据的压缩操作。

    一、表压缩的方法
    Oracle提供了一下几种类型的表压缩方法:
    1、Basic Compression:压缩等级High,CPU开销较小
    2、OLTP Compression:压缩等级High,CPU开销较小
    3、Warehouse Compression:压缩等级Higher,CPU开销较大(取决于压缩参数是Low还是High)
    4、Archive Compression:压缩等级Highest,CPU开销很大(取决于压缩参数是Low还是High)

    当使用Basic Compression,warehouse Compression,Archive Compression类型的压缩时,尽在发生批量数据导入时才会执行压缩。OLTP Compression被用于联机事务处理系统,可以对任意的SQL操作执行数据压缩。Warehouse Compression和Archive Compression可以获得很高的压缩等级,因为它们采用了Hybrid Columnar(混合列)压缩技术,Hybrid Columnar采用一种改良的列的存储形式替代一行为主的存储形式。Hybird Columnar技术允许将相同的数据存储在一起,提高了压缩算法的效率。当使用混合列压缩算法时,将导致更多的CPU开销,因此这种压缩技术适用于更新不频繁的数据。

    表的压缩特征:
    表压缩方法创建和修改表压缩的语法直接路径插入说明
    Basic Compressioncompression [basic]直接路径插入的数据才会被压缩compression和compression basic是等价的,未使用直接路径插入的数据不会被压缩
    OLTP Compressioncompression for oltp不要求使用Insert和Update的数据也将被压缩
    Warehouser Compressioncompression for query   [Low|High]直接路径插入的数据才会被压缩
    CPU开销高,未采用直接路径插入的行插入和行更新以行格式存储,会降低压缩等级(Low)
    Archive Compressioncompression for archive [Low|High]
    直接路径插入的数据才会被压缩
    CPU开销高,未采用直接路径插入的行插入和行更新以行格式存储,会降低压缩等级(Low)

    之前未压缩的表可以通过alter table ... compression ... 语句进行压缩。在这种情况下,压缩启用前的记录不会被压缩,只有新插入或更新的数据才会进行压缩。同样,通过alter table ... nocompression ...语句解除对一个表的压缩,表内已压缩的数据还会继续保持压缩的状态,新插入的数据就不再被压缩。

    在warehouse compression模式下, compression for query high是默认的;在archive compression模式下,compression for archive low是默认的。

    二、压缩和分区表
    一个表可以有压缩的分区和未压缩的分区,不同的分区可以使用不同的压缩方法。可以采用下列的方法改变分区的压缩方法:
    1、alter table ... modify partition ... compress ... ,该方法仅适用于新插入的数据。
    2、alter table ... move partition ... compress ... ,该方法适用于新插入的数据和已存在的数据。

    确定表是否被压缩:
    SQL> select table_name,compression,compress_for from user_tables;
    TABLE_NAME                     COMPRESS COMPRESS_FOR
    ------------------------------ -------- ------------
    COUNTRIES                      DISABLED BASIC                 //这里比较困惑,既然表没有启用压缩,为什么compress_for里的压缩方法确实basic呢?
    JOBS                           DISABLED
    EMPLOYEES                      ENABLED  BASIC
    LOCATIONS                      DISABLED
    DEPARTMENTS                    DISABLED
    JOB_HISTORY                    DISABLED
    REGIONS                        DISABLED

    三、在压缩表上添加和删除列
    在压缩表上添加和删除列有如下限制:
    1、对于compression basic类型的压缩,不能对新添加的列指定默认值。例如:

    SQL> alter table employees compress basic;
    Table altered.

    SQL> alter table employees add (a varchar(10) default 'AAA');
    alter table employees add (a varchar(10) default 'AAA')
                               *
    ERROR at line 1:
    ORA-39726: unsupported add/drop column operation on compressed tables

    SQL> alter table employees add (b number);
    Table altered.

    2、对于OLTP类型的压缩,如果为新添加的列指定默认值,则该列必须被设置为 NOT NULL,为可以为空的列添加默认值不被支持。对于这一点,我认为文档的描述是错误的,原文是这样的: OLTP compression - If a default value is specified for an added column, then the column must be NOT NULL . Added nullable columns with default values are not supported.  下面通过一个实验来验证

    SQL> alter table employees compress for oltp;
    Table altered.

    SQL> alter table employees add (c int default 10);
    Table altered.

    3、对于compression basic类型的压缩,不支持列的删除操作,例如:

    SQL> alter table employees compress basic;
    Table altered.

    SQL> alter table employees drop column c;
    alter table employees drop column c
                                      *
    ERROR at line 1:
    ORA-39726: unsupported add/drop column operation on compressed tables

    4、对于OLTP类型的压缩,能够支持列的删除操作,但是在数据库内部将列标记为unused状态,避免长时间的解压和重新压缩的操作。

    SQL> alter table employees compress for oltp;
    Table altered.

    SQL> alter table employees drop column c;
    Table altered
    展开全文
  • Oracle 数据库中的空间回收和收缩

    千次阅读 2020-04-27 12:41:45
    最近遇到了oracle数据库中的一个问题,数据库文件异常偏大,但实际业务中数据量并不大,经过查询具体的数据空间占用情况,发现即使是一些空,占用空间也很大。查了下资料,实际是数据由于之前存在过很多数据,...
  • 目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、Oracle表压缩 官方文档,点击前往 ...7、oracle压缩表/表空间----转,点击前往 8、参考书籍:《Oracle Database 9i10.
  • oracle数据库处理

    千次阅读 2020-04-30 23:59:25
    最近在oracle数据库还原时,出现好多没有导入成功,这是因为什么呢,网上查阅资料,导库前需要进行数据库的空处理。这里记录下来,方便备查。 数据库版本:oracle 11g 第一步、设置 延迟段创建 deferred_segment...
  • oracle服务器由oracle实例和oracle数据库两部分组成。oralce实例可以有多个,oracle实例有多个用户,相当于我们在mysql创建的database,在它下面有、触发器等等属性。要存储某个用户下的这些属性就要给这个用户...
  • oracle数据库备份一直是个问题,研究了很久,终于实现了自动备份后压缩且删除源文件的方法,有效解决了长久备份导致数据库备份空间不足的问题。可以在服务器端,也可以在客户端备份,客户端PC只需要有oracle的基本...
  • ORACLE数据库

    2011-12-15 23:59:04
    oracle中的bin目录下 exp 用户名/密码@数据库名 tables=(表明) file=d:\sdfsdf.dmp 导入:imp 用户名/密码@数据库名 file=d:\sdfsdf.dmp 注意,如果导出时用的dba用户,导入时的用户也必须是dba用户 ======...
  • Oracle 表空间迁移用途将迁移到新表空间,提高数据检索性能;单迁移算法:将迁移到新表空间: alter table … move tablespace … 迁移后需要重建索引: alter index … rebuild tablespace …批量迁移...
  • oracle压缩表/表空间

    2012-08-29 18:08:57
    Oracle 9iR2 开始,ORACLE提供了/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。  表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省...
  • 1:更改用户信息,把用户usera的对象导到用户userb,用法区别在于fromuser=usera touser=userb ,remap_...imp system/passwd fromuser=usera touser=userb file=/oracle/exp.dmp log=/oracle/exp.log; impdp system/p
  • oracle 压缩表表空间

    2014-09-18 12:39:37
    在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间压缩是在数据库的数据块级别上进行的。当确定一个要被压缩后,数据库便在每一个数据库数据块中保留空间,以便储存在该数据块中的多...
  • 自己写的小程序:自动定时定点备份oracle数据库,可以任意设置多个时间点、时间周期备份数据库,比如备份时间点设置为7点、13点、21点,时间周期为30天。那么第31天7点的备份,将冲点第一天7点的备份,以免硬盘空间...
  • 一、Oracle 压缩表占用空间 在使用Oracle的过程中,如果存储的数据量过多,就会造成表空间占用内存过大的情况,可能几个G甚至几百个G。 此时可以通过删除部分无用数据,然后压缩表占用空间的方法来释放内存。 1...
  • 创建数据create table是我们对数据库进行的常见操作。我们一般使用create table之后,指定了数据列信息和主键等约束信息,其他就交给Oracle使用默认值了。今天我们一起来看看这些默认值。说明:本片只关注一般数据...
  • Oracle数据库表类型

    千次阅读 2010-04-05 21:39:00
    摘自《Oracle9i&10g编程艺术-深入数据库体系结构》第10章 Oracle数据库表类型6.1 的类型 1. 堆组织 2. 索引组织 3. 聚簇 4. 散列聚簇 5. 嵌套 6. 临时 7. 对象 8. 外部 一张最多有...
  • 开始 → 程序 → Oracle → 开发与移植工具 → Database Configuration Assistant → 下一步 → 删除数据库(系统会同时删除OracleService+SID)2.2 Oracle Universal Installer 删除Oracle一部分组件 开始 → 程序 ...
  • 文章目录一、Oracle 数据库概述1、Oracle 概述二、关系型数据库1、数据库管理系统2、数据库设计范式三、Oracle 11g 的新功能 一、Oracle 数据库概述 1、Oracle 概述 ...可以说Oracle数据库系统是目前世界上...
  • 1. Oracle数据库进行备份恢复 客户测试环境, 有时候需要从现场copy到公司, 压缩虽然能够减少部分空间大小,但是copy到虚拟机里面也时浪费很大量的磁盘,所以能够在备份恢复的过程中执行压缩最好 oracle 这里用的...
  • NULL 博文链接:https://jimmy9495.iteye.com/blog/1781679
  • 年底客服机房进行整理,需停电,趁机对系统数据库进行调整,以下为简要脚本记录:...l 增加表空间   1. 进行数据库的完全备份 a) 导出nvl_user全部 $su- oracle $expdp nvl_user/nvl#2016 schemas=nvl_user directo
  • Oracle数据库随着数据增长,所占磁盘容量也会增长,当中数据不再需要时,对表进行delete操作,中代表所占空间的标志-高水位,不会随着数据删除而下降,高水位没有变化,即使删除了数据库,所占空间大小...
  • oracle数据库修复

    2011-09-11 06:21:06
    不需要运行Oracle数据库软件,ODU直接读取数据库文件解析数据。 支持ASM,能够直接从ASM磁盘中导出数据,即使相关的磁盘组不能成功mount 支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制文件...
  • Oracle表压缩

    2018-12-27 12:09:57
    Oracle9iR2 开始,ORACLE提供了/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。 表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,354
精华内容 13,741
关键字:

oracle数据库压缩表空间