聊聊PG資料庫的防誤刪除問題
做DBA這二十多年裡,誤刪除資料是處理起來最麻煩的事情。早期遇到過一個案例,當時的一個視覺化開發工具是把所有程式碼都儲存在一個Oracle資料庫裡的,而這個資料庫放在一臺普通的PC機上,並未做任何備份。有一次一不小心,被人把一個使用者的資料全刪了。這下子這個政府部門的業務系統都跑不起來了。後來我花了幾天時間才恢復了大部分資料,湊合讓大部分應用都恢復了。
Oracle的各種防誤刪除的方法已經被國內的第三方服務企業都研究的比較透了,這些年大部分的此類問題,都能夠透過一些工具或者特殊的方法實現恢復。不過現在很多企業都在將資料庫轉移到開源與國產化的環境。在這些新環境下,資料恢復依然是作為剛需存在的。今天我們來簡單聊聊PG資料庫的誤刪除恢復問題,因為目前很多國產資料庫都與PG同源,或者是基於PG社群版定製的。
防誤操作的底線是用備份恢復資料,資料庫備份也是資料庫運維的底線。如果實在沒辦法在線上庫中恢復資料的時候,使用備份集來恢復資料是十分重要的。可能有朋友會說了,我們有主備庫,是不是不需要備份了。這個觀點是錯誤的,主備庫只是高可用的方案,不能替代備份。當你誤刪一張表的時候,備庫也會被誤刪。只有備份才能透過離線恢復來恢復你所需要的所有資料。為了確保備份集的可靠性,至少保留兩個全備也是十分必要的。
除了備份之外,我們還可以透過規範一些操作來實現比較方便的誤刪恢復。與Oracle不同的是,PG的DDL是可以rollback的。在PG資料庫中,TRUNCATE、DROP等操作開始的時候,還會保留原有的檔案。比如TRUNCATE TABLE的時候,首先會建立一個新檔案作為資料儲存,原來的檔案還保留著。當你執行rollback的時候,原來的資料可以很方便地恢復。不過一旦COMMIT,那麼老的資料檔案就會被從OS層面刪除。
基於此,要想實現PG資料庫被DROP/TRUNCATE的資料能夠恢復,還需要考慮作業系統的恢復問題。我們在選擇檔案系統的時候,一定要選擇一個可恢復的帶日誌的檔案系統,比如XFS/EXT等。並且要開啟並設定好日誌。開啟檔案系統日誌,可能會對寫操作有一些效能影響,不過對於絕大多數系統來說,這點影響完全是可以接受的,為了確保安全,啟用日誌十分有必要。
除此之外,我們還要把OS層面的UNDELETE工具準備好,一旦遇到需要恢復資料的事情,立馬透過UNDELETE工具恢復被刪除的資料檔案。一旦資料檔案被恢復回來了,那麼從檔案中匯出資料就是十分容易的事情了。目前在GIT上,有大量的開源工具可以用來從PG資料檔案中下載資料。因此對於有個企業來說,在部署PG資料庫的時候,應該考慮準備好undelete工具,並在有比較靠譜的undelete工具的檔案系統上部署PG資料庫。
實際上在使用比較複雜的方式恢復資料之前,我們還有更好的解決方法,比如使用psql工具的時候,把自動提交關閉,這樣的話在第一時間,我們還可以透過DDL ROLLBACK來實現最簡單的恢復。養成好的習慣或者規範化操作行為也是避免出大事的最好的方法。
最後一點,相對於Oracle資料庫的段管理的模式,PG的整個後設資料相對還是有點繞的。有時候如果我們手頭有完整的後設資料的歷史資訊,那麼在資料恢復的時候,可以很快的找到需要恢復的檔案,從而可以在備份集中快速找到要恢復的資料,並用工具完成快速恢復。因此為了避免恢復資料時過於複雜,定期備份PG的關鍵後設資料也十分重要。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/7Eod9v44dB03fnM5UzZVUw,如有侵權,請聯絡管理員刪除。
相關文章
- PG資料庫更新刪除卡死現象資料庫
- mysql資料庫誤刪除操作說明MySql資料庫
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- Docker刪除倉庫中的映象問題Docker
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- indexedDB 刪除資料庫Index資料庫
- 2.11 刪除資料庫資料庫
- Laravel 資料庫裡的資料刪除Laravel資料庫
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- 解決sqlserver資料庫單一使用者無法刪除的問題SQLServer資料庫
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- Kafka超過保留期限資料未刪除的問題Kafka
- 聊聊關於資料庫表記錄刪除都有哪些解決方式資料庫
- 【HBase】誤刪除資料怎麼辦?
- 刪除linux下的oracle資料庫LinuxOracle資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- 達夢資料庫:誤刪除 undo/redo 日誌怎麼辦資料庫
- Web開發經驗(1)防止MySQL資料庫誤更新/刪除WebMySql資料庫
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- PG 自動刪除archivelogHive
- Mongodb資料庫誤刪後的恢復MongoDB資料庫
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- whk我【資料刪除】你個【資料刪除】的
- 小程式批次刪除雲資料庫裡的資料資料庫
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- windows下Oracle資料庫完全刪除WindowsOracle資料庫
- indexedDB 刪除物件倉庫所有資料Index物件
- 資料檔案誤刪除(DM_單機)
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- pg_resetwal pg_resetxlog 重整 pg資料庫 wal 與pg_controldata 。 資料庫恢復。資料庫LDA
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復