当前位置: 首页 > news >正文

ORACLE表空间扩容

Oracle表空间创建与空间不足运维操作指南

一、表空间创建操作

1. 基本表空间创建语法

CREATE TABLESPACE tablespace_name
DATAFILE '/path/to/datafile.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

2. 创建表空间详细参数说明

  • 小文件表空间(默认)

    CREATE TABLESPACE ts_small
    DATAFILE '/u01/oradata/DB1/ts_small01.dbf' SIZE 500M
    AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
    
  • 大文件表空间(单个超大文件)

    CREATE BIGFILE TABLESPACE ts_large
    DATAFILE '/u01/oradata/DB1/ts_large01.dbf' SIZE 5G;
    
  • 临时表空间

    CREATE TEMPORARY TABLESPACE temp_ts
    TEMPFILE '/u01/oradata/DB1/temp_ts01.dbf' SIZE 1G;
    

二、表空间空间监控

1. 常用监控SQL

-- 表空间使用情况概览
SELECT df.tablespace_name "表空间",df.bytes/1024/1024 "总大小(MB)",(df.bytes-fs.bytes)/1024/1024 "已用(MB)",fs.bytes/1024/1024 "空闲(MB)",ROUND(100*(df.bytes-fs.bytes)/df.bytes) "使用率(%)"
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df,(SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name;-- 数据文件自动扩展状态
SELECT file_name, tablespace_name, autoextensible, bytes/1024/1024 "当前大小(MB)", increment_by*8/1024 "增量(MB)", maxbytes/1024/1024 "最大大小(MB)"
FROM dba_data_files;

2. 设置监控预警

-- 创建表空间使用率监控表
CREATE TABLE tbs_monitor_history (monitor_time TIMESTAMP,tablespace_name VARCHAR2(30),used_pct NUMBER(5,2)
);-- 定期收集统计信息(可设置为JOB)
INSERT INTO tbs_monitor_history
SELECT SYSTIMESTAMP, a.tablespace_name, ROUND((a.bytes-b.bytes)/a.bytes*100,2) used_pct
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;

三、表空间空间不足处理方案

1. 扩容现有数据文件

-- 手动调整数据文件大小
ALTER DATABASE DATAFILE '/u01/oradata/DB1/users01.dbf' RESIZE 2G;-- 启用自动扩展(如果未启用)
ALTER DATABASE DATAFILE '/u01/oradata/DB1/users01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

2. 添加新的数据文件

-- 向表空间添加新数据文件
ALTER TABLESPACE users ADD DATAFILE '/u01/oradata/DB1/users02.dbf' SIZE 1G
AUTOEXTEND ON NEXT 100M MAXSIZE 5G;

3. 清理表空间(释放空间)

-- 查找大表/大对象
SELECT segment_name, segment_type, owner, bytes/1024/1024 MB
FROM dba_segments
WHERE tablespace_name = 'USERS'
ORDER BY bytes DESC;-- 归档/清理历史数据
-- 重建表释放碎片空间
ALTER TABLE schema.table_name MOVE TABLESPACE users;
-- 重建索引
ALTER INDEX schema.index_name REBUILD TABLESPACE users;

4. 启用Oracle空间压缩

-- 表压缩(适用于大量重复数据)
ALTER TABLE schema.table_name COMPRESS FOR OLTP;-- 表空间级压缩
CREATE TABLESPACE compressed_ts
DATAFILE '/u01/oradata/DB1/compressed01.dbf' SIZE 1G
DEFAULT COMPRESS FOR OLTP;

四、自动化运维脚本

1. 自动扩容脚本(PL/SQL)

DECLAREv_sql VARCHAR2(1000);v_tbs_name VARCHAR2(30) := 'USERS';v_extend_size NUMBER := 100; -- MBv_max_size NUMBER := 10240; -- MB (10G)
BEGINFOR f IN (SELECT file_id, file_name, bytes/1024/1024 current_sizeFROM dba_data_files WHERE tablespace_name = v_tbs_nameAND autoextensible = 'YES'AND (bytes/1024/1024 + v_extend_size) <= v_max_size)LOOPv_sql := 'ALTER DATABASE DATAFILE ''' || f.file_name || ''' RESIZE ' || (f.current_size + v_extend_size) || 'M';EXECUTE IMMEDIATE v_sql;DBMS_OUTPUT.PUT_LINE('Expanded: ' || f.file_name || ' to ' || (f.current_size + v_extend_size) || 'MB');END LOOP;
END;
/

2. 表空间自动维护JOB

BEGINDBMS_SCHEDULER.CREATE_JOB (job_name        => 'AUTO_TBS_MAINTENANCE',job_type        => 'PLSQL_BLOCK',job_action      => 'BEGIN -- 检查空间使用率>90%的表空间FOR t IN (SELECT tablespace_name FROM dba_tablespace_usage_metrics WHERE used_percent > 90)LOOP-- 执行扩容操作-- 可以调用上面的自动扩容脚本END LOOP;END;',start_date      => SYSTIMESTAMP,repeat_interval => 'FREQ=HOURLY; INTERVAL=1',enabled         => TRUE,comments        => 'Automatic tablespace maintenance job');
END;
/

五、最佳实践建议

  1. 预防性监控

    • 设置表空间使用率超过85%的预警
    • 定期检查自动扩展设置是否合理
  2. 容量规划

    • 根据业务增长预测提前扩容
    • 保留20%以上的空闲空间应对突发增长
  3. 维护窗口

    • 在业务低峰期执行大表维护操作
    • 定期重组碎片化严重的表空间
  4. 文档记录

    • 记录每次扩容操作的时间、大小和原因
    • 维护表空间使用历史趋势图
  5. 应急方案

    • 准备紧急扩容操作手册
    • 保留应急磁盘空间资源
http://www.lryc.cn/news/574496.html

相关文章:

  • jmeter接口测试
  • Github 2025-06-24Python开源项目日报 Top10
  • PyTorch topk() 用法详解:取最大值
  • Gym安装
  • 数据结构day2
  • 数组题解——​合并区间【LeetCode】
  • 使用 PyAEDT 设计参数化对数周期偶极子天线 LPDA
  • 如何解决TCP传输的“粘包“问题
  • HTTP面试题——缓存技术
  • Qt面试题汇总
  • 记录一下小程序城市索引栏开发经历
  • ✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub
  • Rocky8使用gvm配置Go多版本管理的微服务开发环境
  • uni-app项目实战笔记24--uniapp实现图片保存到手机相册
  • spring01-简介
  • 618风控战升级,瑞数信息“动态安全+AI”利剑出鞘
  • window显示驱动开发—DirectX 图形基础结构 DDI
  • 【CS创世SD NAND征文】基于全志V3S与CS创世SD NAND的物联网智能路灯网关数据存储方案
  • taro小程序,tailwindcss的bg-x-x,背景颜色不生效,只有自定义的写法颜色才生效
  • C++修炼:异常
  • 解码成都芯谷金融中心文化科技产业园:文化+科技双轮驱动
  • Qt 中使用 gtest 做单元测试
  • 一文读懂微观测量:光学3D轮廓仪与共聚焦显微成像的结合应用
  • cherry-pick除了使用命令,有没有什么工具可以使用,或者更高效的方法
  • Linux 文件 I/O 与标准 I/O 缓冲机制详解
  • Java面试中被深挖过的线程问题
  • 对手机屏中断路和短路的单元进行切割或熔接,实现液晶线路激光修复原理
  • Luckysheet Excel xlsx 导入导出互相转换
  • 02-Linux内核源码编译
  • CentOS 7 编译安装Nginx 1.27.5完整指南及负载均衡配置