刪除SQL日誌

1.打開查詢分析器,輸入命令

DUMP TRANSACTION 數據庫名 WITH NO_LOG

2.再打開企業管理器--右鍵你要壓縮的數據庫--所有任務--收縮數據庫--收縮文件--選擇日誌文件--在收縮方式裏選擇收縮至XXM,這裏會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。

清除Log有兩種方法:

  1.自動清除法

  開放數據庫選項 Trunc Log on Chkpt,使數據庫系統每隔一段時間自動清除Log。此方法的優點是無須人工干預,由SQL Server自動執行,並且一般不會出現Log溢滿的情況;缺點是隻清除Log而不做備份。

  2.手動清除法

  執行命令“dump transaction”來清除Log。以下兩條命令都可以清除日誌:

dump transaction with truncate_only

dump transaction with no_log

  通常刪除事務日誌中不活躍的部分可使用“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事務日誌的問題彙總

1、用BACKUP LOG database WITH NO_LOG清除日誌

       把數據庫屬性中的故障還原模型改爲“簡單”可以大大減慢日誌增長的速度。如果把還原模型調到簡單,這樣就不支持時間點還原了,但是日誌文件會很小,如果數據比較重要推薦還是把數據庫的還原模型調爲完全。

       用BACKUP LOG database WITH NO_LOG命名後,會截斷不活動日誌,不減小物理日誌文件的大小,但邏輯日誌會減小,收縮數據庫後會把不活動虛擬日誌刪除來釋放空間,不會損壞數據。

       如果日誌被截斷並收縮數據庫後,就不能直接用最近的一個全庫備份做時間點還原,建議立即備份數據庫,以防萬一。

2、sql server運行中,刪除主數據庫事務日誌文件

步驟如下:(1)、分離數據庫:企業管理器--數據庫--右擊你要刪除日誌的數據庫--所有任務--分離數據庫

               (2)、然後刪除日誌文件

               (3)、然後再附加數據庫:企業管理器--數據庫--右擊數據庫--所有任務--附加數據庫。這時候只附加mdf就可以了。

3、壓縮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文件對於我們普通用戶來說是沒什麼用,上面只是詳細的記錄了所有對該數據庫的每一步操作,實際的數據已經保存到數據庫文件中了,所以是不可能有什麼回檔之類的問題的。以前我們也問過微軟的人,據說是如果你的數據庫文件壞掉了,有這個他們有辦法幫助你恢復數據庫,但是由於方法並不公開,所以對於我們來說,這只是佔空間的東西。因爲原先沒覺得這個是問題,所以也沒站出來介紹一下,現在看越來越多的朋友問這個問題,就提供一下方法。下面是主題了:

1、進入企業管理器,選中數據庫,比如muonline

2、所有任務->分離數據庫

3、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話可以拷出去

4、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,不要緊繼續,此時數據庫就會提示你該數據庫無日誌是否創建一個新的,確定就是了。

5、記得數據庫重新附加後用戶要重新設置一下。

以後如果新的日誌文件變大了,再繼續這個步驟就行了

 

--假設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

2、所有任務->分離數據庫

3、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話可以拷出去

4、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,不要緊繼續,此時數據庫就會提示你該數據庫無日誌是否創建一個新的,確定就是了。

5、記得數據庫重新附加後用戶要重新設置一下

 

[推薦]數據庫自動備份、縮小以及防止回檔

不要在屬性裏限制數據庫大小,這樣文件容量滿的時候會出現回檔

建立作業,每天自動備份數據庫,自動刪除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。

二:

數據庫增大是因爲你的日誌增大了,以前大家討論過的,最簡單可行的辦法就是在你數據庫屬性->選項->故障還原裏面選成簡單模式(缺省爲完全模式),然後選收縮數據庫進行一次收縮,以後你的數據庫基本就不怎麼會增長了

三:

1、進入企業管理器,選中數據庫,比如muonline

2、所有任務->分離數據庫

3、到數據庫文件的存放目錄,將MuOnline_log.LDF文件刪除,你怕S的話可以拷出去

4、企業管理器->附加數據庫,選muonline,這個時候你會看見日誌文件這項是一個叉,不要緊繼續,此時數據庫就會提示你該數據庫無日誌是否創建一個新的,確定就是了。

5、記得數據庫重新附加後用戶要重新設置一下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章