成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PG之使用pg_resetxlog訪問被修改數(shù)據(jù)

IT那活兒 / 2990人閱讀
PG之使用pg_resetxlog訪問被修改數(shù)據(jù)

作為pg的初學(xué)者,遇到一個問題,在oracle中delete數(shù)據(jù)時,可以通過rollback命令來還原數(shù)據(jù),而在pg中delete數(shù)據(jù)時,它會自動提交,那我們?nèi)绾握一乇恍薷牡臄?shù)據(jù)呢?


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


又立馬在網(wǎng)上遨游了一番,發(fā)現(xiàn)了一個好東西pageinspect,這是一個pgsql的extension模塊,這個模塊可以查看數(shù)據(jù)庫底層page的內(nèi)容,進而可以找到修改數(shù)據(jù)那個時刻的事務(wù)id。


下面我們看下postgres數(shù)據(jù)庫里的xlog系統(tǒng)是怎樣的?


[
PostgreSQL XLOG概念
]

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


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


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


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


然后,數(shù)據(jù)庫日志文件的信息都存在系統(tǒng)視圖里,通過查詢sys_redologs視圖可以看到。


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


[
Pageinspect的安裝
]


1、源碼編譯

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


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


2、創(chuàng)建pageinspect extension

進入psql,直接使用createextension pageinspect創(chuàng)建pageinspect模塊



[
使用pg_resetxlog重置事務(wù)id,訪問被修改的數(shù)據(jù)
]

創(chuàng)建一個測試表test,insert幾條數(shù)據(jù),然后執(zhí)行delete,并查詢當前的事務(wù)id,用于后面恢復(fù)到最新狀態(tài)


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


從這里可以看到,刪除的數(shù)據(jù)的事務(wù)號是1855

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



然后將數(shù)據(jù)庫的事務(wù)id重置到1856,就是剛剛刪除數(shù)據(jù)時的事務(wù)id


啟動數(shù)據(jù)庫postgresql服務(wù),將刪除的數(shù)據(jù)備份


關(guān)閉數(shù)據(jù)庫服務(wù),并重新將postgresql.conf配置文件中的autovacuum還原


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


參考文檔:

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/130071.html

相關(guān)文章

  • 讓 TiDB 訪問多種數(shù)據(jù)源 | TiDB Hackathon 優(yōu)秀項目分享

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

    OBKoro1 評論0 收藏0
  • 讓 TiDB 訪問多種數(shù)據(jù)源 | TiDB Hackathon 優(yōu)秀項目分享

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

    JasonZhang 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

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