热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

修改oracle数据文件大小

我们在136上的oracle数据库进行压力测试时,发现数据库的数据文件占用物理空间达到20多个G,但是在我们清掉各个表的数据后(truncate掉各个日志表),发现数据库实际数据占用的空间只有20多M,但物理文件仍然20多...SyntaxHighlighter.all();

我们在136上的oracle数据库进行压力测试时,发现数据库的数据文件占用物理空间达到20多个G,但是在我们清掉各个表的数据后(truncate掉各个日志表),发现数据库实际数据占用的空间只有20多M,但物理文件仍然20多G。 
经查资料,这个是oracle的表和表空间的“高水位”问题造成的,解决方案如下: 
 
前提知识: 
1. Oracle数据库中的物理存储空间是以块(segment)为单位的 
2. 修改数据库表空间大小的语句: 
ALTER DATABASE DATAFILE 'D:\ORADATA\ECSS20' RESIZE 206M 
但是直接运行该语句的话会报如下错误: 
Failed to commit: ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据 
 
解决方案(以136上的ECSS20表空间为例): 
1. 查询oracle数据文件及其编号。SQL语句如下 
select file#,name from v$datafile;  www.2cto.com  
查询出数据库的所有数据文件,其中包含如下,正是达到20多G的数据文件 
     FILE# NAME 
------------------------------------------------------------------------------------------ 
     6 D:\ORADATA\ECSS20 
2. 查找该数据文件的最大块号。语句如下: 
select max(block_id) from dba_extents where file_id=6; 
查询结果如下: 
MAX(BLOCK_ID) 
------------- 
       534785 
3. 计算该表空间目前实际占用的空间(不是物理文件的大小) 
显示每个数据块的大小。语句如下: 
show parameter db_block_size; 
结果为8192,就是8K。 
然后计算所有数据块占用的物理空间(拿计算器计算也一样) 
select 534785*8/1024 from dual; 
结果为4178.00781M,就是4G多 
4. 然后我们知道目前用了4G多,我们就可以把数据文件大小Resize到4G多一点 
ALTER DATABASE DATAFILE 'D:\ORADATA\ECSS20' RESIZE 4200M; 
数据库已更改。正常。 
到此为止,实际数据文件的大小就由20多G到4G多了。 
5. 继续往下走,因为我们实际数据占用了几十M,但数据文件还有4G多,还是我们把之前的表truncate掉后才能得到的。现在查一下占用最大块(segment 534785)的是什么。语句如下: 
select distinct owner, segment_name, segment_type,tablespace_name from dba_extents where file_id =6 and block_id=534785;   www.2cto.com  
查到的结果如下: 
OWNER SEGMENT_NAME SEGMENT_TYPE       TABLESPACE_NAME 
------------------------------------------------------------------------------------------------------ 
AJITA BIZTALKINGINFO TABLE             ECSS 
说明目前占用最大块的对象是表BIZTALKINGINFO 
6. 把表挪动一下,把表从当前表空间转移到了另外一个表空间(要已经存在的),语句如下: 
alter table biztalkinginfo move tablespace ECSS_LUCIFER; 
再次查询物理文件中的最大块号(步骤2),本次查询结果为534761,结果已经变小了,再查询该块的数据时BizTalkingInfo的主键。 
7. 分析可知,在我们数据表已经插入大量数据后,才建表BizTalkingInfo,然后该表占用的块就偏大。然后我们resize数据文件时就不能小于该块。最简单的办法是删掉该表相关的东西,然后重建即可。当然也有比较复杂的办法可以办到。 
8. 有一个结论就是:建表一般要放在数据表初始化之前进行,最好不要再初始化了大量数据,尤其是日志数据后再建表。 
 
 
 
作者 Ajita

推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文通过一系列实验,探讨了Oracle 11g数据库中密码错误验证延迟特性对用户登录速度的影响。实验旨在验证当某个用户因输入错误密码而触发延迟时,是否会影响其他用户的正常登录速度。 ... [详细]
  • SQL查询与事务管理:深入解析
    本文详细介绍了SQL查询的基本结构和高级特性,包括选择、分组查询以及权限控制等内容,并探讨了事务管理中的并发控制策略,旨在为数据库管理员和开发人员提供实用指导。 ... [详细]
  • PHP 图形函数中实现汉字显示的方法
    本文详细介绍了如何在 PHP 的图形函数中正确显示汉字,包括具体的步骤和注意事项,适合初学者和有一定基础的开发者阅读。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • 面对众多的数据分析工具,如何选择最适合自己的那一个?对于初学者而言,了解并掌握几种核心工具是快速入门的关键。本文将从数据处理的不同阶段出发,推荐三种广泛使用的数据分析工具。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文详细介绍了如何使用SQL*Plus连接Oracle数据库以及使用MySQL客户端连接MySQL数据库的方法,包括基本命令和具体操作步骤。 ... [详细]
author-avatar
兴霖先玲广_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有