【oracle dba】为用户c##luna所在的users表空间扩容

【需求】

在Oracle19上创建用户c##luna后,需要为其扩容以进行大表实验。

【步骤】

1.查用户所在表空间

SQL

select default_tablespace from dba_users where username=upper('c##luna')

执行:

SQL> select default_tablespace from dba_users where username=upper('c##luna');

DEFAULT_TABLESPACE
------------------------------------------------------------
USERS

 

2.看users表空间使用占比

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 and 
    D.TABLESPACE_NAME=upper('users');

执行情况:

SQL> SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
  2  D.TOT_GROOTTE_MB "表空间大小(M)",
  3  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
  4  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
  5  F.TOTAL_BYTES "空闲空间(M)",
  6  F.MAX_BYTES "最大块(M)"
  7  FROM (SELECT TABLESPACE_NAME,
  8  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
  9  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
 10  FROM SYS.DBA_FREE_SPACE
 11  GROUP BY TABLESPACE_NAME) F,
 12  (SELECT DD.TABLESPACE_NAME,
 13  ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
 14  FROM SYS.DBA_DATA_FILES DD
 15  GROUP BY DD.TABLESPACE_NAME) D
 16  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 17  and D.TABLESPACE_NAME=upper('users');

表空间名                                                     表空间大小(M)
------------------------------------------------------------ -------------
已使用空间(M) 使用比           空闲空间(M)  最大块(M)
------------- ---------------- ----------- ----------
USERS                                                                    5
         2.87   57.40%                2.13       2.13

看,建库不久,使用比已经过半了。

 

3.查数据文件所在位置

SQL:

select file_name,tablespace_name,bytes/1024/1024,maxbytes/1024/1024 from dba_data_files where tablespace_name='USERS';

执行:

SQL> select file_name,tablespace_name,bytes/1024/1024,maxbytes/1024/1024 from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME                                              BYTES/1024/1024
------------------------------------------------------------ ---------------
MAXBYTES/1024/1024
------------------
C:\ORACLE19C\ORADATA\ORCL\USERS01.DBF
USERS                                                                      5
        32767.9844

现在我们知道数据文件所在位置在C:\ORACLE19C\ORADATA\ORCL\下了。

 

4.新建一个供users表空间所用的数据文件。

SQL:

ALTER TABLESPACE USERS ADD DATAFILE 'C:\ORACLE19C\oradata\orcl\usersNewDef.dbf' size 10G autoextend on ;

执行:

SQL> ALTER TABLESPACE USERS ADD DATAFILE 'C:\ORACLE19C\oradata\orcl\usersNewDef.dbf' size 10G autoextend on ;

表空间已更改。

 

5.最后看看使用比变改善了没有。

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 and 
    D.TABLESPACE_NAME=upper('users');

执行:

SQL> SELECT
  2      UPPER(F.TABLESPACE_NAME) "表空间名",
  3      D.TOT_GROOTTE_MB "表空间大小(M)",
  4      D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
  5      TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
  6      F.TOTAL_BYTES "空闲空间(M)",
  7      F.MAX_BYTES "最大块(M)"
  8  FROM
  9  (
 10      SELECT TABLESPACE_NAME,
 11      ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
 12      ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
 13      FROM SYS.DBA_FREE_SPACE
 14      GROUP BY TABLESPACE_NAME
 15  ) F,
 16  (
 17      SELECT DD.TABLESPACE_NAME,
 18      ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
 19      FROM SYS.DBA_DATA_FILES DD
 20      GROUP BY DD.TABLESPACE_NAME
 21  ) D
 22  WHERE
 23      D.TABLESPACE_NAME = F.TABLESPACE_NAME and
 24      D.TABLESPACE_NAME=upper('users');

表空间名                                                     表空间大小(M)
------------------------------------------------------------ -------------
已使用空间(M) 使用比           空闲空间(M)  最大块(M)
------------- ---------------- ----------- ----------
USERS                                                                10245
         3.87    0.04%            10241.13       3968

 

进过一番操作下来,使用比从57.4变成0.04%了,这证明操作符合预期。

END

posted @ 2022-08-28 09:30  逆火狂飙  阅读(338)  评论(1编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东