随着数据库的使用,数据文件越来越大,有没有办法将标记为free的block挤掉
相关表:
DBA_DATA_FILES
DBA_DATA_FILES
describes database files.
Column | Datatype | NULL | Description |
---|---|---|---|
FILE_NAME |
VARCHAR2(513) |
Name of the database file | |
FILE_ID |
NUMBER |
NOT NULL |
File identifier number of the database file |
TABLESPACE_NAME |
VARCHAR2(30) |
NOT NULL |
Name of the tablespace to which the file belongs |
BYTES |
NUMBER |
Size of the file in bytes | |
BLOCKS |
NUMBER |
NOT NULL |
Size of the file in Oracle blocks |
STATUS |
VARCHAR2(9) |
File status: AVAILABLE or INVALID (INVALID means that the file number is not in use, for example, a file in a tablespace that was dropped) |
|
RELATIVE_FNO |
NUMBER |
Relative file number | |
AUTOEXTENSIBLE |
VARCHAR2(3) |
Autoextensible indicator | |
MAXBYTES |
NUMBER |
Maximum file size in bytes | |
MAXBLOCKS |
NUMBER |
Maximum file size in blocks | |
INCREMENT_BY |
NUMBER |
Number of Oracle blocks used as autoextension increment | |
USER_BYTES |
NUMBER |
The size of the file available for user data. The actual size of the file minus the USER_BYTES value is used to store file related metadata. |
|
USER_BLOCKS |
NUMBER |
Number of blocks which can be used by the data | |
ONLINE_STATUS |
VARCHAR2(7) |
Online status of the file:
|
DBA_FREE_SPACE
DBA_FREE_SPACE
describes the free extents in all tablespaces in the database.
Note that if a datafile (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information. If an object has extents in an online file of the tablespace, you will see extent information about the offline datafile. However, if the object is entirely in the offline file, a query of this view will not return any records.
USER_FREE_SPACE
describes the free extents in the tablespaces accessible to the current user.
Column | Datatype | NULL | Description |
---|---|---|---|
TABLESPACE_NAME |
VARCHAR2(30) |
Name of the tablespace containing the extent | |
FILE_ID |
NUMBER |
File identifier number of the file containing the extent | |
BLOCK_ID |
NUMBER |
Starting block number of the extent | |
BYTES |
NUMBER |
Size of the extent (in bytes) --free bytes | |
BLOCKS |
NUMBER |
Size of the extent (in Oracle blocks) --free block | |
RELATIVE_FNO |
NUMBER |
Relative file number of the file containing the extent |
DBA_EXTENTS
DBA_EXTENTS
describes the extents comprising the segments in all tablespaces in the database.
Note that if a datafile (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information. If an object has extents in an online file of the tablespace, you will see extent information about the offline datafile. However, if the object is entirely in the offline file, a query of this view will not return any records.
USER_EXTENTS
describes the extents comprising the segments owned by the current user's objects. This view does not display the OWNER
, FILE_ID
, BLOCK_ID
, orRELATIVE_FNO
columns.
Column | Datatype | NULL | Description |
---|---|---|---|
OWNER |
VARCHAR2(30) |
Owner of the segment associated with the extent | |
SEGMENT_NAME |
VARCHAR2(81) |
Name of the segment associated with the extent | |
PARTITION_NAME |
VARCHAR2(30) |
Object Partition Name (Set to NULL for non-partitioned objects) | |
SEGMENT_TYPE |
VARCHAR2(18) |
Type of the segment: INDEX PARTITION, TABLE PARTITION |
|
TABLESPACE_NAME |
VARCHAR2(30) |
Name of the tablespace containing the extent | |
EXTENT_ID |
NUMBER |
Extent number in the segment | |
FILE_ID |
NUMBER |
File identifier number of the file containing the extent | |
BLOCK_ID |
NUMBER |
Starting block number of the extent | |
BYTES |
NUMBER |
Size of the extent in bytes | |
BLOCKS |
NUMBER |
Size of the extent in Oracle blocks | |
RELATIVE_FNO |
NUMBER |
Relative file number of the first extent block |
SELECT 'alter database datafile '
||chr(39)
||file_name
||chr(39)
|| ' resize '
|| ceil(hwmsize*1.2)
||'M;'
FROM
(SELECT a.file_id,
a.file_name,
a.filesize,
b.freesize,
(a.filesize-b.freesize) usedsize,
c.hwmsize,
c.hwmsize - (a.filesize-b.freesize) unsedsize_belowhwm,
a.filesize - c.hwmsize canshrinksize
FROM ( select file_id,file_name,ROUND(bytes/1024/1024) filesize
FROM dba_data_files ) a,
( select file_id,ROUND(SUM(dfs.bytes)/1024/1024) freesize
FROM dba_free_space dfs group BY file_id ) b,
( select file_id,ROUND(MAX(block_id)*8/1024) HWMsize
FROM dba_extents group BY file_id) c where a.file_id = b.file_id and a.file_id = c.file_id order BY unsedsize_belowhwm DESC
)
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\USERS_NEW' resize 5755M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\SYSTEM01.DBF' resize 4574M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\INDEX_NEW' resize 825M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\USERS01.DBF' resize 17980M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\SYSAUX01.DBF' resize 670M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\EXAMPLE01.DBF' resize 90M;
alter database datafile 'F:\ORACLE\ORADATA\PURPLE\UNDOTBS01.DBF' resize 72M;
总共释放出7G的空间出来。