數(shù)據(jù)庫日志大,說明數(shù)據(jù)庫訪問次數(shù)多,異常信息多,最好查看日志,跟蹤一下異常情況。至于如何釋放這些被占用的空間,收縮日志就可以了,數(shù)據(jù)庫日志收縮的比率很大,一般1G在收縮后變成1M。
創(chuàng)新互聯(lián)專注于城區(qū)企業(yè)網(wǎng)站建設,自適應網(wǎng)站建設,購物商城網(wǎng)站建設。城區(qū)網(wǎng)站建設公司,為城區(qū)等地區(qū)提供建站服務。全流程按需設計,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
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 =
--如果終止日期與起始日期在同一個星期內(nèi),只需要計算有幾天即可
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
--如果終止日期與起始日期在不同的星期內(nèi)
--首先計算出除前后兩個星期外完整的星期數(shù) * 5
ELSE (DATEDIFF(dd,@bdate,@edate)
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
--再加上第一個星期里的工作日數(shù)
+ CASE WHEN DATEPART(dw, @bdate) 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
--加上末一個星期里的工作日數(shù)
+ 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 計算兩個日期之前日期分量的個數(shù),如計算兩個日期之間的天數(shù):datediff(dd,'2012-9-10','2012-9-11')
此處的0代表'1900-1-1'
整個表達式相當於DATEADD(dd, DATEDIFF(dd,'1900-1-1',getdate()), '1900-1-1')
即先計算當臆系統(tǒng)時間與1900-1-1之間的天數(shù),再計算1900-1-1加上這個天數(shù)的日期。
這個沒有什么特殊的約束,僅僅是提醒用戶以后錄入數(shù)據(jù)的時候單位是天而不是月或年,比如某商品的有效期為一年,那錄入員在錄入數(shù)據(jù)的時候不要寫成了1(年),也不要寫成了12(月),應該寫365(天),如果一定要加個約束的話,那么應該約束成=0,因為有效期不應該為負數(shù)。
1.清空日志 DUMP TRANSACTION 庫名 WITH NO_LOG
2.截斷事務日志: BACKUP LOG 庫名 WITH NO_LOG
3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會減小 企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務--收縮數(shù)據(jù)庫--收縮文件 --選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了 --選擇數(shù)據(jù)文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了 也可以用SQL語句來完成 --收縮數(shù)據(jù)庫 DBCC SHRINKDATABASE(庫名) --收縮指定數(shù)據(jù)文件,1是文件號,可以通過這個語句查詢到:select * from sysfiles DBCC SHRINKFILE(1)
4.為了最大化的縮小日志文件(如果是sql 7.0,這步只能在查詢分析器中進行)
a.分離數(shù)據(jù)庫: 企業(yè)管理器--服務器--數(shù)據(jù)庫--右鍵--分離數(shù)據(jù)庫
b.在我的電腦中刪除LOG文件
c.附加數(shù)據(jù)庫: 企業(yè)管理器--服務器--數(shù)據(jù)庫--右鍵--附加數(shù)據(jù)庫 此法將生成新的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.為了以后能自動收縮,
做如下設置: 企業(yè)管理器--服務器--右鍵數(shù)據(jù)庫--屬性--選項--選擇"自動收縮" --SQL語句設置方式: EXEC sp_dboption '庫名', 'autoshrink', 'TRUE'
6.如果想以后不讓它日志增長得太大
企業(yè)管理器--服務器--右鍵數(shù)據(jù)庫--屬性--事務日志 --將文件增長限制為xM(x是你允許的最大數(shù)據(jù)文件大小) --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())--大于當前時間
{
}