免费注册 查看新帖 |

Chinaunix

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

一个用户表索引和主键被删除,该表还在正常工作状态,会有什么潜在问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-14 11:27 |只看该作者 |倒序浏览
近日查询某个有6百万行的用户表中的几十行数据,发现非常地慢,最后竟然用了十几个小时才出来结果。对此我一直不明白是表的哪里出了问题,于是我用“update all statistics TABLE”执行了一夜,执行完毕之后,再进行查询,结果发现还是很慢。
    于是我采用“alter table TABLENAME drop constraint PK_TABLENAME”,决定先删除主键,然后再重建主键的方法试试。结果我运行该命令后得到的结果是“Msg 3701, Level 11, State 1  Cannot drop the constraint 'PK_TABLENAME', because it doesn't exist in the system catalogs.”。然后查询该表,结果真的没有主键。
    (问题一:)在此,就产生了一个疑问:表在没有主键的情况下,前两天已经进行了对该表的写表操作(注:该表内的数据可以直接DELETE,由此证明该表没有外键,这样判断是否正确?),这样会不会产生数据不一致、数据混乱等各种潜在的问题?
    基于以上情况,我决定先恢复主键,得到的结果却是“Msg 1105, Level 17, State 2
Can't allocate space for object 'TABLENAME' in database 'DATABASENAME' because 'default' segment is full/has no free extents. If you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase size of the segment.”
    (问题二:)根据提示,应该是没有空间了,我查询了一下我的LOG空间还有800M,应该是没有问题的,该表有6百多万行,数据占用空间500多兆,是不是我的数据库对于该表显得空间不足了?
    (问题三:)针对此种情况,我决定采用如下方法:我有两个同样的用户数据库,其中一个是作测试库的,我先把测试库内数据“TRUNCATE TABLE”掉一些,誊出空间,然后把正式库内的该表数据“SELECT * INTO”到测试库内,再把该表“TRUNCATE TABLE”掉,再进行建主键、DBCC操作,最后把测试库内的数据“INSERT”到该表内,这样操作是否可行?有哪些需要注意的地方?
    (问题四:)用户表的主键在没有人为操作的情况下,会不会出现被删除的情况?     
    望多多探讨,前辈们多多指教。

[ 本帖最后由 hbzxjj 于 2008-6-15 12:17 编辑 ]

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
2 [报告]
发表于 2008-06-14 13:33 |只看该作者
'default' segment  应该是你的数据空间不足,而非log空间满,如果是log空间满,则是
报log segment满.

论坛徽章:
0
3 [报告]
发表于 2008-06-15 00:11 |只看该作者
1,应该没有外键,可能会造成不一致。但也可能通过trigger实现数据一致,你自己检查
2,ls说得正确。primary key要建索引,需要数据空间,问题可能在这
4,操作没问题,只要你的应用不受影响。
5,不会

论坛徽章:
0
4 [报告]
发表于 2008-06-15 12:15 |只看该作者
谢谢回复。
我现在打算采用删除掉一部分数据(2百万行),然后再建主键和索引的方法,目前在验证。


顺便再问两个问题:如果我删除掉该表的数据,那么它之前所占用的空间能够释放出来吗?
                      如果不能释放空间,那么它所占用的空间还是归这个表所使用吗?


不知道各位大虾还有没有更好的方法呀?推荐一下?

[ 本帖最后由 hbzxjj 于 2008-6-15 23:32 编辑 ]

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
5 [报告]
发表于 2008-06-16 09:13 |只看该作者
空间就算不能释放也肯定能再次被使用

论坛徽章:
0
6 [报告]
发表于 2008-06-16 13:45 |只看该作者
delete data,drop index,create index,can reclaim space
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP