最近一段时间发现程序在晚上同步数据时会假死,程序没有输出异常信息,但是用浏览器访问后页面空白,重启后后正常了,一开始以为是程序晚上同步数据时有2万多个空指针,导致内存溢出,然后卡死,把异常数据清理后发现问题依旧。在同步数据时卡死,那么数据库也嫌疑犯之一。首先查看表空间的使用情况:
SELECT tbs 表空间名,
sum(totalM) 总共大小M,
sum(usedM) 已使用空间M,
sum(remainedM) 剩余空间M,
sum(usedM) / sum(totalM) * 100 已使用百分比,
sum(remainedM) / sum(totalM) * 100 剩余百分比
FROM (SELECT b.file_id ID,
b.tablespace_name tbs,
b.file_name name,
b.bytes / 1024 / 1024 totalM,
(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 usedM,
sum(nvl(a.bytes, 0) / 1024 / 1024) remainedM,
sum(nvl(a.bytes, 0) / (b.bytes) * 100),
(100 - (sum(nvl(a.bytes, 0)) / (b.bytes) * 100))
FROM dba_free_space a, dba_data_files b
WHERE a.file_id = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.file_id, b.bytes
ORDER BY b.tablespace_name)
GROUP BY tbs
发现表空间USERS的表空间的已使用百分比是99%.再获取用户的默认表空间:
select username, DEFAULT_TABLESPACE
from dba_users
where username = 'scott';
scott用户的默认表空间刚好是USERS,找到表空间的物理路径:
select * from dba_data_files where tablespace_name ='USERS';
那就把这个表空间进行扩展:
alter database datafile 'D:\ORACLE\PRODUCT\ORADATA\TEST\USERS01.DBF' resize 5120M;
修改USERS表空间时较慢,花了4分多钟.修改完成后再次查询表空间的使用情况,再次查询看否执行成功。