数据库日志大,说明数据库访问次数多,异常信息多,最好查看日志,跟踪一下异常情况。至于如何释放这些被占用的空间,收缩日志就可以了,数据库日志收缩的比率很大,一般1G在收缩后变成1M。
创新互联专注于城区企业网站建设,自适应网站建设,购物商城网站建设。城区网站建设公司,为城区等地区提供建站服务。全流程按需设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
drop function dbo.f_get_workdays
go
CREATE FUNCTION dbo.f_get_workdays(@bdate DATETIME, @edate DATETIME)
RETURNS INTEGER
AS BEGIN
DECLARE @workdays INTEGER
IF @bdate @edate
RETURN -1
SELECT @workdays =
--如果终止日期与起始日期在同一个星期内,只需要计算有几天即可
CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
CASE WHEN DATEPART(dw, @bdate) 5 THEN 0
WHEN DATEPART(dw, @edate-1) 5 THEN 6 - DATEPART(dw, @bdate)
ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
--如果终止日期与起始日期在不同的星期内
--首先计算出除前后两个星期外完整的星期数 * 5
ELSE (DATEDIFF(dd,@bdate,@edate)
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
--再加上第一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @bdate) 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
--加上末一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @edate-1)5 THEN 5 ELSE DATEPART(dw, @edate-1) END
END
RETURN @workdays
END
go
select dbo.f_get_workdays(dateadd(day,-21,getdate()),getdate())
DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)的意思是返回当前日期
dd为日期分量代表day,还有其它的如month,year等
dateadd 为计算某个日期之前或之後多少个日期分量的时间,如计算今天之前10天的时间为
dateadd(dd,'2012-10-26',-10),之後10天日期为dateadd(dd,'2012-10-26',10)
datediff 计算两个日期之前日期分量的个数,如计算两个日期之间的天数:datediff(dd,'2012-9-10','2012-9-11')
此处的0代表'1900-1-1'
整个表达式相当於DATEADD(dd, DATEDIFF(dd,'1900-1-1',getdate()), '1900-1-1')
即先计算当臆系统时间与1900-1-1之间的天数,再计算1900-1-1加上这个天数的日期。
这个没有什么特殊的约束,仅仅是提醒用户以后录入数据的时候单位是天而不是月或年,比如某商品的有效期为一年,那录入员在录入数据的时候不要写成了1(年),也不要写成了12(月),应该写365(天),如果一定要加个约束的话,那么应该约束成=0,因为有效期不应该为负数。
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)
declare @d1 datetime;
set @d1='你的时间';
set @d1=dateadd(dd,1,@d1);-- 加一天
set @d1=dateadd(hh,8,@d1);--加8小时
if(@d1getdate())--大于当前时间
{
}