Oracle系统默认临时表空间以及redo日志文件问题处理(二)

2015-07-16 12:07:38 · 作者: · 浏览: 6
ta/JLPROJCT/redo04A.log


? ? ? ? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo02B.log


? ? ? ? 5? ? ? ? ? ? ? invalied? ? ? ? ? ? ? ? ? ? ? /software/oradata/JLPROJCT/redo05A.log


?



? ? GROUP# STATUS


---------- -------? ?


? ? ? ? 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo07B.log


? ? ? ? 4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo04B.log


? ? ? ? 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo03B.log


? ? ? ? 6? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo06B.log


? ? ? ? 8? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /software/oradata01/JLPROJCT/redo08B.log


16 rows selected.


这时候如果你后悔了,你不想移动这个8个成员了,你只需要再把它们移动回去既可以,而且数据库是打开状态的,然后切换几次日志,再查看


他们的状态就会由? invalied? 变回正常。


接下来应该做的事应该是:找个数据库空闲的时候,在数据层面删掉被移动的那8个成员,然后重新添加新的成员(换路径)。
alter database add logfile member '/backup/oradata/JLPROJCT/redo01A.log' TO GROUP 1,
删除日志组的原则:每个实例必须至少有两个日志组;当一个组处于ACTIVE或者CURRENT的状态时不可删除;删除日志组的操作只对数据库进行更改,操作系统的文件尚未删除;当删除时适用DROP LOGFILE GROUP N语句时,此时GROUP N内的所有成员都将被删除


删除日志成员的原则:当你删除一个是该组中最后一个成员的时候,你不能删除此成员;当组的状态处于current的状态时,不能删除组成员;在归档模式下,必须得归档之后才能删除;删除日志组成员的操作只对数据库进行更改,操作系统的文件尚未删除。


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 文件,每个组只要保证有一个成员正常,那数据库没有问题,可以正常提过服务。