在測試系統(tǒng)恢復(fù)數(shù)據(jù)時(shí)報(bào)錯(cuò)如下:
ORA-39171: 作業(yè)出現(xiàn)可恢復(fù)的等待烙无。
ORA-01658: 無法為表空間 NNC_DATA01 中的段創(chuàng)建 INITIAL 區(qū)
處理對(duì)象類型 SCHEMA_EXPORT/TABLE/TABLE_DATA
ORA-39171: 作業(yè)出現(xiàn)可恢復(fù)的等待锋谐。
ORA-01653: 表 NC0731.SM_BUSILOG_DEFAULT 無法通過 32 (在表空間 NNC_DATA01 中) 擴(kuò)展
ORA-39171: 作業(yè)出現(xiàn)可恢復(fù)的等待遍尺。
初步判斷是因?yàn)槊麨镹NC_DATA01的表空間不足導(dǎo)致截酷,查看對(duì)應(yīng)的數(shù)據(jù)文件,發(fā)現(xiàn)馬上要到32G了乾戏,所以報(bào)錯(cuò)迂苛。
Oracle單個(gè)數(shù)據(jù)文件超過32G后需要擴(kuò)容
解決思路
- 查看表空間使用情況等信息
SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;
一般來說,單個(gè)數(shù)據(jù)文件最大為32G鼓择,我的結(jié)果顯示其中一個(gè)表空間的數(shù)據(jù)文件已經(jīng)達(dá)到32G了三幻,所以新建用戶默認(rèn)使用的是這個(gè)表空間,空間不足就會(huì)造成數(shù)據(jù)無法導(dǎo)入呐能,需要更換表空間或者增加數(shù)據(jù)文件念搬。
- 查看用戶與表空間的關(guān)系
SQL> SELECT USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED FROM DBA_USERS WHERE ACCOUNT_STATUS = 'OPEN';
注:查詢用戶名,狀態(tài)摆出,默認(rèn)表空間朗徊,默認(rèn)臨時(shí)表空間,創(chuàng)建日期
找到上面32G的數(shù)據(jù)文件對(duì)應(yīng)的表空間偎漫,然后看這個(gè)表空間上有哪些用戶爷恳。就像這個(gè)測試系統(tǒng),開發(fā)需要多個(gè)用戶象踊,所以導(dǎo)致表空間不夠用温亲。
- 查找哪個(gè)用戶占用表空間最大
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
解決方案
一、新增數(shù)據(jù)文件
SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;
--找到爆滿的表空間以及對(duì)應(yīng)的數(shù)據(jù)文件的位置杯矩。
SQL> alter tablespace NNC_DATA01 add datafile 'D:\oradata\ncdb\NNC_DATA02.DBF' size 200M autoextend on next 50M maxsize unlimited;
/*
新增一個(gè)數(shù)據(jù)文件到表空間栈虚,數(shù)據(jù)文件可以放到同一個(gè)系統(tǒng)目錄下,方便管理史隆。
數(shù)據(jù)文件初始大小為200M节芥,自動(dòng)擴(kuò)展,最大不限制,也就是最大是32G
*/
二头镊、將備份數(shù)據(jù)恢復(fù)到新的表空間
SQL> create tablespace test_data logging datafile 'e:\oradata\test_data.dbf' size 1024m autoextend on next 200m maxsize 30000M extent management local;
-- 創(chuàng)建新的表空間
SQL> create temporary tablespace test_temp tempfile 'e:\oradata\test_temp.dbf' size 1024m autoextend on next 200m maxsize 30000m extent management local;
--創(chuàng)建新的臨時(shí)表空間
SQL> create user test123 identified by test123 default tablespace test_data temporary tablespace test_temp;
--創(chuàng)建用戶蚣驼,并指定表空間與臨時(shí)表空間。如果要導(dǎo)入數(shù)據(jù)相艇,不要忘了授權(quán)哦颖杏。
SQL>SELECT USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM DBA_USERS WHERE USERNAME= 'TEST123';
--查看用戶表空間與臨時(shí)表空間
三、刪除爆滿表空間上之前的用戶
SQL> select file_name,tablespace_name,round(bytes/(1024*1024)) from dba_data_files;
--找到爆滿的表空間以及對(duì)應(yīng)的數(shù)據(jù)文件的位置坛芽。
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
--查看哪個(gè)用戶占用的表空間最大
SQL> drop user test123 cascade;
--刪除用戶及用戶下的數(shù)據(jù)