oracle表空间不足相关问题解决办法
欢迎和大家交流技术相关问题:
邮箱: jiangxinnju@163.com
博客园地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju
oracle 临时表空间和数据表空间
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。临时表空间的主要作用:
- 索引create或rebuild
- Order by 或 group by
- Distinct 操作
- Union 或 intersect 或 minus
- Sort-merge joins
- analyze
数据表空间:表空间的作用能帮助DBA用户完成以下工作:
- 决定数据库实体的空间分配;
- 设置数据库用户的空间份额;
- 控制数据库部分数据的可用性;
- 分布数据于不同的设备之间以改善性能;
- 备份和恢复数据。
用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该:
- 被授予关于一个或多个表空间中的RESOURCE特权;
- 被指定缺省表空间;
- 被分配指定表空间的存储空间使用份额;
- 被指定缺省临时段表空间。
表空间的维护是由ORACLE数据库系统管理员DBA通过SQL*PLUS语句实现的,其中表空间创建与修改中的文件名是不能带路径的,因此DBA必须在ORACLE/DBS目录中操作。
-- 表空间相关问题
--创建永久表空间
create tablespace tablespace_name
datafile 'PATH_OF_NEW_DATAFILE'
size 50M
AUTOEXTEND ON NEXT 50M;
--删除表空间
DROP TABLESPACE TABLESPACE_NAME;
-- 表空间不足的一般报错信息为:
-- sqlexception:ora-01654: unable to extend index index_name by 1024 in tablespace tablespace_name
-- 表空间是逻辑概念,数据文件和临时数据文件都是物理感念。
-- 一个表空间可以有多个数据文件或者临时数据文件。
SELECT * FROM dba_tablespaces;
SELECT * FROM dba_data_files;
-- 该表中只有数据文件的使用率,不包含临时数据文件
SELECT * FROM dba_free_space;
-- dba_data_files表中同一个tablespace_name可能会有多个数据文件
-- 使用sum聚集函数,并且添加group by子句可以统计相同的tablesapce_name的多个数据文件的总大小
select t.tablespace_name, round(sum(d.bytes/(1024*1024)),0) "tablespace_size(M)"
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;
-- 查询数据文件实际使用情况(不包含临时数据文件,执行速度比较慢)
select file_name, sum(e.bytes)/1024/1024 as mb
from dba_extents e join dba_data_files f on e.file_id=f.file_id
group by file_name;
-- 为某个表空间添加数据文件,文件路径格式参考dba_data_files表中的格式
alter tablespace tablespace_name add datafile 'PATH_OF_NEW_DATAFILE' size 10m
autoextend ON next 5m maxsize 100m;
-- 修改已有的数据文件自动增长
alter database datafile 'PATH_OF_OLD_DATAFILE'
autoextend on next 5m maxsize 100m;
-- 重新设置已有的数据文件大小,如果是缩小的话不能小于数据文件的实际使用情况
alter database datafile 'PATH_OF_OLD_DATAFILE'
resize 100m;
-- 如何解决临时表空间不足
SELECT * FROM dba_temp_files;
-- 查询临时表空间的使用情况,D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)代表左联接
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);
-- 建立一个中转临时表空间:
create temporary tablespace temp2
tempfile 'PATH_OF_NEW_TEMPFILE' size 512M
reuse autoextend on next 100M maxsize 2048M;
alter database default temporary tablespace temp2;
drop tablespace temp including contents and datafiles;
create temporary tablespace temp
tempfile 'PATH_OF_NEW_TEMPFILE' size 512M
reuse autoextend on next 100M maxsize 1024M;
alter database default temporary tablespace temp;
drop tablespace temp2 including contents and datafiles;
-- 查看分配给某个表的空间,不管实际是否使用
SELECT TABLESPACE_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999') CNT_MB
FROM DBA_EXTENTS
WHERE OWNER='SCOTT' AND SEGMENT_NAME='BONUS' AND SEGMENT_TYPE LIKE '%TABLE%'
GROUP BY TABLESPACE_NAME;
-- 实际使用的空间
analyze table SCOTT.BONUS compute statistics;
select num_rows * avg_row_len
from dba_tables
where owner = 'SCOTT' and table_name = 'BONUS';
-- 数据文件,表空间与状态对应关系
SELECT FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
-- 用户与表空间对应关系
SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;
oracle表空间不足相关问题解决办法的更多相关文章
- oracle 表空间管理相关(原创)
通过以下几步基本可以查看表空间情况以及处理表空间不足问题. ASM相关 查看asm空间 select group_number,name,total_mb,free_mb from v$asm_dis ...
- Oracle表空间管理相关
以下以我自己的测试环境举例: 1.表空间的 block_size 为 8192字节,即8KBytes.从数据字典中查到 max_size 为 2147483645,即约为15.9TBytes. 2.在 ...
- oracle 表空间、用户名 相关语句
一.oracle查询表空间文件所在路径 select * from dba_data_files t where t.tablespace_name='FLW' 二.计算出表空间各相关数据 SELE ...
- oracle创建表空间等相关语句
在数据库可视化工具中执行以下语句,可建立Oracle表空间. 主要分为四步 1.创建临时表空间 create temporary tablespace xuanwu_temp tempfile 'D: ...
- Oracle表空间管理
oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE; //修改表空间数据文件类型 2.ALT ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
- nagios监控oracle 表空间
oracle表空间满的危害以及处理方式见我的博客链接https://www.cnblogs.com/-abm/p/9764803.html 除此之外我们还需要对表空间实时监控,这样就可以及时了解表空间 ...
- ORACLE表空间操作实例
本文主要介绍oracle表空间常见的操作实例,包括创建.查询.增加.删除.修改.表空间和数据文件常用的数据字典和动态性能视图包括v$dbfile.v$datafile.v$tempfile.dba_s ...
随机推荐
- git pull all braches
控制台下执行如下: git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote ...
- iOS:命令行方式使用OSChina托管私有代码
一.介绍 在项目开发中,使用版本控制工具是必不可少的开发工具,它可以帮助我们程序员写完代码后及时提交备份,防止因个人操作导致代码被误删除了或者丢失了,安全可靠.同时,使用版本控制器工具也可以很方便的进 ...
- [译]SpringMVC自定义验证注解(SpringMVC custom validation annotations)
在基于SpringMVC框架的开发中,我们经常要对用户提交的字段进行合法性验证,比如整数类型的字段有个范围约束,我们会用@Range(min=1, max=4).在实际应用开发中,我们经常碰到一些自己 ...
- Java之美[从菜鸟到高手演变]之Spring源码学习 - 环境搭建
准备工作 1.下载安装STS(Spring Tool Suite),在eclipse market里直接搜索.下载.安装.2.下载安装gradle, Spring源码使用gradle构建,下载后解压到 ...
- struts2-通配符映射(基本没啥卵用)和动态调用
通配符 使用*代表任意字符 一般在action的name中使用*,并可以使用多个 可以使用{通配符的序号}引用对应的通配符所代表的值,序号从1开始 {0}代表整个URI 匹配规则 首先完全匹配,没有完 ...
- Thinkphp---------Call to a member function free_result() on a non-object
1.平时用框架用久了,直接执行原生的sql反而做起来反应迟钝了.今天遇到一个问题,就是直接执行一个添加的sql语句,然后我用了TP框架的M()->query();方法.运行以后,会报Call t ...
- sdutoj 2624 Contest Print Server
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2624 Contest Print Server ...
- 11.写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
//首先列出需要被操作的url $url_path = "http://www.sina.com.cn/abc/de/fg.php?id=1"; 方法一: ...
- AJAX-----16HTML5实现大文件切割上传
2点多接了个电话导致失眠,没办法,跑起来接着板砖了...... 废话不多说,直接走码... <!DOCTYPE html> <html lang="en"> ...
- 单用户模式下连接被占用定位spid
报错The database is in single-user mode, and a user is currently connected to it. 通过 select * from sys ...