茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1669214 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00240.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]清除SQL Server Log檔

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]清除SQL Server Log檔

清除SQL Server Log檔

How to clear database transaction log file

如果沒有限制資料庫的Log成長,一不小心某天就發現硬碟竟然滿了,此時會出現這樣的錯誤訊息:


訊息 9002 ....
資料庫 'TestDB' 的交易記錄已滿。如果要了解為何無法重複使用記錄中的空間,請參閱 sys.databases 中的 log_reuse_wait_desc 資料行。

結果發現都是Log檔佔掉了空間,高達幾十GB都有可能,這時候只好先想辦法清空Log資料,SQL Server 2008的話可以嘗試以下的指令來做清除:

SQL SERVER 2008


 USE [資料庫名稱]
GO
ALTER DATABASE [資料庫名稱] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
ALTER DATABASE [資料庫名稱] SET RECOVERY FULL WITH NO_WAIT
GO

邏輯名稱可在資料庫上按右鍵=>[屬性]=>[檔案]中查看,注意邏輯名稱不一定會和檔名相同,例如:


 USE [TestDB]
GO
ALTER DATABASE [TestDB] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(TestDB_log, 1)
ALTER DATABASE [TestDB] SET RECOVERY FULL WITH NO_WAIT
GO

之前的版本的話可以使用以下指令,網路上找到的順便整理進來,沒有實際使測過:

SQL SERVER 2000, 2005


 USE [資料庫名稱]
GO
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
BACKUP LOG [資料庫名稱] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
GO

例如:


 USE [TestDB]
GO
DBCC SHRINKFILE(TestDB_log, 1)
BACKUP LOG [TestDB] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(TestDB_log, 1)
GO


原文出處: 清除SQL Server Log檔 @ 小殘的程式光廊 :: 痞客邦 PIXNET ::
冷日提醒:
MSSQL 預設安裝完新增的資料庫『預設是不限制大小的』!
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]SQL Server 如何縮小 Log 記錄檔

SQL Server 如何縮小Log記錄檔

今天終於遇到Log檔太大的問題連500G硬碟都無法備份了
還好之前有找許多方試當備用今天終於用上了

開啟管理工具輸入清掉Log檔 DUMP TRANSACTION DBNAME WITH NO_LOG
但清完後發覺怎麼還是一樣大呢? 右鍵工作 > 壓縮 > 檔案 > 釋放未使用的空間之前,先重新組織頁面打上你要的大小,確定後就ok


2008 & 2012
USE [資料庫名稱]
GO
ALTER DATABASE [資料庫名稱] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
ALTER DATABASE [資料庫名稱] SET RECOVERY FULL WITH NO_WAIT
GO
2000& 2005 USE [資料庫名稱]
GO
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
BACKUP LOG [資料庫名稱] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
GO


以下為來源
參考網頁1
參考網頁2

參考網頁3
參考網頁4

原文出處: SQL Server 如何縮小Log記錄檔 | 簡單使用
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]清除 MS SQL Server 的 log

【database】清除 MS SQL Server 的 log

use 資料庫名稱
Backup Log 資料庫名稱 with TRUNCATE_ONLY
dbcc shrinkfile (資料庫名稱_log , truncateonly)



開啟檔案總管
==> C:\Program Files\Microsoft SQL Server\MSSQL\Data\
==> 檢視是哪個 database 的檔案變太大
==> 進入 SQL Server Enterprise Manager
==> 在要壓縮的資料庫點滑鼠右鍵
==> 所有工作
==> 壓縮資料庫
==> 右下角 "檔案" 鈕
==> 最上方 "資料庫檔案" 下拉列表選擇 " 資料庫名_log"
==> "確定" 鈕
開啟 SQL Server Enterprise Manager
==> 滑鼠在資料庫上點右鍵
==> 內容
==> " 選項" 頁籤
==> " 復原
" 的 " 模型" 下拉列表由原 " 完整" ==> " 簡易"
==> " 自動壓縮" 打勾

原文出處:老灰鴨的筆記本: 【database】清除 MS SQL Server 的 log
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]SQL Server Log 檔案太大了!

SQL Server Log 檔案太大了!

昨天去上課。晚上下課一回來,同事就抱怨系統太慢了。

今天早上剛好是民國100年元旦,就來公司檢查有無百年蟲問題吧。順便 Check 一下系統太慢的問題。

一檢查,SQL Server 磁碟沒空間了。當下就知道為什麼慢了。

當務之急,就是將超大的資料庫  log 檔備份並 shink。

SQL Server 2005

以前在 SQL Server 2005 指令會這樣下
use master
go
--備份目前的 log
backup log DatabaseName to disk='c:\db.log' WITH NOFORMAT
--將 log 清除
BACKUP LOG DatabaseName WITH TRUNCATE_ONLY
--找到 DatabaseNameLog 的值
use DatabaseName
go
select name from sys.database_files
where type_desc = 'log'
--縮減 log file 到 1MB
DBCC SHRINKFILE(DatabaseNameLog, 1)

SQL Server 2008


到了 SQL Server 2008,Trancate_only 的指令正式被取消了。由於資料庫的復原模式為簡單的情形下是不記錄所有的 log資料的。我們可以利用這一點清除 log 資料。因此,替代的方法,是將資料庫的復原模式先換成簡單模式,再調整為完整。指令如下


use master
go
--備份目前的 log
backup log DatabaseName to disk='c:\db.log' WITH NOFORMAT
--將資料庫復原模式切換到簡單模式
ALTER DATABASE DatabaseName SET RECOVERY SIMPLE WITH NO_WAIT
--找到 DatabaseNameLog 的值
use DatabaseName
go
select name from sys.database_files
where type_desc = 'log'
--縮減 log file 到 1MB
DBCC SHRINKFILE(DatabaseNameLog, 1)
--將資料庫復原模式切換到完整模式
USE [master]
GO
ALTER DATABASE [DatabaseName] SET RECOVERY FULL WITH NO_WAIT


原文出處:程湘之間: SQL Server Log 檔案太大了!
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]清除 MSSQL Log 日誌的兩種方法
清除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”命令。

附一個更好的方法
先分離資料庫後,直接刪除日誌以後,再在查詢分析器裏用
exec sp_attach_single_file_db '資料庫名', '.mdf檔路徑' 命令附加資料庫。
exec sp_attach_single_file_db '{yourDataBaseName}', '{Paht}/{yourDataBaseName}.mdf'


原文出處:清除mssql Log日誌的兩種方法 @ hsiung.博格 ERP軟體 :: 隨意窩 Xuite日誌
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]SQL Server 解決 log 檔(ldf file)過度膨脹的實戰經驗

[SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗

背景:
公司最近把一套每天有相對大量交易 (之前公司更大很多很多倍)的系統轉移到SQL Server去,不到一個月交易檔(ldf)已經貼近數據檔(mdf)的size,真的好可怕啊。
身為SQL Server的DBA當然  要替月行道,警惡懲奸 不能讓這種情況繼續下去。

解決方案選擇:
  • 第一個我想到的方法是把Database的Recovery model設成Simple,簡單來說就是不需要交易記錄,對於Insert Delete Update 很少的系統勉強還說得過去,不過對於交易量大的系統來說就不行了,沒有交易記錄萬一資料庫突然往生,總不能用full backup還原然後要User重新輸入一天的交易吧。

  • 第二個方法是定時進行備份。為什麼log大小跟備份有關係呢? 簡單來說,資料庫的ldf檔就是用來儲存Full Backup後所發生的所有交易。如果你從今天從來沒有為資料庫進行過備份, 理論上ldf檔會無限的膨脹下去,而且利用Shrink指令也無法把交易檔壓縮。因為沒備份的話就等於ldf檔裡面的東西統統有用,當然沒辦法壓縮了。所以要保持交易檔案的size就是要持續保持備份,在每次備份完了以後自動把交易檔Truncate成初始大小,這樣可以長期保持相對小的交易檔。
所以,最後我選擇了方案二。

實作流程考慮因素:
SQL Server的backup model一定要一份full backup再塔配其他備份檔一起使用( SQL Server的備份model解釋在此),要達到控制ldf檔案大小的目的,備份可以每天只是Full Backup,也可以是Full->T-log,也可以是最複雜Full->Diff->T-log,我考慮使用那一種的因素主要有以下:

  • 資料庫本身只是約55GB不是太大;
  • 每天交易量不多,每分鐘約10筆交易;
  • 使用者允許少量的data loss,一天Data loss肯定不行;
  • 資料庫只是辦公時間才會用。

我個人認為Backup Plan越簡單越好,發生狀況的時候已經很緊張,複雜的Backup只會令事情更糟。反正今天硬碟實在是太便宜,天天備份幾次也無所謂,因此在儘量簡化備份流程的前題之下,小弟傾向 每天Full BackUp一次,每小時備份一次T-log,就是Full->T-log的塔配。

實現步驟:
好吧,根據之前實作流程的結論動手做看看吧。要自動化整個備份工作,SQL Server 2008以後有一個很好用的工具叫Maintainence Plan,可以把需要routie的日常維護的工作放到這裡。
  1. 首先用有sysadmin權限的帳號登入,然後到Management-> Maintenance Plan按右鍵-> New Maintainance Plan
  2. 輸入Maintenance Plan的名字,例如 XXX Server Backup Plan,按OK。



  3. 接下來會看到一個空白的Maintenance Plan,如上面所述我們需要每天Full Backup一次,然後每小時來一個T-log的備份,所以Maintenance Plan裡應該有兩項的Subplan,一個是負責Full Backup,另一個是負責T-log Backup。


  4. 先設定Full Backup。先點一下選取Subplan_1,然後在左邊的Toolbox欄拉出一個Back up Database Task,在拉出的Backup元件中按右鍵-> Edit





  5. 備份的位置按公司的規定,小弟公司習慣放回資料庫裡。Compression選項就要看實際情況了,我習慣把備份壓縮,因為小弟公司不是24小時運作,淩晨的時候資料庫反正也很閒,省個空間也不錯....不過要記得如果Full Backup是選擇壓縮的話,Diff或者T-log備份一定要一樣選擇壓縮,不然的話小弟試過最後合不起來,然後....(下刪一萬字悲情文)





  6. 接下來是設定Full Backup的運作時間,按一下Sub_plan1右邊的小icon,進入到Properties畫面。

  7. 回憶一下,我們的Full backup是每天non Office Hour一次。所以Schedule type選擇Recurring,Frequency選擇Daily,時間設在每天淩晨12點然後按OK,如下圖。






  8. 設好FullBackup了以後重覆步驟設定T-Log備份。開一個新的Subplan,設好每小時跑一次,要比較注意的是BackUp Database Task中BackUp Type要選Transaction Log、If backup files exist選Append。為什麼是Append呢? 因為像我這個案例是每小時備份一次,如果每次也Overwrite的話T-log的備份永遠只有最近的那一小時,結果當然是T-log備份無法跟Full backup結合在一起,因為根本就不完整啊(哀)~!!!,不過話說回來,如果純是為了壓縮ldf檔的話選擇Overwrite也是OK的,不過小弟要弄的資料庫一小時才幾MB T-Log,幹嘛不順便備份一下呢? 最後記得要多新增一個Maintenance Cleanup Task每天把這個T-log刪掉,不然這個T-log的備份也會 像通膨一樣無限的變大
  9. 全部設好以後按save. Plan就會按你定的時間開始跑了,確定你的備份有按時進行並且無誤(可以把Full Backup及T-log backup 還原到testing environment看看)以後,可以為database進行Shrink動作,T-log應該會回到原始大小了。定時監控一下ldf檔案應該不會再發現爆大的情況了...

總結:
T-log ldf檔案過大除了浪費空間,還會直接影響系統的效能(想像一下每次要把資料寫進十幾GB的檔案),所以定時清理是必須的,可透過定時的備份把沒用的T-log清理掉,來保持T-log ldf檔不會無限制的過度膨脹。

如發現小弟任何觀念錯了歡迎提出喔^口^

原文出處:1010: [SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|