我的网站是SQL数据库,我使用查询分析器进行删除命令:delete from [orders] where actiondate= '2007-06-30 ' 在查询分析器里,已经找不到已经删除的记录我删除了20000条记录,但数据库的大小还是一样,没有变化!按道理删除,数据库的容量应该减少?是不是还有什么命令需要update一下我的网站数据库只有200M,快满了!
楼主一定用过foxpro吧,那里面有逻辑删除的概念,但是sqlserver2000中没有,删除都是真正删除。 当然可以通过日志恢复。但是那不是常规操作。 建议楼主加一个删除标记。 update 表名 set 标记=1 where ----- 查询时, select * from 表名 where 标记<>1 and -----这样就能达到楼主的要求了。
你说没有删除,不会是用的fox之类的数据库吧
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/ --下面的所有库名都指你要处理的数据库的库名 1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1) 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a.分离
EXEC sp_detach_db @dbname = '库名 ' b.删除日志文件 c.再附加
EXEC sp_attach_single_file_db @dbname = '库名 ',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf ' 5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择 "自动收缩 " --SQL语句设置方式:
EXEC sp_dboption '库名 ', 'autoshrink ', 'TRUE ' 6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
我只需要压缩一下数据库即可,以及删除一下日志文件DUMP TRANSACTION 库名 WITH NO_LOG
DBCC SHRINKDATABASE(库名) 使用以上2条指令是否就可以了,在查询分析器里可以执行吗?安全吗?我怕损坏数据库!谢谢!
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
出错!
压缩日志及数据库文件大小 /*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/ --下面的所有库名都指你要处理的数据库的库名 1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1) 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a.分离
EXEC sp_detach_db @dbname = '库名 ' b.删除日志文件 c.再附加
EXEC sp_attach_single_file_db @dbname = '库名 ',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf ' 5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择 "自动收缩 " --SQL语句设置方式:
EXEC sp_dboption '库名 ', 'autoshrink ', 'TRUE ' 6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
楼上的这办法就能搞定
当然可以通过日志恢复。但是那不是常规操作。
建议楼主加一个删除标记。
update 表名 set 标记=1 where -----
查询时,
select * from 表名 where 标记<>1 and -----这样就能达到楼主的要求了。
首先掌握基本概念才是最重要的,
建议楼主花点时间看看MS SQL入门的书,对以后会有很大好处的。最简单的方法:(假设你的数据库名字是MyDB,并且假设你是想彻底删除那些记录,也不需要恢复)
顺序执行下面的语句
1) backup log MyDB with truncate_only
2) exec sp_helpdb MyDB
这个命令会显示你的数据库(MyDB)的数据文件(data file)和日志文件(log file)的名字
假设你的日志文件名字是 MyDB_Log
3) dbcc shrinkfile(MyDB_Log, 10)
这个命令把你的日志文件缩减的10M大小