详解Oracle中的隐含参数_disable_logging
注意:Oracle的隐含参数只应该在测试环境或者在OracleSupport的支持下使用。
从Oracle的系统表中,我们知道Oracle存在一个隐含参数_disable_logging可以用于禁用日志生成,这个参数显然只能用于测试目的(可以极大提高Benchmark测试的性能),禁止日志生成必然导致事务的不可恢复性,而且会导致日志文件损坏。
SQL>selectksppinm,ksppdescfromx$ksppiwhereksppinmlike'%logging'; KSPPINMKSPPDESC -------------------------------------------------- _disable_loggingDisablelogging
因为特殊的需要,对这个参数进行了一点简单测试:
1.设置参数
[oracle@jumperbdump]$sqlplus"/assysdba" SQL*Plus:Release9.2.0.4.0-ProductiononWedOct1911:01:192005 Copyright(c)1982,2002,OracleCorporation.Allrightsreserved. Connectedto: Oracle9iEnterpriseEditionRelease9.2.0.4.0-Production WiththePartitioningoption JServerRelease9.2.0.4.0-Production SQL>altersystemset"_disable_logging"=truescope=both; Systemaltered.
2.事务测试
SQL>createtabletasselect*fromdba_users; Tablecreated. SQL>selectcount(*)fromt; COUNT(*) ---------- 12 SQL>shutdownabort; ORACLEinstanceshutdown. SQL>startup ORACLEinstancestarted. TotalSystemGlobalArea97588504bytes FixedSize451864bytes VariableSize33554432bytes DatabaseBuffers62914560bytes RedoBuffers667648bytes Databasemounted. Databaseopened. SQL>selectcount(*)fromt; selectcount(*)fromt * ERRORatline1: ORA-00942:tableorviewdoesnotexist
由于未产生相应日志,数据库crash或shutdownabort之后,上一次成功完成的检查点之后变化的数据将无法恢复。
3.观察alert文件
从日志中我们可以看到在instancerecovery中,没有数据被恢复,只有成功完成的上次检查点之前数据可以被获取,之后数据都将丢失。
WedOct1920:38:382005 Beginningcrashrecoveryof1threads WedOct1920:38:382005 Startedfirstpassscan WedOct1920:38:392005 Completedfirstpassscan 0redoblocksread,0datablocksneedrecovery WedOct1920:38:392005 Startedrecoveryat Thread1:logseq2,block201,scn0.897632464 RecoveryofOnlineRedoLog:Thread1Group1Seq2Readingmem0 Mem#0errs0:/opt/oracle/oradata/conner/redo01.log WedOct1920:38:392005 Completedredoapplication WedOct1920:38:392005 Endedrecoveryat Thread1:logseq2,block201,scn0.897652465 0datablocksread,0datablockswritten,0redoblocksread Crashrecoverycompletedsuccessfully
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。