1.打開查詢分析器,輸入命令sql
DUMP TRANSACTION 數據庫名 WITH NO_LOGshell
2.再打開企業管理器--右鍵你要壓縮的數據庫--全部任務--收縮數據庫--收縮文件--選擇日誌文件--在收縮方式裏選擇收縮至XXM,這裏會給出一個容許收縮到的最小M數,直接輸入這個數,肯定就能夠了。數據庫
清除Log有兩種方法:安全
1.自動清除法服務器
開放數據庫選項 Trunc Log on Chkpt,使數據庫系統每隔一段時間自動清除Log。此方法的優勢是無須人工干預,由SQL Server自動執行,而且通常不會出現Log溢滿的狀況;缺點是隻清除Log而不作備份。併發
2.手動清除法ide
執行命令「dump transaction」來清除Log。如下兩條命令均可以清除日誌:函數
dump transaction with truncate_onlyoop
dump transaction with no_logfetch
一般刪除事務日誌中不活躍的部分可以使用「dump transaction with trancate_only」命令,這條命令寫進事務日誌時,還要作必要的併發性檢查。SYBASE提供「dump transaction with no_log」來處理某些很是緊迫的狀況,使用這條命令有很大的危險性,SQL Server會彈出一條警告信息。爲了儘可能確保數據庫的一致性,你應將它做爲「最後一招」。
以上兩種方法只??清除日誌,而不作日誌備份,若想備份日誌,應執行「dump transaction database_name to dumpdevice」命令。
PS:附一個更好的方法
先分離數據庫後,直接刪除日誌之後,再在查詢分析器裏用
exec sp_attach_single_file_db '數據庫名', '.mdf文件路徑'
命令附加數據庫。 OVER.在別的地方看到的 不錯。
數據庫日誌操做
先提供一種複雜的方法壓縮日誌及數據庫文件以下:
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.分離
E X E C sp_detach_db @dbname = 'pubs'
b.刪除日誌文件
c.再附加
E X E C sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
5.爲了之後能自動收縮,作以下設置:
企業管理器--服務器--右鍵數據庫--屬性--選項--選擇"自動收縮"
--SQL語句設置方式:
E X E C sp_dboption '數據庫名', 'autoshrink', 'TRUE'
6.若是想之後不讓它日誌增加得太大
企業管理器--服務器--右鍵數據庫--屬性--事務日誌
--將文件增加限制爲xM(x是你容許的最大數據文件大小)
--SQL語句的設置方式:
alter database 數據庫名 modify file(name=邏輯文件名,maxsize=20)
特別注意:
請按步驟進行,未進行前面的步驟,請不要作後面的步驟
不然可能損壞你的數據庫.
通常不建議作第4,6兩步
第4步不安全,有可能損壞數據庫或丟失數據
第6步若是日誌達到上限,則之後的數據庫處理會失敗,在清理日誌後才能恢復.
另外提供一種更簡單的方法,本人屢試不爽,建議你們使用。
更簡單的方法:
1。右建數據庫屬性窗口--故障還原模型--設爲簡單
2。右建數據庫全部任務--收縮數據庫
3。右建數據庫屬性窗口--故障還原模型--設爲大容量日誌記錄
可能有很多朋友遇到過這樣的問題:
update或delete語句忘帶了where子句,或where子句精度不夠,執行以後形成了嚴重的後果,
這種狀況的數據恢復只能利用事務日誌的備份來進行,因此若是你的SQL沒有進行相應的全庫備份
或不能備份日誌(truncate log on checkpoint選項爲1),那麼就沒法進行數據的恢復了,或者
只能恢復到最近一次的備份的數據了。
如下簡單說明恢復數據方法:
1,若是誤操做以前存在一個全庫備份(或已有多個差別備份或增量備份),首先要作的事就是進進行一第二天志備份(若是爲了避免讓日誌文件變大而置trunc. log on chkpt.選項爲1那你就死翹了)
backup log dbName to disk='fileName'
2,恢復一個全庫備份,注意須要使用with norecovery,若是還有其餘差別或增量備份,則逐個恢復
restore database dbName from disk='fileName' with norecovery
3,恢復最後一個日誌備份即剛作的日誌備份,指定恢復時間點到誤操做以前的時刻
restore log dbName from disk='fileName'
with stopat='date_time'
以上這些操做均可以在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 時才能進行。
注意:通常立成創建的數據庫默認屬性已設好,但碰到意外狀況使數據庫屬性被更改,請用戶清空日誌後,檢查數據庫的以上屬性,以防事務日誌再次充滿。
固然,若是誤操做是一些不記日誌的操做好比truncate table,select into等操做,那麼是沒法利
用上述方法來恢復數據的...
刪除SQL日誌1: 刪除LOG
1:分離數據庫 企業管理器->服務器->數據庫->右鍵->分離數據庫
2:刪除LOG文件
3:附加數據庫 企業管理器->服務器->數據庫->右鍵->附加數據庫
此法生成新的LOG,大小隻有520多K
再將此數據庫設置自動收縮
或用代碼:
下面的示例分離 77169database,而後將 77169database 中的一個文件附加到當前服務器。
EXEC sp_detach_db @dbname = '77169database'
EXEC sp_attach_single_file_db @dbname = '77169database',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf
2:清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG /// DUMP TRANSACTION ulionmis WITH NO_LOG
再:
企業管理器--右鍵你要壓縮的數據庫--全部任務--收縮數據庫--收縮文件--選擇日誌文件--在收縮方式裏選擇收縮至XXM,這裏會給出一個容許收縮到的最小M數,直接輸入這個數,肯定就能夠了
3: 若是想之後不讓它增加
企業管理器->服務器->數據庫->屬性->事務日誌->將文件增加限制爲2M
自動收縮日誌,也能夠用下面這條語句
Alter DATABASE 數據庫名
SET AUTO_SHRINK ON
故障還原模型改成簡單,用語句是
USE MASTER
GO
Alter DATABASE 數據庫名 SET RECOVERY SIMPLE
GO
-------------------------------------------------------------------------------
截斷事務日誌:
BACKUP LOG { database_name | @database_name_var }
{
[ WITH
{ NO_LOG | TRUNCATE_ONLY } ]
}
--壓縮日誌及數據庫文件大小
/*--特別注意
請按步驟進行,未進行前面的步驟,請不要作後面的步驟
不然可能損壞你的數據庫.
--*/
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
或用代碼:
下面的示例分離 77169database,而後將 77169database 中的一個文件附加到當前服務器。
a.分離
EXEC sp_detach_db @dbname = '77169database'
b.刪除日誌文件
c.再附加
EXEC sp_attach_single_file_db @dbname = '77169database',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf'
5.爲了之後能自動收縮,作以下設置:
企業管理器--服務器--右鍵數據庫--屬性--選項--選擇"自動收縮"
--SQL語句設置方式:
EXEC sp_dboption '數據庫名', 'autoshrink', 'TRUE'
6.若是想之後不讓它日誌增加得太大
企業管理器--服務器--右鍵數據庫--屬性--事務日誌
--將文件增加限制爲xM(x是你容許的最大數據文件大小)
--SQL語句的設置方式:
alter database 數據庫名 modify file(name=邏輯文件名,maxsize=20)
-------------------------------------------------------------------------------
/*--壓縮數據庫的通用存儲過程
壓縮日誌及數據庫文件大小
由於要對數據庫進行分離處理
因此存儲過程不能建立在被壓縮的數據庫中
--*/
/*--調用示例
exec p_compdb 'test'
--*/
use master --注意,此存儲過程要建在master數據庫中
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_compdb]
GO
create proc p_compdb
@dbname sysname, --要壓縮的數據庫名
@bkdatabase bit=1, --由於分離日誌的步驟中,可能會損壞數據庫,因此你能夠選擇是否自動數據庫
@bkfname nvarchar(260)='' --備份的文件名,若是不指定,自動備份到默認備份目錄,備份文件名爲:數據庫名+日期時間
as
--1.清空日誌
exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')
--2.截斷事務日誌:
exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
--3.收縮數據庫文件(若是不壓縮,數據庫的文件不會減少
exec('DBCC SHRINKDATABASE(['+@dbname+'])')
--4.設置自動收縮
exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''')
--後面的步驟有必定危險,你能夠能夠選擇是否應該這些步驟
--5.分離數據庫
if @bkdatabase=1
begin
if isnull(@bkfname,'')=''
set @bkfname=@dbname+'_'+convert(varchar,getdate(),112)
+replace(convert(varchar,getdate(),108),':','')
select 提示信息='備份數據庫到SQL 默認備份目錄,備份文件名:'+@bkfname
exec('backup database ['+@dbname+'] to disk='''+@bkfname+'''')
end
--進行分離處理
create table #t(fname nvarchar(260),type int)
exec('insert into #t select filename,type=status&0x40 from ['+@dbname+']..sysfiles')
exec('sp_detach_db '''+@dbname+'''')
--刪除日誌文件
declare @fname nvarchar(260),@s varchar(8000)
declare tb cursor local for select fname from #t where type=64
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s='del "'+rtrim(@fname)+'"'
exec master..xp_cmdshell @s,no_output
fetch next from tb into @fname
end
close tb
deallocate tb
--附加數據庫
set @s=''
declare tb cursor local for select fname from #t where type=0
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=@s+','''+rtrim(@fname)+''''
fetch next from tb into @fname
end
close tb
deallocate tb
exec('sp_attach_single_file_db '''+@dbname+''''+@s)
go
日誌文件滿而形成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 2000日誌
2004年9月24日11:23
前幾天也碰到日誌文件過大的問題,數據庫實際大小爲600M, 日誌文件實際大小爲33M, 但日誌文件佔用空間爲2.8G!!!
試了多種方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都沒辦法將文件縮小。不管如何,這應該算SQL SERVER的一個BUG吧。
後來找到下面的代碼,就能夠將日誌文件縮小到本身想要的大小了。把代碼COPY到查詢分析器裏,,而後修改其中的3個參數(數據庫名,日誌文件名,和目標日誌文件的大小),運行便可(我已經用過屢次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE Marias -- 要操做的數據庫名
Select @LogicalFileName = ‘Marias_log‘, -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想設定的日誌文件的大小(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
刪除MS SQL Server 2000日誌
1.打開MS SQL Server 2000企業管理器
2.打開數據庫,選中須要刪除日期的數據庫,點擊「察看」,選擇「任務板」:
3.鼠標右鍵點中須要刪除日期的數據庫,選擇右鍵菜單「全部任務」-「備份數據庫」:
4.選擇「事務日誌」:
5.點擊「添加」,選擇「文件名」:
6.選擇備份目錄,輸入文件名,點擊「肯定」:
7.點擊「肯定」:
8.選擇「重寫現有媒體」,點擊「肯定」:
9.開始備份:
10.備份完成:
事務日誌刪除了一部分,若是還不夠小,則再重複一次。
11.從新鼠標右鍵點中須要刪除日誌的數據庫,選擇右鍵菜單「全部任務」-「收縮數據庫」:
12.點擊「文件」:
13.選擇日誌「數據庫文件」,在「收縮操做」中選擇「從文件結尾截斷可用空間」,點擊「肯定」:
14.日誌收縮完畢:
關於SQL Server事務日誌的問題彙總
一、用BACKUP LOG database WITH NO_LOG清除日誌
把數據庫屬性中的故障還原模型改成「簡單」能夠大大減慢日誌增加的速度。若是把還原模型調到簡單,這樣就不支持時間點還原了,可是日誌文件會很小,若是數據比較重要推薦仍是把數據庫的還原模型調爲徹底。
用BACKUP LOG database WITH NO_LOG命名後,會截斷不活動日誌,不減少物理日誌文件的大小,但邏輯日誌會減少,收縮數據庫後會把不活動虛擬日誌刪除來釋放空間,不會損壞數據。
若是日誌被截斷並收縮數據庫後,就不能直接用最近的一個全庫備份作時間點還原,建議當即備份數據庫,以防萬一。
二、sql server運行中,刪除主數據庫事務日誌文件
步驟以下:(1)、分離數據庫:企業管理器--數據庫--右擊你要刪除日誌的數據庫--全部任務--分離數據庫
(2)、而後刪除日誌文件
(3)、而後再附加數據庫:企業管理器--數據庫--右擊數據庫--全部任務--附加數據庫。這時候只附加mdf就能夠了。
三、壓縮SQL數據庫及日誌的詳細方法
數據庫在使用一段時間後,時常會出現因數據刪除而形成數據庫中空閒空間太多的狀況,這時就須要減小分配給數據庫文件和事務日誌文件的磁盤空間,以避免浪費磁盤空間。當數據庫中沒有數據時,能夠修改數據庫文件屬性直接改變其佔用空間,但當數據庫中有數據時,這樣作會破壞數據庫中的數據,所以須要使用壓縮的方式來縮減數據庫空間。能夠在數據庫屬性選項中選擇「Auto shrink」選項,讓系統自動壓縮數據庫,也能夠用人工的方法來壓縮。人工壓縮數據庫有如下兩種方式:
1)、用Enterprise Manager 壓縮數據庫
在Enterprise Manager 中在所要壓縮的數據庫上單擊右鍵,從快捷菜單中的「全部任務(All Tasks)」中選擇「Shrink Database(壓縮數據庫)」選項,能夠在對話框中選擇數據庫的壓縮方式,也能夠選擇使用壓縮計劃或壓縮單個文件。單擊「Files」按鈕,會出現壓縮數據庫文件對話框,能夠針對每一個數據庫文件進行不一樣的壓縮設置。單擊「Change」 按鈕,會出現壓縮計劃編輯對話框,能夠指定壓縮計劃的執行方式。單擊「Change」 按鈕,會出現循環工做計劃編輯對話框,能夠編輯計劃執行的週期或時間點。設置完成後單擊「OK」 按鈕就開始壓縮數據庫,在壓縮結束後會顯示一個壓縮狀況信息框。
2)、用Transact-SQL 命令壓縮數據庫
可使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令來壓縮數據庫。其中DBCC SHRINKDATABASE 命令對數據庫進行壓縮,DBCC SHRINKFILE 命令對數據庫中指定的文件進行壓縮。
(1)、DBCC SHRINKDATABASE
DBCC SHRINKDATABASE 命令語法以下:
DBCC SHRINKDATABASE (database_name [, target_percent][, {NOTRUNCATE | TRUNCATEONLY}] )
各參數說明以下:
·target_percent 指定將數據庫壓縮後,未使用的空間佔數據庫大小的百分之幾。若是指定的百分比過大,超過了壓縮前未使用空間所佔的比例,則數據庫不會被壓縮。而且壓縮後的數據庫不能比數據庫初始設定的容量小。
·NOTRUECATE
將數據庫縮減後剩餘的空間保留在數據庫,中不返還給操做系統。若是不選擇此選項,則剩餘的空間返還給操做系統。
·TRUNCATEONLY
將數據庫縮減後剩餘的空間返還給操做系統。使用此命令時SQL Server 將文件縮減到最後一個文件分配,區域但不移動任何數據文件。選擇此項後,target_percent 選項就無效了。
例:壓縮數據庫mytest 的未使用空間爲數據庫大小的20%。
dbcc shrinkdatabase (mytest, 20)
運行結果以下:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
(2)、DBCC SHRINKFILE
DBCC SHRINKFILE 命令壓縮當前數據庫中的文件。其語法以下:
DBCC SHRINKFILE ( {file_name | file_id }{ [, target_size] |[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )
各參數說明以下:
·file_id
指定要壓縮的文件的鑑別號(Identification number, 即ID)。文件的ID 號能夠經過 FILE_ID()函數或如本章前面所講述的Sp_helpdb 系統存儲過程來獲得。
·target_size
指定文件壓縮後的大小。以MB 爲單位。若是不指定此選項,SQL Server 就會盡最大可能地縮減文件。
·EMPTYFILE
指明此文件再也不使用,將移動全部在此文件中的數據到同一文件組中的其它文件中去。執行帶此參數的命令後,此文件就能夠用Alter DATABASE 命令來刪除了。
其他參數NOTRUNCATE 和TRUNCATEONLY 與DBCC SHRINKDATABASE 命令中的含義相同。
例: 壓縮數據庫mydb 中的數據庫文件mydb_data2 的大小到1MB。
use mydb dbcc shrinkfile (mydb_data2, 1)
目前的情況是:MDF文件保存無缺(已拷出來),LDF已丟失。使用
EXEC sp_attach_single_file_db @dbname = 'TyBusiness',
@physname = 'E:\Help\TyBusiness.MDF'
報以下錯誤:
未能打開新數據庫 'TyBusiness'。Create DATABASE 將終止。
設備激活錯誤。物理文件名 'd:\Program Files\Microsoft SQL Server\MSSQL\TyBusiness_log.ldf' 可能有誤。
1.先建一個與你要恢復的數據庫名稱同樣的數據庫.
2.中止sql server,把你的數據庫替換這個數據庫
3.重起sql server,把數據庫設成緊急狀態:
sp_configure 'allow',1
reconfigure with overirde
update sysdatabases set status=32768 where name='yourdata'
4.重建日誌文件
dbcc rebuild_log('yourdata','your data path\newdata_log.ldf')
5.取消緊急模式
update sysdatabases set status=0 where name='yourdata'
restore sysdatabases yourdata with recovery
sp_configure 'allow',0
reconfigure with override
6.重起sql server
7.ok
減少SQL日誌。
use yourdatabasename
GO
backup log yourdatabasename with TRUNCATE_ONLY
GO
DBCC SHRINKFILE (邏輯文件名, 收縮後的大小)
GO
在Query Analyzer中:
1.執行:
EXEC sp_detach_db 'dbname', 'true'; --將你的數據庫卸除
然後將SQL Server安裝路徑下的data目錄中的dbname_log.ldf文件移走或刪除
2.
EXEC sp_attach_single_file_db
'dbname','d:\mssql7\data\dbname.mdf';
--以單文件形式恢復數據庫,系統自動分配給你一個500K大小的日誌文件.
use yourdatabasename
GO
backup log yourdatabasename with TRUNCATE_ONLY
GO
DBCC SHRINKFILE (邏輯文件名, 收縮後的大小)
GO
完全刪除數據庫日誌的方法
如今私服運行了一段時間,特別是人比較多的服,相信你們的數據庫日誌log文件已經至關大了吧。其實這些log文件對於咱們普通用戶來講是沒什麼用,上面只是詳細的記錄了全部對該數據庫的每一步操做,實際的數據已經保存到數據庫文件中了,因此是不可能有什麼回檔之類的問題的。之前咱們也問過微軟的人,聽說是若是你的數據庫文件壞掉了,有這個他們有辦法幫助你恢復數據庫,可是因爲方法並不公開,因此對於咱們來講,這只是佔空間的東西。由於原先沒以爲這個是問題,因此也沒站出來介紹一下,如今看愈來愈多的朋友問這個問題,就提供一下方法。下面是主題了:
一、進入企業管理器,選中數據庫,好比muonline
二、全部任務->分離數據庫
三、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話能夠拷出去
四、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,沒關係繼續,此時數據庫就會提示你該數據庫無日誌是否建立一個新的,肯定就是了。
五、記得數據庫從新附加後用戶要從新設置一下。
之後若是新的日誌文件變大了,再繼續這個步驟就好了
--假設test2爲數據庫名稱
在查詢分析器中執行:
backup log MuOnline with NO_LOG
backup log MuOnline with TRUNCATE_ONLY
DBCC SHRINKDATABASE(MuOnline)
將上面的語句屢次執行,直到日誌文件縮小。
exec sp_dboption MuOnline,autoshrink,on
創建做業,每半個小時一第二天志備份,天天一次徹底數據庫備份。
在Log收縮到正常大小後,將autoshrink選項設置爲off。
查詢分析器裏運行:
backup log MuOnlie with NO_LOG
backup log MuOnlie with TRUNCATE_ONLY
DBCC SHRINKDATABASE(MuOnlie)
關於SQL的日誌清理命令!你們看看有沒有用吧!
BACKUP LOG MuOnline WITH NO_LOG
DBCC SHRINKDATABASE(MuOnline,10)
這是清理MuOnline日誌的 千萬點到MuOnline再選查詢分析器 否則整理了其餘數據庫會出錯的
看看這個
關於各類日誌暴大的解決辦法(3種)
關於各類日誌暴大的解決辦法
要限制sql日誌的大小很容易,只要選到那兩個數據庫(muonline和ranking)而後右鍵屬性,在數據文件和事務日誌裏面就能夠改
關鍵是那個joinserver的日誌,有時候很正常,一天下來頂多幾十m,有時候1分鐘就能賞到4個G,其實要他不生成那麼大的日誌很簡單,只要到joinserver的目錄裏面把log那個目錄刪除或更名就能夠了(我就是這麼幹的),一點都不影響使用,開joinserver的時候它只會說write log error,對正常使用沒有影響,這樣joinserver目錄就一直是700多k了,哈哈
對於GS和其餘的日誌,由於都很小,因此就沒改,我的認爲其實也能夠這麼幹的
真正解決數據庫日誌大的方法
首先在數據庫屬性裏把按百分比增加從10%改成1%,這樣就大大限制了增加速度
其次在每次重啓服務器的時候,在查詢器裏執行下面的,這樣的方法是我認爲最安全也是最簡單的,建議置頂
感受好用的朋友頂了
backup log MuOnline with NO_LOG
backup log MuOnline with TRUNCATE_ONLY
DBCC SHRINKDATABASE(MuOnline)
解決數據庫日誌大的方法
、進入企業管理器,選中數據庫,好比muonline
二、全部任務->分離數據庫
三、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話能夠拷出去
四、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,沒關係繼續,此時數據庫就會提示你該數據庫無日誌是否建立一個新的,肯定就是了。
五、記得數據庫從新附加後用戶要從新設置一下
[推薦]數據庫自動備份、縮小以及防止回檔
不要在屬性裏限制數據庫大小,這樣文件容量滿的時候會出現回檔
創建做業,天天自動備份數據庫,自動刪除2天前的備份
創建做業,天天運行一次如下代碼,縮小日誌文件
backup log MuOnline with NO_LOG
backup log MuOnline with TRUNCATE_ONLY
DBCC SHRINKDATABASE(MuOnline)
我就是這麼作的,什麼問題都沒有,MU服務端所有用到的空間頂多2個G
日誌能夠這樣減肥!!
右擊MuOnline,全部任務,分離數據庫
而後到D:\Muserver\db 把那個.log文件刪掉
你會發現MuOnline數據庫消失了
右擊一下,全部任務,點 附加數據庫
路徑指向D:\Muserver\db 選中裏面的.mdf
你會發現日誌有個大叉叉
無論它,直接點肯定。
系統提示找不到日誌,要不要新建一個
新建一個就Ok了。
這樣減肥效果不錯吧。
解決方法
日誌文件滿而形成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日誌的方法
--------------------------------------------------------------------------------
一:
分享]解決SQL日誌增大的辦*[望置頂]
--假設test2爲數據庫名稱
在查詢分析器中執行:
backup log MuOnline with NO_LOG
backup log MuOnline with TRUNCATE_ONLY
DBCC SHRINKDATABASE(MuOnline)
將上面的語句屢次執行,直到日誌文件縮小。
exec sp_dboption 'MuOnline','autoshrink','on'
創建做業,每半個小時一第二天志備份,天天一次徹底數據庫備份。
在Log收縮到正常大小後,將autoshrink選項設置爲off。
二:
數據庫增大是由於你的日誌增大了,之前你們討論過的,最簡單可行的辦法就是在你數據庫屬性->選項->故障還原裏面選成簡單模式(缺省爲徹底模式),而後選收縮數據庫進行一次收縮,之後你的數據庫基本就不怎麼會增加了
三:
一、進入企業管理器,選中數據庫,好比muonline
二、全部任務->分離數據庫
三、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話能夠拷出去
四、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,沒關係繼續,此時數據庫就會提示你該數據庫無日誌是否建立一個新的,肯定就是了。
五、記得數據庫從新附加後用戶要從新設置一下。