事由:因為某次的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的檔
開始使用SSMS的介面去修改資料型態的長度
會先行問你,確定要改嗎?
當我按「Yes」後…過了30秒,來了這樣的錯誤訊息
Timeout了…因為預設是30秒,請至
Tools=>Options=>Designers=>Transaction Time-out after去改
改完後,繼續剛剛的動作,執行完後,
發現Transaction Log你可以長這麼大沒關係嗎?
Ok,再次清空Transaction Log然後用tsql去run同樣的東西
使用alter table <tablename> alter column <columnname> <datatype>
發現~!!!咻~~一下子就過了,乃看一下Transaction Log
你說說抗~~你說說抗,Transaction Log你怎麼一點兒長大也沒有???
......
......
......
......
......
心得只有一個,明明做同樣的動作,幹嘛背地裡有不同的作法啦~~
留言列表