oracle表空间表分区详细解决方案及oracle表分区查询使用
1的概念。表空间和分区表
2的具体作用。表分区
3的利与弊。表分区
4的几种类型及操作方法。表分区
5。表分区的维护操作。
(1)表空间和分区表的概念
表空间:
它是一个或多个数据文件的集合。所有的数据对象都存储在指定的表空间中,但它们主要存储在表中,因此它们被称为表空间。
分区表:
当表中的数据量在增加时,查询数据的速度会减慢,应用程序的性能会降低,因此我们应该考虑对表进行分区。它只在许多表空间(物理文件)中以物理形式存储表中的数据,因此在搜索数据时,它不会在任何时间扫描整个表。
(2)。表分区的特殊作用
Oracle的表分区功能带来巨大的应用效益的提高可管理性、性能和可用性。一般来说,分区可以大大提高某些查询和维护操作的性能。此外,分区可以大大简化常见的管理任务,和分区建设千兆字节的数据系统或超高可用性系统的关键工具。
分区功能可以进一步细分表,索引,索引组织表或成段,称为分区,每个分区都有自己的名字,也可以选择自己的存储特征。从数据库管理员的角度,划分的对象有多个段,可以集体或单独管理。这使得数据库管理员在分区后管理对象方面具有相当大的灵活性。但是,从应用程序的角度来看,分区表与非分区表完全相同。不需要修改任何表使用SQL DML命令分区后。
何时使用分区表:
1,表的大小超过2GB。
2。该表包含历史数据,新数据将添加到新分区中。
(3)。表分区的优缺点
表分区具有以下优点:
1,提高查询性能:分区对象的查询只能搜索您关心的分区,提高检索速度。
2。增强的可用性:如果表的分区失败,其他分区中的表的数据仍然可用;
3,维护方便:如果表的分区有故障,则需要修复数据,只需修复分区。
4,平衡I/O:可以将不同分区映射到磁盘,以平衡I/O,并提高整个系统的性能。
缺点:
分区表关联:现有表没有一种方法可以直接转换为分区表,但Oracle提供联机重新定义表的功能。
(4)。几种类型的表分区和操作方法
1。范围分区:
范围分区根据范围将数据映射到每个分区,这取决于在创建分区时指定的分区键。此分区是最常用的分区,分区键通常使用日期。
在使用范围分区时,请考虑以下规则:
1。每个分区必须有一个值小于1的子句,该子句指定不包含在分区中的上限值。任何与分区键上限相等或大于上限的记录都将被添加到下一个更高的分区。
2。除第一个分区外,所有分区都有一个隐式下限值,这是该分区前一个分区的上限。
三.在最高的分区,最大值是defined.maxvalue代表一个不确定的值。这个值是高于其他分区中的任何分区键的值,也可以理解为高于规定值的值在任何分区比较少,同时,它包含空值。
例1:
假设有一个客户表。桌子上有200000排。我们通过customer_id分区表,每个分区和存储100000行。我们保存每个分区以分隔表空间,以便数据文件可以跨越多个物理磁盘:
复制代码代码如下所示:
创建表的客户
(
customer_id数不空主键,
first_name VARCHAR2(30)不为空,
last_name VARCHAR2(30)不为空,
phonevarchar2(15)不为空,
(80)emailvarchar2,
状态字符(1)
)
按范围分区(customer_id)
(
分区cus_part1值小于(100000)表空间cus_ts01,
分区cus_part2值小于(200000)表空间cus_ts02
)
例二:时间划分
复制代码代码如下所示:
创建表order_activities
(
order_id数(7)不为空,
order_date日期,
total_amount数,
custotmer_id号(7),
付费字符(1)
)
按范围分区(order_date)
(
分区ord_act_part01值小于(to_date(01 -可能- 2003,'dd-mon-yyyy '))tablespaceord_ts01,
分区ord_act_part02值小于(to_date('01-jun-2003 ','dd-mon-yyyy '))表空间ord_ts02,
分区ord_act_part02值小于(to_date('01-jul-2003 ','dd-mon-yyyy '))表空间ord_ts03
)
例三:次
复制代码代码如下所示:
创建表的射程表
(
主键,
iName varchar(10),
等级int
)
按范围划分(等级)
(
分区1值小于(1000)表空间part1_tb,
分区二值小于(次)表空间part2_tb
);
两。列表分区:
此分区的特性是列中只有几个值。基于此,我们可以使用列表分区。
一例
复制代码代码如下所示:
创建表problem_tickets
(
problem_id数(7)非空主键,
描述VARCHAR2(2000),
customer_id数(7)不为空,
date_entered日期不为空,
现状VARCHAR2(20)
)
按列表分区(状态)
(
分区prob_active值(主动的)的表空间prob_ts01,
分区prob_inactive值(不活动的)的表空间prob_ts02
)
在两例
复制代码代码如下所示:
创建表listtable
(
主键,
名称varchar(20),
地区varchar(10)
)
按列表分区(区域)
(
分区第一部分价值('guangdong,北京的part1_tb)表空间,
分区二值(上海、南京)的表空间part2_tb
);
)
三。哈希分区:
这种类型的分区使用列值上的哈希算法来决定在该行中放置哪个分区。当列的值不合适时建议使用哈希分区。
哈希分区是通过指定分区号均匀分配数据的分区类型,因为在I/O设备上进行哈希分区,所以这些分区的大小是相同的。
例1:
复制代码代码如下所示:
创建表hash_table
(
编号(8),
INF VARCHAR2(100)
)
散列分区
(
分区表空间hash_ts01 part01,
分区表空间hash_ts02 part02,
分区表空间hash_ts03 part03
)
速记:
复制代码代码如下所示:
创建相关表
(
编号编号(4),
ename VARCHAR2(30),
萨尔号
)
散列分区法(EMPNO)分区8
商店(EMP1,EMP2,EMP3,emp4,emp5,emp6,emp7,emp8);
哈希划分最重要的机制是根据哈希算法计算特定记录的哪个分区。哈希算法最重要的功能是散列函数。如果您想在Oracle中使用散列分区,只需要指定分区的数量,建议分区数使用2个N减,这可以使数据分配在各个分区之间更均匀。
四。组合范围散列分区
此分区基于范围分区和列表分区。首先,表由某个列分区,然后根据列对列表进行分区。分区中的分区称为子分区。
复制代码代码如下所示:
创建表的销售
(
product_id VARCHAR2(5),
sales_date日期,
sales_cost号(10),
现状VARCHAR2(20)
)
按范围分区(sales_date)子分区列表(状态)
(
分区P1值小于(to_date('2003-01-01 ','yyyy-mm-dd '))表空间rptfact2009
(
子分区p1sub1值(主动的)的表空间rptfact2009,
子分区p1sub2值(不活动的)的表空间rptfact2009
),
分区P2的值小于(to_date('2003-03-01 ','yyyy-mm-dd '))表空间rptfact2009
(
子分区p2sub1值(主动的)的表空间rptfact2009,
子分区p2sub2值(不活动的)的表空间rptfact2009
)
)
五。复合散列分区:
分区基于范围分区和哈希分区,其中表首先由一个列分区,然后在一个列中执行哈希分区。
复制代码代码如下所示:
创建表dinya_test
(
transaction_id数主键,
item_id数(8)不为空,
item_description VARCHAR2(300),
transaction_date日期
)
按范围分区(transaction_date)子分区的子分区散列(transaction_id)3店
(
分区part_01值小于(to_date('2006-01-01 ','yyyy-mm-dd ')),
分区part_02值小于(to_date('2010-01-01 ','yyyy-mm-dd ')),
分区part_03值小于(最大值)
);
(5)。表分区上的一些维护操作:
1。添加分区
下面的代码将一个P3分区添加到销售表中
复制代码代码如下所示:
修改表的销售增加分区P3值小于(to_date('2003-06-01 ','yyyy-mm-dd '));
注意:上面添加的分区边界应该高于最后一个分区边界。
下面的代码添加p3sub1子分区的分区表P3销售
复制代码代码如下所示:
修改表的销售分区P3添加子p3sub1值(完整的);
两。删除分区
下面的代码删除P3表分区:
复制代码代码如下所示:
表销售下拉分区;
的p4sub1子分区是在下面的代码中删除:
复制代码代码如下所示:
修改表的销售下降p4sub1子分区;
注意:如果删除的分区是表中唯一的分区,那么分区将不会被删除,如果要删除分区,则必须删除表。
三。隔断隔断
截断分区删除分区的数据并没有删除分区或删除其他分区的数据,分区可以被截断,如果表中只有一个分区,下面的代码分区截断:
复制代码代码如下所示:
更改表销售截断分区P2;
将不会通过下面的代码:
复制代码代码如下所示:
修改表的销售子p2sub2截断;
四、合并分区
合并分区是将相邻分区合并到一个分区中,这将导致更高的分区边界:
复制代码代码如下所示:
将表分区合并到分区P2中;
五。拆除分
分割分区将一个分区划分为两个新分区,原来的分区不再存在。注意,哈希类型的分区不能拆分。
修改表的销售sblit分区P2在(to_date('2003-02-01 ','yyyy-mm-dd '))到(分区);
六、联合分区(coalesca)
组合分区是将哈希分区中的数据连接到其他分区。当哈希分区中的数据较大时,可以添加哈希分区,然后加入。值得注意的是,联接分区只能用于散列分区:
复制代码代码如下所示:
修改表的销售coalesca分区;
七。名称列表的细分
下面的代码将p21改为P2
复制代码代码如下所示:
将表分区重命名为P2;
八。相关查询
跨分区查询
复制代码代码如下所示:
从中选择总和(*)
(select count(*)CN t_table_ss分区(p200709_1)
联盟的所有
select count(*)CN t_table_ss分区(p200709_2)
);
查找表上有多少个分区
复制代码代码如下所示:
SELECT * FROM user_tab_partitions哪里table_name = 'tablename
查询索引信息
复制代码代码如下所示:
选择object_name,object_type,tablespace_name,金额(价值)
从V segment_statistics美元
在那里statistic_name(物理读写,物理,逻辑读)和object_type = 'index
通过object_name,object_type组,tablespace_name
4倒序
-显示数据库所有分区表上的信息:
SELECT * FROM dba_part_tables
-显示当前用户可以访问的所有分区表信息:
SELECT * FROM all_part_tables
-显示所有当前用户分区表的信息:
SELECT * FROM user_part_tables
-显示表分区信息显示数据库中所有分区表的详细分区信息:
SELECT * FROM dba_tab_partitions
-显示当前用户可以访问的所有分区表的详细分区信息:
SELECT * FROM all_tab_partitions
-显示当前用户所有分区表的详细分区信息:
SELECT * FROM user_tab_partitions
-显示子分区信息显示所有组合分区表的数据库的子分区信息:
SELECT * FROM dba_tab_subpartitions
-显示所有子分区信息相结合的分区表,当前用户可以访问:
SELECT * FROM all_tab_subpartitions
-显示当前用户的所有子分区信息复合分区表:
SELECT * FROM user_tab_subpartitions
-显示分区列显示数据库所有分区表的分区列信息:
SELECT * FROM dba_part_key_columns
-显示当前用户可以访问的所有分区表的分区列信息:
SELECT * FROM all_part_key_columns
-显示当前用户所有分区表的分区列信息:
SELECT * FROM user_part_key_columns
-显示的子栏显示所有分区表的数据库的子分区列信息:
SELECT * FROM dba_subpart_key_columns
-显示的子栏目信息的所有分区表的当前用户可以访问:
SELECT * FROM all_subpart_key_columns
显示所有的分区表的当前用户的子分区列信息:
SELECT * FROM user_subpart_key_columns
-如何查询Oracle数据库中的所有分区表
SELECT * FROM user_tables在a.partitioned =是
-删除表的数据是
TRUNCATETABLE table_name;
-删除分区表中某个分区的数据
修改表table_name删除分区P5;