2013年8月10日星期六

Oracle用户进程跟踪 - PoleStar

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Oracle用户进程跟踪 - PoleStar  阅读原文»

用户进程跟踪

1 分为 基于会话级别跟踪和 实例级别跟踪;
2 会话级别跟踪又包括 当前会话跟踪和 非当前会话跟踪
3 跟踪文件位置由user_dump_dest设定,大小由max_dump_file_size 决定
4 生成的跟踪文件名为<SID>_ora_<SPID>.trc 其中SID为实例名称,SPID为系统进程号
5 通过v$session中的SQL_TRACE,SQL_TRACE_WAITS,SQL_TRACE_BINDS展示了一个会话的跟踪状态

注:
在专用服务器模式中:仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)
在共享模式中:对任何一个会话的跟踪会分布到每个共享服务器进程所生成的跟踪文件内。这时可以用tkprof合并多个sql跟踪文件

1.1 基于会话级别跟踪

1.1.1 针对当前会话跟踪

1 --以DBA权限 查看用户跟踪文件所在的位置
2 SQL> show parameter user_dump
3
4 NAME TYPE VALUE
5 ------------------------------------ ----------- ------------------------------
6 user_dump_dest string /u01/admin/sun/udump
7 SQL>
8
9 --清空先前产生的跟踪文件
10 SQL> ! rm -f /u01/admin/sun/udump/*.trc
11
12
13 --开启一个会话连接
14 SQL> conn hr/hr123
15 Connected.
16 SQL>
17
18 --开启当前会话跟踪
19 SQL> alter session set sql_trace=true;
20
21 Session altered.
22
23 SQL>
24
25 --执行测试SQL语句
26 --跟踪完毕后执行下面的语句关闭跟踪
27 SQL> alter session set sql_trace = false;
28
29 Session altered.
30
31 SQL>
32
33
34 --通过DBA用户获取其SPID
35 SQL> select s.username,s.sid,p.spid from v$session s,v$process p
36 2 where s.paddr = p.addr and s.username = 'HR';
37
38 USERNAME SID SPID
39 ------------------------------ ---------- ------------
40 HR 141 1255
41
42 SQL>

1 #可以使用vi,taik等工具 查看产生的跟踪会话文件
2 bash-3.00$ vi sun_ora_1255.trc
3 ............
4 =====================
5 PARSING IN CURSOR #5 len=18 dep=0 uid=55 oct=3 lid=55 tim=6241133514 hv=2637153722 ad='5d4e9008'
6 select * from jobs --此处是我的测试sql
7 END OF STMT
8 PARSE #5:c=130000,e=189841,p=9,cr=124,cu=0,mis=1,r=0,dep=0,og=1,tim=6241133508
9 EXEC #5:c=0,e=28,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=6241133636
10 FETCH #5:c=10000,e=37492,p=6,cr=6,cu=0,mis=0,r=1,dep=0,og=1,tim=6241171200
11 FETCH #5:c=0,e=41,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,tim=6241171781
12 FETCH #5:c=0,e=266,p=0,cr=2,cu=0,mis=0,r=3,dep=0,og=1,tim=6241174115ASP.NET MVC从视图传递多个模型到Controller - Wayou  阅读原文»

从后台组织好数据然后传递到页面倒是水到渠成很方便,因为MVC自身就将这样的需求内建到了这个系统中。我只需要在后台组织好一个List 或IEnumerable类型的变量,将需要传递的数据模型扔进去便可。

比如这里我们向视图返回5条product信息在页面进行展示,仅仅是返回这么简单。

然后在页面我们就毫不费力地得到了后台传过来的数据模型,然后进行显示即可。

但问题是,如何又将多个模型传回后台去呢。一个form一般只传递一个模型,我们可以在JavaScript里序列化多个模型然后通过ajax 传递回去。

1.首先改造页面,假设在页面有很多输入框供用户输入模型的相关信息,并且搞一个按扭来提交。

<table>

@foreach (
var item in Model) {

<tr id="@item.ProductID">

<td>

<input name="ProductName" />

</td>

<td>

<input name="SupplierID"/>

</td>

<td>

<input name="CategoryID"/>

</td>

</tr>

}

</table>

<button id="go">Go</button>

2.然后在JavaScript中获取这些输入值,最后将所有模型整合到一个models变量中。

var models = [];

$.each($(
"table tr"), function(i, item) {

var ProductName = $(item).find("[name=ProductName]").val();

var SupplierID = $(item).find("[name=SupplierID]").val();

var CategoryID = $(item).find("[name=CategoryID]").val();

models.push({ ProductName: ProductName, SupplierID: SupplierID, CategoryID: CategoryID });

});

当然这些是写到按扭的单击事件中的。

所以完整的代码看起来应该是这个样子。

$("#go").click(function() {

var models = [];

$.each($(
"table tr"), function(i, item) {

var ProductName = $(item).find("[name=ProductName]").val();

var SupplierID = $(item).find("[name=SupplierID]").val();

var CategoryID = $(item).find("[name=CategoryID]").val();

models.push({ ProductName: ProductName, SupplierID: SupplierID, CategoryID: CategoryID });

});



});

到这里我们可以加个debugger测试一下有没有有前台代码中成功获取到输入框的值及组织好的模型对不对。

在页面按F12打开开发者工具,然后试着在页面输入一些值,最后单击按扭。

我们看到,在遍历了所有输入框后,以每行为单位当成一个Product模型,压入models变量中。这个时候,models变量中保存了所有信息。

3.准备后台接收数据的Action 。我们当然是接收多个模型,所以接收类型选择为List<Product>

public ActionResult ReceiveData(List<Product> products)

{

var result = products == null ? "Failed" : "Success";

return Content(result);

}

4.最后一步,将models变量通过Ajax传送到后台

这一步是最关键的,因为ajax格式没写好后台是无法接收到正确的数据的。经过我颇费心神的研究最后得出的ajax代码大概是下面这个样子的:

$.ajax({

url:
'../../Home/ReceiveData',

data: JSON.stringify(models),

type:
'POST',

contentType:
'application/json; charset=utf-8',

success:
function (msg) {

alert(msg);

}

});

最后完整的前台代码大概应该是这个样子的。

<script type="text/javascript">

$(
function () {

$(
"#go").click(function() {

var models = [];

$.each($(
"table tr"), function(i, item) {

var ProductName = $(item).find("[name=ProductName]").val();

var SupplierID = $(item).find("[name=SupplierID]").val();

var阅读更多内容

没有评论:

发表评论