2 DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo01.dbf’ SIZE 100M
3 AUTOEXTEND ON NEXT 20M MAXSIZE 1000M;Tablespace created.
SQL> ALTER SYSTEM SET undo_tablespace = ‘UNDO’ SCOPE=BOTH;System altered.
SQL> ALTER SYSTEM SET undo_retention = 900 SCOPE=BOTH;System altered.
3.2 回滚表空间管理操作
回滚表空间管理操作:
SELECT tablespace_name, status, contents, extent_management
FROM dba_tablespaces
WHERE contents = ‘UNDO’;– 2. 查看回滚表空间数据文件
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb,
autoextensible, maxbytes/1024/1024 AS max_size_mb
FROM dba_data_files
WHERE tablespace_name LIKE ‘%UNDO%’;– 3. 修改回滚表空间大小
ALTER TABLESPACE undo
ADD DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo02.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 20M MAXSIZE 1000M;– 4. 调整回滚表空间自动扩展
ALTER DATABASE DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo01.dbf’
AUTOEXTEND ON NEXT 40M MAXSIZE 2000M;– 5. 重命名回滚表空间
ALTER TABLESPACE undo_old RENAME TO undo_new;– 6. 删除回滚表空间
DROP TABLESPACE undo_old INCLUDING CONTENTS AND DATAFILES;– 7. 切换回滚表空间
ALTER SYSTEM SET undo_tablespace = ‘UNDO_NEW’ SCOPE=BOTH;– 8. 查看回滚段信息
SELECT segment_name, tablespace_name, status, bytes/1024/1024 AS size_mb
FROM dba_rollback_segs;– 9. 查看回滚表空间的使用情况
SELECT tablespace_name, current_bytes/1024/1024 AS current_mb,
max_bytes/1024/1024 AS max_mb,
current_scn, retention_timeout
FROM v$undo_space;
3.3 回滚表空间监控与维护
回滚表空间监控与维护:
SELECT tablespace_name,
SUM(bytes)/1024/1024 AS total_mb,
SUM(bytes – free_bytes)/1024/1024 AS used_mb,
SUM(free_bytes)/1024/1024 AS free_mb,
ROUND((SUM(bytes – free_bytes)/SUM(bytes))*100, 2) AS used_percent
FROM (
SELECT tablespace_name, bytes,
CASE WHEN autoextensible = ‘YES’ THEN maxbytes ELSE bytes END – bytes AS free_bytes
FROM dba_data_files
WHERE tablespace_name LIKE ‘%UNDO%’
) GROUP BY tablespace_name;– 2. 监控回滚段使用情况
SELECT segment_name, tablespace_name, status, bytes/1024/1024 AS size_mb,
extents, initial_extent/1024/1024 AS initial_mb,
next_extent/1024/1024 AS next_mb
FROM dba_rollback_segs;– 3. 监控回滚表空间的事务信息
SELECT usn, slot, sequence#, status, xidsqn, ubablk, ubafil,
ubaobj, used_ublk, used_urec
FROM v$transaction;– 4. 查看回滚表空间的统计信息
SELECT * FROM v$undostat
ORDER BY begin_time DESC;– 5. 检查回滚表空间的保留时间
SELECT name, value FROM v$parameter WHERE name = ‘undo_retention’;– 6. 检查回滚表空间的自动优化
SELECT * FROM v$parameter WHERE name LIKE ‘undo%’;– 7. 查看回滚表空间的历史使用情况
SELECT * FROM dba_hist_undostat
ORDER BY snap_id DESC;
Part04-生产案例与实战讲解
4.1 Oracle数据库回滚表空间管理案例
以下是一个回滚表空间管理的实际案例:
— 1. 创建主回滚表空间
CREATE UNDO TABLESPACE undo
DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 5000M;– 2. 创建大型回滚表空间
CREATE UNDO TABLESPACE undo_large
DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo_large01.dbf’ SIZE 2G
AUTOEXTEND ON NEXT 100M MAXSIZE 10G;– 3. 设置默认回滚表空间
ALTER SYSTEM SET undo_tablespace = ‘UNDO’ SCOPE=BOTH;– 4. 设置回滚表空间的保留时间
ALTER SYSTEM SET undo_retention = 1800 SCOPE=BOTH; — 30分钟
— 5. 为特定用户分配大型回滚表空间
— 注意:回滚表空间是系统级设置,不能为单个用户分配不同的回滚表空间
— 6. 监控回滚表空间使用情况
SELECT tablespace_name,
SUM(bytes)/1024/1024 AS total_mb,
SUM(bytes – free_bytes)/1024/1024 AS used_mb,
SUM(free_bytes)/1024/1024 AS free_mb,
ROUND((SUM(bytes – free_bytes)/SUM(bytes))*100, 2) AS used_percent
FROM (
SELECT tablespace_name, bytes,
CASE WHEN autoextensible = ‘YES’ THEN maxbytes ELSE bytes END – bytes AS free_bytes
FROM dba_data_files
WHERE tablespace_name LIKE ‘%UNDO%’
) GROUP BY tablespace_name;– 7. 监控回滚表空间的事务信息
SELECT usn, slot, sequence#, status, xidsqn, ubablk, ubafil,
ubaobj, used_ublk, used_urec
FROM v$transaction;– 8. 查看回滚表空间的统计信息
SELECT * FROM v$undostat
ORDER BY begin_time DESC;
4.2 回滚表空间问题诊断与解决
回滚表空间问题诊断与解决:
— 查看回滚表空间使用情况
SELECT tablespace_name,
SUM(bytes)/1024/1024 AS total_mb,
SUM(bytes – free_bytes)/1024/1024 AS used_mb,
SUM(free_bytes)/1024/1024 AS free_mb,
ROUND((SUM(bytes – free_bytes)/SUM(bytes))*100, 2) AS used_percent
FROM (
SELECT tablespace_name, bytes,
CASE WHEN autoextensible = ‘YES’ THEN maxbytes ELSE bytes END – bytes AS free_bytes
FROM dba_data_files
WHERE tablespace_name LIKE ‘%UNDO%’
) GROUP BY tablespace_name
ORDER BY used_percent DESC;– 解决方案:添加数据文件
ALTER TABLESPACE undo
ADD DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo03.dbf’ SIZE 200M
AUTOEXTEND ON NEXT 50M MAXSIZE 2000M;– 2. 回滚表空间保留时间不足问题
— 查看回滚表空间的保留时间
SELECT name, value FROM v$parameter WHERE name = ‘undo_retention’;– 解决方案:增加保留时间
ALTER SYSTEM SET undo_retention = 3600 SCOPE=BOTH; — 60分钟
— 3. 回滚表空间事务过多问题
— 查看当前事务
SELECT usn, slot, sequence#, status, xidsqn, ubablk, ubafil,
ubaobj, used_ublk, used_urec
FROM v$transaction;– 查看长时间运行的事务
SELECT s.sid, s.serial#, s.username, t.start_time,
(SYSDATE – t.start_time) * 24 * 60 AS minutes_running
FROM v$session s, v$transaction t
WHERE s.saddr = t.saddr
ORDER BY minutes_running DESC;– 解决方案:终止长时间运行的事务
ALTER SYSTEM KILL SESSION ‘sid,serial#’ IMMEDIATE;– 4. 回滚表空间碎片问题
— 检查回滚表空间碎片
SELECT tablespace_name,
COUNT(*) AS extent_count,
MAX(blocks) AS max_blocks,
MIN(blocks) AS min_blocks,
AVG(blocks) AS avg_blocks
FROM dba_extents
WHERE tablespace_name LIKE ‘%UNDO%’
GROUP BY tablespace_name;– 解决方案:重建回滚表空间
CREATE UNDO TABLESPACE undo_new
DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo_new01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 5000M;ALTER SYSTEM SET undo_tablespace = ‘UNDO_NEW’ SCOPE=BOTH;DROP TABLESPACE undo INCLUDING CONTENTS AND DATAFILES;CREATE UNDO TABLESPACE undo
DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 5000M;ALTER SYSTEM SET undo_tablespace = ‘UNDO’ SCOPE=BOTH;DROP TABLESPACE undo_new INCLUDING CONTENTS AND DATAFILES;
4.3 故障排除
回滚表空间故障排除:
— 检查回滚表空间数据文件
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb,
autoextensible, maxbytes/1024/1024 AS max_size_mb
FROM dba_data_files
WHERE tablespace_name LIKE ‘%UNDO%’;– 解决方案:检查文件系统空间,添加数据文件
— 2. 回滚表空间事务回滚失败问题
— 查看当前事务
SELECT usn, slot, sequence#, status, xidsqn, ubablk, ubafil,
ubaobj, used_ublk, used_urec
FROM v$transaction;– 解决方案:检查事务状态,必要时重启数据库
— 3. 回滚表空间损坏问题
— 检查回滚表空间状态
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE contents = ‘UNDO’;– 解决方案:重建回滚表空间
CREATE UNDO TABLESPACE undo_new
DATAFILE ‘/u01/app/oracle/oradata/ORCL/undo_new01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 5000M;ALTER SYSTEM SET undo_tablespace = ‘UNDO_NEW’ SCOPE=BOTH;DROP TABLESPACE undo INCLUDING CONTENTS AND DATAFILES;– 4. 回滚表空间使用过高问题
— 查看回滚表空间的使用情况
SELECT tablespace_name, current_bytes/1024/1024 AS current_mb,
max_bytes/1024/1024 AS max_mb,
current_scn, retention_timeout
FROM v$undo_space;– 查看长时间运行的事务
SELECT s.sid, s.serial#, s.username, t.start_time,
(SYSDATE – t.start_time) * 24 * 60 AS minutes_running
FROM v$session s, v$transaction t
WHERE s.saddr = t.saddr
ORDER BY minutes_running DESC;– 解决方案:终止长时间运行的事务,增加回滚表空间大小
Part05-风哥经验总结与分享
5.1 回滚表空间管理最佳实践
- 根据业务需求规划合理的回滚表空间结构
- 为不同类型的工作负载创建专用回滚表空间
- 合理设置回滚表空间的大小和自动扩展参数
- 设置适当的undo_retention值,平衡保留时间和空间使用
- 定期监控回滚表空间使用情况
- 及时处理回滚表空间不足问题
- 定期检查和处理长时间运行的事务
5.2 常见问题与解决方案
- 回滚表空间不足:添加数据文件或扩展现有数据文件
- 回滚表空间保留时间不足:增加undo_retention值
- 回滚表空间事务过多:终止长时间运行的事务
- 回滚表空间碎片严重:重建回滚表空间
- 回滚表空间损坏:重建回滚表空间
5.3 性能优化建议
- 为大型事务创建专用的回滚表空间
- 合理设置undo_retention值,根据业务需求调整
- 使用自动扩展功能,但设置合理的上限
- 定期监控回滚表空间性能指标
- 优化应用程序,减少长时间运行的事务
- 使用合适的事务隔离级别,减少回滚数据的生成
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
