巧用閃回資料庫來檢視歷史資料
國慶期間有一個例行維護的任務,需要在大早上7點起來,先根據業務指定的SQL查出指定資料,然後執行一個儲存過程來更新資料。
查出來的這部分資料需要作為後期的資料稽核所用,涉及到審計,所以優先順序還是比較高的。
因為這樣的查詢有幾個,所以為了統一資料格式,先加了rownum看看資料的基本情況。
SQL類似於下面的形式:
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd') and rownum<10;
操作的過程很快就完成了。因為在內網環境,而且又是使用VPN,這部分資料要複製出來還是有一些難度,就和同事商量能不能上班了之後再提供,同事也很爽快,就答應了。
上班的時候,離這個操作的時間已經過去了近3天。
當我把資料提供給同事的時候,同事發現有一個查詢的資料出入太大,完全對不上。我檢視當時操作的日誌發現,這下壞了,語句執行錯了。
應該執行的語句是:
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd');
而我當時格式化的時候竟然給忘了去掉rownum<10 ,那個查詢只返回了9條資料。想想這已經過去了好幾天,怎麼能夠保證資料的準確性呢。
帶著僥倖心理,嘗試透過閃回查詢來完成,但是發現這次確實不走運,回滾段還是不滿足要求,畢竟時間已經過去了好幾天了。
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp as of timestamp to_timestamp('2016-10-06 08:00:00','yyyy-mm-dd hh24:mi:ss') where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd')
*
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 22 with name
"_SYSSMU22_163011606$" too small
這個時候問題就擺在了我的面前,這個問題該怎麼解決。首先不能作假,其次這部分內容是要提供的,完全能沒有辦法透過日誌 或者其它的方式來間接得到了。
這個時候我想到了我之前的一個完美的決定。那就是一主兩備,在異機備庫開了閃回資料庫的特性。保留的時間是4天,這下我是這個問題的真正受益者了。
來看看在備庫做真實的閃回資料庫操作是否可行,這次艱鉅的任務就靠它了。
首先確認備庫的狀態:
SQL> select flashback_on,database_role,open_mode from v$database;
FLASHBACK_ON DATABASE_ROLE OPEN_MODE
------------------ ---------------- --------------------
YES PHYSICAL STANDBY READ ONLY WITH APPLY
確認了時間點,就準備停庫,停庫前還是需要確認是否有其它的業務連線。
SQL> select username,count(*)from v$session group by username;
USERNAME COUNT(*)
------------------------------ ----------
50
PUBLIC 5
SYS 1
啟庫到mount階段,閃回到具體的時間點。
flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss');
這個閃回的過程因為涉及到的閃回日誌還是蠻多的,所以持續時間就略微長一些。大概有15分鐘的樣子。
Sat Oct 08 11:14:59 2016
flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss')
Flashback Restore Start
Sat Oct 08 11:27:03 2016
Flashback Restore Complete
Flashback Media Recovery Start
started logmerger process
Parallel Media Recovery started with 24 slaves
Flashback Media Recovery Log /U01/app/oracle/fast_recovery_area/SGCDB2/archivelog/2016_10_06/o1_mf_1_3696_czc0wj0f_.arc
Flashback Media Recovery Log /U01/app/oracle/fast_recovery_area/SGCDB2/archivelog/2016_10_06/o1_mf_1_3697_czc540wp_.arc
Sat Oct 08 11:27:15 2016
Incomplete Recovery applied until change 229374582017 time 10/06/2016 07:20:01
Sat Oct 08 11:27:15 2016
Flashback Media Recovery Complete
Completed: flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss')
Sat Oct 08 11:29:34 2016
再次查詢,資料就是當時的狀態了,就和一個完整的快照一樣,如果對閃回時間有疑問,還可以再次閃回,直到滿足要求,經過比對,發現資料準確無誤。
重啟資料庫,開啟日誌應用,備庫又開始接受應用歸檔了。整個過程也是有驚無險,我也在這個過程中對閃回資料庫有了更深入的理解。對此我有幾點感觸,一個就是如果異機備庫的空間較大,日誌量不是非常大,可以考慮將閃回的時間設定長一些。對於很多操作來說,還是需要儘可能保留一些關鍵的日誌,沒準哪天那些看似不重要的時間戳就非常重要了。
查出來的這部分資料需要作為後期的資料稽核所用,涉及到審計,所以優先順序還是比較高的。
因為這樣的查詢有幾個,所以為了統一資料格式,先加了rownum看看資料的基本情況。
SQL類似於下面的形式:
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd') and rownum<10;
操作的過程很快就完成了。因為在內網環境,而且又是使用VPN,這部分資料要複製出來還是有一些難度,就和同事商量能不能上班了之後再提供,同事也很爽快,就答應了。
上班的時候,離這個操作的時間已經過去了近3天。
當我把資料提供給同事的時候,同事發現有一個查詢的資料出入太大,完全對不上。我檢視當時操作的日誌發現,這下壞了,語句執行錯了。
應該執行的語句是:
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd');
而我當時格式化的時候竟然給忘了去掉rownum<10 ,那個查詢只返回了9條資料。想想這已經過去了好幾天,怎麼能夠保證資料的準確性呢。
帶著僥倖心理,嘗試透過閃回查詢來完成,但是發現這次確實不走運,回滾段還是不滿足要求,畢竟時間已經過去了好幾天了。
select cn 賬號,present_point 剩餘積分點 , last_date 積分最後更新時間 from test.user_present_point_sp as of timestamp to_timestamp('2016-10-06 08:00:00','yyyy-mm-dd hh24:mi:ss') where present_point > 0 and last_date < to_date('2016-10-07','yyyy-MM-dd')
*
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 22 with name
"_SYSSMU22_163011606$" too small
這個時候問題就擺在了我的面前,這個問題該怎麼解決。首先不能作假,其次這部分內容是要提供的,完全能沒有辦法透過日誌 或者其它的方式來間接得到了。
這個時候我想到了我之前的一個完美的決定。那就是一主兩備,在異機備庫開了閃回資料庫的特性。保留的時間是4天,這下我是這個問題的真正受益者了。
來看看在備庫做真實的閃回資料庫操作是否可行,這次艱鉅的任務就靠它了。
首先確認備庫的狀態:
SQL> select flashback_on,database_role,open_mode from v$database;
FLASHBACK_ON DATABASE_ROLE OPEN_MODE
------------------ ---------------- --------------------
YES PHYSICAL STANDBY READ ONLY WITH APPLY
確認了時間點,就準備停庫,停庫前還是需要確認是否有其它的業務連線。
SQL> select username,count(*)from v$session group by username;
USERNAME COUNT(*)
------------------------------ ----------
50
PUBLIC 5
SYS 1
啟庫到mount階段,閃回到具體的時間點。
flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss');
這個閃回的過程因為涉及到的閃回日誌還是蠻多的,所以持續時間就略微長一些。大概有15分鐘的樣子。
Sat Oct 08 11:14:59 2016
flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss')
Flashback Restore Start
Sat Oct 08 11:27:03 2016
Flashback Restore Complete
Flashback Media Recovery Start
started logmerger process
Parallel Media Recovery started with 24 slaves
Flashback Media Recovery Log /U01/app/oracle/fast_recovery_area/SGCDB2/archivelog/2016_10_06/o1_mf_1_3696_czc0wj0f_.arc
Flashback Media Recovery Log /U01/app/oracle/fast_recovery_area/SGCDB2/archivelog/2016_10_06/o1_mf_1_3697_czc540wp_.arc
Sat Oct 08 11:27:15 2016
Incomplete Recovery applied until change 229374582017 time 10/06/2016 07:20:01
Sat Oct 08 11:27:15 2016
Flashback Media Recovery Complete
Completed: flashback database to timestamp to_timestamp('2016-10-06 07:20:00','yyyy-mm-dd hh24:mi:ss')
Sat Oct 08 11:29:34 2016
再次查詢,資料就是當時的狀態了,就和一個完整的快照一樣,如果對閃回時間有疑問,還可以再次閃回,直到滿足要求,經過比對,發現資料準確無誤。
重啟資料庫,開啟日誌應用,備庫又開始接受應用歸檔了。整個過程也是有驚無險,我也在這個過程中對閃回資料庫有了更深入的理解。對此我有幾點感觸,一個就是如果異機備庫的空間較大,日誌量不是非常大,可以考慮將閃回的時間設定長一些。對於很多操作來說,還是需要儘可能保留一些關鍵的日誌,沒準哪天那些看似不重要的時間戳就非常重要了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2126025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫閃回Oracle資料庫
- Oracle 閃回資料庫測試Oracle資料庫
- 詳解oracle資料庫閃回Oracle資料庫
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- 【AWR】DBA_HIST檢視檢視儲存在AWR中的歷史資料
- 資料庫檢視資料庫
- 資料庫-檢視資料庫
- dg_閃回資料庫實驗資料庫
- 2.12 資料庫資料字典檢視資料庫
- Wakatime 不升級會員也能檢視歷史資料了!
- 資料庫學習筆記1(資料管理歷史)資料庫筆記
- Oracle資料庫閃回區空間不足Oracle資料庫
- flashback query閃回資料
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- android 檢視資料庫和shaedpreference資料框架Android資料庫框架
- 資料庫的物化檢視資料庫
- openGausspostgreSQL資料庫效能檢視SQL資料庫
- 資料庫檢視的作用資料庫
- 資料庫檢視的使用資料庫
- 騰訊基於全時態資料庫技術的資料閃回資料庫
- 2.8.3 資料庫服務的資料字典檢視資料庫
- C/C++ Qt 資料庫與Chart實現歷史資料展示C++QT資料庫
- 【Oracle 12c資料庫支援閃回庫功能】實驗Oracle資料庫
- 同時第三方資料來源和資料庫歷史資料,作為cta策略初始化資料庫
- mysql binlog檢視指定資料庫MySql資料庫
- 什麼是資料庫檢視?資料庫
- my2sql資料閃回SQL
- 世界資料庫史資料庫
- 走進資料的歷史
- Oracle錶的歷史統計資訊檢視Oracle
- 從資料庫發展史看資料庫未來技術趨勢資料庫
- 國產資料庫源流史:AntDB資料庫資料庫
- Jupyter Notebook實現從IB介面歷史資料獲取,寫入資料庫,策略回測和實盤交易資料庫
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- 檢視oracle資料庫真實大小Oracle資料庫
- 資料庫檢視,索引,觸發器資料庫索引觸發器
- 工具分享丨資料閃回工具MyFlash
- Orcale利用閃回功能恢復資料
- 資料視覺化的概念/作用/型別/工具/歷史視覺化型別