表空間不足的解決方法( )


一、出現原因:表空間不夠

 1、查看有哪些表空間及特定表空間所包含的表

SELECT * FROM DBA_TABLESPACES;  --查看有哪些表空間
SELECT * FROM DBA_TABLES WHERE TABLESPACE_NAME='CHENMU';  --查看CHENMU表空間有哪些表
SELECT USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM DBA_USERS; --查看用戶所屬的默認表空間、臨時表空間

基本的表空間有SYSTEM、SYSAUX(輔助表空間)、USERS、UNDOTBS1(回滾表空間)、TEMP(臨時表空間,保存數據庫排序,分組時產生的臨時數據)

2、查看數據文件以及所屬表空間的相關信息

SELECT * FROM DBA_DATA_FILES;  --查看數據文件信息
SELECT * FROM DBA_TEMP_FILES;  --查看臨時數據文件信息
SELECT * FROM DBA_FREE_SPACE; --查看表空間剩余空間,每段剩余空間都會有一條記錄,如果一個表空間記錄過多說明碎片過多
--DBA_DATA_FILES
FILE_NAME 數據文件的名稱,物理文件存放地址 TABLESPACE_NAME 數據文件所屬的表空間 BYTES 文件的字節大小 BLOCKS 文件的塊大小 STATUS 文件的狀態,有效或無效 AUTOEXTENSIBLE 是否自動擴展 MAXBYTES 最大自動擴展字節數 MAXBLOCKS 最大自動擴展塊數 INCREMENT_BY 默認自動增量
USER_BYTES 有用的字節大小
USER_BLOCKS 有用的塊大小

 

3、查詢表空間使用情況

select 
b.tablespace_name  --表空間名
,b.m_bytes  --表空間大小
,b.m_bytes-nvl(a.mbytes_free,0) used  --已使用空間
,nvl(a.mbytes_free,0) free --剩余空間
,round(((b.m_bytes-nvl(a.mbytes_free,0))/b.m_bytes),2)*100||'%' pct_used --使用率
from
(select sum(bytes)/(1024*1024) mbytes_free,max(bytes)/(1024*1024) largest,tablespace_name
from sys.dba_free_space group by tablespace_name)a,
(select sum(bytes)/(1024*1024) m_bytes,sum(maxbytes)/(1024*1024) mbytes_max,tablespace_name 
from sys.dba_data_files group by tablespace_name
union all
select sum(bytes)/(1024*1024) m_bytes,sum(maxbytes)/(1024*1024) mbytes_max,tablespace_name 
from sys.dba_temp_files group by tablespace_name)b
where a.tablespace_name (+)= b.tablespace_name order by a.tablespace_name asc

 

二、解決方法:增加表空間或收縮對象

1、給表空間增加數據文件並自動增長

ALTER TABLESPACE TEST ADD DATAFILE '/u01/app/oracle/oradata/CHENMU/TEST02.DBF' SIZE 50M AUTOEXTEND ON;

2、允許已存在的數據文件自動增長

ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/CHENMU/TEST.DBF' AUTOEXTEND ON;

3、修改數據文件大小

ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/CHENMU/TEST.dbf' RESIZE 200M;

4、收縮對象

段的收縮:高位線下移,返回空間給表空間(壓縮沒有返回),將數據遷移到段后面空閑的地方,所以需要行遷移。提高性能和空間使用率,保留索引,無觸發器觸發。

select table_name,row_movement from user_tables;  //檢查行遷移功能是否開啟
alter table employees enable row movement;  //打開行遷移

alter table employees shrink space compact;  //將比較空的數據放在同一塊,但是水位線不變
alter table employees shrink space;  //將比較空的數據放在同一塊,但是水位線改變

表的壓縮(表超過255列不建議使用):basic compression,基本壓縮,將行里面的空格去掉,適用於Direct-Path insert(繞過數據緩存,通過組織塊直接存),壓縮10倍左右,用在DSS;advanced row compression常用在DML,壓縮在2-4倍,用在OLTP、DSS,不是插入一行就壓縮一行,而是數據快到pctfree臨界點時觸發壓縮機制。HWM(High water mark)標記歷史用過了多少塊,不一定有數據,但是每次掃描表的時候都是從高水位線開始往下掃描。Direct-Path insert每次插入數據不查找高水位線下面空閑的塊,而是直接從高水位線上面插入。

 

三、創建表空間

CREATE TABLESPACE TEST DATAFILE '/u01/app/oracle/oradata/TEST.DBF'
SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ONLINE;

參考連接1

四、表空間其他操作

1、遷移數據文件

ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/TEST.DBF' TO '/u01/app/oracle/oradata/CHENMU/test.dbf';  //把沒在CHENMU里的數據文件遷移到該文件夾下,在12c以前遷移數據文件要先offline,12c以后可以move

2、重命名表空間

ALTER TABLESPACE hr_temp RENAME TO test_temp;

3、刪除表空間

drop tablespace test;  //這樣刪除表空間,數據文件還是存在,如果以后創建同名的表空間,該數據文件自動歸類到該表空間里
drop tablespace test including contents;  //刪除表空間和表空間里的對象,經過創建默認表空間和臨時表空間並指定給用戶test,在里面創建一個表后執行該語句,test用戶還存在也還可以連接,但是創建的表不存在了,也不能創建表了
drop tablespace test including contents and datafiles;  //刪除表空間、對象以及數據文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM