細說Sybase資料庫日誌

2021-03-31 08:56:28 字數 2542 閱讀 4216

sybase公司是世界著名的資料庫廠家,其關聯式資料庫產品sybase sql server在 中國大中型企事業單位中擁有大量的使用者。筆者在多年的使用過程中,總結出sybase資料庫管理和維護的一些經驗,現拿出來與大家分享。

我們知道,sybase sql server用事務(transaction)來跟蹤所有資料庫的變化。事務是sql server的工作單元。乙個事務包含一條或多條作為整體執行的t-sql語句。每個資料庫都有自己的事務日誌(transaction log),即系統表(syslogs)。事務日誌自動記錄每個使用者發出的每個事務。日誌對於資料庫的資料安全性、完整性至關重要,我們進行資料庫開發和維護必須熟知日誌的相關知識。

一、sybase sql server 如何記錄和讀取日誌資訊

sybase sql server是先記log的機制。每當使用者執行將修改資料庫的語句時,sql server就會自動地把變化寫入日誌。一條語句所產生的所有變化都被記錄到日誌後,它們就被寫到資料頁在緩衝區的拷貝裡。該資料頁儲存在緩衝區中,直到別的資料頁需要該記憶體時,該資料頁才被寫到磁碟上。若事務中的某條語句沒能完成,sql server將回滾事務產生的所有變化。這樣就保證了整個資料庫系統的一致性和完整性。

二、日誌裝置

log和資料庫的data一樣,需要存放在資料庫裝置上,可以將log和data存放在同一裝置上,也可以分開存放。一般來說,應該將乙個資料庫的data和log存放在不同的資料庫裝置上。這樣做有如下好處:一是可以單獨地備份backup事務日誌;二是防止資料庫溢滿;三是可以看到log的空間使用情況。

所建log裝置的大小,沒有十分精確的方法來確定。一般來說,對於新建的資料庫,log的大小應為資料庫大小的30%左右。log的大小還取決於資料庫修改的頻繁程度。如果資料庫修改頻繁,則log的增長十分迅速。所以說log空間大小依賴於使用者是如何使用資料庫的。此外,還有其它因素影響log大小,我們應該根據實際操作情況估計log大小,並間隔一段時間就對log進行備份和清除。

三、日誌的清除

隨著資料庫的使用,資料庫的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」命令。

四、管理龐大的事務

有些操作會大批量地修改資料,如大量資料的修改(update)、刪除乙個表的所有資料(delete)、大量資料的插入(insert),這樣會使log增長速度很快,有溢滿的危險。下面筆者給大家介紹一下如何拆分大事務,以避免日誌的溢滿。

例如執行「update tab_a set col_a=0」命令時,若表tab_a很大,則此update動作在未完成之前就可能使log溢滿,引起1105錯誤(log full),而且執行這種大的事務所產生的獨佔鎖(exclusive table lock),會阻止其他使用者在執行update操作期間修改這個表,這就有可能引起死鎖。為避免這些情況發生,我們可以把這個大的事務分成幾個小的事務,並執行「dump transaction」動作。

上例中的情況就可以分成兩個或多個小的事務: 

update tab_a set col_a=0 where col_b>x

go

dump transaction database_name with truncate_only

go

update tab_a set col_a=0  where col_b <=x

go

dump transaction database_name with truncate_only

go

這樣,乙個大的事務就被分成兩個較小的事務。

按照上述方法可以根據需要任意拆分大的事務。若這個事務需要備份到介質上,則不用「with truncate_only」選項。若執行「dump transaction with truncate_only」命令,應該先執行「dump database」。以此類推,我們可以對錶刪除、表插入等大事務做相應的拆分。

Sybase資料庫如何自動清除日誌?

在開發 部署程式時常常因為資料庫日誌一會就用光了,於是手動清除日誌.或者不知道為何資料庫罷 工了.在公司同事tz的努力下,找到以下方法.在此貼出來,希望對你有用 方法有2種.1.執行sp dboption test db,trunc log on chkpt true 或在資料庫test db上右鍵...

SYBASE資料庫總結

sybase中插入資料的方式有 1.insert into b header temp cust record id select min id from c record temp group by out order no 2.select rowid identity 18 t.into b ...

sybase資料庫恢復

一 對tempdb的恢復 測試 在資料庫執行狀態下,在系統中rm刪除了擴充套件的tempdb裝置tempdbdev.dat,initializing virtual device 6,syb data tempdbdev.dat error 822,severity 20,state 2 恢復 停止...