深圳網(wǎng)站建設(shè)加盟無錫網(wǎng)絡(luò)公司
????????PostgreSQL 錯誤:關(guān)系 base/46501/52712 中的塊 480 存在無效的頁。
??????? 當(dāng)我們在使用 PostgreSQL 數(shù)據(jù)庫的時候,如果服務(wù)器發(fā)生 CRASH 或者斷電等異常情況的時候,有可能會遇到上面的這個報錯信息。那么我們?nèi)绾稳バ迯?fù)這個數(shù)據(jù)呢,以及這個錯誤是如何產(chǎn)生的呢?
原因:
磁盤存在損壞或者配置文件參數(shù)配置不合理無 fsync 等都可能會引起這個錯誤信息。那么我們首先需要找到是哪個對象發(fā)生損壞了,然后對這個對象進(jìn)行修復(fù)。下面是具體的操作案例。首先我們需要找到是哪個數(shù)據(jù)庫下的對象發(fā)生損壞了。通過系統(tǒng)表找出該 oid 對應(yīng)的數(shù)據(jù)庫名。然后通過 oid 找出對應(yīng)的表的名稱,然后我們可以通過不斷的調(diào)試可以具體定位到所在的行。SELECT * FROM pg_database WHERE oid = 46501;
SELECT * FROM pg_class WHERE oid = 52712;
SELECT * FROM table_name limit m,n;當(dāng)我們找到是哪個對象的時候,接下來就是對表的一個修復(fù)了,通過將表數(shù)據(jù)刷新到磁盤的過程實(shí)現(xiàn)表的一個刷盤,下面是具體的操作步驟。修復(fù)表:
SET zero_damaged_pages = on;
VACUUM FULL table_name;
REINDEX TABLE table_name;最后我們需要進(jìn)行:做磁盤壞道檢查以及對表進(jìn)行重新導(dǎo)出導(dǎo)入這些操作。
????????說明:有沒有發(fā)現(xiàn)其實(shí)很多數(shù)據(jù)庫的一些錯誤其實(shí)都和數(shù)據(jù)庫的參數(shù)是有關(guān)系的,數(shù)據(jù)庫的配置文件沒有很好的設(shè)置會帶來很多未知的錯誤。