免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1885 | 回复: 6
打印 上一主题 下一主题

请问一个分区表range划分的问题。(比较复杂) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-30 01:46 |只看该作者 |倒序浏览
现在有一张range分区表object_a,数据划分在8个partition上1-8,各partition使用不同的tablespace。分区键id 是varchar2(16)类型的。

分区键取值为16进制的字符串,从010000到02ffff。

分区1的range取值为id less than ('010B00')。

现在问题出现了:
1、7个分区的空间都被使用了。
2、select max(id) from object_a partition "1";得出的结果是0109ff。按理说应该是010Aff啊...
3、select min(id) from object_a partition "2";得出的结果是010a00。

现在估测可能性为:varchar2的字段在排序上对大小写字母是有区分的,小写字母排列顺序大于大写字母。或者大写字母在varchar2字段类型中属于非法。

请问一下诸位大虾,如何能改变各分区的range值。以及改变了range值后,数据会按照range值归入应属的分区中吗?
比如现在010a00的数据在分区2中,如果将分区1的range值改为 id less than ('010b00')。现在已经在分区2种的数据会回到分区1中来吗?

论坛徽章:
0
2 [报告]
发表于 2006-11-30 11:44 |只看该作者
自己顶一下...

昨晚为这个事搞到凌晨4点。实在不行只能重建表了。问题是数据量太大,上亿条数据备份找不到空间啊...

论坛徽章:
0
3 [报告]
发表于 2006-11-30 13:10 |只看该作者
我的测试:

CREATE TABLE test10(
      id     varchar2(16),
      name   varchar2(16)
)
PARTITION BY RANGE(id)
(PARTITION test10_p1 VALUES LESS THAN ('010B00'),
PARTITION test10_p2 VALUES LESS THAN (MAXVALUE)
)
TABLESPACE test;

SQL> select id,name from test10 partition (test10_p1);

no rows selected

SQL> insert into test10 values('010Aff','x-man');

1 row created.

SQL> select id,name from test10 partition (test10_p1);

ID               NAME
---------------- ----------------
010Aff           x-man

SQL> insert into test10 values('0109ff','y-man');

1 row created.

SQL> select id,name from test10 partition (test10_p1);

ID               NAME
---------------- ----------------
010Aff           x-man
0109ff           y-man

SQL> select max(id) from test10 partition (test10_p1);

MAX(ID)
----------------
010Aff

论坛徽章:
0
4 [报告]
发表于 2006-11-30 13:15 |只看该作者
原帖由 tjlxx 于 2006-11-30 01:46 发表
请问一下诸位大虾,如何能改变各分区的range值。以及改变了range值后,数据会按照range值归入应属的分区中吗?
比如现在010a00的数据在分区2中,如果将分区1的range值改为 id less than ('010b00')。现在已经在分区2种的数据会回到分区1中来吗?


除非在create table的时候有ENABLE ROW MOVEMENT,这个default是DISABLE ROW MOVEMENT,否则无法update key。

你可以通过alter table xxx enable row movement。

不过update key要注意对性能的影响。

[ 本帖最后由 numenhuang 于 2006-11-30 13:24 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-11-30 13:49 |只看该作者
可惜我没有测试用的oracle环境,而且现在也没有时间去测...

如果插入的值是('010aff','x-man')不知道会是怎样的情况。

非常感谢numenhuang的解答。

论坛徽章:
0
6 [报告]
发表于 2006-11-30 14:02 |只看该作者
字符串比较是按照字符依次来比较的,以遇到的第一个不相同字符大小为准,a的ascii为97, A为65, 9为57,所以9<A<a

论坛徽章:
0
7 [报告]
发表于 2006-11-30 17:16 |只看该作者
原帖由 numenhuang 于 2006-11-30 14:02 发表
字符串比较是按照字符依次来比较的,以遇到的第一个不相同字符大小为准,a的ascii为97, A为65, 9为57,所以9<A<a


原来如此。高手啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP