PS. 查詢\nebula_boh\logs\BOHInterfaceLog.log 日志,
一般數據庫文件損壞的日志 有 “UncategorizedSQLException” 或 “zero page at block” 或 “invalid page header” 關鍵字ERROR
說明postgresql數據庫文件存在損壞,根據日志建議的修復方法 ,
修復損壞的表或者索引,如果修復失敗 則考慮重裝數據庫了
1、表損壞修復(分開一個一個的執行)
set zero_damaged_pages = on; --當這個參數為on的時候,會忽略所有數據有損壞的頁面
vacuum full 損壞數據表表名;
reindex table 損壞數據表表名;
2、索引損壞修復
REINDEX INDEX 索引名稱 ; --修復損壞的表索引
產生原因:
--------------------------------------------
索引崩潰,並且不再包含有效的數據。盡管理論上這是不可能發生的,但實際上索引會因為軟件毛病或者硬件問題而崩潰。REINDEX 提供了一個恢復方法。
索引變得"臃腫",包含大量的空頁或接近空頁。這個問題在某些罕見訪問模式時會發生在 B-tree 索引上。REINDEX 通過寫一個不帶無用索引頁的新索引提供了縮小索引空間消耗的途徑。
樣例:
2019-01-29 10:03:46.145 [pool-8-thread-1] - [ERROR] com.tzx.service.impl.CCOrder2BOHServiceImpl(:389) 門店接收訂單異常:org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [...]; SQL state [XX002]; error code [0]; ERROR: index "index_yddxm2_destineid" contains unexpected zero page at block 0
建議:Please REINDEX it.; nested exception is org.postgresql.util.PSQLException: ERROR: index "index_yddxm2_destineid" contains unexpected zero page at block 0
建議:Please REINDEX it.
修復:
REINDEX INDEX index_yddxm2_destineid;
3、表索引查詢
select * from pg_indexes where tablename='表名';
或 select * from pg_statio_all_indexes where relname='表名';