关于分区表

[复制链接]
查看11 | 回复6 | 2011-5-7 01:45:08 | 显示全部楼层 |阅读模式
分区表中的各个分区,还处于同一个段中吗?
各分区可以存储在不同的表空间中吗?
如果可以的话,那是不是一个表存储在不同的表空间中?
书上的例子为各分区指定了不同的表空间,是什么道理?
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
各个分区都是 一个独立的段。可以分别单独存储。
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
建立了分区表后, 在dba_tables对应记录中partitioned为YES.
而在dba_segmets对应每个分区都会有一条记录. 而这个视图中有tablespace_name字段.
也就是说,你可以将这些segments(patition)指[B]分别存放到[/B]任意可用表空间. (当然undo和temp tablespace是不行的).
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
最初由 Puber 发布
[B]建立了分区表后, 在dba_tables对应记录中partitioned为YES.
而在dba_segmets对应每个分区都会有一条记录. 而这个视图中有tablespace_name字段.
也就是说,你可以将这些segments(patition)指[B]分别存放到[/B]任意可用表空间. (当然undo和temp tablespace是不行的). [/B]


这么说,一个表可以存储在不同的表空间里了?
也就是一个表如果是分区表的话,它可以包含几个段。并且各个段可以在不同的表空间中。
之前以为,每个表分配一个段,每个段属于一个表空间。所以一个表只能属于一个表空间。
现在看来,并不是这么一回事呀
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
hash分区:
create table gear(id number, name varchar2(60)
partition by hash(id)
partition 4 store in (gear1,gear2,gear3,gear4);
这里,in 后面,应该是段名还是表空间名呢?
如果是表空间名的话,那段名怎么指定?
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
1.store in后面的是tablespace name指的是hash partition segments存放的tablespace name. 数量不一定要等于你指定hash partition的数量. 若少于分区数,则Oracle会为分区循环指定tablespace.
(你可以用select * from dba_tablespaces where tablespace_name like 'GEAR%'; 确认数据库中是否有这几个表空间).

2. Hash partition分几个分区是由partition 4 指定的(或者可以在partition子句中自定义分区名称和数量).每个partition的名称由Oracle自动生成,格式为SYS_Pn.
若使用default tablespace ,则你的DDL可写为:
create table gear(id number, name varchar2(60)
partition by hash(id)
partition 4;
或者
create table gear(id number, name varchar2(60)
partition by hash(id)
partition 4 store in (gear1,gear2);
回复

使用道具 举报

千问 | 2011-5-7 01:45:08 | 显示全部楼层
Hash Partitioning Tables
Hash partitioning is useful when there is no obvious range key, or range partitioning will cause uneven distribution of data. The number of partitions must be a power of 2 (2, 4, 8, 16...) and can be specified by the PARTITIONS...STORE IN clause:
CREATE TABLE invoices
(invoice_noNUMBER NOT NULL,
invoice_dateDATE NOT NULL,
commentsVARCHAR2(500))
PARTITION BY HASH (invoice_no)
PARTITIONS 4
STORE IN (users, users, users, users);

or specified individually:
CREATE TABLE invoices
(invoice_noNUMBER NOT NULL,
invoice_dateDATE NOT NULL,
commentsVARCHAR2(500))
PARTITION BY HASH (invoice_no)
(PARTITION [B]invoices_q1[/B] TABLESPACE users,
PARTITION invoices_q2 TABLESPACE users,
PARTITION invoices_q3 TABLESPACE users,
PARTITION invoices_q4 TABLESPACE users);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行