當前位置:首頁 » 編程語言 » sqlserver清除日誌語句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver清除日誌語句

發布時間: 2022-09-09 05:14:27

sqlserver2008和sqlserver2012日誌文件過大,有什麼方法清理嗎

清理sql server 2008日誌步驟如下: 1.將資料庫設置成 簡單 模式 選擇要收縮的資料庫,點右鍵 屬性->選項,選擇 簡單模式 2.選擇任務->收縮->文件 3.選擇日誌 或者用如下語句 代碼 USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE GO USE DNName GO DBCC SHRINKFILE (N'LogFileName' , 0,TRUNCATEONLY) GO USE [master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL GO SQL Server 2000要清理日誌使用的是mp語句,但是在SQL Server2008里,這個語句不管用了,如果日誌文件很大,比如超過1G,就需要截斷一下日誌文件以加快sqlserver的運行速度,在SQL Server2008里,方法改為: 有資料庫 xxdb 在 SQL Server 2008 下,日誌文件已經超過1G。 以往使用BACKUP語句-BACKUP LOG xxdb WITH NO_LOG 已經失效,在查閱 MSDN 之後發現 MS 提供的標准截斷日誌語句已經變為了 「BACKUP LOG 語句不指定 WITH COPY_ONLY」 使用語句 BACKUP LOG xxdb to disk='x:\work\1.bak' 成功將日誌文件備份,並截斷日誌文件。這里x:代表你想要備份文件的盤符。 然後使用 DBCC SHRINKFILE (xxdb_log,10) 收縮日誌文件到 10M 總結: 完整的收縮日誌文件的 T-SQL 語句: BACKUP LOG xxdb to disk='x:\work\1.bak' DBCC SHRINKFILE (xxdb_log,10) GO -- BACKUP LOG <db_name> to disk=<'backupfilename'> DBCC SHRINKFILE (<log_filename>,10) GO 裡面的x:\work是隨意設置的。當然也可以收縮到比如5M或1M。 在用的: USE[master] GO _WAIT GO --簡單模式 GO USEYHDB GO DBCCSHRINKFILE(N'YHDB_log', 11,TRUNCATEONLY) GO USE[master] GO _WAIT GO --還原為完全模式 GO

㈡ 如何清除SQL server日誌

方法1:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以
第二步:
1.收縮特定資料庫的所有數據和日誌文件,執行
dbcc
shrinkdatabase
(database_name,[,target_percent])--database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比
2.收縮一次一個特定資料庫中的數據或日誌文件,執行
dbcc
shrinkfile(file_id,[,target_size])
--file_id是要收縮的文件的標識
(ID)
號,若要獲得文件
ID,請使用
FILE_ID
函數或在當前資料庫中搜索
sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc
shrinkfile
將文件大小減少到默認文件大小
兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思看幫助。
方法2
(這個方法在sqlserver2000的環境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先備份整個資料庫以備不測
第二步:
備份結束後,在Query
Analyzer中執行如下的語句:
exec
sp_detach_db
yourDBName,true
--卸除這個DB在MSSQL中的注冊信息
第三步:
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄
第四步:
在Query
Analyzer中執行如下的語句:
exec
sp_attach_single_file_db
yourDBName,'d:\mssql7\data\yourDBName_data.mdf'
--以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。
以上方法在清除log日誌中均有效。
但,能否讓sql
server
不產生log日誌呢?以上方法好像均無效。
我這兒正好有個case:
我客戶的sql
server每天都會產生4,500M的log日誌,每天都清除一下,非常不便。有沒有辦法實現不產生log日誌呢?
我分析了一下客戶產生log日誌的原因,並且做了相應測試。
客戶是每天將資料庫清空,從總系統中將數據導入到sql
server里。我感決sqlserver在插入時產生log不大,在delete整個庫時產生log極大。
比如:
SELECT
*
into
test_2
from
b_bgxx
共45000條記錄,產生十幾M
log,如果
delete
from
test_2
產生80多M
log
,這明顯存在問題。
雖然可以換成:
truncate
table
test_2
但我還是希望能找到不產生log的方法。就如oracle不產生歸檔一樣。

㈢ sqlserver 2008 R2 的日誌文件怎麼刪除

SQL Server 2008清空刪除日誌文件方法:
在SQL2008中清除日誌就必須在簡單模式下進行,等清除動作完畢再調回到完全模式。
打個SQL查詢分析器,在裡面輸入如下命令後執行即可:

USE [master]
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE --簡單模式
GO
USE DNName
GO
DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
GO
'這里的DNName_Log 如果不知道在sys.database_files里是什麼名字的話,可以用以下注釋的語句進行查詢
'USE DNName
'GO
'SELECT file_id, nameFROM sys.database_files;
'GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL --還原為完全模式
GO

㈣ SQLServer 如何自動清理日誌文件

資料庫日誌文件是隨著時間增長而增長的,如果長時間不清理,文件會變得特別大,因此需要定期清空,但是日至文件是恢復資料庫的重要依據,不用日誌文件也是不明智的。手工清除單個資料庫的還好說,但資料庫多了,或者臨時沒有來得及清理,可能硬碟空間就會占滿了,影響訪問。因此設置自動清理資料庫日誌文件還是比較實用的。

手動清理方法:右鍵單擊需要清理的資料庫,選擇「屬性」,在「選項」卡上,把故障還原模型設定為簡單,確定後關閉;再右鍵單擊該資料庫,「所有任務」-「收縮資料庫」,確認後即可清除日誌文件,最後記得重新選擇「屬性」,將故障還原模型設置為完全。

自動清理方法:利用sql server代理服務,執行自動作業。

打開企業管理器,進入「管理」-「sql server代理服務」-「作業」,在右側窗口點擊右鍵,選擇「新建作業」。「常規」選項卡中,填寫作業名稱,具體

上邊的資料庫名稱填寫需要維護的資料庫名稱,資料庫日誌文件名填寫其對應的日誌文件名,注意,不是資源管理器里看到的帶後綴名的那個名字,而是企業管理器里,資料庫屬性里日誌選項卡中日誌的名字(通常也只是差一個後綴名……),確定後添加一個作業步驟。 如果需要維護多個資料庫,用上述方法重復添加作業步驟,注意每個步驟成功或失敗後的動作即可,最後選擇一下開始的步驟。

在「調度」選項卡中,類似備份的維護計劃,填寫調度周期,即定期清理的周期,不再細述。如果需要,可以在最後的「通知」選項卡上設置作業完成後的通知項,需要設置操作員,以及設置相應的服務,這里也不具體說明了,通常不用……

㈤ 如何清理SQL Server中的事務日誌

1.打開查詢分析器,輸入命令
DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
清除Log有兩種方法:
1.自動清除法
開放資料庫選項 Trunc Log on Chkpt,使資料庫系統每隔一段時間自動清除Log。此方法的優點是無須人工干預,由SQLServer自動執行,並且一般不會出現Log溢滿的情況;缺點是只清除Log而不做備份。
2.手動清除法
執行命令「mp transaction」來清除Log。以下兩條命令都可以清除日誌:
mp transaction with truncate_only
mp transaction with no_log

通常刪除事務日誌中不活躍的部分可使用「mp transaction with trancate_only」命令,這條命令寫進事務日誌時,還要做必要的並發性檢查。SYBASE提供「mp transaction with no_log」來處理某些非常緊迫的情況,使用這條命令有很大的危險性,SQLServer會彈出一條警告信息。為了盡量確保資料庫的一致性,你應將它作為「最後一招」。
以上兩種方法只清除日誌,而不做日誌備份,若想備份日誌,應執行「mp transaction database_name to mpdevice」命令。
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),那麼就無法進行數據的恢復了,或者
只能恢復到最近一次的備份的數據了。

日誌文件滿而造成SQL資料庫無法寫入文件時,可用兩種方法:
一種方法:清空日誌。
1.打開查詢分析器,輸入命令
DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再打開企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。

另一種方法有一定的風險性,因為SQL SERVER的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。
1: 刪除LOG
分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件
附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K。

注意:建議使用第一種方法。

㈥ 如何清空SQL日誌

方法1:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以
第二步:
1.收縮特定資料庫的所有數據和日誌文件,執行
dbcc
shrinkdatabase
(database_name,[,target_percent])--database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比
2.收縮一次一個特定資料庫中的數據或日誌文件,執行
dbcc
shrinkfile(file_id,[,target_size])
--file_id是要收縮的文件的標識
(ID)
號,若要獲得文件
ID,請使用
FILE_ID
函數或在當前資料庫中搜索
sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc
shrinkfile
將文件大小減少到默認文件大小
兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思看幫助。
方法2
(這個方法在sqlserver2000的環境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先備份整個資料庫以備不測
第二步:
備份結束後,在Query
Analyzer中執行如下的語句:
exec
sp_detach_db
yourDBName,true
--卸除這個DB在MSSQL中的注冊信息
第三步:
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄
第四步:
在Query
Analyzer中執行如下的語句:
exec
sp_attach_single_file_db
yourDBName,'d:\mssql7\data\yourDBName_data.mdf'
--以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。
以上方法在清除log日誌中均有效。
但,能否讓sql
server
不產生log日誌呢?以上方法好像均無效。
我這兒正好有個case:
我客戶的sql
server每天都會產生4,500M的log日誌,每天都清除一下,非常不便。有沒有辦法實現不產生log日誌呢?
我分析了一下客戶產生log日誌的原因,並且做了相應測試。
客戶是每天將資料庫清空,從總系統中將數據導入到sql
server里。我感決sqlserver在插入時產生log不大,在delete整個庫時產生log極大。
比如:
SELECT
*
into
test_2
from
b_bgxx
共45000條記錄,產生十幾M
log,如果
delete
from
test_2
產生80多M
log
,這明顯存在問題。
雖然可以換成:
truncate
table
test_2
但我還是希望能找到不產生log的方法。就如oracle不產生歸檔一樣。

㈦ 怎麼清除sql server日誌

或者backup log database_name with truncate_only --no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以第二步: 1.收縮特定資料庫的所有數據和日誌文件,執行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比 2.收縮一次一個特定資料庫中的數據或日誌文件,執行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收縮的文件的標識 (ID) 號,若要獲得文件 ID,請使用 FILE_ID 函數或在當前資料庫中搜索 sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc shrinkfile 將文件大小減少到默認文件大小兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思看幫助。方法2(這個方法在sqlserver2000的環境下做一般能成功,在sqlserver7及以下版本就不一定了):第一步:先備份整個資料庫以備不測第二步:備份結束後,在Query Analyzer中執行如下的語句: exec sp_detach_db yourDBName,true --卸除這個DB在MSSQL中的注冊信息第三步:到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄第四步:在Query Analyzer中執行如下的語句: exec sp_attach_single_file_db yourDBName,'d:\mssql7\data\yourDBName_data.mdf' --以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。以上方法在清除log日誌中均有效。 但,能否讓sql server 不產生log日誌呢?以上方法好像均無效。 我這兒正好有個case: 我客戶的sql server每天都會產生4,500M的log日誌,每天都清除一下,非常不便。有沒有辦法實現不產生log日誌呢?我分析了一下客戶產生log日誌的原因,並且做了相應測試。 客戶是每天將資料庫清空,從總系統中將數據導入到sql server里。我感決sqlserver在插入時產生log不大,在delete整個庫時產生log極大。 比如:SELECT * into test_2 from b_bgxx 共45000條記錄,產生十幾M log,如果 delete from test_2 產生80多M log ,這明顯存在問題。雖然可以換成: 但我還是希望能找到不產生log的方法。

㈧ SQL Server 快速清除日誌文件的方法

SQL Server 2000快速清除日誌文件的方法

SQL Server 2000 資料庫日誌太大!

如何清理SQL Server 2000的日誌呢?

如何壓縮SQL Server 2000的日誌呢?

如何讓SQL Server 2000的日誌變小呢?

據我所知,辦法有很多很多,總結起來算有3類吧:

1、點幾下滑鼠,用SQL Server 2000管理工具中的企業管理器即可實現,待會兒詳解;

2、用SQL語句,在SQL Server 2000管理工具中的查詢分析器可以實現,此法高級人士喜歡用;

3、用第三方工具實現,原理嘛,我覺得應該是用SQL語句來實現的,這方法好,簡單易用,網上不乏精品工具,待會兒介紹一款。

一、現在我們詳細描述一下如何用企業管理器清理SQL 2000的日誌:

1、打開企業管理器,右擊要處理的資料庫--》屬性--》選項--》故障還原,選「簡單」--》確定。如圖:

2、右擊要處理的資料庫--》所有任務--》收縮資料庫--》什麼也不動,默認第一個是0%,其它兩個未選中,點確定--》如果您以前資料庫日誌文件大於1M那麼現在再看看,是不是只有1M了呢。

3、操作完後--》按第一步,把「故障還原」,選「完全」,傳說中SQL Server 2000 有自動還原功能,說是如果非法關機等因素造成數據丟失可以自動回滾,另外可以用程序來實現操作回滾,所以最好是讓故障還原是「完全」。

4、這樣便實現了「SQL Server 2000 資料庫日誌太大!如何管理,清除,變小,壓縮它」中的清除,變小,壓縮了,至於怎麼管理,自己看著辦吧,我一般只會用到這些,再有深入研究的話我會寫上來的`。

二、現在我們介紹用第三方SQL Server 日誌清理工具來清理日誌,簡單易用高效,推薦用這個方法。

我喜歡用 SqlServer日誌清除專家 v3.5 來實現這個功能。界面如下:

資料庫那裡一般會將整個伺服器的資料庫名都列舉出來,需要選擇為自己賬戶能管理到的那個,我這里DB_iszip賬戶能管理的是 iszip ,選擇好之後,點「清除日誌」按鈕,然後SQL Server 2000的日誌就被清理好了,此時你去伺服器看你資料庫日誌佔用空間就只有1M了。

;