<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java思維

    正在學習中:(

    Oracle ---管理UNDO表空間

    10.管理UNDO表空間.

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

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

    UNDO數據的作用.

    1,回退事務

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

    2,讀一致性

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

    3,事務恢復

    事務恢復是例程恢復的一部分,它是由oracle server自動完成的.如果在數據庫運行過程中出現例程失敗(如斷電,內存故障,后臺進程故障等),那么當重啟oracle server,后臺進程SMON會自動執行例程恢復,執行例程恢復時,oracl會重新做所有未應用的記錄.回退未提交事務.

    4,倒敘查詢(FlashBack Query)

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

    使用UNDO參數

    1,UNDO_MANAGEMENT

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

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

    2,UNDO_TABLESPACE

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

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

    3,UNDO_RETENTION

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

    建立UNDO表空間,

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

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

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

    CREATE DATABASE db01

    UNDO TABLESPACE undotbs_01

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

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

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

    CREATE UNDO TABLESPACE undotbs3

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

    修改UNDO表空間,

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

    當事務用盡了UNDO表空間后,使用ALTER TABLESPACE … ADD DATAFILE增加數據文件

    UNDO表空間所在的磁盤填滿是,使用ALTER TABLESPACE … RENAME DATAFIEL 命令移動數據文件到其他磁盤上.

    使用ALTER DATABASE … OFFLINE/ONLINE使表空間脫機/聯機.

    當數據庫處于ARCHIVELOG模式時,使用ALTER TABLESPACE …BEGIN BACKUP/END BACKUP命令備份UNDO表空間.

    切換UNDO表空間.

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

    ALTER SYSTEM SET undo_tablespace=undotbs02;

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

    刪除UNDO表空間.

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

    DROP TABLESPACE undotbs3;

    1,確定當前例程正在使用的UNDO表空間.

    Show parameter undo_tablespace

    2,顯示數據庫的所有UNDO表空間.

    SELECT tablespace_name FROMdba_tablespaces WHERE contents=’UNDO’;

    3,顯示UNDO表空間統計信息.

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

    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用于標識起始統計時間,END_TIME用于標識結束統計時間,UNDOBLKS用于標識UNDO數據所占用的數據塊個數.oracle每隔10分鐘生成一行統計信息.

    4,顯示UNDO段統計信息.

    使用自動UNDO管理模式時,oracle會在UNDO表空間上自動建立10UNDO,通過查詢動態信息視圖V$ROLLNAME,可以顯示所有聯機UNDO段的名稱,通過查詢動態性能視圖V$ROLLLISTAT,可以顯示UNDO段的統計信息.通過在V$ROLLNAMEV$ROLLLISTAT之間執行連接查詢,可以監視特定UNDO段的特定信息.

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

    FROM v$rollname a, v$rollstat b

    WHERE a.usn=b.usn;

    Name用于標識UNDO段的名稱,xacts用于標識UNDO段所包含的活動事務個數,

    Writes用于標識在undo段上所寫入的字節數,extents用于標識UNDO段的區個數.

    5,顯示活動事務信息.

    當執行DML操作時,oracle會將這些操作的舊數據放到UNDO段中,動態性能視圖v$session用于顯示會話的詳細信息,動態性能視圖v$transaction用于顯示事務的詳細信息,動態性能視圖v$rollname用于顯示聯機UNDO段的名稱.通過在這3個動態性能視圖之間執行連接查詢,可以確定正在執行事務操作的會話,事務所使用的UNDO,以及事務所占用的UNDO塊個數.

    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區信息

    數據字典視圖dba_undo_extents用于顯示UNDO表空間所有區的詳細信息.包括UNDO區尺寸和狀態等信息.

    SELECT extend_id, bytes, status FROM dba_undo_extents

    WHERE segment_name’_SYSSMU5$’;

    其中,extent_id用于標識區編號,bytes用于標識區尺寸,status用于標識區狀態(ACTIVE:表示該區處于活動狀態,EXPIRED:標識該區未用).


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

    主站蜘蛛池模板: 婷婷亚洲综合一区二区| 国产精品亚洲αv天堂无码| 亚洲网址在线观看| 国产美女视频免费观看的网站| 成年私人影院免费视频网站| 久久亚洲精品无码VA大香大香 | 亚洲综合精品伊人久久| 91精品全国免费观看含羞草 | 亚洲成人免费网站| 亚洲伊人久久大香线焦| 视频一区在线免费观看| 国产一区二区免费在线| 亚洲国产成人AV网站| 免费少妇a级毛片| 一级特黄录像免费播放中文版| 亚洲精品无码久久不卡| 二个人看的www免费视频| 亚洲乱码国产乱码精品精| 两个人看的www高清免费观看| 亚洲精品国产精品乱码视色| 久久99热精品免费观看牛牛| 亚洲男人天堂影院| 免费涩涩在线视频网| 农村寡妇一级毛片免费看视频| 在线精品亚洲一区二区三区| 久久免费观看国产精品| 亚洲图片激情小说| 国产在线观看免费完整版中文版 | 成在线人免费无码高潮喷水| 国产AV无码专区亚洲AV毛网站| 最刺激黄a大片免费网站| 亚洲色丰满少妇高潮18p| 亚洲国产成人a精品不卡在线| 免费无码作爱视频| 国产偷窥女洗浴在线观看亚洲| 国内永久免费crm系统z在线| 亚洲a视频在线观看| 免费乱理伦在线播放| 99热在线免费观看| 亚洲国产AV无码一区二区三区| 亚洲一区二区三区自拍公司|