对于OLAP系统,数据量特别大,而且不能随便扩空间,所以压缩也是比较好的方法,压缩比基本是:1:2
下面是压缩脚本,需要先创建log,记录压缩到哪张表的日志。
下面的例子是 ORACLE 11g的
-- Create table
create table TL_COMPRESS_LOG
(
OWNNAME VARCHAR2(30),
TABNAME VARCHAR2(30),
SUBPARNAME VARCHAR2(30),
TSNAME VARCHAR2(30),
BEGTIME DATE,
ENDTIME DATE,
OLD_MB NUMBER,
NEW_MB NUMBER,
OLD_ROWS NUMBER,
NEW_ROWS NUMBER
)
tablespace USERS;
-- Add comments to the table
comment on table TL_COMPRESS_LOG
is '压缩日志表';
-- Add comments to the columns
comment on column TL_COMPRESS_LOG.OWNNAME
is '属主';
comment on column TL_COMPRESS_LOG.TABNAME
is '表';
comment on column TL_COMPRESS_LOG.SUBPARNAME
is '子分区';
comment on column TL_COMPRESS_LOG.TSNAME
is '表空间';
comment on column TL_COMPRESS_LOG.BEGTIME
is '压缩开始时间';
comment on column TL_COMPRESS_LOG.ENDTIME
is '压缩结束时间';
comment on column TL_COMPRESS_LOG.OLD_MB
is '压缩前大小(MB)';
comment on column TL_COMPRESS_LOG.NEW_MB
is '压缩后大小(MB)';
comment on column TL_COMPRESS_LOG.OLD_ROWS
is '压缩前记录数';
comment on column TL_COMPRESS_LOG.NEW_ROWS
is '压缩后记录数';
DECLARE
VT1 DATE;
VT2 DATE;
VM1 NUMBER;
VM2 NUMBER;
VR1 NUMBER;
VR2 NUMBER;
BEGIN
FOR C IN (SELECT '用户名' OWNNAME,
TABLE_NAME TABNAME,
PARTITION_NAME PARNAME,
SUBPARTITION_NAME SUBPARNAME,
TABLESPACE_NAME TSNAME
FROM USER_TAB_SUBPARTITIONS
WHERE TABLE_NAME LIKE 'TM_%201208'
AND COMPRESSION != 'ENABLED'
ORDER BY TABLE_NAME, PARTITION_NAME ,SUBPARTITION_NAME) LOOP
VT1 := SYSDATE;
SELECT MAX(BYTES) / 1024 / 1024
INTO VM1
FROM DBA_SEGMENTS
WHERE OWNER = C.OWNNAME
AND SEGMENT_NAME = C.TABNAME
AND PARTITION_NAME = C.SUBPARNAME;
EXECUTE IMMEDIATE 'select /*+ parallel(t,4) */ count(*) from
' || C.TABNAME || ' subpartition (' || C.SUBPARNAME || ') t'
INTO VR1;
INSERT INTO TL_COMPRESS_LOG
VALUES
(C.OWNNAME,
C.TABNAME,
C.PARNAME,
C.TSNAME,
VT1,
NULL,
VM1,
NULL,
VR1,
NULL);
--
EXECUTE IMMEDIATE 'alter table ' || C.TABNAME || ' move subpartition
' || C.SUBPARNAME || ' compress tablespace ' || C.TSNAME;
--
VT2 := SYSDATE;
SELECT MAX(BYTES) / 1024 / 1024
INTO VM2
FROM DBA_SEGMENTS
WHERE OWNER = C.OWNNAME
AND SEGMENT_NAME = C.TABNAME
AND PARTITION_NAME = C.SUBPARNAME;
EXECUTE IMMEDIATE 'select /*+ parallel(t,4) */ count(*) from
' || C.TABNAME || ' subpartition (' || C.SUBPARNAME || ') t'
INTO VR2;
UPDATE TL_COMPRESS_LOG
SET ENDTIME = VT2, NEW_MB = VM2, NEW_ROWS = VR2
WHERE OWNNAME = C.OWNNAME
AND TABNAME = C.TABNAME
AND SUBPARNAME= C.PARNAME;
END LOOP;
END;
--由于ORACLE 10g不支持直接对子分区进行压缩,所以需要对主分区进行压缩如下:
--ORACLE 10g
DECLARE
VT1 DATE;
VT2 DATE;
VM1 NUMBER;
VM2 NUMBER;
VR1 NUMBER;
VR2 NUMBER;
BEGIN
FOR C IN (SELECT 'CTMX' OWNNAME,table_name TABNAME,partition_name PARNAME,
TABLESPACE_NAME TSNAME FROM
user_tab_partitions WHERE table_name LIKE '%201303'
AND compression='DISABLED') LOOP
VT1 := SYSDATE;
SELECT MAX(BYTES) / 1024 / 1024
INTO VM1
FROM DBA_SEGMENTS
WHERE OWNER = C.OWNNAME
AND SEGMENT_NAME = C.TABNAME
AND PARTITION_NAME = C.PARNAME;
EXECUTE IMMEDIATE 'select /*+ parallel(t,4) */ count(*) from
' || C.TABNAME || ' partition (' || C.PARNAME || ') t'
INTO VR1;
INSERT INTO TL_COMPRESS_LOG
VALUES
(C.OWNNAME,
C.TABNAME,
C.PARNAME,
C.TSNAME,
VT1,
NULL,
VM1,
NULL,
VR1,
NULL);
--
EXECUTE IMMEDIATE 'alter table ' || C.TABNAME || ' move partition
' || C.PARNAME ||' compress' ;
--
VT2 := SYSDATE;
SELECT MAX(BYTES) / 1024 / 1024
INTO VM2
FROM DBA_SEGMENTS
WHERE OWNER = C.OWNNAME
AND SEGMENT_NAME = C.TABNAME
AND PARTITION_NAME = C.PARNAME;
EXECUTE IMMEDIATE 'select /*+ parallel(t,4) */ count(*) from
' || C.TABNAME || ' partition (' || C.PARNAME || ') t'
INTO VR2;
UPDATE TL_COMPRESS_LOG
SET ENDTIME = VT2, NEW_MB = VM2, NEW_ROWS = VR2
WHERE OWNNAME = C.OWNNAME
AND TABNAME = C.TABNAME
AND SUBPARNAME= C.PARNAME;
END LOOP;
END;
相关推荐
7. **脚本使用说明**:通常,该脚本会包含SQL语句,用于创建分区表和定义分区策略。DBA需要根据实际业务需求,调整脚本中的参数,如分区字段、分区数量、分区边界等。 8. **注意事项**:在使用自动分区脚本时,需...
Oracle 11g是Oracle公司推出的数据库管理系统的一个重要版本,它在11g系列中包含了多个方面的改进和增强,旨在提供...通过学习和运行这些源代码,你可以深入理解Oracle 11g的核心特性和操作方法,提升数据库管理技能。
本文详细介绍了将 Oracle 普通表转换为分区表的方法,包括备份创建表脚本、查看数据类型、创建分区表、迁移数据和更新索引和约束等步骤。通过将普通表转换为分区表,可以提高查询效率、减少存储空间和提高数据管理...
在Oracle 11g中,SQL不仅可以进行基本的数据操作,还可以用于创建和管理表、视图、索引、存储过程、触发器等数据库对象。此外,Oracle 11g支持PL/SQL,这是一种过程化的SQL扩展,允许编写包含控制流语句、子程序和...
它在Oracle11g R1的基础上进行了大量的改进和优化,提供了更多的功能和更强大的性能支持。特别地,64位版本为企业级应用提供了更高的性能、更大的内存支持以及更强的数据处理能力。 #### 二、Oracle11g R2的关键...
1. **分区技术**:Oracle 11G 支持多种分区策略,如范围分区、列表分区和哈希分区,这些特性可以显著提高大型表的查询性能。 2. **压缩技术**:通过压缩表和索引,减少存储空间的使用,同时还可以加快查询速度。 3. ...
根据提供的文件信息,本教程主要讲解在Windows操作系统上安装Oracle 11...此外,Oracle 11g安装过程中还会涉及到许多细节操作,这里只列举了主要步骤和常见问题,实际操作中需要严格遵循Oracle官方提供的安装指南进行。
在Oracle 11g中,分区功能得到了进一步的增强,包括对分区表的支持更为完善,允许对现有分区进行动态调整,以及提供了更多的分区策略,如列表分区和范围分区的组合使用,这为大型数据集的管理和查询效率提升提供了更...
- **数据仓库优化**:通过引入新的分区策略和压缩技术,Oracle 11G提高了数据仓库的性能和效率。 - **安全性和隐私保护**:增加了多项安全特性,如透明数据加密、细粒度访问控制等,增强了数据的安全性和隐私保护。 ...
在Oracle数据库系统中,表分区是一种高级特性,用于提高数据管理效率、提升查询性能和简化维护工作。"Oracle自动一年建立表分区.zip"文件显然包含了用于自动创建按时间(一年)分区的Oracle脚本。这样的脚本对于处理...
- `ORACLE表空间的回收脚本.sql`很可能是执行上述操作的SQL命令集合。例如,它可能包括以下内容: - `ALTER TABLE ... COMPRESS FOR OLTP;` 对表进行OLTP压缩。 - `DBMS_SPACE_ADMIN.UNUSED_SPACE.FREE;` 释放表...
1. **分区技术**:10g支持多种分区策略,如范围分区、列表分区、哈希分区和组合分区,帮助优化大型表的性能和管理。 2. **物质化视图**:物质化视图有助于提高查询性能,尤其是当数据来自多个表或者需要复杂计算时...
根据提供的文档信息,本文将详细解析Oracle 11g R2 RAC(Real Application Clusters)在Linux环境下的安装配置过程。此文档适用于希望在Linux平台上部署Oracle 11g R2 RAC集群的IT专业人士。 ### Oracle 11g R2 RAC...
1. 表分区:对大表进行分区可以显著提升查询速度,如范围分区、列表分区、哈希分区等。 2. ROWIDs定位:理解ROWIDs的结构,能快速定位到数据行,提高查询速度。 3. 压缩选项:Oracle提供了不同级别的数据压缩,如...
`expdp` 支持多种数据导出方式,包括表、表空间、用户等,并且支持压缩、分区等功能。 ##### 3.2 常用参数 - **directory**:指定存放备份文件的位置。 - **schemas**:指定要备份的模式。 - **tables**:指定要...
1. 检查系统环境:安装Oracle数据库之前需要确保硬件和操作系统环境满足Oracle官方的最小系统要求。硬件包括足够的CPU、内存以及足够的磁盘空间。而操作系统则需要安装好所有必要的补丁。 2. 创建虚拟机:由于提到...
标题 "PostgreSQL 8.2,Oracle 10g,SQL Server 2005,MYSQL 5.1 脚本例子" 提供了关于四个不同数据库管理系统(DBMS)——PostgreSQL 8.2、Oracle 10g、SQL Server 2005 和 MySQL 5.1 的SQL脚本示例。这些脚本通常用于...
3. 数据库分区:Oracle 10g支持范围、列表、哈希等多种分区方式,提高大型表的查询性能。 4. Advanced Compression:提供了行级和列级压缩,减少存储需求,提升I/O效率。 5. 数据仓库优化:支持并行查询优化,提升...