免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4165 | 回复: 2

[转贴] Informix系統維護技巧談 (表的修復,空間回收,遷移,查詢的 [复制链接]

论坛徽章:
0
发表于 2003-01-04 18:22 |显示全部楼层
          Informix系統維護技巧談 (表的修復,空間回收,遷移,查詢的優化)
                  作者: 盧守東   

  Informix是一種大型的數據庫管理系統,具有先進的技術、性能與可靠性,在全球范圍的各種應用中使用十分廣泛,
包括政府、金融保險、郵政電信、制造及零售等重要行業或領域。本文根據筆者在SCO Unix/Xenix上使用 Informix-4GL
與Informix-SQL的經驗,簡要介紹Informix系統維護中的幾個較為特殊的問題及其處理方法。  


  表文件的修復  


  Informix的數據庫是指由若幹張表所構成的集合,其中每一張表對應著兩個文件,即數據文件(綴為.dat)與索引文件
(綴為.idx)。當系統出現異常、死機、掉電或非正常關閉時,有時會使一些使用中的表文件未能正常關閉而出現毀損,
當系統再次對這些表進行相關操作時,就會報告“不能檢索下一條記錄”、“不能刪除記錄”等錯誤信息。  


  通常,數據文件是很少發生問題的。要判別數據文件是否正常,只需執行select * from 〈tablename〉語句或類
似的語句即可, 但不能使用where、order by等子句,以免利用到索引文件, 目的就是純粹從數據文件中依次讀取數據。
如果數據讀取順利且記錄個數正確,表明該文件完好無損;反之,則有問題,通常只能用其數據備份來恢復。  


  如果數據文件正確無誤,那就該檢查相應的索引文件。Informix提供有一個實用程序bcheck,專門用來檢查與修復
索引文件,即依次比較數據文件與索引文件,倘若不一致,就詢問是否刪除和重建有問題的索引。bcheck有許多選項可供
選用,其中-n和-y用對所有的提問都回答“no”或“yes”,讓系統自動進行一系列的操作。其語法如下:  


  bcheck [選項] 〈表文件名〉  


  要檢查表的索引文件,應先運行bcheck -n命令。如果一切正常, 說明索引沒有問題。一旦發現有錯誤報告(如有多
少個錯誤數據記錄指針、丟失了多少個數據記錄指針或索引結點指針等),則再執行bcheck -y 命令即可將其修復。  


  Informix-SQL中的語句check table 〈表名〉與repair table 〈表名〉在運行時分別以選項-n與-y調用bcheck命令,
功能一樣,不同的只是使用表名而不是表文件名。  


  如果索引文件沒有相應的讀寫權限, 或者沒有正確指明其路徑, 在bcheck時會出現“無法打開索引文件”的信息。如
果索引文件被刪除或格式被破壞了,也有同樣的信息。此時可從數據備份中將對應的索引文件拷貝回來,也可暫時創建一個
字段與索引均與原表完全一致的新表並將其索引文件拷貝給原表,再運行bcheck -y命令修復。  


  表空間的回收  


  Informix對數據表的管理方式較為特殊,當數據量增加時,表所佔用的磁盤空間隨之增加;但數據記錄被刪除時,原先
所佔用的空間暫不釋放,依然由該表所控制,作為日增加記錄時使用。為提高系統的性能及有關各表的查詢速度,應及時
回收這種“空閑”的磁盤空間。  


  使用bcheck -s命令可回收索引文件的空間,其中-s 選項的作用是重新估算索引文件的大小。要同時回收數據文件與
索引文件的空間,可讓DBMS(數據庫管理系統)去做表結構的修改工作,但修改前的表結構及有關權限要保証一樣。可利用
Informix-SQL達此目的,最為保險的做法是先給相應的表增加一個字段,再將該字段刪除。也可利用alter table 命令
“欺騙”DBMS去修改表的結構,如alter table aa modify(bb smallint),其中aa表的字段bb的類型本來就是smallint。  


  表的遷移  


  任何一個Informix數據庫都有九個系統表,用記錄數據庫的有關信息,其中系統表systables(用描述數據庫中的各表)
中的字段dirpath指明各表文件的絕對路徑或相對路徑。  


  Informix數據庫的搜索路徑一般由環境變量DBPATH來設定,系統根據DBPATH的正確設定即可找到相應的數據庫及其各表。
遷移Informix數據庫表時(比如從Unix/Xenix的根文件系統遷移到分離的文件系統/u),只要重新設定DBPATH,通常系統即
可正常運行。如果報告某些表找不到了(實際上這些表文件還在,且有關權限也對),問題就在systables 表中的dirpath
字段值採用了絕對路徑, 此時要用update命令修正其值,最好改用相對路徑,即直接改為表文件名。  


  系統查詢的優化  


  Informix在執行查詢(特別是多表查詢)指令前,會利用其所提供的優化器(cost-based optimizer,基成本的優化器),
依據當時系統所記載的有關各表的相關信息,按照一定的判斷法則進行分析並選擇出一條最有效率的途徑來執行。系統必須掌
握各表的正確數據,才不至做出錯誤的選擇。但出系統效率上的考慮,不可能隨時修改記錄各表最新狀況的相關文件,
否則會增加許多額外的輸入/輸出負擔。因此, 應定期執行這種信息的更新操作。  


  在Informix數據庫的系統表systables中有一字段nrows,專門用來記錄各表的記錄個數。優化器在運行法則判斷時,
各表的nrows 值具有很高的參考價值。nrows的更新可通過如下命令來完成,即:  


  update statistics [for table 〈tablename〉]  


  其中,方括號[]中的子句是可選的,用指定表名,以對該表進行更新;否則,將對數據庫中的各表進行全部更新。  


论坛徽章:
11
数据库技术版块每日发帖之星
日期:2016-06-25 06:20:00数据库技术版块每日发帖之星
日期:2016-06-24 06:20:00数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00数据库技术版块每日发帖之星
日期:2016-04-21 06:20:00数据库技术版块每日发帖之星
日期:2016-01-23 06:20:00数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-19 06:20:00数据库技术版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2016-07-30 06:20:00
发表于 2003-01-04 20:57 |显示全部楼层

[转贴] Informix系統維護技巧談 (表的修復,空間回收,遷移,查詢的

UP

论坛徽章:
0
发表于 2005-07-31 23:38 |显示全部楼层

[转贴] Informix系統維護技巧談 (表的修復,空間回收,遷移,查詢的

up。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP