• <dd id="3gzlp"></dd>

    <li id="3gzlp"><acronym id="3gzlp"></acronym></li>

    <span id="3gzlp"></span>

    SQL 語法解析工具 XLogMiner

    MIT
    C/C++
    跨平臺
    2017-06-27
    凝小紫

    XLogMiner 是從 PostgreSQL 的 WAL(write ahead logs) 日志中解析出執行的 SQL 語句的工具,并能生成出對應的 undo SQL 語句。

    配置要求

    需要將數據庫日志級別配置為 logical 模式, 并將表設置為 full 模式。例如,下面的語句將表 t1 設置為 full 模式:

    alter table t1 replica identity FULL;

    PG版本支持

    目前主要是在 PostgreSQL 9.5.x 上開發測試的,在 9.6 版本中僅做過簡單驗證。

    編譯安裝

    1.將 xlogminer 目錄放置到編譯通過的 PG 工程的 "../contrib/" 目錄下

    2.進入 xlogminer 目錄

    3.執行命令

    make && make install


    使用方法

    從 WAL 日志產生的數據庫中直接執行解析

    1. 創建xlogminer的extension

    create extension xlogminer;

    2. Add xlog日志文件

    -- 增加wal文件:
    select xlogminer_xlogfile_add('/opt/test/wal');
    -- 注:參數可以為目錄或者文件

    3. Remove xlog日志文件

    -- 移除wal文件:
    select xlogminer_xlogfile_remove('/opt/test/wal');
    -- 注:參數可以為目錄或者文件

    4. List xlog日志文件

    -- 列出wal文件:
    select xlogminer_xlogfile_list();

    5. 執行解析

    select xlogminer_start(’START_TIMSTAMP’,’STOP_TIMESTAMP’,’START_XID’,’STOP_XID’)
    ---如果分析全部日志:
    select xlogminer_start('null','null',0,0);
    • START_TIMESTAMP:指定輸出結果中最早的記錄條目,即從該時間開始輸出分析數據;若該參數值為空,則以分析日志列表中最早數據開始輸出;若該參數值指定時間沒有包含在所分析xlog列表中,即通過分析發現全部早于該參數指定時間,則返回空值。

    • STOP_TIMESTAMP:指定數據結果中最晚的記錄條目,即輸出結果如果大于該時間,則停止分析,不需要繼續輸出;如果該參數值為空,則從START_TIMESTAMP開始的所有日志都進行分析和輸出。

    • START_XID:作用與START_TIMESTAMP相同,指定開始的XID值;

    • STOP_XID:作用與STOP_TIMESTAMP相同,指定結束的XID值


     兩組參數只能有一組為有效輸入,否則報錯。

     6. 解析結果查看

    select * from xlogminer_contents;

    7. 結束 xlogminer 操作

    該函數作用為釋放內存,結束日志分析,該函數沒有參數。

    select xlogminer_stop();

    使用限制

    • 本版本只解析DML語句,不處理DDL語句

    • 執行了刪除表、truncate表、更改表的表空間、更改表字段的類型,這樣的DDL語句后,發生DDL語句之前的此表相關的DML語句不會再被解析。

    • 解析結果依賴于最新的數據字典。(舉例:創建表t1,所有者為user1,但是中間將所有者改為user2。那解析結果中,所有t1相關操作所有者都將標示為user2)

    • wal日志如果發生缺失,在缺失的wal日志中發生提交的數據,都不會在解析結果中出現

    • 解析結果中undo字段的ctid屬性是發生變更“當時”的值,如果因為vacuum等操作導致ctid發生變更,這個值將不準確。對于有可能存在重復行的數據,我們需要通過這個值確定undo對應的tuple條數,不代表可以直接執行該undo語句。

    • 若沒有將表設置為full模式,那么update、delete語句將無法被解析。(當然這很影響使用,下一版本就會對這個問題作出改進)

    • 若沒有將數據庫日志級別設置為logical,解析結果會有無法預料的語句丟失

    • 執行了表字段drop的DDL語句后,發生DDL語句之前的這個字段相關的值都會被解析為encode('AD976BC56F',hex)的形式,另外自定義類型也會解析為這種形式

    • 只能解析與數據字典時間線一致的xlog文件

    的碼云指數為
    超過 的項目
    加載中
    請先登錄后再評論。

    暫無資訊

    暫無問答

    xlogminer的使用

    開啟數據庫歸檔模式并設置歸檔路徑 wal_level = logical --注:此處設置為archive將無法完整挖掘操作記錄,需設置為logical archive_mode = on archive_directory ='/home/lirui/arch' creat...

    2018/10/08 13:46
    91
    0
    pg數據庫日志挖掘WalMiner

    WalMiner [TOC] WalMiner是從PostgreSQL的WAL(write ahead logs)日志中解析出執行的SQL語句的工具,并能生 成出對應的undo SQL語句。 referenceXlogMiner renamed to WalMiner XlogMiner Enh...

    05/12 15:54
    115
    0
    PG wal日志解析工具功能增強并更名為WalMiner

    使用軟件遇到問題可先更新代碼(歡迎提交bug)~~ 開發群組:811105058歡迎任何使用者 XlogMiner是從PostgreSQL的WAL(write ahead logs)日志中解析出執行的SQL語句的工具,并能生成出對應的und...

    2019/02/11 09:29
    3.2K
    0
    如何在PostgreSQL故障切換后找回丟失的數據

    1. 背景 PostgreSQL的HA方案一般都基于其原生的流復制技術,支持同步復制和異步復制模式。 同步復制模式雖然可以最大程度保證數據不丟失,但通常需要至少部署三臺機器,確保有兩臺以上的備節...

    04/05 15:39
    311
    0
    Walminer2.0 Beta功能改進說明

    walminer是一款PostgreSQL的wal日志的解析工具,它可以依據數據字典解析出產生wal日志中隱含的DML語句。第一個版本的xlogminer工具需要wal為logical級別,而且還有表IDENTITY級別的要求。第二...

    06/19 15:27
    1.5K
    0
    PostgreSQL WAL解析與閃回的一些想法

    PostgreSQL WAL解析與閃回的一些想法 1. 背景 最近在walminer基礎做了不少修改,以支持我們的使用場景。詳細參考 如何在PostgreSQL故障切換后找回丟失的數據 修改也花了不少精力和時間,這個...

    04/05 16:48
    141
    0

    沒有更多內容

    加載失敗,請刷新頁面

    沒有更多內容

    返回頂部
    頂部
    聚看影院