1. 程式人生 > >oracle表空間的管理

oracle表空間的管理

連接 total 創建表空間 med oca end normal urg user

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 用戶名;

oracle表空間的管理