ALTER DATABASE DROP LOGFILE MEMBER '/software/oradata/JLPROJCT/redo05A.log';
当我知道是因为临时文件造成这个问题后,我想着把临时文件删掉,然后从新添加一个临时文件:主要思想是,oracle必须存在一个默认的临时表空间,缺省临时表空间的数据文件不能删除,先建立一个临时表空间temp1,并将其默认,然后删除掉temp临时表空间,再建立temp临时表空间,指定temp为默认临时表空间,最后将temp1临时表空间删除掉。 ##改变系统默认临时表空间后,原来的某个用户默认的临时表空间也会随之改变。
具体过程:
1.CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/opt/oracle/oradata/orcl/temp.dbf' SIZE 1024 m
AUTOEXTEND ON NEXT 10m MAXSIZE UNLIMITED;
2.将新建立的临时表空间temp1设置成系统默认临时表空间。
SQL> alter database default tablespace test1;
3.查看oracle的默认临时表空间
SQL> select * from database_properties;
SQL> select PROPERTY_NAME , PROPERTY_VALUE from database_properties;
PROPERTY_NAME PROPERTY_VALUE
-------------------------------------------------------------------------------------------------------------
DICT.BASE 2
DEFAULT_TEMP_TABLESPACE TEMP1
DEFAULT_PERMANENT_TABLESPACE USERS
4,删除原来的temp临时表空间。 删除临时表空间的一个数据文件:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;
删除临时表空间(彻底删除):
SQL> drop tablespace temp including contents and datafiles cascade constraints;
总结:临时表空间的损坏对数据库业务的影响最小, 在数据库没有进行order by、子查询、group by、distinct等需要消耗临时表空间的语句(而且要比较大才行,小的话就直接用pga的SORT_AREA区了) 时,丢失临时表空间,几乎对业务没有影响,并且,重启数据库后,临时表空间会自动重建
如果只是想不让默认临时表空间的一个文件占用空间位置,你可以直接再物理从面删除对应文件,即可,前提你这个临时表空间还有另一个临时文件。
alter tablespace temp drop tempfile '/software/oradata/JLPROJCT/temp02.dbf' 会导致该文件offlione 但是
select * from dba_users where temporary_tablespace = 'TEMP'; 还能查到
对于redo.log 文件,每个组只要保证有一个成员正常,那数据库没有问题,可以正常提过服务。