DM8 閃回查詢
當使用者操作不慎導致錯誤的刪改資料時,非常希望有一種簡單快捷的方式可以恢復資料。閃回技術,就是為了使用者可以迅速處理這種資料邏輯損壞的情況而產生的。
閃回技術主要是通過回滾段儲存的UNDO記錄來完成歷史記錄的還原。設定ENABLE_FLASHBACK為1後,開啟閃回功能。DM會保留回滾段一段時間,回滾段保留的時間代表著可以閃回的時間長度。由UNDO_RETENTION引數指定。
開啟閃回功能後,DM會在記憶體中記錄下每個事務的起始時間和提交時間。通過使用者指定的時刻,查詢到該時刻的事務號,結合當前記錄和回滾段中的UNDO記錄,就可以還原出特定事務號的記錄。即指定時刻的記錄狀態。從而完成閃回查詢。閃回查詢功能完全依賴於回滾段管理,對於DROP等誤操作不能恢復。閃回特性可應用在以下方面:
Ø 自我維護過程中的修復:當一些重要的記錄被意外刪除,使用者可以向後移動到一個時間點,檢視丟失的行並把它們重新插入現在的表內恢復;
Ø 用於分析資料變化:可以對同一張表的不同閃回時刻進行連結查詢,以此檢視變化的資料。
1. 適用場景
軟體 |
版本 |
作業系統 |
Redhat 7 及以上版本 |
DM 資料庫 |
DM 8.0 及以上版本 |
CPU 架構 |
x86 、ARM、龍芯、飛騰等國內外主流 CPU |
2. 相關引數設定
查詢閃回功能狀態,資料庫預設關閉(0-關閉,1-開啟)。示例語句如下所示:
SELECT name , TYPE , VALUE , sys_value, file_value FROM v$parameter WHERE name LIKE '%FLASHBACK%'; |
輸出結果:
NAME TYPE VALUE SYS_VALUE FILE_VALUE ---------------- ---- ----- --------- ---------- ENABLE_FLASHBACK SYS 0 0 0 |
1) 開啟閃回功能方法一,示例語句如下所示:
SQL> alter system set 'enable_flashback'=1 both; DMSQL 過程已成功完成 SQL> select name,type,value,sys_value,file_value from v$parameter where name='ENABLE_FLASHBACK';
NAME TYPE VALUE SYS_VALUE FILE_VALUE ---------------- ---- ----- --------- ---------- ENABLE_FLASHBACK SYS 1 1 1 |
注意:該方法設定引數時,引數名必須加單引號。
2) 開啟閃回功能方法二,示例語句如下所示:
SP_SET_PARA_VALUE (1, 'ENABLE_FLASHBACK', 1); |
//scope 為 1 表示 dm.ini 檔案和記憶體引數都修改,不需要重啟伺服器。
//scope 為 2 表示只修改 dm.ini 檔案,伺服器重啟後生效。
//value : 設定的值。
獲取引數,示例語句如下所示:
SELECT SF_GET_PARA_VALUE (1, 'ENABLE_FLASHBACK') in_file, SF_GET_PARA_VALUE (2, 'ENABLE_FLASHBACK') in_mem; |
由於回滾段預設每秒種都會自動清理,所以需要延長回滾記錄的保留時間,單位是秒。回滾段引數太大容易引發回滾段膨脹,這裡設定為 1200s。示例語句如下所示:
ALTER SYSTEM SET 'undo_retention'=1200 BOTH;
SELECT name , TYPE , VALUE , sys_value, file_value FROM v$parameter WHERE name = 'UNDO_RETENTION'; |
輸出結果:
NAME TYPE VALUE SYS_VALUE FILE_VALUE -------------- ---- ----------- ----------- ----------- UNDO_RETENTION SYS 1200.000000 1200.000000 1200.000000 |
3. 閃回查詢
1) 按時間查詢歷史記錄
通過指定一個時間(timestamp型別),通常可以用一個日期時間字串表達。
測試在 disql 工具中進行,使用 dmhr 模式下的 city 表。示例語句如下所示:
SELECT * FROM dmhr.city WHERE city_id = 'CD'; UPDATE dmhr.city SET region_id = 10 WHERE city_id = 'CD'; SELECT * FROM dmhr.city WHERE city_id = 'CD'; SELECT * FROM dmhr.city WHEN TIMESTAMP '2021-05-13 20:17:57' WHERE city_id='CD'; |
輸出結果:
20:17:55 SQL> SELECT * FROM dmhr.city WHERE city_id = 'CD';
CITY_ID CITY_NAME REGION_ID ------- --------- ----------- CD 成都 7
20:17:58 SQL> UPDATE dmhr.city SET region_id = 10 WHERE city_id = 'CD'; 影響行數 1
20:18:05 SQL> SELECT * FROM dmhr.city WHERE city_id = 'CD';
CITY_ID CITY_NAME REGION_ID ------- --------- ----------- CD 成都 10
20:18:21 SQL> SELECT 2 * 3 FROM 4 dmhr.city WHEN TIMESTAMP ' 2021-05-13 20:17:57' 5 WHERE 6 city_id='CD';
CITY_ID CITY_NAME REGION_ID ------- --------- ----------- CD 成都 7 |
2) 按事務id號查詢歷史記錄
首先使用 versions_endtrxid 偽列查詢事務 id 號。使用者通過閃回版本查詢子句,可以得到指定表過去某個時間段內,事務導致記錄變化的全部記錄,指定條件可以為時刻或事務號。
執行閃回版本查詢,示例語句如下所示:
SELECT versions_endtrxid, * FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2021-05-13 20:25:00' AND SYSDATE WHERE JOB_ID = 22; |
輸出結果:
VERSIONS_ENDTRXID JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY -------------------- ------ --------- ----------- ----------- NULL 22 文員 2500 5000 |
NULL 表示該行的版本仍然是當前版本。
Ø 第一次調整文員的最低工資為 3500 並提交,示例語句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 3500 WHERE JOB_ID = 22;
COMMIT; |
Ø 第二次調整文員的最低工資為 2800 並提交,示例語句如下所示:
UPDATE dmhr.job SET MIN_SALARY = 2800 WHERE JOB_ID = 22;
COMMIT; |
再次執行閃回版本查詢,示例語句如下所示:
SELECT versions_endtrxid, * FROM dmhr.job VERSIONS BETWEEN TIMESTAMP '2021-05-13 20:25:00' AND SYSDATE WHERE JOB_ID = 22; |
輸出結果:
VERSIONS_ENDTRXID JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY -------------------- ------ --------- ----------- ----------- NULL 22 文員 2800 5000 9337 22 文員 3500 5000 9336 22 文員 2500 5000 |
兩個事務分別對應了 2 個版本,可以隨意查詢任何版本。示例語句如下所示:
SELECT TRXID, * FROM dmhr.job WHEN TRXID 9336 WHERE JOB_ID=22
union all
SELECT TRXID, * FROM dmhr.job WHEN TRXID 9337 WHERE JOB_ID=22; |
輸出結果:
TRXID JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY -------------------- ------ --------- ----------- ----------- 9325 22 文員 2500 5000 9336 22 文員 3500 5000 |
顯示了第一次提交前和第一次提交後的資料。
4. 閃回事務查詢
閃回事務查詢提供系統檢視 V$FLASHBACK_TRX_INFO,檢視在事務級對資料庫所做的更改。根據該檢視資訊,可以確定如何還原指定事務或指定時間段內的修改。
查詢指定時間之後的事務資訊,示例語句如下所示:
SELECT commit_trxid, operation, table_name, undo_sql FROM V$FLASHBACK_TRX_INFO; |
輸出結果:
COMMIT_TRXID OPERATION TABLE_NAME UNDO_SQL -------------------- --------- ---------- ------------------------------------------------- 9337 O NULL NULL 9337 U JOB UPDATE DMHR.JOB SET MIN_SALARY=2500 WHERE ROWID=5 9337 C NULL NULL 9338 O NULL NULL 9338 U JOB UPDATE DMHR.JOB SET MIN_SALARY=3500 WHERE ROWID=5 9338 C NULL NULL |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31516603/viewspace-2772206/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DM7閃回與閃回查詢
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Oracle 11G 閃回技術 使用Oracle閃回事務查詢Oracle
- MySQL 覆蓋索引、回表查詢MySql索引
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- 拉鍊表的建立、查詢和回滾
- Oracle查詢回滾大事務所需時間Oracle
- 2.6.3 指定閃回區
- flashback query閃回資料
- Oracle資料庫閃回Oracle資料庫
- SQL查詢的:子查詢和多表查詢SQL
- 還傻傻分不清MySQL回表查詢與索引覆蓋?MySql索引
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- mysql閃回工具binlog2sqlMySql
- Oracle閃回技術--Flashback Version QueryOracle
- Oracle 閃回資料庫測試Oracle資料庫
- my2sql資料閃回SQL
- 【PDB】pdb閃回,Oracle還原點Oracle
- 【趙強老師】MySQL的閃回MySql
- 詳解oracle資料庫閃回Oracle資料庫
- 複雜查詢—子查詢
- 查詢——二分查詢
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 查詢演算法__Fibonacci查詢演算法
- group by,having查詢 ”每**“的查詢
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- Flashback Drop閃回刪除功能實踐
- dg_閃回資料庫實驗資料庫
- 工具分享丨資料閃回工具MyFlash
- [20180423]表空間閃回與snapshot standby
- Orcale利用閃回功能恢復資料
- 【RECO_ORACLE】Oracle閃回PDB的方法Oracle
- 淺析微信支付:申請退款、退款回撥介面、查詢退款
- 離線查詢與線上查詢
- 查詢演算法__插值查詢演算法
- oracle 精確查詢和模糊查詢Oracle
- pgsql查詢優化之模糊查詢SQL優化
- MySQL - 資料查詢 - 簡單查詢MySql