在網上看到許多關於資料記錄檔太大如何處理的問題,也看到了許多不合實際的做法,也有人因為錯誤的操作但是沒有日誌而急得焦頭爛額, 其實資料庫的記錄檔是記錄資料庫 UPDATE,DELETE 操作的蹤跡,也是當資料庫發生意外(如駭客攻擊,系統資料庫發生破壞破壞等)時我們能夠讓資料庫恢複至特定時刻的保證, 所以它很重要!!我們應該對資料庫進行記錄備份! 我們現在來分析一下資料庫故障的種類: 一:事務內部的故障 也就是我們不能夠保證事務的一致性狀態,舉個例子來說,您有兩個銀行帳戶,由於某種原因,您現在需要從一個銀行帳戶上取出100萬存到另一個銀行帳戶上, 但是由於銀行資料庫的故障,您的一個銀行帳戶確實少了100萬,但是另一個帳戶沒有相應的增加100萬,您現在會怎麼做:( 當然我們可以在相應事務中加入ROLLBACK來強抽復原 二:系統故障(軟體故障-SOFT CRASH) 系統故障是指造成系統停止運轉的任何事件,捨不得系統要重新啟動.如特定類型的硬體故障(CPU故障),作業系統故障,DBMS代碼故障,突然停電等,這類故障影響正在啟動並執行事務, 但是不破壞資料庫.這時所有記憶體的資料全部丟失,所有事務非正常終止,一些沒有完成的事務的結果可能已經送給了物理資料庫,從而資料庫中的資料處於不正確狀態,為保證資料的一致 性,需要清除這些事務對資料庫的篡改! 這時系統重新啟動後,對所有已經提交的事務REDO,對所有非正常終於的事務UNDO來強行撤消所有未完成的事務! 三:介質故障(硬體故障--HARD CRASH) 這是一種外存故障,如磁碟損壞,磁頭碰撞,瞬時強磁場幹擾等.這類故障可能性最小,但是破壞性最大. 四:電腦病毒 上述故障資料庫進行恢複的原理十分簡單,就是兩個字"冗餘"現在我們就說一下如何建立"冗餘"技術! 備份 我們現在來看一下SQL SERVER 的備份技術,所有資料庫的備份目的都是一樣的,SQL SERVER也一樣,防止資料丟失! 本章主要包括下面幾個方面的內容: 1.在SQL SERVER 中我們可以設定資料庫的恢複模型為完全恢複模型,大容量插入模型和簡單模型, 2.什麼時候需要我們進行資料庫的備份 3,有幾種Database Backup方法 4.0,示範幾種備份方法(用備份前的準備工作) 5.幾種備份策略 上面的的內容可以在BOOK ON LINE 裡找到非常好的回覆,如果需要,我再寫:) 練習:example: 0.首先要有一個完全備份(不然的話您是不能夠成功的備份記錄檔的:) )呵呵 backup database Northwind to nwbakup1,nwbakup2 with init --查看備份資訊 RESTORE FILELISTONLY FROM nwbakup1,nwbakup2 也可以在企業管理器中SQL伺服器-Northwind-右鍵-所有任務-備份資料庫, 然後在圖形介面下進行相應的操作,這是非常簡單的 1.use northwind insert employees(lastname,firstname) values('aaa','aaa') delete from employees where lastname='aaa' 記下這時的時間 23:33 2.過3分鐘輸入 use northwind insert employees(lastname,firstname) values('bbb','bbb') 3.此時select * from employees 將能看到這兩條記錄 4.進行記錄備份,選中northwind資料庫,所有任務,backup database 在對話方塊中,選擇交易記錄備份為備份類型,選擇已有的備份裝置,和追加到媒體 單擊ok進行備份.這樣產生了兩個新紀錄的記錄備份 backup log Northwind to nwlogbakup 5.以下示範恢複 所有任務 restore database 對話方塊中選擇時點還原,輸入剛才記錄的時間,單擊ok恢複 restore database Northwind from nwbakup1,nwbakup2 with norecovery use Northwind 伺服器: 訊息 927,層級 14,狀態 2,行 1 無法開啟資料庫 'Northwind'。該資料庫正處於還原作業中途。 這是因為我們指定了選項" with norecovery" 6.現在恢複交易記錄至23:35 restore log Northwind from nwlogbakup with recovery, stopat=񟭃-08-02 23:35' 6.執行select * from employees ,此時只能看到第一個新插入的記錄 --查看備份資訊 RESTORE FILELISTONLY FROM DISK ='C:/Program Files/Microsoft SQL Server/MSSQL/BACKUP/db1_backup' DBCC SQLPERF (LOGSPACE) --查看日誌空間 1*你應該備份日誌 BACKUP LOG 資料庫名 TO DISK='c:/aalogbak' WITH INIT,NO_TRUNCATE 這樣你的日誌清空也備份了,日誌也清空了,你可以壓縮了 在維護記錄備份序列時,調度 BACKUP LOG 語句按間隔發生,以使交易記錄不致增長到超過預期的大小。 如果不想要日誌或者是日誌已沒有什麼作用時,可以考慮以下的實現方案: 1. backup log DBNAME with [no_log|truncate_only][no_truncate] /* NO_LOG | TRUNCATE_ONLY 無須備份複製日誌即刪除不活動的日誌部分,並且截斷日誌。該選項會釋放空間。因為並不儲存記錄備份,所以沒有必要指定備份裝置。NO_LOG 和 TRUNCATE_ONLY 是同義的。 使用 NO_LOG 或 TRUNCATE_ONLY 備份日誌後,記錄在日誌中的更改不可恢複。為了恢複,請立即執行 BACKUP DATABASE。 NO_TRUNCATE 允許在資料庫損壞時備份日誌。 */ 2. 收縮資料庫檔案 select fileid,filename from sysfiles USE DBNAME DBCC SHRINKFILE (2,10) -- 把fileid=2 的檔案收縮到 10 MB OR 企業管理器-右鍵你要壓縮的資料庫-所有任務-收縮資料庫-收縮檔案-選擇記錄檔-在收縮方式裡選擇收縮至XXM,這裡會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了 3: 刪除LOG 1:分離資料庫 2:刪除LOG檔案 3:附加資料庫 此法產生新的LOG,大小隻有500多K 4.你可以先配置你的RECOVERY MODEL 為SIMPLE ALTER DATABASE DB_NAME SET RECOVERY SIMPLE 5.exec sp_dboption 'test2','autoshrink','on' 5 展開伺服器組,然後展開伺服器。 展開"資料庫"檔案夾,右擊要從中刪除資料或記錄檔的資料庫,然後單擊"屬性"命令。 若要刪除資料檔案,單擊"常規"選項卡。若要刪除記錄檔,單擊"交易記錄"選項卡。 在"檔案名稱"列中,單擊要刪除的檔案名稱旁邊的箭頭,再按 DELETE 鍵。檔案名稱旁出現十字游標,表明將刪除此檔案。 說明 只能刪除空檔案 |