[Oracle維護工程師手記系列]為什麽flashback 的時候既需要 flashback log ,又需要 archive log?
為什麽flashback 的時候既需要 flashback log ,又需要 archive log 呢?
如果數據庫的活動不是很頻繁,可以看到,其flashback log 是比較小的。那麽是通過怎樣的方式 flashback 到過去的呢?
示意如下:
12:50 第一次更改數據(100-->200)
1:00 進行 第一次 flashback log 寫入。 記錄內容是 更改前的數據:100
1:10 第二次更改數據(200-->300)
1:30 再進行下一次flashback log 寫入。 記錄內容是 更改前的數據:200
1:45 第三次更改數據(300-->400)
2:00 再進行下一次flashback log 寫入。 記錄內容是 更改前的數據:300
2:20 第四次更改數據(400-->500)
2:30 再進行下一次flashback log 寫入。 記錄內容是 更改前的數據:400
2:40 第五次更改數據(500-->600)
3:00 再進行下一次flashback log 寫入。 記錄內容是 更改前的數據:500
如果想要 flashback 到 1:15 時刻,
數據庫需要先找到最靠近這個時間點的之前的 flashback log 的時刻。
也就是 1:00 是的 flashback 的內容,用這個內容覆當前的數據,然後再吧 1:00 到 1:15 的 archive log 的內容 apply 此數據上。
上面舉的例子是一個數據塊的變更,數據庫運行中有多個數據塊被在不同時刻修改。所以真實的 flashback 是這樣的一個過程:
比如現在是 3:10分,想要回到1:15 時刻,那麽要經過如下的過程:
先利用 3:00 的 flashback ,用其中的更改前的數據, 回到3:00 的時刻的狀態。
再利用 2:30 的 flashback ,用其中的更改前的數據, 回到2:30 的時刻的狀態。
再利用 2:00 的 flashback ,用其中的更改前的數據, 回到2:00 的時刻的狀態。
再利用 1:30 的 flashback ,用其中的更改前的數據, 回到1:30 的時刻的狀態。
再利用 1:00 的 flashback ,用其中的更改前的數據, 回到1:00 的時刻的狀態。
然後,再利用 1:00 到 1:15 的archive log 內容,apply後達到 1:15 時刻的狀態。
[Oracle維護工程師手記系列]為什麽flashback 的時候既需要 flashback log ,又需要 archive log?