oracle undo 複雜度--oracle核心技術讀書筆記四,undo--oracle

來源:互聯網
上載者:User

oracle undo 複雜度--oracle核心技術讀書筆記四,undo--oracle

        一. 概述

        undo 儲存的是舊資料。比如,你修改了一條記錄將A列abc修改為def,那麼undo裡面儲存的就是abc。目的有兩個:1. 如果你的事務沒有提交,但是已經將A列修改,那麼別人讀取這條資料的時候,不應該能夠看到你修改後的內容def,應該還只能看到abc,這個時候就需要去讀取undo,才能取到abc。 2. 如果你的事務後來失敗,需要將A列由修改過的值def回退到之前的值abc,abc也要從undo裡面去取。這篇文章,簡要介紹一下讀一致性(也就是別人無法讀取到你修改的未提交的內容)與復原(事務失敗,復原修改記錄)是怎麼實現的。


        二. 讀一致性

        假如會話1 9:00開啟事務,9:02分會話2修改了一條資料由A修改為了B,接著9:03分會話2又將同一條資料由B修改為C,會話2還沒有提交。會話1   9:04分讀取這條資料,應該讀取到的是A,但是緩衝中這條資料已經被修改成C了,那麼怎麼取到A呢。oracle是這樣處理,在緩衝中找到這條資料,發現這條資料被另外的會話修改了,而且另外一個會話還沒有提交,查看修改時間發現是9:03分,比我會話開啟時間9:00要晚,於是在資料區塊的事務槽中找到 另外一個會話這條修改對應的undo記錄,這個時候會讀取undo塊,如果undo已經被重新整理輸出到磁碟,還需要從磁碟中重新讀取出來。這個時候找到的是9:03修改對應的undo塊,找到的舊資料是B,如果這條undo記錄是9:00之前,我們就不需要往前找了,但是我們發現是9:03,我們還需要找找這條undo前面是否還有undo(本身undo記錄會記錄上一個undo記錄的地址),我們能找到9:02分那條undo記錄。接著再往前找發現沒有了,那麼9:02分那條undo記錄裡面的舊資料A就是我們要找的資料了。聽起來好繞,給個圖:

       

       三.  復原

        復原就是,事務失敗了,我們需要將這個事務所做的修改全部回退。 說讀一致性的時候,我們主要關注的是找資料所在的單個塊,然後找這個塊所有的undo記錄的一個指標鏈表。從塊開始,一直往後找,直到定位到一個足夠老的undo資料。那麼復原其實也類似,復原說的就是事務的曆史,我們需要事務中所有的undo記錄反向排序的指標鏈表,從最後做的修改開始回退,一直回退到事務做的第一個修改。

        復原和讀一致性看起來差不多,其實有一個重要的不同之處,讀一致性,我們是在記憶體中產生一個資料區塊的拷貝,應用undo記錄到該拷貝塊上,一旦完成相關操作,拿到了舊資料,就會迅速捨棄這個塊拷貝,因為我們的目的是拿到舊資料,並不是真的要改變資料。復原就不同,復原是要拿到當前真正的資料區塊,並應用undo記錄來還原。

        1. 復原操作的是當前資料區塊,undo應用於當前資料區塊,最終所做的修改是要持久化到磁碟的。而讀一致性是不需要的。

         2. 復原操作的是當前資料區塊,所以當我們改變它的時候(復原就是改變),會產生重做(redo),至於會不會產生undo這個沒有驗證。

         3. 復原操作不僅跟讀一致性一樣可能需要從磁碟讀取undo資料,還有可能需要從磁碟讀取修改的資料,因為修改的資料如果已經被重新整理輸出到磁碟,還需要重新從磁碟調出來,然後將其值回退到舊值。如果事務比較長,到最後事務失敗,那代價是非常大的,回退需要消耗的時間,跟正常事務的時候差不多,甚至更多。


怎更改oracle 資料庫使用者密碼複雜度

Oracle密碼複雜度設定(Oracle_Password_Complexity)

一、Oracle_Password_Complexity:

SQL> alter system set resource_limit = true;

SQL> @ $ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql → [verify_function|verify_function_11G]

SQL> alter profile default limit password_verify_function verify_function;

# 取消Oracle密碼複雜度檢查:
SQL> alter profile default limit password_verify_function null;

SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

1.FAILED_LOGIN_ATTEMPTS: 使用者在登入嘗試失敗n次後被鎖定。

2.PASSWORD_LOCK_TIME: 登入嘗試失敗達到指定次數,使用者鎖定時間長度,以“Day”為單位。

3.PASSWORD_LIFE_TIME: 使用者口令的生命週期。

4.PASSWORD_GRACE_TIME: 表示使用者口令使用時間超過其生命週期後,可以延續使用的天數,並且可延續時間內登入會有相應口令即將到期的提示。

5.PASSWORD_REUSE_TIME: 指定了口令不能重用前的天數。

6.PASSWORD_REUSE_MAX: 在達到PASSWORD_REUSE_TIME指定時間後,要再次使用同一口令前必須改變的次數。

如:PASSWORD_REUSE_TIME=30,PASSWORD_REUSE_MAX=10,使用者可以在30天以後重用該口令,要求口令必須被改變超過10次。

7.PASSWORD_VERIFY_FUNCTION: Oracle允許將複雜的PL/SQL密碼驗證指令碼做為參數傳遞給PASSWORD_VERIFY_FUNCTION。並且其自己提供了一個預設的指令碼,但是使用者可以建立自己的驗證規則或使用第三方軟體驗證。

8.Password Verify Function:

When you create a password verify function for verifying the user password, this function can verify the following password characteristics:

1.The minimum number of characters for the password.

2.The characters that the password must contain, such as when a password should contain a specific number of numeric, alphabetic or......餘下全文>>
 
Oracle undo-最佳化問題

給你一個命令:

以SYSDBA使用者登入,在SQL PLUS裡執行:

purge recyclebin;

然後你再查看下,UNDOTBS的尺寸。

但願能幫到你。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.