分区表数据无法分别写在不同的文件上

guzhijie1981 2014-01-21 02:21:52
如下,这个是我程序生成的SQL ,都执行了,但是仅第一个2014_01_21_13_00_00.ndf文件被写数据了,一小时之后数据下入到p0中,请大侠出手,帮忙看看,谢谢


ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_13_00_00];
ALTER DATABASE opcdatabase add file (name = '2014_01_21_13_00_00', filename = 'c:\2014_01_21\2014_01_21_13_00_00.ndf') TO filegroup [2014_01_21_13_00_00];
ALTER DATABASE opcdatabase MODIFY FILEGROUP [2014_01_21_13_00_00] DEFAULT;
ALTER DATABASE opcdatabase ADD FILEGROUP [p0];
ALTER DATABASE opcdatabase add file (name = 'p0', filename = 'c:\p0.ndf') TO filegroup [p0];
create partition function DivideItemData(datetime) as range right for values('2014-01-21 14:00:00');
CREATE PARTITION SCHEME SchemeItemData AS PARTITION DivideItemData TO ('2014_01_21_13_00_00', 'p0');
create table opc_itemdata(ITEMID nvarchar(50) NOT NULL,QUALITY int NOT NULL,VALUE decimal(18, 2) NOT NULL,TIMESTP datetime NOT NULL,constraint PK_opc_itemdata primary key(ITEMID,TIMESTP)) ON SchemeItemData (TIMESTP);
alter partition scheme SchemeItemData next used [2014_01_21_13_00_00];

ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_14_00_00];
ALTER DATABASE opcdatabase add file (name = '2014_01_21_14_00_00', filename = 'c:\2014_01_21\2014_01_21_14_00_00.ndf') TO filegroup [2014_01_21_14_00_00];
ALTER DATABASE opcdatabase MODIFY FILEGROUP [2014_01_21_14_00_00] DEFAULT;
alter partition function DivideItemData() split range ('2014-01-21 15:00:00');
alter partition scheme SchemeItemData next used [2014_01_21_14_00_00];
...全文
143 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
guzhijie1981 2014-01-22
  • 打赏
  • 举报
回复
好了,谢谢各位,是我理解错了,p0是第二次存储的文件,所以第一个2014-01-21 14:00:00文件存储完,就存到p0了, 而不是2014-01-21 15:00:00文件,其实是没有问题的,表象迷惑了我,结贴!
LongRui888 2014-01-21
  • 打赏
  • 举报
回复
引用 19 楼 guzhijie1981 的回复:
[quote=引用 18 楼 yupeigu 的回复:] [quote=引用 16 楼 guzhijie1981 的回复:] [quote=引用 14 楼 DBA_Huangzj 的回复:] http://social.msdn.microsoft.com/forums/zh-CN/b129a2f6-3f82-4fd4-8ec2-c7fe0aecef61/sqlserver-2005-你看看这里有没有帮助
试了下,还是不行,我把 ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_15_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_15_00_00', filename = 'c:\2014_01_21\2014_01_21_15_00_00.ndf') TO filegroup [2014_01_21_15_00_00]; alter partition scheme SchemeItemData next used [2014_01_21_15_00_00]; alter partition function DivideItemData() split range ('2014-01-21 16:00:00'); 改成在修改DivideItemData之前了。还是不行[/quote] 对了,从你上面的代码: create partition function DivideItemData(datetime) as range right for values('2014-01-21 14:00:00'); 是不是: '2014_01_21_13_00_00'分区存储1点到2点之前的数据,而 'p0'存储大于等于2点的数据是吧[/quote] 是的,我同事帮我看了,有个想法,今天跑一个晚上看看[/quote] 哦 ,那就试试。 你们的数据量是很大的把,一个小时一个分区。
guzhijie1981 2014-01-21
  • 打赏
  • 举报
回复
引用 18 楼 yupeigu 的回复:
[quote=引用 16 楼 guzhijie1981 的回复:] [quote=引用 14 楼 DBA_Huangzj 的回复:] http://social.msdn.microsoft.com/forums/zh-CN/b129a2f6-3f82-4fd4-8ec2-c7fe0aecef61/sqlserver-2005-你看看这里有没有帮助
试了下,还是不行,我把 ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_15_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_15_00_00', filename = 'c:\2014_01_21\2014_01_21_15_00_00.ndf') TO filegroup [2014_01_21_15_00_00]; alter partition scheme SchemeItemData next used [2014_01_21_15_00_00]; alter partition function DivideItemData() split range ('2014-01-21 16:00:00'); 改成在修改DivideItemData之前了。还是不行[/quote] 对了,从你上面的代码: create partition function DivideItemData(datetime) as range right for values('2014-01-21 14:00:00'); 是不是: '2014_01_21_13_00_00'分区存储1点到2点之前的数据,而 'p0'存储大于等于2点的数据是吧[/quote] 是的,我同事帮我看了,有个想法,今天跑一个晚上看看
LongRui888 2014-01-21
  • 打赏
  • 举报
回复
引用 16 楼 guzhijie1981 的回复:
[quote=引用 14 楼 DBA_Huangzj 的回复:] http://social.msdn.microsoft.com/forums/zh-CN/b129a2f6-3f82-4fd4-8ec2-c7fe0aecef61/sqlserver-2005-你看看这里有没有帮助
试了下,还是不行,我把 ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_15_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_15_00_00', filename = 'c:\2014_01_21\2014_01_21_15_00_00.ndf') TO filegroup [2014_01_21_15_00_00]; alter partition scheme SchemeItemData next used [2014_01_21_15_00_00]; alter partition function DivideItemData() split range ('2014-01-21 16:00:00'); 改成在修改DivideItemData之前了。还是不行[/quote] 对了,从你上面的代码: create partition function DivideItemData(datetime) as range right for values('2014-01-21 14:00:00'); 是不是: '2014_01_21_13_00_00'分区存储1点到2点之前的数据,而 'p0'存储大于等于2点的数据是吧
guzhijie1981 2014-01-21
  • 打赏
  • 举报
回复
引用 14 楼 DBA_Huangzj 的回复:
http://social.msdn.microsoft.com/forums/zh-CN/b129a2f6-3f82-4fd4-8ec2-c7fe0aecef61/sqlserver-2005-你看看这里有没有帮助
试了下,还是不行,我把 ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_15_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_15_00_00', filename = 'c:\2014_01_21\2014_01_21_15_00_00.ndf') TO filegroup [2014_01_21_15_00_00]; alter partition scheme SchemeItemData next used [2014_01_21_15_00_00]; alter partition function DivideItemData() split range ('2014-01-21 16:00:00'); 改成在修改DivideItemData之前了。还是不行
LongRui888 2014-01-21
  • 打赏
  • 举报
回复
照理不用next used也可以的把
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
我看的也是你这篇,你看D那里,它没有指定NEXT USED,我觉得应该是这里,实际上你没有让数据写到下一个文件,所以一直在P0
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
联机丛书上对Next used的例子直接就是: CREATE PARTITION FUNCTION myRangePF4 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000); GO CREATE PARTITION SCHEME myRangePS4 AS PARTITION myRangePF4 TO (test1fg, test2fg, test3fg, test4fg, test5fg) 并没有指明NEXT USED这个哦
guzhijie1981 2014-01-21
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:
CREATE PARTITION SCHEME SchemeItemData AS PARTITION DivideItemData TO ('2014_01_21_14_00_00', 'p0'); 这句问题
能否告知,错在什么地方了? 我是参考了http://msdn.microsoft.com/zh-cn/library/ms179854.aspx的 , 谢谢了
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
看错了,稍等,我看看
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
CREATE PARTITION SCHEME SchemeItemData AS PARTITION DivideItemData TO ('2014_01_21_14_00_00', 'p0'); 这句问题
guzhijie1981 2014-01-21
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
sqlserver首选把数据写入default文件组,所以你的数据都进去了
我改成 =============================================== ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_14_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_14_00_00', filename = 'c:\2014_01_21\2014_01_21_14_00_00.ndf') TO filegroup [2014_01_21_14_00_00]; ALTER DATABASE opcdatabase ADD FILEGROUP [p0]; ALTER DATABASE opcdatabase add file (name = 'p0', filename = 'c:\p0.ndf') TO filegroup [p0]; create partition function DivideItemData(datetime) as range right for values('2014-01-21 15:00:00'); CREATE PARTITION SCHEME SchemeItemData AS PARTITION DivideItemData TO ('2014_01_21_14_00_00', 'p0'); create table opc_itemdata(ITEMID nvarchar(50) NOT NULL,QUALITY int NOT NULL,VALUE decimal(18, 2) NOT NULL,TIMESTP datetime NOT NULL,constraint PK_opc_itemdata primary key(ITEMID,TIMESTP)) ON SchemeItemData (TIMESTP); CREATE NONCLUSTERED INDEX index_itemid_timestp ON opc_itemdata (ITEMID,TIMESTP); alter partition scheme SchemeItemData next used [2014_01_21_14_00_00]; ALTER DATABASE opcdatabase ADD FILEGROUP [2014_01_21_15_00_00]; ALTER DATABASE opcdatabase add file (name = '2014_01_21_15_00_00', filename = 'c:\2014_01_21\2014_01_21_15_00_00.ndf') TO filegroup [2014_01_21_15_00_00]; alter partition function DivideItemData() split range ('2014-01-21 16:00:00'); alter partition scheme SchemeItemData next used [2014_01_21_15_00_00]; 似乎还是不行,麻烦帮我看下,谢谢哦,都写到p0那个文件中了,我看到文件不断增加
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
我当时配分区的时候是没有出现dafault这个关键字的
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
根据我的经验,是的。
guzhijie1981 2014-01-21
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
因为你把那个ndf所在的文件组设为defaul了
不好意思,点错了哦 追问下,如果我去掉设置default设置是否就OK了?
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
sqlserver首选把数据写入default文件组,所以你的数据都进去了
LongRui888 2014-01-21
  • 打赏
  • 举报
回复
这个不用设置为default,只要你在分区schema中指定了多个文件组,会随着你的数据的不同,自动写到相应的文件组的
LongRui888 2014-01-21
  • 打赏
  • 举报
回复
ALTER DATABASE opcdatabase MODIFY FILEGROUP [2014_01_21_14_00_00] DEFAULT; 改成: ALTER DATABASE opcdatabase MODIFY FILEGROUP [2014_01_21_14_00_00];
加载更多回复(1)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧