重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果属于一个单独的表空间不是system等,可以把表空间删除,或删除所有对象后resize数据文件
成都创新互联是一家集网站建设,察隅企业网站建设,察隅品牌网站建设,网站定制,察隅网站建设报价,网络营销,网络优化,察隅网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
随着数据量的不断海量 CPU的不断强劲 双核四核的叫个不停 一种叫做时间换空间的优化技术应该会越来越流行 所以 数据压缩对于今后的数据库来说 应该会从核武器变成常规武器 Oracle从 i开始羞羞答答的引入表级压缩 一直以来都是像中国的核电站一样 宣传的用处大 论实际的贡献就不怎么样了
Oracle g似乎是正儿八经的要推广数据压缩技术了 专门推出了一个叫做Advance Compression的组件 全面支持普通表压缩 非结构化数据压缩(SecureFile数据压缩) Data Pump数据压缩 以及RMAN备份压缩 数据压缩技术从此名正言顺的登上历史舞台 既然是专门做为一个Option推出 Oracle一定是对该特性相当有信心 所以需要单独为该特性购买License
在Oracle i中虽然引入了表压缩 但是有很大的限制 只能对批量装载操作(比如直接路径装载 CTAS等)涉及的数据进行压缩 普通的DML操作的数据是无法压缩的 这应该是对于写操作的压缩难题没有解决 一直遗留到Oracle g 总算是解决了关系数据压缩的写性能问题 Oracle的表压缩是针对Block级别的数据压缩 主要技术和Oracle i差不多 还是在Block中引入symbol表 将block中的重复数据在symbol中用一个项表示 Oracle会对block进行批量压缩 而不是每次在block中写入数据时都进行压缩 通过这种方式 可以尽量降低数据压缩对于DML操作的性能影响 这样 在block级别应该会引入一个新的参数 用于控制block中未压缩的数据量达到某个标准以后进行压缩操作
SecureFile也是Oracle g新推出的一项特性 用于存储非结构化数据 SecureFile也将支持数据压缩操作 这样对于传统的LOB字段也可以进行压缩 将极大的减少大型数据库的存储空间需求 当然 有得比有失 压缩和解压时 对于CPU的要求也将更高 但是 目前CPU的发展速度明显比IO和存储空间快速的情况下 压缩是大有可为的技术 通过在压缩率和压缩效率方面的不断提升 以后应该为成为各个数据库的标准配置
除了对数据库中的数据进行压缩 Advance Compression Option还将支持备份数据的压缩 做为逻辑备份的Data Pump和物理备份的RMAN工具 都将支持该技术 在Oracle gR 中 Data Pump已经开始支持压缩源数据 Oracle g中则可以直接压缩导出文件 这样导出的时候就可以极大的减少存储空间的需求 在以前版本中 利用WinRAR等 经常可以将几个G的导出文件压缩到几十M Oracle g的白皮书上说压缩率可以达到 % 等软件出来 大家可以好好的测试一把 同样的 Oracle也在 g中开始引入RMAN的压缩技术 但是Oracle g号称采用了更先进的ZLIB要所算法 可以比Oracle g的压缩算法快上 % 空间需求也将减少 %
除了上述的数据压缩技术 Oracle g Advanced Compression Option还将引入另外一种压缩技术 我们知道在Data Guard中 需要将日志从主库传递到备库 如果主库的事务很多 则单位时间内需要传递的日志量将相当可观 如果能将这些日志压缩后在传递 然后在备库解压后应用 将极大的减少对于网络带宽的需求 从而已减少主备库的时间差
另外 Oracle的bitmap一直就是压缩存储的 g中的bitmap对于 i就有比较大的改动 通过一些细节的完善 提供更好的性能和更高的稳定性 也是oracle一贯的风格 对于bitmap在Oracle g中将如何实现 也将是非常值得关注的一个特点
lishixinzhi/Article/program/Oracle/201311/16929
在数据量变的很大的情况下,可以考虑表压缩,减少磁盘的存储,减少buffer cache的消耗,加快查询的速度,压缩需要在数据加载和dml的时候消耗一些cpu.表压缩对于应用是透明的。
你可以在表空间,表或分区级别指定压缩,如果在表空间级别指定压缩,那么这个表空间中的所有表默认都是压缩的。
压缩会发生在数据插入,更新或批量加载到表时。有几种类型的压缩。基本的,oltp的,dss的,归档的。他们的cpu消耗见文档。
当使用基本压缩,数据仓库压缩,或归档压缩的时候,压缩仅仅是在批量加载到一个表的时候发生。当你使用了oltp压缩,压缩发生在数据插入,更新,批量加载。
如果你使用了alter table命令让表启用压缩,那么对于已存在的数据是不受影响的,只有在启用压缩后的插入,或更新会受影响。也可以使用ALTER TABLE…NOCOMPRESS将一个表设置成非压缩,对于已经的压缩的表是没有影响的,压缩的数据还是压缩的,只是新插入的数据是不被压缩。
创建一个oltp压缩类型的表
CREATE TABLE orders … COMPRESS FOR OLTP;
如果你不指定压缩的类型,那么默认的情况下是基本压缩类型。下面的2个语句是等价的。
CREATE TABLE sales_history … COMPRESS BASIC;
CREATE TABLE sales_history … COMPRESS;
下面的表是一个数据仓库压缩类型的表,对于经常查询,并且没有dml的表适用。
CREATE TABLE sales_history … COMPRESS FOR QUERY;
创建一个归档压缩类型的表
CREATE TABLE sales_history … COMPRESS FOR ARCHIVE;
表可以包含压缩和非压缩的分区,并且不同的分区的压缩的类型可以是不同的,如果在分区上指定的压缩的类型与表上指定的压缩的类型不同,那么分区上的优先。
查看表是否是压缩的,及分区是否是压缩的。
SQL SELECT table_name, compression, compress_for FROM user_tables;
SELECT table_name, partition_name, compression,compress_for
FROM user_tab_partitions;
查看表中的行是什么压缩类型
SELECT DECODE(DBMS_COMPRESSION.GET_COMPRESSION_TYPE(
ownname = ‘HR’,
tabname = ‘EMPLOYEES’,
row_id = ‘AAAVEIAAGAAAABTAAD’),
1, ‘No Compression’,
2, ‘Basic or OLTP Compression’,
4, ‘Hybrid Columnar Compression for Query High’,
8, ‘Hybrid Columnar Compression for Query Low’,
16, ‘Hybrid Columnar Compression for Archive High’,
32, ‘Hybrid Columnar Compression for Archive Low’,
‘Unknown Compression Type’) compression_type
FROM DUAL;
修改压缩的级别
如果表是分区表,使用在线重定义可以修改表的压缩级别。如果表是分分区表,那么可以使用alter table ..move.. compress for语句修改表的压缩级别,这个语句会阻塞dml操作。
对于压缩表的限制:
1基本压缩,你不能为添加的列指定默认的值。删除列是不被支持的。
2oltp压缩,如果要添加一个带默认值的列,那么需要指定not null,可以删除列,但是数据只是在内部做了一个不被使用的标记而已。
3在线段收缩是不被支持的。
4上面的压缩的方式不适合于lobs类型,他们有自己的压缩方式。
5基本压缩类型的表的pct_free参数自动的设置成0.
在上面的描述中可以看到对于基本类型的压缩,没有使用直接路径插入的行及更新的行是不会被压缩的。对于我们的oltp系统基本是没有用处的,只测试下oltp的压缩方式,这种方式对于没有使用直接路径插入的行及被更新的行都会压缩。
SQL select count(*) from baixyu2;
COUNT(*)
22096384
SQL set serveroutput on
SQL exec show_space(‘BAIXYU2’,’T’,’AUTO’);
Total Blocks……………………….334336
Total Bytes………………………..2738880512
Unused Blocks………………………1916
Unused Bytes……………………….15695872
Last Used Ext FileId………………..4
Last Used Ext BlockId……………….671872
Last Used Block…………………….6276
CREATE TABLE baixyu3 COMPRESS FOR OLTP as select * from baixyu2;
SQL exec show_space(‘BAIXYU3’,’T’,’AUTO’);
Total Blocks……………………….107520
Total Bytes………………………..880803840
Unused Blocks………………………112
Unused Bytes……………………….917504
Last Used Ext FileId………………..4
Last Used Ext BlockId……………….116224
Last Used Block…………………….912
看到使用的块由33w下降到10w。压缩效果还是不错,但是是否使用还要结果上面的限制来根据实际情况评估。
Oracle
中压缩数据节省空间和提高速度
添加时间
:2007-4-22
使用表压缩来节省空间并提高查询性能
很多决策支持系统通常都涉及到存储于几个特大表中的大量数据。随着这些系统的发展,对磁盘空间
的需求也在快速增长。在当今的环境下,存储着数百
TB
(太字节)的数据仓库已经变得越来越普遍。
为了帮助处理磁盘容量问题,
在
Oracle9i
第
2
版中引入了表压缩特性,
它可以极大地减少数据库表所
需要的磁盘空间数量,并在某些情况下提高查询性能。
在本文中,我将向你说明表压缩是如何工作的,以及在构建和管理数据库时如何配置表空间。我还将
基于一些示例测试结构讨论一些性能问题,以帮助你了解使用表压缩预计能获得多大好处。
表压缩是如何工作的
在
Orcle9i
第
2
版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压缩是在数
据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库数据块中保留空间,以
便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保留的空间被称作符号表(
symbol
table
)
。被标识为要进行压缩的数据只存储在该符号表中,而不是在数据库行本身内。当在一个数据库行
中出现被标识为要压缩的数据时,该行在该符号表中存储一个指向相关数据的指针,而不是数据本身。节
约空间是通过删除表中数据值的冗余拷贝而实现的。
对于用户或应用程序开发人员来说,表压缩的效果是透明的。无论表是否被压缩,开发人员访问表的
方式都是相同的,
所以当你决定压缩一个表时,
不需要修改
SQL
查询。
表压缩的设置通常由数据库管理人
员或设计人员进行配置,几乎不需要开发人员或用户参与。
如何创建一个压缩的表
要创建一个压缩的表,可在
CREATE TABLE
语句中使用
COMPRESS
关键字。
COMPRESS
关键字
指示
Oracle
数据库尽可能以压缩的格式存储该表中的行。
下面是
CREATE TABLE COMPRESS
语句的一
个实例:
CREATE
TABLE
SALES_HISTORY_COMP
(
PART_ID
VARCHAR2(50)
NOT
NULL,
STORE_ID
VARCHAR2(50) NOT NULL,
SALE_DATE
DATE NOT NULL,
QUANTITY
NUMBER(10,2) NOT NULL
)
COMPRESS
;
或者,你可以用
ALTER TABLE
语句来修改已有表的压缩属性,如下所示:
ALTER TABLE SALES_HISTORY_COMP COMPRESS;
为了确定是否已经利用
COMPRESS
对一个表进行了定义,可查询
USER_TABLES
数据字典视图并
查看
COMPRESSION
列,如下面的例子所示:
SELECT TABLE_NAME, COMPRESSION FROM USER_TABLES;
TABLE_NAME
COMPRESSION
------------------
-----------
SALES_HISTORY
DISABLED
SALES_HISTORY_COMP
ENABLED
Create table me(shengao int32,tizhong
int ,zhangxiang verchar2(60)) compress;
Select table_name, compression from user_tables;
Select tablespace_name,def_tab_compression from user_tablespaces;
也可以在表空间级别上定义
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
属性
1、在需要储存备份的硬盘中建文件夹如:databasebackup ;
2、拷贝exp.bat到 databasebackup 中;(把下列语句保存成exp.bat文件)
set filename=c:\databasebackup\%date:~0,10%
exp.exe system/system@testdb wner=ewms file=%filename%.dmp log=%filename%.log
rar a %filename%.zip %filename%.dmp %filename%.log
del %filename%.dmp
del %filename%.log
3、从数据库系统C:\Program Files\WinRAR中拷贝Rar.exe文件到 C:\WINDOWS\system32中;
4、执行系统定时任务。