免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3813 | 回复: 5

请教关于ASE数据分区的问题 [复制链接]

论坛徽章:
0
发表于 2012-11-26 18:53 |显示全部楼层
本帖最后由 appleshuffle 于 2012-12-24 17:45 编辑

我从文档上了解到在系统表syspartitions里面,对于每个数据库,以下每一项在syspartitions中都有相应的一行:每个表分区,每个聚簇索引分区,每个非聚簇索引分区,每个单分区(未分区)表,每个单分区(未分区)聚簇或非聚簇索引。我用该语句创建一张表:
create table dbo.TEST (
        Column_1 int null,
        Column_2 int null,
        Column_3 int null
)
执行后用该语句查询: SELECT * FROM syspartitions where id = object_id('TEST') 后得到该结果,请问这是否就是上面所说的每个单分区(未分区)表?:
a.png
当我往这表里建一个聚簇索引后,再执行该查询语句,结果变了,请问为什么会这样?分区名字变了,可是和原表一样用同一个分区,请各大侠提供一下相关参考文档:
b.png

另外我从这个andkylee所写的这篇文章http://www.dbainfo.net/sybase-ase-15-partitions.htm得知:
删除分区使用这语句:alter table lineitem partition by roundrobin (part1),重分区为一个分区。
我在文档中看到alter table有drop partition的语法,但它明确说drop partition只能用于删除List和Range的分区,请问这两个语句在目的及效果上是否一样(排除操作用于分区类型的不同)?
而后我把上述的表分区为A, B, C并随后尝试用alter table drop partion A, B, C来删掉分区,可是服务器提示不能把全部分区删掉,得保留至少一个分区。我想请问能否把剩下的一个分区变为单分区(未分区)表的状态了?因为我总感觉用alter table partition by roundrobin并不是真正意思上删掉分区的意思。请各位大侠指教!!!

=====================感谢回复分割线==========================

谢谢各位大侠的回复。

我又遇到了一个问题,再想请教一下:
我对一个表进行round-robin分区,分了三个区。随后对这张表建了一个聚簇索引,并执行以下语句:
select * from syspartitions, syscomments where dbo.syspartitions.partitionid = dbo.syscomments.partitionid and dbo.syspartitions.id = object_id('A0')
服务器返回六条数据,而且syscomments.text里前三条是null的,符合round-robin的分区条件;后三条貌似是不太正常的信息。。。。请大侠们赐教一下这是怎么回事,为什么会这样。谢谢。
x.png

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2012-11-28 17:45 |显示全部楼层
问得好。
这里牵涉到几个概念:
1. 对于APL表来说,clustered index的leaf page就是data page,所以你能看见在建了clustered index之后,会有data page的重组和page变化,并且index需要另外的空间存储,它也需要一个partition
2. ASE15以上,table和index都必须基于partition存储,所以会有不同的partition
3. 既然必须基于partition存储,那么至少得保留一个partition,而defautl partition类型就是roundrobin。所以ASE15以上无分区就是指恢复缺省状态——仅有1个roundrobin partition

论坛徽章:
0
发表于 2012-11-28 19:05 |显示全部楼层
回复 2# Eisen


谢谢Eisen的回复!
APL表和建在其上的聚簇索引都指向同一个分区,而且记录只有一条,只是名字变了,但如果我建一个非聚簇索引,则会多加上一条记录;
我尝试建DOL表,随后在表上创建聚簇及非聚簇索引,查询后一共得到三条记录。
APL表和DOL表对随后所建的索引,分区什么的区别很大吗?请问能提供相关的文档资料学习吗?
还有一个问题就是,如果我要弄一个功能叫drop partition,你觉得它该运行alter table partition by roundrobin还是alter table drop partition的命令呢?

论坛徽章:
0
发表于 2012-11-29 01:54 |显示全部楼层
都可以,"drop partition"要多几步。注意分区变动需要drop index first。
1> alter table Client partition by range (ClientUserID)
2> (ptn1 values<=(4000000),
3> ptn2 values<=(7000000),
4> ptn3 values<=(10000000))
5> go
(2 rows affected)
1> alter table Client partition by roundrobin(ClientUserID)
2> go
(2 rows affected)
1> alter table Client partition by range (ClientUserID)
2> (ptn1 values<=(4000000),
3> ptn2 values<=(7000000),
4> ptn3 values<=(10000000))
5> go
(2 rows affected)
1> alter table Client drop partition ptn3
2> go
1> alter table Client drop partition ptn2
2> go
1> alter table Client drop partition ptn1
2> go
Msg 13968, Level 16, State 1:
Server 'TOP_DBA', Line 1:
ALTER TABLE 'Client' failed. You cannot drop all partitions of a table.

论坛徽章:
0
发表于 2012-12-01 09:16 来自手机 |显示全部楼层
对apl来讲,数据就是clustered索引的一部分(leaf层数据),所以syspartions里面只有一条记录,我们称之为0 1row,0是数据的index id,1是聚簇索引的index id

对dol来讲,聚簇索引的index id是2,称之为placementindex,建立索引时数据会排序,但这个顺序在后续dml操作中是不维护的,不同的是,数据和索引会有各自的syspartion row

非聚簇索引都会有单独的syspartion row

论坛徽章:
0
发表于 2012-12-24 17:48 |显示全部楼层
谢谢各位大侠的回复,我又遇到一个问题了,感谢赐教。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP