oracle数据库报错ora-01653表空间扩展失败解决方案
1)ora-01653错误截图:


可以看到有两张表的insert受到了影响,都是在USERS表空间里。用以下SQL查看表空间使用情况:
SELECT a.tablespace_name "表空间名",a.bytes / 1024 / 1024 "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)",
b.bytes / 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
FROM (SELECT tablespace_name, sum(bytes) bytes
FROM dba_data_files GROUP BY tablespace_name) a,
( SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
FROM dba_free_space
GROUP BY tablespace_name
) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

可以看到USERS表空间已经使用了99.99%!马上就100%,再也没有地方存储数据了!正式环境啊!情况危急!
2)解决办法
--获取数据文件dbf路径
select tablespace_name, file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;

以下两种方案都需要获取/home目录下实际物理大小,我登录到linux数据库服务器后,使用du -sh命令查看了/home目录大小为250GB。
第一种解决方案:
可以看到USERS表空间总共有3个dbf(此时我已经增加了04.dbf),复制其中一个dbf路径 /home/oracle/oradata/users01.dbf,覆盖下面的datafile参数:
--新增加一个dbf文件,指定该dbf文件大小为32GB左右,并使其每次自动扩展1GB,并且没有最大限制
alter tablespace users add datafile '/home/oracle/oradata/users04.dbf' size 32760m autoextend on next 1024m maxsize unlimited;
--segment space management auto extent management local; 据说可以连接上一句一起执行(把上一句分号去掉即可),没执行,不知道执行效果,谨慎期间,慎用。
第二种解决方案:
--把原有的dbf数据文件大小调整(扩大)
alter database datafile '/home/oracle/oradata/users01.dbf' resize 61440M; --没试过,不知道效果
我用的是第一种解决方案,第二种没试过,不知道效果如何。
3)解决后效果
我用的第一种解决方案,增加了04.dbf,再次使用SQL查看表空间使用情况:
SELECT a.tablespace_name "表空间名",a.bytes / 1024 / 1024 "表空间大小(M)",(a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)",
b.bytes / 1024 / 1024 "空闲空间(M)",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
FROM (SELECT tablespace_name, sum(bytes) bytes
FROM dba_data_files GROUP BY tablespace_name) a,
( SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
FROM dba_free_space
GROUP BY tablespace_name
) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

使用比已经从99.99%降低到69.42%,说明效果明显,方案可用。
再去查看/home,使用du -sh命令查看了/home目录大小为282GB。原来增加一个dbf文件会使得/home目录实际也增加32GB大小。
4)注意事项及所有用到的SQL
在上面的第一种解决方案里,32760m 约等于 32GB,根据最大块来算的,块计算SQL:
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1;
其它SQL语句完整贴上来如下:
---查询数据文件以及数据文件大小
select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
select username, default_tablespace, temporary_tablespace from dba_users;
--获取数据文件路径
select tablespace_name, file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
--让数据文件自动扩展
alter tablespace users add datafile '/home/oracle/oradata/users04.dbf' size 32760m autoextend on next 1024m maxsize unlimited;
--segment space management auto extent management local; 据说可以连接上一句一起执行(把上一句分号去掉即可),没执行,不知道执行效果,谨慎期间,慎用。
--把数据文件大小调整
alter database datafile '/home/oracle/oradata/users01.dbf' resize 61440M; --没试过,不知道效果
大SQL, 表本身大小,表的索引大小,表的LOB字段大小:
--大SQL,表本身大小。
--比如,索引有3个,然后汇总100M,然后表本身20M,最后的总数就是120,索引100M
select OWNER FD_OWNER,COLUMN_NAME FD_COLUMN_NAME,TABLE_NAME FD_TABLE_NAME,
case segment_name||'-' when '-' then table_name else segment_name end as FD_SEGMENT_NAME ,
SEGMENT_TYPE FD_SEGMENT_TYPE,FD_BYTES,FD_MAX_SIZE,
ROUND(FD_BYTES / 1024 / 1024) FD_MB,
ROUND(sum(FD_BYTES) over(partition by segment_type) / 1024 / 1024) FD_SEGTYPE_TOTAL_MB,
ROUND(sum(FD_BYTES) over(partition by table_name ) / 1024 / 1024) FD_TOTAL_MB
from (
--第一部分,表本身大小
select b.owner, null column_name,b.segment_name as table_name,b.partition_name as segment_name,
b.segment_type,sum(b.BYTES) FD_BYTES,sum(b.MAX_SIZE) FD_MAX_SIZE
from dba_segments b
where b.owner = 'COGLINK'
group by b.owner, b.segment_name, partition_name, b.segment_type
UNION ALL
--第二部分,表的索引大小
select a.owner, null column_name,a.table_name, b.segment_name,b.segment_type,sum(b.BYTES) FD_BYTES,sum(b.MAX_SIZE) FD_MAX_SIZE
from dba_indexes a, dba_segments b
where a.OWNER = b.owner and a.OWNER = 'COGLINK'
and a.index_name = b.segment_name group by a.owner, a.table_name, b.segment_name, b.segment_type
UNION ALL
--第三部分,如果表有LOB类型,LOB是单独存放的,包括数据和索引都分开
select a.owner,a.column_name,a.table_name,b.segment_name,b.segment_type,b.BYTES FD_BYTES,b.MAX_SIZE FD_MAX_SIZE
from dba_lobs a, dba_segments b
where a.segment_name = b.segment_name
and a.owner = 'COGLINK'
UNION ALL
select a.owner,a.column_name,a.table_name,b.segment_name,b.segment_type,b.BYTES FD_BYTES,b.MAX_SIZE FD_MAX_SIZE
from dba_lobs a, dba_segments b
where a.index_name = b.segment_name
and a.owner = 'COGLINK'
) f order by segment_type, FD_BYTES desc
oracle数据库报错ora-01653表空间扩展失败解决方案的更多相关文章
- windows下oracle数据库报错ORA-12705解决方法
转自:http://blog.sina.com.cn/s/blog_16eaf6b940102x66q.html 有个朋友,他们那边windows虚拟机重启后,数据库不能起来报错ORA-12705无法 ...
- Oracle数据库报错: ORA-29275:部分多字节字符
Oracle数据库报错: ORA-29275:部分多字节字符 就是你查出来的字符串(有汉字的)有可能会出问题, 在认为有问题的字段 用 to_nchar("字段")包起来 比如 你 ...
- Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时
Oracle 客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时 排错步骤: 1. 查看网络是否畅通: 打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...
- ORA-01653:表空间扩展失败的问题
以下内容来源于ORA-01653:表空间扩展失败的问题 今天发现,原来设备的数据表空间只有5M,已经满了,上网去找发现要进行扩展空间. 一.脚本修改方式: ----查询表空间使用情况---使用DB ...
- C#连接oracle数据库报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用
原因大概是OracleOraDb11g_home1TNSListener服务没启动的原因 步骤一.停止并重新启动OracleOraDb11g_home1TNSListener服务,试一下是否可行. 如 ...
- Oracle数据库-建库、建表空间,建用户
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来说,为了避免麻烦,可以用'Database Configuration Assistan ...
- Navicate Premium连接Oracle数据库报错
Navicat Premium连接MySQL数据库没有问题,在连接Oracle数据库的时候报错,提示:ORA-28547:connection to server failed,probable Or ...
- kettle连接oracle数据库报错,ORA-12505
报错信息: Error connecting to database: (using class oracle.jdbc.driver.OracleDriver) Listener refused t ...
- python连接oracle数据库报错"DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "解决方案
操作系统,python3.5, oracle_11, 均为64位:plsql 正常连接. 也顺利安装了cx_oracle 6.3,但是python进行连接的时候就会报错"DatabaseEr ...
随机推荐
- 学习笔记-AngularJs(十)
前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要 ...
- coursera-斯坦福-机器学习-吴恩达-笔记week4
1 神经网络的提出 线性回归和逻辑回归能很好的解决特征变量较少的问题,但对于变量数量增加的复杂非线性问题,单纯增加二次项和三次项等特征项的方法计算代价太高. 2 神经网络算法 2.1 神经元 模拟神经 ...
- html 入门 "地表最强"干货 你值得拥有
# 入门 ## 一.前端三剑客 #### html ```完成页面架构的搭建文件: .html``` #### css ```完成页面样式布局(装修)文件: .css``` #### js ```完成 ...
- [Codeforces441E]Valera and Number
Problem 给定一个数x,有p%的概率乘2,有1-p%的概率加1,问操作k次,其二进制数下末尾零的个数的期望. Solution 每次操作只会影响到最后的8位 我们用dp[i][j]表示i个操作后 ...
- Saiku登录源码追踪.(十三)
Saiku登录源码追踪呀~ >>首先我们需要debug跟踪saiku登录执行的源码信息 saiku源码的debug方式上一篇博客已有说明,这里简单介绍一下 在saiku启动脚本中添加如下命 ...
- 简单易懂的 Vue.js 基础知识 !
根 vue 实例 let viewModel = new Vue({ // 包含数据.模板.挂载元素.方法.生命周期钩子等选项 }) Hello Wrold <!-- 这是我们的 View - ...
- C#设置随机整数
JQuery var x = 5;//最大值var y = 1;//最小值var rand = parseInt(Math.random() * (x - y + 1) + y); Mvc控制器 Ra ...
- cocos2d-x js 中创建node的方法
1.精灵Sprite 一共4种创建方式 (1) 根据图片资源路径创建 1 2 3 4 //参数1:图片资源路径 var sprite1 = cc.Sprite.create("res/zif ...
- MySQL-8.0.15在Win10和Ubuntu上安装&使用
一.Windows环境下安装: 1.下载MySQL压缩包 官网地址:https://dev.mysql.com/downloads/mysql/ 点击直接下载: 2.解压到本地目录,并添加一个配置文件 ...
- Java实验6
dbq时隔这么久我总算又来更新了 这次说说一个很好玩的类,JLabel的如何改里面字的属性 label.setFont(new Font("宋体", 0 , 15)); 这个指的是 ...