千家信息网

19_Oracle_Admin_调整表空间的大小

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,Oracle数据库的存储设置可以分为三级:在全局范围内设置;在表空间层面设置;在segment层面设置。随着数据的增长,有的表空间可能已经快用完了;有的表空间则可能长期闲置,这就需要对表空间的大小进行
千家信息网最后更新 2025年11月09日19_Oracle_Admin_调整表空间的大小

Oracle数据库的存储设置可以分为三级:在全局范围内设置;在表空间层面设置;在segment层面设置。

随着数据的增长,有的表空间可能已经快用完了;有的表空间则可能长期闲置,这就需要对表空间的大小进行调整,其方式主要有以下几种:

1. 设置为自动增长; 2. 使用ALTER命令手动调整;3. 通过增加Datafile来扩充表空间; 4. 直接增加表空间

ALTERR TABLESPACE的方式是针对datadictionary里的修改,不值得推荐,如有兴趣可以查阅联机文档中的相关内容。

一、自动增长,使用AUTOEXTEND

只能自动增大,可以在创建表空间或创建数据库时设定,凡是有DATAFILE的语句,都可以设定NEXTMAXSIZE值。

DBA_DATA_FILES中存储了tablespace的体积

DBA_FREE_SPACE存储了已经用掉的tablespace的体积

/*演示设定表空间自动增长*/

============查询剩余表空间============

[oracle@localhostnotes]$ vim tablespace_usage.sql

SELECT a.tablespace_name, a.bytes bytes_used, b.largest, round(((a.bytes- b.bytes)/a.bytes)*100,2) percent_usedFROM(SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BYtablespace_name) a,(SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest FROMdba_free_space GROUP BY tablespace_name) bWHERE a.tablespace_name = b.tablespace_nameORDER BY ((a.bytes - b.bytes) / a.bytes) DESC; -- 数据库中并没有直接提供剩余表空间大小的表和相关数值,-- 所以可以通过网络搜索一些剩余表空间的query语句


SQL> @notes/tablespace_usage.sql

TABLESPACE_NAME               BYTES_USED    LARGEST PERCENT_USED------------------------------ ---------- ---------- ------------SYSTEM                         723517440    3145728        99.52SYSAUX                         671088640   34603008        94.73USERS                            5242880     458752        88.75EXAMPLE                        104857600   19726336        78.44UNDOTBS1                        57671680   29360128        32.27WILEY                           20971520   19660800         5.63-- 可以看到wiley这个表空间还有比较多的剩余空间-- 而SYSTEM 和SYSAUX等表空间已经快用完了,因此需要对其进行扩容 6 rows selected.

=====wiley表空间扩容======

SQL> alter tablespace wiley add datafile

2 '/oracle/oradata/orcl/wiley2.dbf' size 20M

3 autoextend on next 10M maxsize100M;

 Tablespace altered.

=======再次查看剩余表空间=====

SQL> @notes/tablespace_usage.sql

TABLESPACE_NAME                BYTES_USED    LARGEST PERCENT_USED------------------------------ ---------- ----------------------SYSTEM                          723517440    3145728        99.52SYSAUX                          671088640   34603008        94.73USERS                             5242880     458752        88.75EXAMPLE                         104857600   19726336        78.44UNDOTBS1                        57671680   29360128        32.27WILEY                            41943040   19922944         5.31-- 可以看得表空间wiley的体积增加了20M 6 rows selected.

======查看表空间的autoextend属性是否为enable=====

SQL> desc dba_data_files;

 Name                                      Null?   Type ------------------------------------------------- -------------------- FILE_NAME                                         VARCHAR2(513) FILE_ID                                           NUMBER TABLESPACE_NAME                                    VARCHAR2(30) BYTES                                             NUMBER BLOCKS                                            NUMBER STATUS                                            VARCHAR2(9) RELATIVE_FNO                                       NUMBER AUTOEXTENSIBLE                                    VARCHAR2(3)-- 表明是否可以增长 MAXBYTES                                          NUMBER MAXBLOCKS                                         NUMBER INCREMENT_BY                                       NUMBER USER_BYTES                                         NUMBER USER_BLOCKS                                        NUMBER ONLINE_STATUS                                     VARCHAR2(7)

SQL>col FILE_NAME format a40

SQL>col TABLESPACE_NAME format a20

SQL>select file_name, tablespace_name, autoextensible from dba_data_files;

 FILE_NAME                               TABLESPACE_NAME      AUT---------------------------------------- -------------------- ---/oracle/oradata/orcl/users01.dbf        USERS                YES/oracle/oradata/orcl/undotbs01.dbf      UNDOTBS1             YES/oracle/oradata/orcl/sysaux01.dbf       SYSAUX               YES/oracle/oradata/orcl/system01.dbf       SYSTEM               YES/oracle/oradata/orcl/example01.dbf      EXAMPLE              YES/oracle/oradata/orcl/mickey01.dbf       MICKEY               NO/oracle/oradata/orcl/wiley.dbf          WILEY                NO-- 表空间wiley的第一个data file wiley不能自动增长的/oracle/oradata/orcl/wiley2.dbf         WILEY                YES-- 表空间wiley的第二个data file wiley2 可以自动增长 8 rows selected.

======将原有设为不自动增长的datafile设为自动增长=======

SQL> alter database datafile

2 '/oracle/oradata/orcl/wiley.dbf'

3 autoextend on next 10M maxsize100M;

Database altered.

SQL> select file_name, tablespace_name,autoextensible from dba_data_files;

 FILE_NAME                               TABLESPACE_NAME      AUT------------------------------------------------------------ ---/oracle/oradata/orcl/users01.dbf         USERS                YES/oracle/oradata/orcl/undotbs01.dbf       UNDOTBS1             YES/oracle/oradata/orcl/sysaux01.dbf        SYSAUX               YES/oracle/oradata/orcl/system01.dbf        SYSTEM               YES/oracle/oradata/orcl/example01.dbf       EXAMPLE              YES/oracle/oradata/orcl/mickey01.dbf        MICKEY               NO/oracle/oradata/orcl/wiley.dbf           WILEY                YES-- 已经更改为自动增长了。/oracle/oradata/orcl/wiley2.dbf          WILEY                YES 8 rows selected.

二、使用ALTER 命令来手动调整;

如果一个数据文件原来使用了100M,现在将其resize200M,是可行的;但如果一个数据文件原来已经使用了300M,再将其resize200M,则会失败。

/*演示使用ALTER命令手动调整表空间*/

=======查询现有表空间信息=======

SQL> select file_name, tablespace_name,bytes from dba_data_files;

 FILE_NAME                               TABLESPACE_NAME           BYTES------------------------------------------------------------ ----------/oracle/oradata/orcl/users01.dbf        USERS                   5242880/oracle/oradata/orcl/undotbs01.dbf      UNDOTBS1               57671680/oracle/oradata/orcl/sysaux01.dbf       SYSAUX                587202560/oracle/oradata/orcl/system01.dbf       SYSTEM                713031680/oracle/oradata/orcl/example01.dbf      EXAMPLE               104857600/oracle/oradata/orcl/mickey01.dbf       MICKEY                 20971520/oracle/oradata/orcl/wiley.dbf          WILEY                  20971520/oracle/oradata/orcl/wiley2.dbf         WILEY                  20971520 8 rows selected.

注意,临时表空间的数据文件信息储存在dba_temp_files这个表中。

======调整表空间wiley的数据文件wiley210M======

SQL> alter database datafile

2 '/oracle/oradata/orcl/wiley2.dbf'

3 resize 10M;

Database altered.

SQL> select file_name, tablespace_name,bytes from dba_data_files;

FILE_NAME                                TABLESPACE_NAME           BYTES------------------------------------------------------------ ----------/oracle/oradata/orcl/users01.dbf        USERS                   5242880/oracle/oradata/orcl/undotbs01.dbf      UNDOTBS1               57671680/oracle/oradata/orcl/sysaux01.dbf       SYSAUX                671088640/oracle/oradata/orcl/system01.dbf       SYSTEM                723517440/oracle/oradata/orcl/example01.dbf      EXAMPLE               104857600/oracle/oradata/orcl/wiley.dbf          WILEY                  20971520/oracle/oradata/orcl/wiley2.dbf         WILEY                  10485760--  数据文件wiley2的大小已经调整为10M了 7 rows selected.

注意,将data file的体积调小在很多情况下会失败。

SQL> alter database datafile

2 '/oracle/oradata/orcl/example01.dbf'

3 resize 10M;

alter database datafile*ERROR at line 1:ORA-03297: file contains used data beyond requested RESIZEvalue-- 提示调整的体积小于现有文件大小。


三、通过增加数据文件的方式来扩充表空间。

通常情况下1010Gdata file组成的磁盘比起一个100Gdata file性能更优,因为100G的磁盘不能实现并发。

增加data file使用的是ALTER TABLESPACE,而不是ALTER DATABASE,建议在实际操作之前,先查询联机文档。

四、直接增加一个新的表空间。

在调整表空间的体积之前,可以先查询一下表空间的大小。表空间实际上是数据库内部的逻辑概念,操作系统无法通过具体的命令来查看其体,但可以通过查询数据字典来统计其使用的百分比。

在联机文档REFERENCE中查询数据字典的相关章节,可以获取表空间的信息。

直接创建表空间的方法前文中已经介绍过了,此处不加赘述。


空间 数据 增长 调整 文件 体积 查询 大小 剩余 命令 数据库 调整表 信息 手动 文档 方式 存储 可以通过 字典 完了 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 松江区品牌软件开发定制哪个好 寿光市网络安全科人员 软件开发作为实收资本 机架式服务器的优势 站约层面网络安全是对 梦幻西游手游风虎云龙服务器 智能化互联网科技巨头 人们对于网络安全的看法 泉州万凯维互联网科技有限公司 软件开发是远技术还是选行业 ssh登录管理服务器 采矿数据库 广州网络数据库维护联系方式 北京分享在线网络技术 怀旧服服务器地图分布图 怎样将员工照片上传服务器 委托软件开发费用会计分录 全球文件数据库 单位网络安全应急演练 漳州网络安全与信息化大会 天鹅座山东互联网科技有限公司 天地劫安卓ios不同服务器 中国全球投资追踪数据库怎么登陆 三亚欢成网络技术 网络安全名词大替换佛教用语 学生请假系统与数据库 javai连接数据库的地址 什么是软件定义网络技术利好 软件开发有哪些板块 软件开发交易用什么付款方式
0