⑴ sql SERVER 日誌過大怎麼辦
/*--特別注意
請按步驟進行,未進行前面的步驟,請不要做後面的步驟
否則可能損壞你的資料庫.
一般不建議做第4,6兩步
第4步不安全,有可能損壞資料庫或丟失數據
第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.
--*/
--下面的所有庫名都指你要處理的資料庫的庫名
1.清空日誌(SQL2000時可用)
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)
⑵ sql server資料庫顯示100多個GB!~怎麼回事
可能是運行久了日誌的問題吧,你可以試著在查詢分析器里運行
backup
log
資料庫名
with
no_log
DBCC
SHRINKDATABASE
(資料庫名,
10)
DBCC後的10是收縮後的資料庫可用空間
你試試看這樣是不是減小了很多,我以前也曾經出現過你這樣的事情,運行久了日誌佔用太大
⑶ SQL server資料庫日誌滿了怎麼處理
解決方法
日誌文件滿而造成SQL資料庫無法寫入文件時,可用兩種方法:
一種方法:清空日誌。
1.打開查詢分析器,輸入命令
DUMP
TRANSACTION
資料庫名
WITH
NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
另一種方法有一定的風險性,因為SQL
SERVER的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。
1:
刪除LOG
分離資料庫
企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件
附加資料庫
企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K。
注意:建議使用第一種方法。
如果以後,不想要它變大。
SQL2000下使用:
在資料庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter
database
資料庫名
set
recovery
simple
另外,如上圖中資料庫屬性有兩個選項,與事務日誌的增長有關:
Truncate
log
on
checkpoint
(此選項用於SQL7.0,SQL
2000中即故障恢復模型選擇為簡單模型)
當執行CHECKPOINT
命令時如果事務日誌文件超過其大小的70%
則將其內容清除在開發資料庫時時常將此選項設置為True
Auto
shrink
定期對資料庫進行檢查當資料庫文件或日誌文件的未用空間超過其大小的25%時,系統將會自動縮減文件使其未用空間等於25%
當文件大小沒有超過其建立時的初始大小時不會縮減文件縮減後的文件也必須大於或等於其初始大小對事務日誌文件的縮減只有在對其作備份時或將Truncate
log
on
checkpoint
選項設為True
時才能進行。
注意:一般立成建立的資料庫默認屬性已設好,但碰到意外情況使資料庫屬性被更改,請用戶清空日誌後,檢查資料庫的以上屬性,以防事務日誌再次充滿。
⑷ SQL server資料庫日誌滿了怎麼處理
一、刪除日誌文件。
二、手動收縮。操作如下:
1、在資料庫頁面中選擇「選項」;
⑸ sql server 資料庫日誌過大會影響運行速度嗎
sql server資料庫日誌文件過大不會影響運行速度,但是會導致數據無法寫入。
SQL Server資料庫中,當日誌文件過大或者日誌已滿時就會影響到資料庫的正常工作。而日誌文件已滿常常會造成SQL Server資料庫無法寫入的問題。
解決方法:
1、右鍵資料庫→屬性→選項→故障還原模型→設為簡單→確定;
2、右鍵資料庫→所有任務→收縮資料庫→確定;
3、右鍵資料庫→屬性→選項→故障還原模型→設為大容量日誌記錄→確定。
⑹ 如何清理sql server 已滿的資料庫日誌
SQLSERVER的資料庫日誌佔用很大的空間,下面提供三種方法用於清除無用的資料庫日誌文件
方法一:
1、打開查詢分析器,輸入命令
backup log database_name WITH NO_log
2、再打開企業管理器--右鍵要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了。
方法二:
設置檢查點,自動截斷日誌
一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大
1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如用戶資料庫cwbase1)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存
2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定
3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據
方法三:通過SQL收縮日誌
把代碼復制到查詢分析器里,然後修改其中的3個參數(資料庫名,日誌文件名,和目標日誌文件的大小),運行即可
SET NOCOUNT on
DECLARE @logicalFileName sysname,
@MaxMinutes int,
@NewSize int
USE tablename -- 要操作的資料庫名
select @logicalFileName = 'tablename_log', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
select @OriginalSize = size
from sysfiles
WHERE name = @logicalFileName
select 'Original Size of ' + db_name() + ' log is ' +
ConVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
ConVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'mb'
from sysfiles
WHERE name = @logicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter int,
@StartTime DATETIME,
@Trunclog VARCHAR(255)
select @StartTime = getdate(),
@Trunclog = 'backup log ' + db_name() + ' WITH TRUNCATE_onLY'
DBCC SHRINKFILE (@logicalFileName, @NewSize)
EXEC (@Trunclog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > datediff (mi, @StartTime, getdate()) -- time has not expired
AND @OriginalSize = (select size from sysfiles WHERE name = @logicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
select @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill log')
DELETE DummyTrans
select @Counter = @Counter + 1
END
EXEC (@Trunclog)
END
select 'Final Size of ' + db_name() + ' log is ' +
ConVERT(VARCHAR(30),size) + ' 8K pages or ' +
ConVERT(VARCHAR(30),(size*8/1024)) + 'mb'
from sysfiles
WHERE name = @logicalFileName
DROP TABLE DummyTrans
SET NOCOUNT off
方法四:刪除日誌文件。
此方法有一定的風險性,因為sql server的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。1、操作前請斷開所有資料庫連接。
2、分離資料庫
分離資料庫:企業管理器->伺服器->資料庫->cwbase1->右鍵->分離資料庫
分離後,cwbase1資料庫被刪除,但保留了數據文件和日誌文件
3、刪除log物理文件
刪除LOG物理文件,然後附加資料庫: 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的log,大小隻有500多k。
注意:建議使用第一種方法。操作前請確保所有操作員都已經推出系統,斷開資料庫的連接。
以上操作前,請務必做好數據備份!
1.sql server 2005 清除日誌語句
mp transaction 資料庫名稱 with no_log
backup log 資料庫名稱 with no_log
dbcc shrinkdatabase(資料庫名稱)
⑺ sql server 2008 日誌文件如何消除,現在的日誌文件已達370多G,好多種方法都試了也不管用。急急
如果資料庫是鏡像,那麼日誌文件無法變小,除非備份日誌後並重啟資料庫;
不過,備份日誌可以截斷日誌文件,讓日誌文件空間重復使用,此時雖然日誌文件有370G,但是實際上只用了一部分,未使用的,會用新日誌覆蓋上去,你定期備份日誌來截斷,sql:
備份日誌可以截斷日誌,讓日誌空間可以循環使用,這樣可以使日誌文件的大小不再增長。
BACKUP LOG dbname TO DISK = 'e:log20111122.bak'--備份完整日誌
簡單的辦法就是設置日誌模式為Simple了
ALTER DATABASE [資料庫名] SET RECOVERY SIMPLE
再給一個看日誌文件使用率的sql:
--查看當前資料庫日誌文件大小和使用率,size以8KB為單位,所以除128就是MB
SELECTname,data_space_id文件組id,size/128[文件大小(兆)],
FILEPROPERTY(name,'SpaceUsed')/128[已用空間(兆)],
size/128-FILEPROPERTY(name,'SpaceUsed')/128[未用空間(兆)],
FILEPROPERTY(name,'SpaceUsed')*100.0/size[使用率(%)],
max_size/128[最大值(兆)],
caseis_percent_growthwhen0thencast(growth/128asnvarchar)+'兆'elsecast(growthasnvarchar)+'%'end增長值,
physical_name物理路徑
FROMsys.database_filesaORDERBYa.[name]
⑻ SQL資料庫日誌滿
當前的解決方法是:把硬碟上的其他文件刪除,以空出硬碟空間,將資料庫的日誌文件大小改成無限制,然後分離資料庫,要確保分離成功,、然後把資料庫日誌文件刪除(最好是先改名,以防萬一)。再附加資料庫,這樣會重建日誌文件。
加回去之後,將資料庫改成自動收縮,把日誌文件改成按mb增長,增長最大設為一個固定的值,值的大小看數據處理情況,存在大指的update操作的話,應設為大一點。
從此,你可以放心使用了。
⑼ SQL日誌滿,怎樣解決
簡單,
在查詢分析器中運行
backup log 資料庫名 with no_log
然後在企業管理器中所有任務->收縮資料庫->收縮文件
⑽ SQL Server事務日誌被填滿的原因是什麼
錯誤描述:資料庫的事務日誌已滿。若要查明無法重用日誌中的空間的原因 ,請參閱sys.databases 中的 log_reuse_wait_desc 列 。
首先引入一下事務日誌的概念
事務日誌是一個與資料庫文件分開的文件。它存儲對資料庫進行的所有更改,並全部記錄插入、更新、刪除、提交、回退和資料庫模式變化。事務日誌還稱作前滾日誌或重做日誌。
事務日誌是備份和恢復的重要組件,也是使用 SQL Remote 或 [復制代理] 復制數據所必需的。
在預設情況下,所有資料庫都使用事務日誌。事務日誌的使用是可選的,但是,除非您因特殊原因而不使用,否則您應始終使用它。運行帶有事務日誌的資料庫可提供更強的故障保護功能、更好的性能以及數據復制功能。
引發異常的原因:
a.未提交的事務
b.非常大的事務
c.操作:DBCC DBREINDEX 和 CREATE INDEX
d.在從事務日誌備份還原時
e.客戶端應用程序不處理所有結果
f.查詢在事務日誌完成擴展之前超時,您收到假的「Log Full」錯誤消息
g.未復制的事務
解決辦法:
1.釋放磁碟空間(菜鳥適用);
2.把資料庫移到內存充足的磁碟(原理同上);
3.清空日誌:DUMP TRANSACTION 庫名 WITH NO_LOG;
4.截斷事務日誌:BACKUP LOG 庫名 WITH NO_LOG;