1. 程式人生 > >[Oracle維護工程師手記系列]為什麽flashback 的時候既需要 flashback log ,又需要 archive log?

[Oracle維護工程師手記系列]為什麽flashback 的時候既需要 flashback log ,又需要 archive log?

頻繁 acl ack 就是 系列 AS arc ive flashback

為什麽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?