<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          XLogMinerSQL 語法解析工具

          聯(lián)合創(chuàng)作 · 2023-10-02 05:47

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

          配置要求

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

          alter table t1 replica identity FULL;

          PG版本支持

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

          編譯安裝

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

          2.進入 xlogminer 目錄

          3.執(zhí)行命令

          make && make install


          使用方法

          從 WAL 日志產生的數(shù)據(jù)庫中直接執(zhí)行解析

          1. 創(chuàng)建xlogminer的extension

          create extension xlogminer;

          2. Add xlog日志文件

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

          3. Remove xlog日志文件

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

          4. List xlog日志文件

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

          5. 執(zhí)行解析

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

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

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

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


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

           6. 解析結果查看

          select * from xlogminer_contents;

          7. 結束 xlogminer 操作

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

          select xlogminer_stop();

          使用限制

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

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

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

          • wal日志如果發(fā)生缺失,在缺失的wal日志中發(fā)生提交的數(shù)據(jù),都不會在解析結果中出現(xiàn)

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

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

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

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

          • 只能解析與數(shù)據(jù)字典時間線一致的xlog文件

          瀏覽 17
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产操P 国产操网 | 国精产品乱码一区一区三区四区 | 青草草在线 | 午夜精品秘 一区二区 | 免费成人艹逼无码视频 |