说明:
要建一张表(as select好多数据)导致表空间不足,该表原本想建在USERS空间下,于是想要增加一个数据文件USER02.DBF,结果增加后还是不足,看到PDM_DATA表空间中有很多空间没有用,为了腾出空间,于是停止了windows的oracle服务,手贱的在os上直接给删了,然后启动服务后就报了ora-01033错误,在网上查了下:造成ORA-01033的原因有很多,比如断电、电脑强制重启,或者数据库文件误删等,这些导致oracle要么卡在初始化中,要么关闭了,我们要做的就是重启它。
1.启动数据库
运行cmd
第一步、sqlplus /NOLOG
第二步、SQL>connect / as sysdba
提示:已成功
第三步、SQL>shutdown normal
提示:数据库已经关闭 已经卸载数据库 ORACLE 例程已经关闭
第四步、SQL>startup mount
第五步、SQL>alter database open;
2.ORA-01110和ORA-22868
按照这个数据库能正常打开了,但是又出现了新的问题:在使用users空间下的表时报了这个错误
而且通过查询数据文件发现还是能查出user02.dbf(datafile 19)的路径,但是在系统文件中已经被删了,因为这个user02很碍眼而且时不时会报错,有没有这个时候想要重建或者删除USERS表空间。
删除USERS表空间前需要将这个表空间的数据move到其他表空间里
用管理员账号操作
(1)移动数据表到PDM_DATA下
Select 'alter table '||t.owner||'.'||t.table_name||' move tablespace PDM_DATA;'
From all_all_tables t where t.tablespace_name='USERS'
将查出的语句执行
(2)移动索引到PDM_DATA下
select 'alter index ' || owner || '.' || segment_name
|| ' rebuild tablespace PDM_DATA;' sqltext from dba_segments
where tablespace_name = 'USERS' and segment_type='INDEX';
将查出的语句执行
然后执行drop tablespace USERS,但是报错了:ORA-22868: 具有LOB 的表包含有位于不同表空间的段
于是
(3)移动LOB到PDM_DATA
select 'alter table pdm.'||table_name||
' move lob ('||column_name||' ) store as (tablespace PDM_DATA);'
from dba_lobs where tablespace_name='USERS';
将查出的语句执行
删除USERS表空间
drop tablespace USERS including contents and datafiles;
然后删除相应电脑上的数据文件