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查询算法,有效地提高查询速度 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。 原来公司用过MYSQL自己也只是建个表写个SQL 是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。 所以你总能得到相应的升级版本,来满足你的需求。 groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
页:
[1]