Oracle 分区表

Oracle-大表改造分区表实施步骤 对于业务交易繁忙的数据库,在运行了一定时间后往往会产生一些数据量较大的表,特别是对于每天新增数据较多的日志表或者流水表,单表数据量通常会达到几十G,甚至是上百G。大表对于日常的运维非常的不方便,特别是在表数据的清理、迁移,查询性能会随着数据量的增大而受到影响,因此,通常对于大表我们需要进行优化拆分,在Oracle数据库,比较常见的大表优化拆分是将大表改造为分区表,这种方式最主要的好处就是对于应用透明,应用层面的改动很少 阅读详情

一、分区表:

    随着表的不断增大,对于新纪录的增加、查找、删除等(DML)的维护也更加困难。对于数据库中的超大型表,可通过把它的数据分成若干个小表,从而简化数据库的管理活动。对于每一个简化后的小表,我们称为一个单个的分区。

 

    对于分区的访问,我们不需要使用特殊的SQL查询语句或特定的DML语句,而且可以单独的操作单个分区,而不是整个表。同时可以将不同分区的数据放置到不同的表空间,比如将不同年份的销售数据,存放在不同的表空间,即年的销售数据存放到TBS_2001,2002年的销售数据存放到TBS_2002,依次类推,从而实现了分散存储,这将大大的简化大容量表的管理,提高查询性能及I/O并发等。

   

    对于外部应用程序来说,虽然存在不同的分区,且数据位于不同的表空间,但逻辑上仍然是一张表

     

    可以使用SQL*Loader,IMPDP,EXPDP,Import,Export等工具来装载或卸载分区表中的数据


二、何时分区

    当表达到GB大小且继续增长

    需要将历史数据和当前的数据分开单独处理,比如历史数据仅仅需要只读,而当前数据则实现DML

   

三、分区的条件及特性

    共性:不同的分区之间必须有相同的逻辑属性,比如表名,列名,数据类型,约束等,

   

    个性:各个分区可以有不同的物理属性,比如pctfree, pctused, and tablespaces.

 

  分区独立性:即使某些分区不可用,其他分区仍然可用。

 

  特殊性:含有LONG、LONGRAW数据类型的表不能进行分区

 

四、分区的优点

    1、提高查询性能:只需要搜索特定分区,而非整张表,提高查询速度

    2、节约维护时间:单个分区的数据装载,索引重建,备份,维护等将远小于整张表的维护时间。

    3、节约维护成本:可以单独备份和恢复每个分区

    4、均衡I/O:将不同的分区映射到不同的磁盘以平衡I/O,提高并发

 

五、ORACLE分区类型:

    范围分区、散列分区、列表分区、组合分区

    可以对索引和表分区,全局索引只能按范围分区,可以将其定义在任何类型的分区或非分区表上。

    通常全局索引比局部索引需要更多的维护

    局部索引与基础表是等同分区的,用于反映其基础表的结构

   

    1.Range分区:行映射到基于列值范围的分区

        Range 分区,又成为范围分区,基于分区键值的范围将数据映射到所建立的分区上。这是最通用的分区类型。

        创建范围分区时,必须指定以下内容

            分区方法:range

            分区列

            标识分区边界的分区描述

           

        使用Range 分区的时候,要记住几条规则:

            每个分区都包含VALUES LESS THAN字名,定义了分区的上层边界。任何等于和大于分区键值的二进制值都被添加到下一个高层分区中。

            所有的分区,除了第一个,如果低于VALUES LESS THAN所定义的下层边界,都放在前面的分区中。

            MAXVALUE可以用来定义最高层的分区。MAXVALUE表示了虚拟的无限值

 

        示例:

            create table sal_range   

            (salesman_id number(5),

            salesman_name varchar2(30),

            sales_amount number(10),

            sales_date date)

            partition by range (sales_date)   --创建基于日期的范围分区并存储到不同的表空间

            (

            partition sal_jan2000 values less than(to_date('02/01/2000',

                'DD/MM/YYYY')) tablespace sal_range_jan2000,

            partition sal_feb2000 values less than(to_date('03/01/2000',

                'DD/MM/YYYY')) tablespace sal_range_feb2000,

            partition sal_mar2000 values less than(to_date('04/01/2000',

                'DD/MM/YYYY')) tablespace sal_range_mar2000,

            partition sal_apr2000 values less than(to_date('05/01/2000',

                'DD/MM/YYYY')) tablespace sal_range_apr2000

            );

 

            create table r      --创建基于值范围的分区,分区子句未指定表空间时则位于缺省的表空间

            (a int)

            partition by range (a)

            (

                partition p1 values less than (10),

                partition p2 values less than (20),

                partition p3 values less than (30),

                partition p4 values less than (maxvalue)

            );

 

            select * from r partition (p1)    --查看分区中的数据

       

            一个分区的损坏不会影响其它分区的数据:

            alter table r drop partiton p1

            select * from r

            select * from r partition (p4)

            除分区数据不见外,其它都正常

 

        partition by 用于指定分区方式

        range 表示分区的方式是范围划分

        partition pn 用于指定分区的名字

        values less than 指定分区的上界(上限)

 

        添加分区:

            ALTER TABLE r

            add partition p5 values less than (xxx ) tablespace xx;

 

        查看分区表相关信息:

            SELECT table_name,partition_name,subpartition_count,

            tablespace_name,user_stats from user_tab_partitions;

 

        获取创建分区表的元数据:

              set long 10000

              select dbms_metadata.get_ddl('TABLE','R','SCOTT') from dual;

                                        表  表名  用户名   区分大小写

 

    2.Hash分区:散列分区

        Hash分区能够很容易对数据进行分区,因为语法很简单,很容易实现。在下面这种

        情况下,使用hash分区比range分区更好:

            事先不知道需要将多少数据映射到给定范围的时候

            分区的范围大小很难确定,或者很难平衡的时候

            Range分区使数据得到不希望的聚集时

            性能特性,如并行DML、分区剪枝和分区连接很重要的时候

        创建散列分区时,必须指定以下信息

            分区方法:hash

            分区列

            分区数量或单独的分区描述

 

        分裂、删除和合并分区不能应用于Hash分区,但是,Hash分区能够合并和添加。

 

        创建hash分区有两种方法:一种方法是指定分区数量,另一种方法是指定分区的名字,

        但两者不能同时指定。

 

        方法一:指定分区数量

        create table dept2 (deptno number,deptname varchar2(32))

        partition by hash(deptno) partitions 4;

 

        方法二:指定分区的名字

        create table dept3 (deptno number,deptname varchar2(32))

        partition by hash(deptno)             

        (partition p1 tablespace p1,

        partition p2 tablespace p2);

 

        create table sales_hash

        (salesman_id number(5),

        salesman_name varchar2(30),

        sales_amount number(10),

        week_no number(2))

        partition by hash (salesman_id)

        partitions 4

        store in (data1,data2,data3,data4)

       

        data1,data2,data3,data4 为表空间名。

        散列分区表的每个分区都被存储在单独的段中。

       

    3.List分区:列表分区

        List分区可以控制如何将行映射到分区中去。可以在每个分区的键上定义离散的值

        不同于Range分区和Hash分区,

            Range分区与分区相关联,为分区列假设了一个值的自然范围,故不可能将该值的范围以外的分区组织到一起。

            hash分区时不允许对数据的划分进行控制,因为系统使用的是散列函数来划分数据的。

        List分区的优点在于按照自然的方式将无序和不相关的数据集合分组。

        List分区不支持多列分区,如果将表按列分区,那么分区键就只能有表的一个单独列组成。

        Range分区和Hash分区可以对多列进行分区。

        List分区时必须指定的以下内容

            分区方法:list

            分区列

            分区描述,每个描述指定一串文字值(值的列表),它们是分区列(它们限定将被包括在分区中的行)的离散值

       

        示例:

        create table sales_list

        (salesman_id number(5),

        salesman_name varchar2(30),

        sales_state varchar2(20),

        sales_amount number(10),

        sales_date date)

        partition by list (sales_state)

        (

        partition sales_west values ('California','Hawaii') tablespace x,

        partition sales_east values ('New York','Virginia') tablespace y,

        partition sales_central values ('Texas','Illinois') tablespace z,

        partition sales_other values(DEFAULT) tablespace o

        );

 

        添加分区:

           alter table sales3 add partition hk values ('HK') tablespace xx

 

    4.Composite Partitioning:合成分区、组合分区

        组合分区使用range方法分区,在每个子分区中使用hash方法进行再分区。

        组合分区比range分区更容易管理,充分使用了hash分区的并行优势。组合分区支持历史数据和条块数据两者。

        如添加新的RANGE分区,同时为DML操作提供更高层的并行性。

        创建组合分区时,需要指定如下内容:

            分区方法:range

            分区列

            标识分区边界的分区描述

            子分区方法:hash

            子分区列

            每个分区的子分区数量,或子分区的描述

       

        create table sales_composite

        (salesman_id number(5),

        salesman_name varchar2(30),

        sales_amount number(10),

        sales_date date)

        partition by range(sales_date)

        subpartition by hash(salesman_id)

        subpartitions 4

        store in (tbs1,tbs2,tbs3,tbs4)

        (partition sales_jan2000 values less than(to_date('02/01/2000','DD/MM/YYYY')),

        partition sales_feb2000 values less than(to_date('03/01/2000','DD/MM/YYYY')),

        partition sales_mar2000 values less than(to_date('04/01/2000','DD/MM/YYYY'))

        );

 

        create table T_TRACK 

        (

            N_TRACK_ID           NUMBER(20)     NOT NULL, 

            C_COMP_CDE           VARCHAR2(6),

            T_TRACK_TM           DATE           NOT NULL,

            C_CAR_NO             VARCHAR2(50)

        )

        partition by range(T_TRACK_TM)

        subpartition by list(C_COMP_CDE)

        (

            partition P_2009_11 values less than (to_date('2009-12-01','yyyy-MM-dd'))

                    (

                    subpartition P_2009_11_P1013 values('P1013')

                    )

        );

 

六、表分区后的相关操作

    1.添加分区

        alter table T_TRACK add partition P_2005_04

        values less than(to_date('2005-05-01','yyyy-MM-dd'))

        (

            subpartition P_2005_04_P1013 values('P1013'),

            subpartition P_2005_04_P1013 values('P1014'),

            subpartition P_2005_04_P1013 values('P1015'),

            subpartition P_2005_04_P1013 values('P1016')

        )

 

    2.删除分区

        alter table T_TRACK drop partition p_2005_04;

 

    3.添加子分区

        alter table T_TRACK

        modify partition P_2005_01

        add subpartition P_2005_01_P1017 values('P1017');

 

    4.删除子分区

        alter table T_TRACK drop subpartition p_2005_01_p1017;

 

    5.截断一个分区表中的一个分区的数据:

        alter table sales3  truncate partition sp1

            这种方式会使全局分区索引无效

        alter table sales3 truncate partition sp1 update indexes

            这种方式全局分区索引不会无效

 

    6.截断分区表的子分区

        alter table comp truncate subpartition sub1

 

    7.截断带有约束的分区表

        a、禁用约束

          alter table sales disable constraint dname_sales1

        b、截断分区

          alter table sales truncate partitoin dec

        c、启用约束

          alter table sales enable constraint dname_sales1

 

    8.查看一个表是不是分区表

        select table_name,partitioned from user_tables;

        TABLE_NAME                     PAR

        ------------------------------ ---

        DEPT                           NO

        DEPT3                          YES

 

    9.将一个表的分区从一个表空间移动到另一个表空间

        a、查看分区在哪个表空间

          SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,

          SUBPARTITION_COUNT

          FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SCOTT';

 

        b、移动分区

          alter table sales move partiton sp1 tablespace tp;

 

        c、检查是否移动成功

          SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,

          SUBPARTITION_COUNT

          FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SCOTT';

 

        移动表空间后,要重建索引,否则索引会变得无效

        alter index xxx rebuild

 

 

    10.合并分区:

        alter table sales3 merge partitons sp1,sp3 into partition sp3

        合并后的分区名,不能是边界值较低的那个

 

    11.删除分区:

        alter table scott.sales_composite drop partition SALES_JAN2000;

 

    与分区表相关的数据字典视图:

        DBA_TAB_PARTITIONS

        DBA_IND_PARTITIONS

        DBA_TAB_SUBPARTITIONS

        DBA_IND_SUBPARTITIONS

转自:http://blog.youkuaiyun.com/leshami/article/details/5925572

oracle通过impdp导入不同表用户、不同表空间的数据 impdp smtj2012/密码@localhost/devdb DIRECTORY=dump_dir DUMPFILE=bkmmtdb_smtj20130417120001.dmp remap_schema=smtj:smtj2012 remap_tablespace=smtj:smtj2012 数据泵impdp参数:     1.REMAP_DATAFILE 阅读详情

相关推荐

oracle_impdp

oracle数据库impdp导入方法

分区表维护的常用命令:

分区表维护的常用命令: ALTER TABLE -- DROP -- PARTITION -- ADD | -- RENAME | -- MODIFITY | -- TRUNCATE | -- SPILT | -- MOVE | -- EXCHANGE | 分区索引的常用维护命令: ALTER INDEX -- DROP -- PARTITION -- REBUILD | -- RENAME | -- MODIFITY | -- SPILT | -- PARALLEL -- UNUSABLE 1、

viviliving的专栏 3908

oracle11g expdp impdp 分区表重映射导出导入数据迁移方案

oracle expdp impdp 分区表重映射导出导入 数据迁移方案,以SI01用户为例子,将用户分区表导出后,将分区表重映射到新的表空间,完成数据迁移和检查。照方案例子按步去做,一定能成功。

Oracle分区表

目录一、Oracle分区理论知识二、分区表的实现方式1、范围分区(range partition table)2、列表分区(list partitioning)3、散列分区(hash partitioning)4、间隔分区(interval partitioning)5、引用分区(reference partitioning)6、组合分区(composite partitioning)7、行移动(row movement)三、普通表转换为分区表方法1、导入、导出(Export/import method)方

道可道非常道 3342

【超详细】安装了anaconda后,Ubuntu18+COLMAP配置疯狂踩坑踩至魔怔的记录

本博客收集了博主在Ubuntu18系统中编译COLMAP所遇到的困难,提供了解决方法,也收集了目前网上大多数的坑,除此之外,也为Ubuntu18系统下COLMAP的安装提供了一种新的路径。

Stay_Foo_lish的博客 3508

2025年三级等保新规实战:从零开始搭建企业安全防护体系(附完整配置清单)

本文详细解析2025年三级等保新规的核心变化,提供从零开始搭建企业安全防护体系的实战指南。重点介绍动态防护能力、实战化攻防验证和全链路数据保护等关键要求,并附完整配置清单,帮助企业高效合规。

weixin_30836759的博客 468

Oracle分区表详解,分区表创建,分区表按日期划分

前言(絮叨絮叨) 最近接手一个项目,要求与Oracle数据库做对接,分区表还是要做的,可是网上根本涉及内容很少,没办法,用一下午才弄明白,截至发稿,饭都没吃呢。。。。。。。。 分区表概念: 正常增删改查都行,SQL语句正常写,但是查询可以通过分区表进行区分查询,可以限定范围什么的,特别方便,而且快,不絮叨,直接说主题。 分区表创建 先说下,里面有两个地方需要注意,一个是分区字段名,这里用的是:WO...

it佳佳的博客 1万+

管理信息系统(MIS)设计

一名读者可以借阅多本图书,而一本图书也可以被不同的读者借阅,所以读者与图书之间存在着多对多的借阅关系,读者与图书之间存在着多对多的联系,即m:n的联系。每一种图书属于一种图书类型,而一种图书类型可以包含很多本图书,因此可以得到图书类型与图书之间也存在着一种一对多的联系,即图书类型与图书是1:n的联系。系统应该实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、图书归还登记、过期图书处理、丢失图书处理及读者借阅证件信息的维护等;

m0_69718745的博客 2475

oracle的分区表学习

ORACLE的分区表 一、分区表应用场景介绍 (1)什么是分区 在Oracle数据库中,为了提升对大表/大索引的可管理性、可维护性以及性能,Oracle引入了分区表机制,可以将大表/大索引分解为多个小的、可管理的分区。多个分区相对独立,有独立的存储结构,共同构成了整个完整的表/索引。分区对应用透明,即对访问数据库的应用而言,逻辑上讲只有一个表或一个索引(相当于应用看到的仍然只是一个表或索引),但在物理上这个表...

weixin_41561862的博客 4017

SAP_SD模块销售开票计划预收款系统配置及前台操作说明

在 SAP SD 中,开票计划(Billing Plan)是一种允许根据时间节点或里程碑对销售订单进行分期开票的功能。其中最常见的一种应用就是预收款(Down Payment Billing),即在销售订单中直接定义某个百分比或金额作为预收款,系统在开票时自动生成预收账单。大额合同或长期项目型销售(先收 20%,交货前收 30%,交货后收 50%)。分期付款模式(分阶段收款)。必须预收款才能安排生产或交货的业务。后台路径:SPRO—销售与分享—销售—销售凭证—销售凭证项目—定义项目类别。

我小时候很黑的博客 1407

蓝牙攻防实战:蓝牙技术详解

蓝牙作为轻量级、低功耗的无线通信技术,其设计兼顾了效率与灵活性,但也留下了诸多安全隐患。随着物联网设备的爆发式增长,蓝牙的攻击面也在不断扩大。理解其底层通信机制、协议栈结构以及配对加密逻辑,是提升无线安全防护能力的关键。

idlecloud0105的博客 738

oracle按时间创建分区表

首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。oracle分区表是oracle数据库提供的一种表分区的实现形式。表进行分区后,逻辑上仍然是一张表,原来的查询SQL同样生效,同时可以采用使用分区查询来优化SQL查询效率,不至于每次都扫描整个表 一、分区表基本操作 1、按时间分区表创建: 1 ...

Jbase的博客 6463

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Oracle】分区表

分区表是Oracle数据库中将大表物理分割成多个较小、更易管理的片段的技术。每个分区可以独立管理,同时对应用程序保持透明。

Guiat的博客 1401

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

oracle 分区表介绍

分区表(Partitioned Table)是数据库中一种特殊的表结构,它通过将数据分割成多个分区来提高查询和管理性能。每个分区都包含数据的一个子集,分区表通常用于存储大量数据,通过分区使得操作数据更为高效。分区表的优点包括:提高查询性能:对于大数据量的表,通过查询特定分区的数据而非整个表来提高查询效率。提高管理效率:分区表可以将数据根据某些条件(如时间、范围、列表等)分区,使得数据的备份、恢复和删除等操作更为方便。提高并发性:分区表可以实现不同分区并行处理,提升数据库的并发能力。分区的类型。

小 tom的博客 2116

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

oracle分区表详解

关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作 一、分区表理论知识:   ORACLE提供了分区技术以支持VLDB(vary large database)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。 oracle的分区可以包含多

naomi_qing的博客 2748

oracle查询分区表分区,查询分区表(查看oracle分区表)

查询分区表(查看oracle分区表)2020-07-24 11:04:31共10个回答查分区表user_tab_partitions,或者user_segments,或者user_objects都行.个人感觉user_tab_partitions比较好.至于6个月之前,可以用sysdate和add_months来做,然后再to_char截取,就行如果查询当前用户下得分区表:select*fromu...

weixin_29127653的博客 1万+

ORACLE分区表发挥性能

<br />在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。<br />同事的分区表总结,转载一下。<br />1.1 分区表PARTITION table<br />在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。1.1.1 分区表的建立:<br />某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的是该公司1999年的数据(假设每月产生30M的数据),操作如下: <br />范围分区表:<br />CREATE

无双小宝 6125

oracle非分区表,转分区表

 本文原出处:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/10/23/4717318.aspx将普通表转换成分区表有4种方法:       1. Export/import method       2. Insert with a subquery method       3. Partition exchang

天涯时空 1万+

oracle 建立多分区表,oracle创建分区表

在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。以system身份登陆数据库,查看 v$option视图,如果其中Partition为TRUE,则支持分区功能;否则不支持。Partition有基于范围、哈希、综和三种类型。我们用的比较多的是按范围分区的表。[@more@]在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。以system身份登陆数...

weixin_32657693的博客 737

oracle 分区表的操作,Oracle分区表常见操作

Oracle分区表常用于业务中大表使用,如历史交易记录表等,提高表记录查询效率。本文主要描述范围分区表的创建、新增以及索引创建。Oracle操作分区表相关信息显示数据库所有分区表的信息:DBA_PART_TABLESSQL> select owner,table_name,partitioning_type,partition_count,partitioning_key_count,sta...

weixin_34790159的博客 635
上一篇: JDK安装
下一篇: TNS-01189 The listener could not authenticate the user
Silence-
博客等级 码龄16年 32粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值