-- 先查看UNDOTBS1表空間的使用狀況: SELECT a.tablespace_name as tablespace_name, to_char(b.total/1024/1024,999999.99) as Total, to_char((b.total-a.free)/1024/1024,999999.99) as Used, to_char(a.free/1024/1024,999999.99) as Free, to_char(round((total-free)/total,4)*100,999.99) as Used_Rate FROM (SELECT tablespace_name, sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a, (SELECT tablespace_name, sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name ) b WHERE a.tablespace_name=b.tablespace_name AND a.tablespace_name='UNDOTBS1' ORDER BY a.tablespace_name; TABLESPACE_NAME TOTAL USED FREE USED_RATE ------------------------------ -------------------- -------------------- -------------------- -------------- UNDOTBS1 15000.00 770.19 14229.81 5.13 -- 若是Used_Rate(即空間使用率)超過80%,建議加大UNDOTBS1表空間的數據文件! -- 查看 UNDOTBS1 表空間相關的數據文件 sys@SZTYORA> select name from v$datafile where ts# in (select ts# from v$tablespace where name='UNDOTBS1'); NAME -------------------------------------------------------------------------------------------------------------------- /ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf -- 擴展數據文件的大小: alter database datafile '/ora/u01/app/oracle/oradata/sztyora/undotbs01.dbf' resize 20480M; -- 從上面的查詢能夠看到:個人UNDOTBS1表空間的總大小(TOTAL字段)是15000M,約15G,假設其使用率爲95%啦(我想將其擴大爲20G),此時能夠經過擴展數據文件大小來增大UNDOTBS1表空間, -- 固然:還能夠經過爲UNDOTBS1表空間添加數據文件擴展UNDOTBS1表空間! -- 注意:若是你的系統是Windows的,且磁盤格式化爲FAT32,其最大文件是有限制的(好像是4G吧,忘記啦),此時:單個數據文件應該不能超過4G,不然會報錯!
修改空間大小sql
alter database datafile 'E:\ORACLE\ORADATA\SDECP\UNDOTBS01.DBF' resize 10240M; alter tablespace undotbs1 add datafile 'E:\ORACLE\ORADATA\SDECP\UNDOTBS01.DBF' size 10240M autoextend on maxsize unlimited;
UNDO表空間相關知識數據庫
UNDO 表空間用於存放UNDO數據,當執行DML操做(INSERT,UPDATE和DELETE)時,oracle會將這些操做的舊數據寫入到UNDO段,在 oracle9i以前,管理UNDO數據時使用(Rollback Segment)完成的.從oracle9i開始,管理UNDO數據不只可使用回滾段,還可使用UNDO表空間.由於規劃和管理回滾段比較複雜,全部oracle database 10g已經徹底丟棄用回滾段.而且使用UNDO表空間來管理UNDO數據.session
UNDO數據也稱爲回滾(ROLLBACK)數據,它用於確保數據的一致性.當執行DML操做時,事務操做前的數據被稱爲UNDO記錄.UNDO段用於保存事務所修改數據的舊值,其中存儲着被修改數據塊的位置以及修改前數據,oracle
UNDO數據的做用.app
1,回退事務性能
當執行DML操做修改數據時,UNDO數據被存放到UNDO段,而新數據則被存放到數據段中,若是事務操做存在問題,就須要回退事務,以取消事務變化.假定用戶A執行了語句UPDATE emp SET sal=1000 WHERE empno=7788後發現,應該修改僱員7963的工資,而不是僱員7788的工資,那麼經過執行ROLLBACK語句能夠取消事務變化.當執行ROLLBACK命令時,oracle會將UNDO段的UNDO數據800(工資)寫回到數據段中.spa
2,讀一致性code
用戶檢索數據庫數據時,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記錄中取得的.orm
3,事務恢復server
事務恢復是例程恢復的一部分,它是由oracle server自動完成的.若是在數據庫運行過程當中出現例程失敗(如斷電,內存故障,後臺進程故障等),那麼當重啓oracle server時,後臺進程SMON會自動執行例程恢復,執行例程恢復時,oracle會從新作全部未應用的記錄.回退未提交事務.
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_UNDOTBS的UNDO表空間.
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表空間上自動創建10個UNDO段,經過查詢動態信息視圖V$ROLLNAME,能夠顯示全部聯機UNDO段的名稱,經過查詢動態性能視圖V$ROLLLISTAT,能夠顯示UNDO段的統計信息.經過在V$ROLLNAME和V$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:標識該區未用).