oracle 撤销回退,Oracle 回滚(ROLLBACK)和撤销(UNDO)
五、計算UNDO表空間的大小
計算公式:
MAX(undoblks)/600 * MAX(maxquerylen)位于v$undostat
* db_block_size位于v$parameter
--創建演示環境
SQL> INSERT INTO tb_test SELECT employee_id,first_name FROM hr.employees;
107 rows created
SQL> INSERT INTO tb_test SELECT * from tb_test;
109 rows created.
--多次執行上述命令,下面是的tb_test表中的記錄數
SQL> /
892928 rows created.
SQL> COMMIT;
Commit complete.
--查看當前undo表空間的大小
SQL> SELECT t.name,d.name,d.bytes/1024/1024 as TotalSize ,t.flashback_on,d.status
2FROM v$tablespace t
3JOIN v$datafile d
4USING (ts#)
5WHERE t.name LIKE 'UNDO%';
NAMENAMETOTALSIZE FLA STATUS
--------------------------------- ------------------------------------------- ---------- --- -------
UNDOTBS1/u01/app/Oracle/oradata/orcl/undotbs01.dbf30 YES ONLINE
--將undo表空間修改為RETENTION GUARANTEE及關閉自動擴展
SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
Tablespace altered.
SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/undotbs01.dbf' AUTOEXTEND OFF;
Database altered.
SQL> SELECT tablespace_name,contents,retention FROM dba_tablespaces
2WHERE tablespace_name LIKE 'UNDO%';
TABLESPACE_NAMECONTENTSRETENTION
------------------------------ --------- -----------
UNDOTBS1UNDOGUARANTEE
--修改保留時間為分鐘
SQL> ALTER SYSTEM SET undo_retention = 120;
System altered.
--循環刪除tb_test中的記錄,提示undo表空間空間容量不夠
SQL> BEGIN
2FOR i IN 1..1000
3LOOP
4DELETE FROM tb_test WHERE rownum < 1001;
5COMMIT;
6END LOOP;
7END;
8/
BEGIN
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
ORA-06512: at line 4
--修改回話的時間參數
SQL> ALTER SESSION SET nls_date_format='yyyy-mm-dd HH24:MI:SS';
Session altered.
--查看v$undostat視圖,獲得相關信息
SQL> SELECT begin_time,end_time,undoblks,maxquerylen, ssolderrcnt,nospaceerrcnt
2FROM v$undostat;
BEGIN_TIMEEND_TIMEUNDOBLKS MAXQUERYLEN SSOLDERRCNT NOSPACEERRCNT
------------------- ------------------- ---------- ----------- ----------- -------------
2010-07-12 19:12:18 2010-07-12 19:22:186000
2010-07-12 19:02:18 2010-07-12 19:12:189000
2010-07-12 18:52:18 2010-07-12 19:02:1847000
2010-07-12 18:42:18 2010-07-12 18:52:182136001
2010-07-12 18:32:18 2010-07-12 18:42:186000
2010-07-12 18:22:18 2010-07-12 18:32:18413154100
2010-07-12 18:12:18 2010-07-12 18:22:1817993800
2010-07-12 18:02:18 2010-07-12 18:12:186000
--計算undo表空間所需的大小
SQL> SELECT (
2(SELECT MAX(undoblks)/600 * MAX(maxquerylen) FROM v$undostat) *
3(SELECT value FROM v$parameter WHERE name = 'db_block_size'))/1024/1024 as Need_Size
4FROM dual;
NEED_SIZE
----------
42.8590625
--取消撤銷保留選項
SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
Tablespace altered
六、UNDO配額
對于超長的事務或不當的SQL腳本將耗用大量的UNDO表空間,使用UNDO表空間配額可以提高資源的利用率
對于不同組的用戶可以分配不同的最大UNDO表空間配額
當某個組超出了最大的資源限制,則該組不允許新的事務產生,直到當前組的UNDO表空間釋放或終止
七、撤銷常見的兩個錯誤
1.ORA-1555 snapshot too old快照過舊錯誤的解決
配置合適的保留時間(undo_retention)
調整undo表空間的大小
考慮保證撤銷保留的使用(retention guarantee)
2.ORA-30036 unable to extend segment in undo tablespace無法擴展撤銷表空間內的撤銷段
調整undo表空間的大小
確保大量的事務能夠周期性的提交
八、UNDO涉及的幾個相關視圖:
V$TRANSACTION
V$SESSION
DBA_ROLLBACK_SEGS--顯示所有的segments
V$ROLLSTAT
V$UNDOSTAT
V$ROLLNAME--顯示當前在線的segments
關于UNDO涉及視圖的更多信息,請參考oracle的在線文檔
總結
以上是生活随笔為你收集整理的oracle 撤销回退,Oracle 回滚(ROLLBACK)和撤销(UNDO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle没什么没有备份,怎么恢复没有
- 下一篇: 卧室门多少钱啊?