SQL> set line 200
SQL> set pagesize 200
SQL> col name format A150
1,查看表空间使用情况SQL> SELECTUPPER(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 ORDER BY 1; 表空间名表空间大小(M)已使用空间(M) 使用比空闲空间(M) 最大块(M)——————————————- ————- ——– ———– ———-HELP5005.19 1.04%494.81494.81ORCTSTU32406.6315545.69 47.97% 16860.9472SYSAUX900689.94 76.66%210.06204.94SYSTEM11101005.31 90.57%104.6995.44UAAP500143.37 28.67%356.63290.38UNDOTBS16485331.25 5.11% 6153.753534USERS461.25394.44 85.52%66.8122.1910 rows selected SQL>
看到ORCTSTU表空间只使用了49%,使用了15G空间,而ORCTSTU表空间占据的总磁盘空间为32G,所以我们可以收缩ORCTSTU到16G左右,,这样就释放出了将近16G的空间了。
去查看下此表空间所在的数据文件,如下所示:
SQL> SELECT file_id,file_name FROM DBA_DATA_FILES D WHERED.TABLESPACE_NAME = ‘ORCTSTU’; FILE_ID FILE_NAME——————————————————————————————5D:\ORACLE\ORASERVER\ORADATA\ORCTSTUEX\POWERDES\ORCTSTU01.DBF SQL>
准备收缩到18G,执行如下报错
SQL> alter database datafile’/home/oradata/powerdes/orctstu01.dbf’ resize 1800M;
alter database datafile’/home/oradata/powerdes/orctstu01.dbf’ resize 1800M
*
ERROR at line 1:
ORA-03297: file contains used data beyondrequested RESIZE value
SQL>
参考命令:
select file_id,max(block_id+blocks-1)HWM,block_id
from dba_extents
where file_id=5
group by file_id,block_id;
我们来在这个基础上做一个简单的分析。首先得到5号数据文件中,块号最大的数据块block_id。
SQL> SELECT MAX(block_id) FROMdba_extents WHERE tablespace_name = ‘ORCTSTU’;
MAX(BLOCK_ID)
————-
4193920
SQL>
SELECT 4193920*8192/1024/1024 FROM dual;
SQL> SELECT 4193920*8192/1024/1024/1024FROM dual;
4193920*8192/1024/1024/1024
—————————
31.9970703
SQL>
计算出来大概是32G左右,再去磁盘看实际的数据文件大小
[oracle@edustu4 ~]$ ll -h/home/oradata/powerdes/orctstu01.dbf
-rw-r—–. 1 oracle oinstall 32G May 1618:06 /home/oradata/powerdes/orctstu01.dbf
[oracle@edustu4 ~]$
也是32G左右,和实际的磁盘的数据文件的大小一致,
看看这个最大4193920的数据块所在的extent对应的segment信息是否是已经被drop到的table?
select segment_name,owner from dba_extentswhere block_id=3507584;
SQL> select segment_name,owner fromdba_extents where block_id=1942656;
SEGMENT_NAME
——————————————————————————–
OWNER
——————————
RES_APPROVE_SHARE
ORCTSTU
SQL>
create tablespace ORCTSTU_2
logging
datafile ‘/home/oradata/powerdes/orctstu02.dbf’
size 50m
autoextend on
next 50m ;
alter table RES_APPROVE_SHARE move ORCTSTU_2;
ORA-14133: ALTER TABLE MOVE cannot becombined with other operations
alter table orctstu.RES_APPROVE_SHARE movetablespace ORCTSTU_2;
先建立管道目录
CREATEOR REPLACE DIRECTORY dir_dump_t1 AS’/home/oracle/expdpimpdp’;
自己喜欢的人,那就随便怎么样了,