java思維

          正在學(xué)習(xí)中:(

          Oracle ---管理UNDO表空間

          10.管理UNDO表空間.

          UNDO表空間用于存放UNDO數(shù)據(jù),當(dāng)執(zhí)行DML操作(INSERT,UPDATEDELETE),oracle會將這些操作的舊數(shù)據(jù)寫入到UNDO,oracle9i之前,管理UNDO數(shù)據(jù)時使用(Rollback Segment)完成的.oracle9i開始,管理UNDO數(shù)據(jù)不僅可以使用回滾段,還可以使用UNDO表空間.因為規(guī)劃和管理回滾段比較復(fù)雜,所有oracle database 10g已經(jīng)完全丟棄用回滾段.并且使用UNDO表空間來管理UNDO數(shù)據(jù).

          UNDO數(shù)據(jù)也稱為回滾(ROLLBACK)數(shù)據(jù),它用于確保數(shù)據(jù)的一致性.當(dāng)執(zhí)行DML操作時,事務(wù)操作前的數(shù)據(jù)被稱為UNDO記錄.UNDO段用于保存事務(wù)所修改數(shù)據(jù)的舊值,其中存儲著被修改數(shù)據(jù)塊的位置以及修改前數(shù)據(jù),

          UNDO數(shù)據(jù)的作用.

          1,回退事務(wù)

          當(dāng)執(zhí)行DML操作修改數(shù)據(jù)時,UNDO數(shù)據(jù)被存放到UNDO,而新數(shù)據(jù)則被存放到數(shù)據(jù)段中,如果事務(wù)操作存在問題,舊需要回退事務(wù),以取消事務(wù)變化.假定用戶A執(zhí)行了語句UPDATE emp SET sal=1000 WHERE empno=7788后發(fā)現(xiàn),應(yīng)該修改雇員7963的工資,而不是雇員7788的工資,那么通過執(zhí)行ROLLBACK語句可以取消事務(wù)變化.當(dāng)執(zhí)行ROLLBACK命令時,oracle會將UNDO段的UNDO數(shù)據(jù)800寫回的數(shù)據(jù)段中.

          2,讀一致性

          用戶檢索數(shù)據(jù)庫數(shù)據(jù)時,oracle總是使用用戶只能看到被提交過的數(shù)據(jù)(讀取提交)或特定時間點的數(shù)據(jù)(SELECT語句時間點).這樣可以確保數(shù)據(jù)的一致性.例如,當(dāng)用戶A執(zhí)行語句UPDATE emp SET sal=1000 WHERE empno=7788,UNDO記錄會被存放到回滾段中,而新數(shù)據(jù)則會存放到EMP段中;假定此時該數(shù)據(jù)尚未提交,并且用戶B執(zhí)行SELECT sal FROM emp WHERE empno=7788,此時用戶B將取得UNDO數(shù)據(jù)800,而該數(shù)據(jù)正是在UNDO記錄中取得的.

          3,事務(wù)恢復(fù)

          事務(wù)恢復(fù)是例程恢復(fù)的一部分,它是由oracle server自動完成的.如果在數(shù)據(jù)庫運行過程中出現(xiàn)例程失敗(如斷電,內(nèi)存故障,后臺進(jìn)程故障等),那么當(dāng)重啟oracle server,后臺進(jìn)程SMON會自動執(zhí)行例程恢復(fù),執(zhí)行例程恢復(fù)時,oracl會重新做所有未應(yīng)用的記錄.回退未提交事務(wù).

          4,倒敘查詢(FlashBack Query)

          倒敘查詢用于取得特定時間點的數(shù)據(jù)庫數(shù)據(jù),它是9i新增加的特性,假定當(dāng)前時間為上午11:00,某用戶在上午10:00執(zhí)行UPDATE emp SET sal=3500 WHERE empno=7788語句,修改并提交了事務(wù)(雇員原工資為3000),為了取得10:00之前的雇員工資,用戶可以使用倒敘查詢特征.

          使用UNDO參數(shù)

          1,UNDO_MANAGEMENT

          該初始化參數(shù)用于指定UNDO數(shù)據(jù)的管理方式.如果要使用自動管理模式,必須設(shè)置該參數(shù)為AUTO,如果使用手工管理模式,必須設(shè)置該參數(shù)為MANUAL,使用自動管理模式時,oracle會使用undo表空間管理undo管理,使用手工管理模式時,oracle會使用回滾段管理undo數(shù)據(jù),

          需要注意,使用自動管理模式時,如果沒有配置初始化參數(shù)UNDO_TABLESPACE,oracle會自動選擇第一個可用的UNDO表空間存放UNDO數(shù)據(jù),如果沒有可用的UNDO表空間,oracle會使用SYSTEM回滾段存放UNDO記錄,并在ALTER文件中記載警告.

          2,UNDO_TABLESPACE

          該初始化參數(shù)用于指定例程所要使用的UNDO表空間,使用自動UNDO管理模式時,通過配置該參數(shù)可以指定例程所要使用的UNDO表空間.

          RAC(Real Application Cluster)結(jié)構(gòu)中,因為一個UNDO表空間不能由多個例程同時使用,所有必須為每個例程配置一個獨立的UNDO表空間.

          3,UNDO_RETENTION

          該初始化參數(shù)用于控制UNDO數(shù)據(jù)的最大保留時間,其默認(rèn)值為900,9i開始,通過配置該初始化參數(shù),可以指定undo數(shù)據(jù)的保留時間,從而確定倒敘查詢特征(Flashback Query)可以查看到的最早時間點.

          建立UNDO表空間,

          UNDO表空間專門用于存放UNDO數(shù)據(jù),并且在UNDO表空間尚不能建立任何數(shù)據(jù)對象(,索引,)

          1,使用CREATE DATABASE命令建立UNDO表空間.

          當(dāng)使用CREATE DATABASE命令建立數(shù)據(jù)庫時,通過指定UNDO TABLESPACE選項,可以建立UNDO表空間.示例如下:

          CREATE DATABASE db01

          UNDO TABLESPACE undotbs_01

          DATAFILE ‘/u01/oracle/rbdb1/undo0101.dbf’ SIZE 30M;

          注意:UNDO TABLESPACE 子句不是必須的,如果使用自動UNDO管理模式,并且沒有指定該子句,那么建立數(shù)據(jù)庫時會自動生成名為SYS_UNDOTBSUNDO表空間.

          2,使用CREATE UNDO TABLESPACE命令建立UNDO表空間.

          CREATE UNDO TABLESPACE undotbs3

          DATAFILE ‘D:demoundotbs3.dbf’ SIZE 10M;

          修改UNDO表空間,

          使用ALTER TABLESPACE命令修改UNDO表空間.

          當(dāng)事務(wù)用盡了UNDO表空間后,使用ALTER TABLESPACE … ADD DATAFILE增加數(shù)據(jù)文件

          當(dāng)UNDO表空間所在的磁盤填滿是,使用ALTER TABLESPACE … RENAME DATAFIEL 命令移動數(shù)據(jù)文件到其他磁盤上.

          使用ALTER DATABASE … OFFLINE/ONLINE使表空間脫機(jī)/聯(lián)機(jī).

          當(dāng)數(shù)據(jù)庫處于ARCHIVELOG模式時,使用ALTER TABLESPACE …BEGIN BACKUP/END BACKUP命令備份UNDO表空間.

          切換UNDO表空間.

          啟動例程并打開數(shù)據(jù)庫后,同一時刻特定例程只能使用一個UNDO表空間,切換UNDO表空間是指停止例程當(dāng)前使用的UNDO表空間,并啟動其他UNDO表空間,下面以啟用undotbs2表空間為例,說明切換UNDO表空間的方法.

          ALTER SYSTEM SET undo_tablespace=undotbs02;

          RAC(Real Application Cluster)機(jī)構(gòu)中,不同例程必須使用獨立的UNDO表空間,而不能共用同一個UNDO表空間.

          刪除UNDO表空間.

          當(dāng)前例程正在使用的UNDO表空間是不能被刪除的,如果確定要刪除當(dāng)前例程正在使用的UNDO表空間,應(yīng)首先切換UNDO表空間.然后刪除相應(yīng)的UNDO表空間.

          DROP TABLESPACE undotbs3;

          1,確定當(dāng)前例程正在使用的UNDO表空間.

          Show parameter undo_tablespace

          2,顯示數(shù)據(jù)庫的所有UNDO表空間.

          SELECT tablespace_name FROMdba_tablespaces WHERE contents=’UNDO’;

          3,顯示UNDO表空間統(tǒng)計信息.

          使用自動UNDO管理模式時,需要合理地設(shè)置UNDO表空間的尺寸,為例合理規(guī)劃UNDO表空間尺寸,應(yīng)在數(shù)據(jù)庫運行的高峰階段搜集UNDO表空間的統(tǒng)計信息.最終根據(jù)該統(tǒng)計信息確定UNDO表空間的尺寸.通過查詢動態(tài)性能視圖V%UNDOSTAT,可以搜集UNDO統(tǒng)計信息.

          SELECT TO_CHAR(BEGIN_TIME,’HH24:MI:SS’) BEGIN_TIME,

          TO_CHAR(END_TIME,’HH24:MI:SS’) END_TIME,

          UNDOBLKS

          FROM V$UNDOSTAT;

          BEGIN_TIME用于標(biāo)識起始統(tǒng)計時間,END_TIME用于標(biāo)識結(jié)束統(tǒng)計時間,UNDOBLKS用于標(biāo)識UNDO數(shù)據(jù)所占用的數(shù)據(jù)塊個數(shù).oracle每隔10分鐘生成一行統(tǒng)計信息.

          4,顯示UNDO段統(tǒng)計信息.

          使用自動UNDO管理模式時,oracle會在UNDO表空間上自動建立10UNDO,通過查詢動態(tài)信息視圖V$ROLLNAME,可以顯示所有聯(lián)機(jī)UNDO段的名稱,通過查詢動態(tài)性能視圖V$ROLLLISTAT,可以顯示UNDO段的統(tǒng)計信息.通過在V$ROLLNAMEV$ROLLLISTAT之間執(zhí)行連接查詢,可以監(jiān)視特定UNDO段的特定信息.

          SELECT a.name, b.xacts, b.writes, b.extents

          FROM v$rollname a, v$rollstat b

          WHERE a.usn=b.usn;

          Name用于標(biāo)識UNDO段的名稱,xacts用于標(biāo)識UNDO段所包含的活動事務(wù)個數(shù),

          Writes用于標(biāo)識在undo段上所寫入的字節(jié)數(shù),extents用于標(biāo)識UNDO段的區(qū)個數(shù).

          5,顯示活動事務(wù)信息.

          當(dāng)執(zhí)行DML操作時,oracle會將這些操作的舊數(shù)據(jù)放到UNDO段中,動態(tài)性能視圖v$session用于顯示會話的詳細(xì)信息,動態(tài)性能視圖v$transaction用于顯示事務(wù)的詳細(xì)信息,動態(tài)性能視圖v$rollname用于顯示聯(lián)機(jī)UNDO段的名稱.通過在這3個動態(tài)性能視圖之間執(zhí)行連接查詢,可以確定正在執(zhí)行事務(wù)操作的會話,事務(wù)所使用的UNDO,以及事務(wù)所占用的UNDO塊個數(shù).

          Col username format a10

          Col name format a10

          SELECT a.username, b.name, c.used_ublk

          FROM v$session a, v$rollname b, v$transaction c

          WHERE a.saddr=c.ses_addr AND b.usn=c.xidusn

          AND a.username=’SCOTT’;

          6,顯示UNDO區(qū)信息

          數(shù)據(jù)字典視圖dba_undo_extents用于顯示UNDO表空間所有區(qū)的詳細(xì)信息.包括UNDO區(qū)尺寸和狀態(tài)等信息.

          SELECT extend_id, bytes, status FROM dba_undo_extents

          WHERE segment_name’_SYSSMU5$’;

          其中,extent_id用于標(biāo)識區(qū)編號,bytes用于標(biāo)識區(qū)尺寸,status用于標(biāo)識區(qū)狀態(tài)(ACTIVE:表示該區(qū)處于活動狀態(tài),EXPIRED:標(biāo)識該區(qū)未用).


          posted on 2007-04-03 10:52 john 閱讀(1063) 評論(0)  編輯  收藏 所屬分類: Oracle Technology

          主站蜘蛛池模板: 海安县| 新密市| 宁河县| 麻江县| 东乡族自治县| 南阳市| 高唐县| 英山县| 新乡县| 浦县| 徐闻县| 隆林| 谢通门县| 英山县| 锦州市| 珠海市| 竹溪县| 泰来县| 凤冈县| 乌兰浩特市| 泾源县| 沂水县| 香河县| 广宁县| 托里县| 山东省| 新河县| 北碚区| 阿荣旗| 上犹县| 云阳县| 株洲县| 合川市| 珠海市| 定陶县| 青冈县| 敦化市| 邳州市| 星座| 曲靖市| 仁布县|