1. 程式人生 > >ORACLE表空間操作實例

ORACLE表空間操作實例

nds 臨時文件 acl efault home const desc 文件大小 extend

本文主要介紹oracle表空間常見的操作實例,包括創建、查詢、增加、刪除、修改。表空間和數據文件常用的數據字典和動態性能視圖包括v$dbfile、v$datafile、dba_segments、user_segments、dba_data_files、v$tablespace、dba_tablespaces、user_tablespaces。

創建表空間

1、創建數據表空間

CREATE TABLESPACE test DATAFILE /opt/oracle/oradata/test.dbf SIZE 1024M;

2、創建undo表空間

CREATE UNDO TABLESPACE undotbs DATAFILE 
/opt/oracle/oradata/undotbs.dbf SIZE 1024M;

3、創建臨時表空間

CREATE TEMPORARY TABLESPACE TEMP TEMPFILE /opt/oracle/oradata/temp.dbf SIZE 1024M;

查詢表空間

1、查詢oracle系統用戶的默認表空間和臨時表空間

select default_tablespace,temporary_tablespace from dba_users where username = USER;

2、查看系統當前默認的數據表空間和臨時表空間

select * from dba_properties where property_name like 
DEFAULT% ; #查詢 alter database default tablespace DATATBS2; #修改默認數據表空間 alter database default temporary tablespace TEMP2; #修改默認臨時表空間

3、查看所有表空間、數據文件及表空間的數據文件

select * from v$datafile; #查看數據文件
select * from v$tempfile; #查看臨時文件
select * from v$tablespace; #查詢所有表空間
select file_name,tablespace_name from
dba_data_files; #查看表空間對應的數據文件 select sum(d.bytes)/1024/1024/1024 ||G as total_bytes,d.tablespace_name from dba_datafiles d where d.tablespace_name = UNDOTBS group by d.tablespace_name; #查看表空間文件大小 select bytes/1024/1024/1024 as "Size(G)",name from v$tempfile order by bytes; #查看臨時文件大小

4、查看用戶表占用空間大小

#USER_SEGMENTS
SELECT SEGMENT_NAME TABLE_NAME,SUM(BYTES)/(1024*1024)   "TABLE_SIZE[MB]"
FROM USER_SEGMENTS
WHERE  SEGMENT_TYPE=TABLE AND SEGMENT_NAME=TABLE_NAME
GROUP BY SEGMENT_NAME;
 
#DBA_SEGMENTS,shell編程中常用
SELECT SEGMENT_NAME  TABLE_NAME,SUM(BYTES)/(1024*1024)  "TABLE_SIZE[MB]"
FROM DBA_SEGMENTS
WHERE  SEGMENT_TYPE=TABLE AND SEGMENT_NAME=TABLE_NAME
GROUP BY SEGMENT_NAME;

5、查詢單張表占用空間大小

select segment_name,bytes from dba_segments where segment_name = TABLE_NAME and owner = USER;

6、查詢所有用戶表占用空間的前十名

select * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 10;

7、查詢表空間使用情況

select total.tablespace_name, 
round(total.MB, 2) as Total_MB, 
round(total.MB - free.MB, 2) as Used_MB, 
round((1 - free.MB / total.MB) * 100, 2) || % as Used_Pct 
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB 
from dba_free_space 
group by tablespace_name) free, 
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB 
from dba_data_files 
group by tablespace_name) total 
where free.tablespace_name = total.tablespace_name;

8、查詢表空間總大小

select tablespace_name, sum(bytes) / 1024 / 1024 as MB 
from dba_data_files 
group by tablespace_name; 

9、查詢表空間剩余大小

select tablespace_name, 
count(*) as extends, 
round(sum(bytes) / 1024 / 1024, 2) as MB, 
sum(blocks) as blocks 
from dba_free_space 
group by tablespace_name; 

修改表空間狀態

SELECT TABLESPACE_NAME,BLOCK_SIEZE,STATUS FROM DBA_TABLESPACE; #查看表空間狀態
SLEECT NAME,BLOKC_SIZE,STATUS FROM V$DATAFILE; #查看數據文件狀態
ALTER TABLESPACE DATATBS OFFLINE; #使表空間脫機 
ALTER TABLESPACE DATATBS OFFLINE FOR RECOVER;  #如果是意外刪除了數據文件,則必須帶有RECOVER選項
ALTER TABLESPACE DATATBS ONLINE; #使表空間聯機
ALTER DATABASE DATAFILE 3 OFFLINE; #使數據文件脫機 
ALTER DATABASE DATAFILE 3 ONLINE; #使數據文件聯機 
ALTER TABLESPACE DATATBS READ WRITE; #使表空間可讀寫

擴展表空間

SQL> alter tablespace tablespacename add datafile /home/oracle/add_tablespacename.dbf size 1024M; #增加數據文件方式,不允許自動增長
SQL> alter tablespace tablespacename add datafile /home/oracle/add_tablespacename.dbf size 1024M autoextend on next 5M maxsize 2048M; #增加數據文件方式且允許自動增長
SQL> alter database datafile /home/oracle/tablespace.dbf autoextend on next 5M maxsize 2048M; #允許已存在的數據文件自動擴展
SQL> alter database datafile /home/oracle/tablespace.dbf resize 2048M; # 改變當前數據文件大小

#調整臨時表空間文件
SQL> alter tablespace temp add tempfile /home/oracle/temp2.dbf size 2048M; #擴展臨時表空間大小,默認autoextend off
SQL> alter tablespace temp add tempfile /home/oracle/temp2.dbf size 1024M antoextend on next 128M maxsize 2048M; #擴展臨時表空間大小
SQL> alter database tempfile /home/oracle/temp.dbf resize 2048M;

刪除表空間

DROP TABLESPACE DATATBS INCLUDING CONTENTS AND DATAFILES; 

說明:including contents 字句用來刪除段,and datafiles 字句用來刪除數據文件,cascade constraints 字句用來刪除所有的引用完整性約束

相關實例

1、移動表空間數據文件

SQL> select tablespace_name,file_name from dba_data_files where file_name=/opt/oracle/oradata/datatbs.dbf; 
SQL> alter tablespace datatbs offline; 
SQL> host move /opt/oracle/oradata/datatbs.dbf /home/oracle/datatbs.dbf; 
SQL> alter tablespace datatbs rename datafile /opt/oracle/oradata/datatbs.dbf to /home/oracle/datatbs.dbf; 
SQL> alter tablespace datatbs online; 

ORACLE表空間操作實例