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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 閃回查詢之閃回版本查詢
- 閃回查詢之閃回表查詢
- 【閃回特性之閃回查詢】使用閃回查詢(select as of)
- 閃回表、閃回查詢
- 閃回查詢
- 閃回(關於閃回查詢)
- 閃回刪除、閃回查詢
- 基本閃回查詢和閃回表
- 閃回技術一:閃回查詢
- 閃回版本查詢與閃回事務查詢
- oracle閃回查詢Oracle
- 閃回查詢(轉)
- 閃回查詢(1)
- oracle 閃回查詢Oracle
- DM7閃回與閃回查詢
- Oracle閃回查詢,閃回版本查詢與閃回事務查詢的使用區別總結Oracle
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Flashback Query閃回查詢
- oracle的閃回查詢Oracle
- oracle的回閃查詢Oracle
- 閃回查詢(undo sql)SQL
- 閃回版本查詢操作
- [閃回特性之閃回版本查詢]Flashback Version Query
- 閃回版本查詢技術:
- 回閃查詢查詢刪除的資料
- 【備份恢復】閃回技術之閃回版本查詢
- Oracle 11G 閃回技術 使用Oracle閃回查詢Oracle
- Oracle 11G 閃回技術 使用閃回版本查詢Oracle
- oracle閃回版本查詢學習Oracle
- 閃回技術查詢資料
- Oracle 11g 閃回查詢Oracle
- 閃回版本查詢(Flashback Version Query)
- 閃回查詢恢復過程
- (f)--閃回恢復區---實踐2---閃回表(閃回DML部分資料會用到閃回查詢)
- 【閃回特性之閃回事務查詢】Flashback Transaction Query
- Oracle 11g 閃回版本查詢Oracle
- 使用閃回查詢備份資料
- 聊聊閃回版本查詢Flashback Version Query