Oracle / 数据库

Oracle表空间扩容

浅时光 · 3月2日 · 2020年 18946次已读
  • 如果表空间满了后,会出现各种问题,比如会使expdp进行定时备文章来源(Source):https://www.dqzboy.com份的任务失败,线上所关联业务无法正常使用等

一、表空间容量指标查询

[[email protected] ~]# su - oracle
[[email protected] ~]$ sqlplus "/as sysdba"
SQL> SELECT TABLESPACE_NAME "表空间",
       To_char(Round(BYTES / 1024, 2), '99990.00')
       || ''           "实有",
       To_char(Round(FREE / 1024, 2), '99990.00')
       || 'G'          "现有",
       To_char(Round(( BYTES - FREE ) / 1024, 2), '99990.00')
       || 'G'          "使用",
       To_char(Round(10000 * USED / BYTES) / 100, '99990.00')
       || '%'          "比例"
FROM   (SELECT A.TABLESPACE_NAME                             TABLESPACE_NAME,
               Floor(A.BYTES / ( 1024 * 1024 ))              BYTES,
               Floor(B.FREE / ( 1024 * 1024 ))               FREE,
               Floor(( A.BYTES - B.FREE ) / ( 1024 * 1024 )) USED
        FROM   (SELECT TABLESPACE_NAME TABLESPACE_NAME,
                       Sum(BYTES)      BYTES
                FROM   DBA_DATA_FILES
                GROUP  BY TABLESPACE_NAME) A,
               (SELECT TABLESPACE_NAME TABLESPACE_NAME,
                       Sum(BYTES)      FREE
                FROM   DBA_FREE_SPACE
                GROUP  BY TABLESPACE_NAME) B
        WHERE  A.TABLESPACE_NAME = B.TABLESPACE_NAME)
--WHERE TABLESPACE_NAME LIKE 'SYS%' --这一句用于指定表空间名称
ORDER  BY Floor(10000 * USED / BYTES) DESC;
Oracle表空间扩容-浅时光博客

二、表空间文件使用信息

SQL> select mAX(B.file_id) id,
B.TABLESPACE_NAME 表空间,
B.FILE_NAME 物理文件名,
B.BYTES / 1024 / 1024 大小M,
(B.BYTES - SUM(NVL(A.BYTES, 0))) / 1024 / 1024 已使用M,
SUBSTR((B.BYTES - SUM(NVL(A.BYTES, 0))) / (B.BYTES) * 100, 1, 5) 利用率
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.BYTES
ORDER BY B.TABLESPACE_NAME;
Oracle表空间扩容-浅时光博客

三、查看用户表空间信息

  • 注意:用户名称一定大写
SQL> select username,default_tablespace from dba_users where username='SYSTEM';

USERNAME		       DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYSTEM			       SYSTEM
文章来源(Source):https://www.dqzboy.com

四、查看表空间物理文件

SQL> select file#,name from v$datafile;
Oracle表空间扩容-浅时光博客
  • 第一步的SQL语句中已经可以看到对应用户表空的详细信息了,这里再次查询确认下;接下来针对要扩容的表空间进行扩容

五、进行表空间扩容操作文章来源(Source):https://www.dqzboy.com

方式1:手工改变数据文件大小

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/system01.dbf' RESIZE 2048M;
  • 注意:system01.dbf为已经存在数据库中的文件,现在是在该文件的基础上改变文件的大小,路径一定写成自己查询出来的,大文章来源(Source):https://www.dqzboy.com小根据自己服文章来源(Source):https://www.dqzboy.com务器的实际情况添加
Oracle表空间扩容-浅时光博客
  • 然后通过上面的查询语句再次查看表空间大小是否更改成功
Oracle表空间扩容-浅时光博客

方式2:添加表空间数据文件

SQL> alter tablespace SYSTEM add datafile '/u01/app/oracle/oradata/orcl/system02.dbf' size 128M;
  • 注意:system02.dbf为新添加的数文章来源(Source):https://www.dqzboy.com据文件,SYSTEM是要扩容的用户表空间名称; 路径一定写成自己文章来源(Source):https://www.dqzboy.com查询出来的
  • 大小单位一定要写对
Oracle表空间扩容-浅时光博客

方式3:表空间文件自动扩容

1、查看文章来源(Source):https://www.dqzboy.com表空间是否为自动扩容

SQL> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'SYSTEM';
  • 注意:SYSTEM为查看的文章来源(Source):https://www.dqzboy.com用户表空间名称

2、开启对应表空间文件自动扩容

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/system02.dbf' autoextend on;
Oracle表空间扩容-浅时光博客
  • 注意:这里的system02.db文章来源(Source):https://www.dqzboy.comf文件为需要开启自动扩容的用户表空间名称,根据自己的实际查询到的情况更改为自己的

3、关闭对应表空间文件自动扩容

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/system02.dbf' autoextend off;
  • 注意:这里的system02.dbf文件为需要关闭自动扩容的用户表空间名称,根据自己的实际查询到的情况更改为自己的
Oracle表空间扩容-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.560 秒 | 查询 110 次 | 内存 18.62 MB