数据库的巨难问题

xioaxiaobingyuxue 2006-02-13 02:18:59
一个数据库正常是2G 现在5G 但是我做个DBCC CHECKDB是没有错误的 怎么解决 如果有高手 请加我的MSN yuxue19830612@hotmail.com
...全文
315 22 点赞 打赏 收藏 举报
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
问题最后解决了 是填充因子的问题,我现在已经解决了这个问题。
  • 打赏
  • 举报
回复
todouwang 2006-02-16
DECLARE @chvSqlCmd varchar(8000)
SET @chvSqlCmd=''
SELECT @chvSqlCmd=@chvSqlCmd+'SELECT '''+NAME+''',COUNT(*) FROM '+NAME+CHAR(13)+'UNION'+CHAR(13)
FROM DBO.SYSOBJECTS WHERE XTYPE='U' AND NAME!='dtproperties'
SET @chvSqlCmd=SubString(@chvSqlCmd,1,len(@chvSqlCmd)-7)
--The 7 is len('UNION'+char(13),+char(13))
EXEC (@chvSqlCmd)
  • 打赏
  • 举报
回复
rouqu 2006-02-16
压缩数据库
先执行 dbcc updateusage (0)
再执行 sp_spaceused
是多大就多大了
再讨论也就这样了
  • 打赏
  • 举报
回复
难道没有人回答我
  • 打赏
  • 举报
回复
上面shuiniu(飞扬的梦)(我是一头只吃西红柿的水牛) 我执行了你的命令 但是 什么也没有得到 比较的郁闷
  • 打赏
  • 举报
回复
shuiniu 2006-02-14
If Exists(Select 1 From sysobjects where name = 'get_tableinfo' and xtype = 'p')
drop proc get_tableinfo
go

CREATE PROCEDURE get_tableinfo AS

set nocount on
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --创建结果存储表
(Name varchar(50) ,
Rows int , reserved varchar(20) ,
Data varchar(20) ,
index_size varchar(20) ,
Unused varchar(20) )


truncate table tablespaceinfo --清空数据表

declare @tablename varchar(255) --表名称

declare @cmdsql varchar(500)

DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where xtype = 'u' order by o.name

OPEN Info_cursor

FETCH NEXT FROM Info_cursor
INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN

if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
execute sp_executesql
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',
@tbname = @tablename

FETCH NEXT FROM Info_cursor
INTO @tablename
END

CLOSE Info_cursor
DEALLOCATE Info_cursor
set nocount off
GO



--执行存储过程
exec get_tableinfo

--查询运行该存储过程后得到的结果

Select
Name 表名,
Rows 行数,
str(cast(replace(reserved,'KB','') as int) / 1024.00,7,2) + 'Mb' 表保留的空间总量,
str(cast(replace(Data,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中的数据所使用的空间量,
str(cast(replace(index_size,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中的索引所使用的空间量,
str(cast(replace(Unused,'KB','')as int) / 1024.00,7,2) + 'Mb' 表中未用的空间量
from tablespaceinfo
order by 3 desc

  • 打赏
  • 举报
回复
sp_spaceused @updateusage = 'TRUE' 这个语句只能查到这个:

THIS4 5444.88 MB 146.98 MB
reserved data index_size unused
5424024 KB 1047264 KB 186832 KB 4189928 KB

但是具体查不到那个表


  • 打赏
  • 举报
回复
我怎么才能查到这个是哪个表了?
  • 打赏
  • 举报
回复
chb5210 2006-02-14
把数据库设为单用户模式:


DBCC CHECKDB('数据库名',REPAIR_REBUILD)
  • 打赏
  • 举报
回复
rouqu 2006-02-13
sp_spaceused @updateusage = 'TRUE' 就是更新系统表信息
or
dbcc updateusage
  • 打赏
  • 举报
回复
怎么查 指教一下
  • 打赏
  • 举报
回复
zzit0721 2006-02-13
用系统表试试,应该可以查到最大的数据库
  • 打赏
  • 举报
回复
我觉得里面有表有异常情况,我就想问问 怎么查这个方面,比如说我如何用SQL语句查询里面最大的表
  • 打赏
  • 举报
回复
rouqu 2006-02-13
你分别选择压缩数据库文件和数据库日志文件 SQL自己会报告出压缩后最小值 是多少就是多少了
  • 打赏
  • 举报
回复
难道就没有人会
  • 打赏
  • 举报
回复
我刚执行了这个命令 但是还是不行 数据库没有变小
  • 打赏
  • 举报
回复
wgsasd311 2006-02-13
一个数据库正常是2G 现在5G=======>
你是什么意思,正常2G?,现在5G又是?,你分别写出你是怎样查到的数据?
  • 打赏
  • 举报
回复
wgsasd311 2006-02-13
2G 现在5G
=========>
DBCC SHRINKDATABASE( database_name,2500)
  • 打赏
  • 举报
回复
这些事情全部做过了 我觉得这个问题出在表上面
  • 打赏
  • 举报
回复
子陌红尘 2006-02-13
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

--收缩数据库
DBCC SHRINKDATABASE(库名)


5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-13 02:18
社区公告
暂无公告