1. 程式人生 > >讓你提前認識軟件開發(34):數據庫的維護

讓你提前認識軟件開發(34):數據庫的維護

可能 機制 upd times 初始化 帶來 接收 DDU 就會

第2部分 數據庫SQL語言

數據庫的維護

對於某些大型軟件產品,一旦商用,必定會存儲非常多用戶信息,這就對產品所使用的數據庫(下面簡稱業務數據庫)帶來了壓力。為了保證業務數據庫的平穩執行,須要在日常工作中對數據庫做一些主要的維護操作。

業務數據庫的維護規則例如以下:

1. 對業務數據庫必須進行定期全量備份

業務數據庫的定期備份能在數據庫被意外破壞時進行高速恢復,備份策略能夠依據數據增量大小採用周計劃或月計劃。

假如備份數據庫db_100,則OracleSybaseSQL Server中的操作方法例如以下:

(1) Oracle

用戶模式的備份

exp db_100/db_100 owner=db_100 buffer=8192(64000)

file=exp_db100.dmp(或磁帶設備/dev/rmt0)

tables=

rows=y

compress=n

log= exp_db100.log

參數說明:

owner:將要卸出的username列表。

buffer:緩沖區大小。

file:由export創建的輸出文件的名字。

tables:將要卸出的表名列表。

rows:指明是否卸出表數據的行數,缺省為“y”。

compress:指明在裝入期間是否將表數據壓縮到一個區域中。

假設在卸出數據時,指定參數compress=y。那麽裝入時,就會將數據壓縮到一個初始區域中。

這樣的選擇能夠保持初始化區域的原始大小。

缺省為“y”。

log:指定一個接收實用信息和錯誤信息的文件。

(2) Sybase中數據庫的備份

dump database db_100 with /home/data/db100.dmp(或磁帶設備/dev/rmt0)

(3) SQL Server中數據庫的備份

use master

go

exec sp_addumpdevice ‘disk‘, ‘dev_db100‘,

disk =‘C:\backup\dev_db100.dat‘

go

backup database db_100 to dev_db100

go

2. 對業務數據庫定期進行數據清理,清理前必須完畢備份操作

對每天記錄增長較多的日誌表採用備份表的機制,即建立和生產表一樣結構的備份表,依據項目的須要決定生產表和備份表保留的時間。

假設1000號業務要處理主日誌生產表tb_mainlog,要求是該生產表保留2天的記錄,備份表保留90天的記錄,篩選日期的字段名為startdatetime。分批提交的間隔為60分鐘,有一個存儲過程pr_backuptable用於備份,則僅僅需例如以下調用:

exec pr_backuptable ‘tb_mainlog’,’tb_mainlog_bak’,2,90,’startdatetime’, ‘yyyy.mm.dd hh:mi:ss’,60,’’

參數說明:

參數1:生產表名

參數2:備份表名

參數3:生產表保留的天數

參數4:備份表保留的天數

參數5:篩選日期字段名

參數6:篩選日期字段的格式

參數7:分批提交的間隔(單位:分鐘)

參數8:用於進行比較的擴展條件

3. 假設數據庫沒有設置截斷日誌(或者不歸檔模式)。須要對數據庫日誌定期維護

Oracle日誌的歸檔模式的設置一般在安裝時就需進行;Sybase數據庫的選項“trunc log on chkpt”設為true,或者假設此選項設為false,則須要定期進行數據庫的日誌截斷;SQL Server數據庫的選項“autoshrink”設為true

(1) 設置Oracle數據庫的日誌為不歸檔模式

操作步驟為:

1) 關閉數據庫

2) startup mount方式啟動實例

3) 切換模式

alter database noarchivelog;

alter database open;

(2) Sybase中設置數據庫db_100中“trunc log on chkpt”為true

use master

go

sp_dboption db_100,‘trunc log on chkpt‘,true

go

use db_100

go

checkpoint

go

(3) SQL Server中設置數據庫db_100中“autoshrink”為true

sp_dboption db_100,‘autoshrink‘,true

4. 對數據庫索引進行定期維護

SybaseSQL Server數據庫中的表中的索引要定期進行update statistics維護。

假設索引失效。則重建索引。

比如,要更新tb_userinfo表中全部索引中全部列的統計信息。可採用下面語句:

update index statistics tb_userinfo

5. 定期查看數據庫任務的執行結果日誌和數據庫可用空間最大值

在數據庫執行過程中,要常常通過日誌來查看相關任務的執行結果是否正常。並查看數據庫剩余空間數。假設可用空間已經非常小了。則要進行一定的文件清理操作。

6. 對數據庫進行大批量的增、刪、改操作後建議對表進行一致性檢查和索引的重建

在經過大規模的操作的時候,有可能會無意中破壞掉數據表的結構。因此須要在操作完畢之後對表進行一致性檢查。假設發現表結構出現異常,則須要重建表及對應的索引。

在某些業務軟件產品中,數據的維護是一項復雜、繁重而長期的工作,相關維護經驗也僅僅有在實際操作過程中才幹夠累積起來。

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信號:245924426,歡迎關註!)

讓你提前認識軟件開發(34):數據庫的維護