仓酷云

标题: MSSQL网页编程之利用跟踪事务10046 [打印本页]

作者: 金色的骷髅    时间: 2015-1-16 22:40
标题: MSSQL网页编程之利用跟踪事务10046
这类操作的执行过程是,1)按照新的表定义建立一个临时表tmpa,2)将原表数据拷贝到临时表,3)将原始表改名tmpb,4)将tmpa改名为原表名,5)将tmpb删除。
良多时分,对数据库举行功能诊断可使用SQL跟踪的办法,把一些信息纪录在trace文件里今后剖析。一样平常情形下我们能够经由过程初始化参数SQL_TRACE=TRUE来设置SQL跟踪。















我们也能够经由过程设置10046事务来举行SQL跟踪,而且能够设置分歧的跟踪级别,比利用SQL_TRACE取得更多的信息。















Level0停用SQL跟踪,相称于SQL_TRACE=FALSE







Level1尺度SQL跟踪,相称于SQL_TRACE=TRUE







Level4在level1的基本上增添绑定变量的信息







Level8在level1的基本上增添守候事务的信息







Level12在level1的基本上增添绑定变量和守候事务的信息















10046事务不仅能够跟踪用户会话(trace文件位于USER_DUMP_DEST),也能够跟踪background历程(trace文件位于BACKGROUND_DUMP_DEST)。trace文件的巨细决意于4个要素:跟踪级别,跟踪时长,会话的举动级别和MAX_DUMP_FILE_SIZE参数。















启用跟踪事务10046















1.在全局设置















修正初始化参数







EVENT="10046tracenamecontextforever,level8"















2.在以后session设置















altersessionsetevents10046tracenamecontextforever,level8;







altersessionsetevents10046tracenamecontextoff;















3.对其他用户session设置















起首取得要跟踪的session的sessionid和serialnumber







selectsid,serial#,usernamefromv$sessionwhereusername=TRACE_USERNAME;























execdbms_support.start_trace_in_session(sid=>1234,serial#=>56789,waits=>true,binds=>true);







execdbms_support.stop_trace_in_session(sid=>1234,serial#=>56789);















大概







execdbms_system.set_ev(1234,56789,10046,8,);







execdbms_system.set_ev(1234,56789,10046,0,);















大概







execdbms_monitor.session_trace_enable(session_id=>1234,serial_num=>56789,waits=>true,binds=>true);







execdbms_monitor.session_trace_disable(session_id=>1234,serial_num=>56789);















也能够经由过程利用oradebug工具来设置10046事务















起首经由过程V$PROCESS取得该session的osprocessid。







selects.username,p.spidos_process_id,p.pidoracle_process_id







fromv$sessions,v$processp







wheres.paddr=p.addrands.username=upper(TRACE_USERNAME);















oradebugsetospid12345;







oradebugunlimit;







oradebugevent10046tracenamecontextforever,level8;







oradebugevent10046tracenamecontextoff;















猎取跟踪文件















1.利用oradebug



SQL>oradebugsetmypid







Statementprocessed.







SQL>oradebugtracefile_name







/opt/oracle/product/9.2.0/rdbms/log/uxdb_ora_9183.trc















2.设置初始参数TRACEFILE_IDENTIFIER



altersessionsettracefile_identifier=MyTrace;







如许在天生的trace文件名中会包括有MyTrace字样







/opt/oracle/product/9.2.0/rdbms/log/uxdb_ora_9183_MyTrace.trc















3.经由过程SQL查询



selectd.value||/||lower(rtrim(i.instance,chr(0)))||_ora_||p.spid||.trctrace_file_name







from







(selectp.spid







fromsys.v$mystatm,sys.v$sessions,sys.v$processp







wherem.statistic#=1ands.sid=m.sidandp.addr=s.paddr)p,







(selectt.instancefromsys.v$threadt,sys.v$parameterv







wherev.name=threadand(v.value=0ort.thread#=to_number(v.value)))i,







(selectvaluefromsys.v$parameterwherename=user_dump_dest)d;



?/rdbms/log/uxdb_ora_9183.trc







检察以后session的跟踪级别







SQL>Setserveroutputon



SQL>declare



event_levelnumber;



begin



dbms_system.read_ev(10046,event_level);



dbms_output.put_line(to_char(event_level));



end;



/




优化的SQL查询算法,有效地提高查询速度
作者: 只想知道    时间: 2015-1-19 21:11
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
作者: admin    时间: 2015-1-28 10:51
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
作者: 不帅    时间: 2015-2-5 20:47
原来公司用过MYSQL自己也只是建个表写个SQL
作者: 变相怪杰    时间: 2015-2-13 13:48
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
作者: 精灵巫婆    时间: 2015-3-3 22:35
所以你总能得到相应的升级版本,来满足你的需求。
作者: 活着的死人    时间: 2015-3-11 14:20
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
作者: 莫相离    时间: 2015-3-18 23:00
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者: 第二个灵魂    时间: 2015-3-26 20:22
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2