国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PG之使用pg_resetxlog訪問被修改數據

IT那活兒 / 2906人閱讀
PG之使用pg_resetxlog訪問被修改數據

作為pg的初學者,遇到一個問題,在oracle中delete數據時,可以通過rollback命令來還原數據,而在pg中delete數據時,它會自動提交,那我們如何找回被修改的數據呢?


基于初學者的熱情,立馬在網上搜索了一番,類似oracle,pg也有一套自己獨有的日志系統xlog,相當于oracle的redo。Pg可以通過pg_resetxlog命令來重置事務id,回到修改數據時的那個事務id,那么問題來了,我們怎樣找到修改數據時的那個事務id呢?


又立馬在網上遨游了一番,發現了一個好東西pageinspect,這是一個pgsql的extension模塊,這個模塊可以查看數據庫底層page的內容,進而可以找到修改數據那個時刻的事務id。


下面我們看下postgres數據庫里的xlog系統是怎樣的?


[
PostgreSQL XLOG概念
]

在10之前,postgresql的日志系統是XLOG,在之后的版本是WAL。什么是WAL(write-ahead-logging)呢?


顧名思義,就是寫在前面的日志,就是事務和數據故障的一個保護,防止出現故障而導致數據丟失。任何修改數據庫數據的操作都會自動生成一條記錄,并將其記錄到日志文件中。這里的日志就是xlog,所有的日志都會寫在$PGDATA/pg_xlog目錄下面。


和oracle一樣,postgresql數據庫也會發生日志切換。首先,用戶可以通過命令執行主動進行日志切換,這是用戶主動切換;當一個日志文件寫滿之后,數據庫會自動進行日志切換,這是日志切換最普遍的現象,日志寫滿需要新的日志;當日志文件發生切換時,系統將執行檢查點操作。


和oracle一樣,日志文件也有幾種狀態,CURRENT表示當前正在使用的日志文件,ACTIVE表示這個日志文件處于激活的狀態,不能再次被使用,NOACTIVE表示這個日志文件可以被重用。當日志checkpoint完成或歸檔完成時,這個日志文件就可以重用了,這是日志的重用條件。


然后,數據庫日志文件的信息都存在系統視圖里,通過查詢sys_redologs視圖可以看到。


了解了數據庫xlog的概念后,接下來我們看下pageinspect的安裝過程,然后怎樣使用pg_resetxlog命令重置事務id,查詢被修改的數據。


[
Pageinspect的安裝
]


1、源碼編譯

pageinspect的源碼在postgre源碼包的contrib目錄下


Pageinspect目錄下有makefile文件,直接使用make命令進行編譯,會生成一個pageinspect.so的文件,然后使用makeinstall命令,把相關文件安裝到$PGHOM目錄下


2、創建pageinspect extension

進入psql,直接使用createextension pageinspect創建pageinspect模塊



[
使用pg_resetxlog重置事務id,訪問被修改的數據
]

創建一個測試表test,insert幾條數據,然后執行delete,并查詢當前的事務id,用于后面恢復到最新狀態


那么,我們怎樣找回被修改的數據呢?接下來,就需要使用前面安裝的pageinspect模塊來分析test表的情況


從這里可以看到,刪除的數據的事務號是1855

為了不讓數據庫保持數據靜止狀態,需要立刻關閉數據庫服務,并且配置關閉auto_vacuumm,保護好原來的數據,防止被vacuum,修改$PGDATA目錄下postgresql.conf配置文件,autovacuum= off



然后將數據庫的事務id重置到1856,就是剛剛刪除數據時的事務id


啟動數據庫postgresql服務,將刪除的數據備份


關閉數據庫服務,并重新將postgresql.conf配置文件中的autovacuum還原


使用pg_resetxlog命令重置到最新的事務id,并啟動數據庫服務,然后進入psql,可以看到被刪除的數據已經找回了


參考文檔:

https://www.cnblogs.com/plairst/p/9378552.html

http://postgres.cn/docs/9.4/pageinspect.html

http://postgres.cn/docs/9.4/app-pgresetxlog.html

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130071.html

相關文章

  • 讓 TiDB 訪問多種數據源 | TiDB Hackathon 優秀項目分享

    摘要:拿到返回結果進一步的進行計算處理。比較痛苦的經歷不支持,我們就只好寫內置函數,就把另外一個模塊拖下來,自己修改加上語法,然后在加上自己設計的內置函數。其次就是涉及的的源碼模塊很多,從優化器執行器內置函數以及各種各樣的結構。 本文作者是來自 CC 組的蘭海同學,他們的項目《讓 TiDB 訪問多種數據源》在本屆 TiDB Hackathon 2018 中獲得了二等獎。該項目可以讓 TiDB...

    OBKoro1 評論0 收藏0
  • 讓 TiDB 訪問多種數據源 | TiDB Hackathon 優秀項目分享

    摘要:拿到返回結果進一步的進行計算處理。比較痛苦的經歷不支持,我們就只好寫內置函數,就把另外一個模塊拖下來,自己修改加上語法,然后在加上自己設計的內置函數。其次就是涉及的的源碼模塊很多,從優化器執行器內置函數以及各種各樣的結構。 本文作者是來自 CC 組的蘭海同學,他們的項目《讓 TiDB 訪問多種數據源》在本屆 TiDB Hackathon 2018 中獲得了二等獎。該項目可以讓 TiDB...

    JasonZhang 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<