事由:因為某次的Transaction Log已滿而延伸出來的問題,怎說?

User使用MSSQL的管理介面(SQL 2000)將一Table中某一欄位的資料型態長度由10改為20,

結果造成Transaction Log爆大量而產生Transaction Log已滿的錯誤訊息。

 

先行說明,若Transaction Log是自動成長,

出現此訊息應先查看是否硬碟的空間已經不足夠了,

再者,查看是否DB其recovery model是否為Full,

若要請空Transaction Log檔,請查看此篇

 

 

而造成這次Transaction Log已滿是因為我有限制其自動成長到20g就不能再長了。

因為當時查看的DB的復原模式是Simple,為何還有Transaction Log已滿的訊息,

後來發現Transaction Log尚有4g的空間,尚未達到checkpoint的點又加上到20g,

就不給再成長了,才產生此錯誤訊息。

 

回頭查看,為何只是更動資料型態的長度會使Transaction Log一直大量增長

(我的資料表內的資料量約幾千筆),不可能MSSQL這麼的不Friendly啊…

很感謝楊志強老師的解惑(請加入Super SQL Sever社團),

 

因為使用MSSQL的介面作此變更動作,其是使用暫存資料表+insert into的狀況,

這就完全是跟Transaction Log有關了,於是做了Lab來玩玩。

Lab的Table內約250000筆資料,我先行清空Transaction Log的檔

TransactionLog01  

開始使用SSMS的介面去修改資料型態的長度

TL02  

會先行問你,確定要改嗎?

TL03  

當我按「Yes」後…過了30秒,來了這樣的錯誤訊息

TL04  

Timeout了…因為預設是30秒,請至

Tools=>Options=>Designers=>Transaction Time-out after去改

TL05  

TL06  

改完後,繼續剛剛的動作,執行完後,

發現Transaction Log你可以長這麼大沒關係嗎?

TL07  

Ok,再次清空Transaction Log然後用tsql去run同樣的東西

TL08  

使用alter table <tablename> alter column <columnname> <datatype>

TL09  

發現~!!!咻~~一下子就過了,乃看一下Transaction Log

 

TL10  

TL11  

你說說抗~~你說說抗,Transaction Log你怎麼一點兒長大也沒有???

......

......

......

......

......

心得只有一個,明明做同樣的動作,幹嘛背地裡有不同的作法啦~~

 

 

arrow
arrow

    在史瓦的生活記錄 發表在 痞客邦 留言(0) 人氣()