ORA-39171: 作業出現可恢復的等待。

在測試系統恢復數據時報錯如下:

ORA-39171: 作業出現可恢復的等待。
ORA-01658: 無法為表空間 NNC_DATA01 中的段創建 INITIAL 區
處理對象類型 SCHEMA_EXPORT/TABLE/TABLE_DATA
ORA-39171: 作業出現可恢復的等待。
ORA-01653: 表 NC0731.SM_BUSILOG_DEFAULT 無法通過 32 (在表空間 NNC_DATA01 中) 擴展
ORA-39171: 作業出現可恢復的等待。

初步判斷是因為名為NNC_DATA01的表空間不足導致,查看對應的數據文件,發現馬上要到32G了,所以報錯。
Oracle單個數據文件超過32G后需要擴容

解決思路

  • 查看表空間使用情況等信息
SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;

一般來說,單個數據文件最大為32G,我的結果顯示其中一個表空間的數據文件已經達到32G了,所以新建用戶默認使用的是這個表空間,空間不足就會造成數據無法導入,需要更換表空間或者增加數據文件。

  • 查看用戶與表空間的關系
SQL> SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED FROM DBA_USERS WHERE ACCOUNT_STATUS = 'OPEN';

注:查詢用戶名,狀態,默認表空間,默認臨時表空間,創建日期
找到上面32G的數據文件對應的表空間,然后看這個表空間上有哪些用戶。就像這個測試系統,開發需要多個用戶,所以導致表空間不夠用。

  • 查找哪個用戶占用表空間最大
select *
from (select owner || '.' || tablespace_name name, sum(b) g
from (select owner,
t.segment_name,
t.partition_name,
round(bytes / 1024 / 1024 / 1024, 2) b,
tablespace_name
from dba_segments t)
where owner not in
('SYS', 'OUTLN', 'SYSTEM', 'TSMSYS', 'DBSNMP', 'WMSYS')
group by owner || '.' || tablespace_name)
order by name

解決方案

一、新增數據文件

SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;  
--找到爆滿的表空間以及對應的數據文件的位置。
SQL> alter tablespace NNC_DATA01 add datafile 'D:\oradata\ncdb\NNC_DATA02.DBF' size 200M  autoextend on next 50M maxsize unlimited;   
/*
新增一個數據文件到表空間,數據文件可以放到同一個系統目錄下,方便管理。
數據文件初始大小為200M,自動擴展,最大不限制,也就是最大是32G
*/

二、將備份數據恢復到新的表空間

SQL> create tablespace test_data  logging  datafile 'e:\oradata\test_data.dbf' size 1024m  autoextend on  next 200m maxsize 30000M  extent management local;
-- 創建新的表空間
SQL> create temporary tablespace test_temp tempfile 'e:\oradata\test_temp.dbf' size 1024m  autoextend on  next 200m maxsize 30000m  extent management local;
--創建新的臨時表空間
SQL> create user test123 identified by test123  default tablespace test_data  temporary tablespace test_temp;
--創建用戶,并指定表空間與臨時表空間。如果要導入數據,不要忘了授權哦。
SQL>SELECT USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME= 'TEST123';
--查看用戶表空間與臨時表空間

三、刪除爆滿表空間上之前的用戶

SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;  
--找到爆滿的表空間以及對應的數據文件的位置。
select *
from (select owner || '.' || tablespace_name name, sum(b) g
from (select owner,
t.segment_name,
t.partition_name,
round(bytes / 1024 / 1024 / 1024, 2) b,
tablespace_name
from dba_segments t)
where owner not in
('SYS', 'OUTLN', 'SYSTEM', 'TSMSYS', 'DBSNMP', 'WMSYS')
group by owner || '.' || tablespace_name)
order by name
--查看哪個用戶占用的表空間最大
SQL>  drop user test123 cascade;
--刪除用戶及用戶下的數據
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 32,010評論 2 89
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發此異常。 O...
    我想起個好名字閱讀 5,429評論 0 9
  • 點擊我領取99.99元優惠券 點擊上方藍色字體領取
    a阿郎閱讀 271評論 0 0
  • 世人笑我太瘋癲 我笑他人看不穿 不見五陵豪杰墓 無花無酒鋤作田 ------唐寅
    篤行著閱讀 470評論 0 1