oracle表空间的管理
1、创建表空间
CREATE TABLESPACE TBS_TR_DATA
DATAFILE '/oradata/rTBS_TR_DATA_001.dbf'
SIZE 64G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ONLINE;
ALTER TABLESPACE TBS_TR_DATA
ADD DATAFILE '/oradata/rTBS_TR_DATA_002.dbf'
SIZE 64G
AUTOEXTEND OFF;
2、查询表空间的基本信息
--包含数据库中所有表空间的描述信息
SELECT * FROM DBA_TABLESPACES
--包含当前用户的表空间的描叙信息
SELECT * FROM USER_TABLESPACES
--包含从控制文件中获取的表空间名称和编号信息
SELECT * FROM V$TABLESPACE;
3、查看数据文件
--包含数据文件以及所属的表空间的描述信息
SELECT * FROM DBA_DATA_FILES
--包含临时数据文件以及所属的表空间的描述信息
SELECT * FROM DBA_TEMP_FILES
--包含从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等
SELECT * FROM V$DATAFILE
--包含所有临时数据文件的基本信息
SELECT * FROM V$TEMPFILE
4、查看表空间的使用情况
SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME,
ROUND(A.BYTES/(1024*1024*1024),2) AS "TOTAL(G)" ,
ROUND(B.BYTES/(1024*1024*1024),2) AS "USED(G)" ,
ROUND(C.BYTES/(1024*1024*1024),2) AS "FREE(G)" ,
ROUND((B.BYTES * 100) / A.BYTES,2) AS "% USED" ,
ROUND((C.BYTES * 100) / A.BYTES,2) AS "% FREE"
FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;
5、计算表空间使用情况(考虑了数据文件自动增长情况)
SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名称",
ROUND(D.AVAILB_BYTES ,2) AS "表空间大小(G)",
ROUND(D.MAX_BYTES,2) AS "最终表空间大小(G)",
ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空间(G)",
TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100,
2), '999.99') AS "使用比",
ROUND(F.USED_BYTES, 6) AS "空闲空间(G)",
F.MAX_BYTES AS "最大块(M)"
FROM (
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES,
ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
6、删除表空间
DROP TABLESPACE 表空间名 [INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]
SQL> DROP TABLESPACE URER01 INCLUDING CONTENTS;
如果在表空间中包含数据库对象,则必须在DROP TABLESPACE语句中显示的指定INCLUDING CONTENTS. 如果要再删除表空间USER的同时删除它所对应的数据文件,则可以使用下面的语句
SQL>DROP TABLESPACE USER01 INCLUDING CONTENTS AND DATAFILES;
注意:删除表空间时,CONTENTS与DATAFILES选项错位,会报如下错误:
SQL>DROP TABLESPACE TBS_STAGE_DAT INCLUDING DATAFILES AND CONTENTS
ORA-01911:contents keyword expected
7、给表空间增加数据文件
SQL> ALTER TABLESPACE TBS_TR_IND
ADD DATAFILE '/oradata/rTBS_TR_IND_002.dbf'
SIZE 32G
AUTOEXTEND OFF;
SQL> ALTER TABLESPACE TBS_EDS_DAT
ADD DATAFILE 'G:\datafile\TBS_EDS_DAT01.DBF'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 20480M;
SQL> ALTER TABLESPACE temp01
ADD TMPFILE 'D:\ORACLEDATA\temp01_02.dbf' SIZE 10M REUSE;
8、调整数据文件大小
ALTER DATABASE DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf'
RESIZE 500M;
9、删除数据文件
ALTER TABLESPACE TEST
DROP DATAFILE '/database/oracle/oradata/gsp/tbs_dm_data_002.dbf'
10、移动数据文件
1.1:连接数据库
SQL> conn sysdba/manage as sysdba
已连接。
1.2:把要移动数据文件的表空间脱机
SQL> ALTER TABLESPACE TBS_EDS_DAT OFFLINE NORMAL ;
表空间已更改。
1.3:移动物理数据文件。
1.4:重命名文件
SQL> ALTER DATABASE
RENAME FILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\WGODS\TBS_EDS_DAT.DBF'
TO
'G:\datafile\TBS_EDS_DAT.DBF';
数据库已更改。
1.5:表空间联机
SQL> ALTER TABLESPACE TBS_DM_DAT ONLINE;
表空间已更改。
1.6:如果要删除以前的数据文件,则必须先关闭数据库,手动删除文件,否则会报错。
SQL> shutdow immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 104860548 bytes
Database Buffers 499122176 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
11、移动表在表空间的物理位置
alter table t1 move;
12、清除表空间
purge tablespace 用户名;