【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