当前位置:首页 » 编程语言 » sqlid父游标子游标
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlid父游标子游标

发布时间: 2022-08-07 23:20:40

sql 知道父节点,查询所有的子节点,运用游标,递归,存储过程

呃,因为我不清楚你的表里,这个BPROD char(15) 老爸 里面记录的值是不是和BMWHS 对应的,所以只能说个大概。
select sys_connect_by_path(username,'>') "Path"
from tmbm
start with id=1
connect by prior id=parentid;

其中,id是你要遍历的起始点,比如你想从 厂号=XX 的这个父节点开始寻找他所有的子节点,这里就换成 start with BMWHS=XX

然后,connect by prior id=parentid,这里id=parentid,简单解释就是寻找其他记录里,parentid和我的id相同的记录,也就是找子节点。
应该是换成你的BMWHS=BPROD(我不知道你的BPROD BCHLD 和哪个属性是对应的,是BMWHS吗?)
如果是的话就是下面这样(username是你要返回的值,假设你还是要返回 BSEQ 序号)

select sys_connect_by_path(BSEQ,'>') "Path"
from tmbm
start with BMWHS=XX

connect by prior BMWHS=BPROD;

❷ sql 知道父节点,查询所有的子节点,运用游标,递归,存储过程

呃,因为我不清楚你的表里,这个BPROD
char(15)
老爸
里面记录的值是不是和BMWHS
对应的,所以只能说个大概。
select
sys_connect_by_path(username,'>')
"Path"
from
tmbm
start
with
id=1
connect
by
prior
id=parentid;
其中,id是你要遍历的起始点,比如你想从
厂号=XX
的这个父节点开始寻找他所有的子节点,这里就换成
start
with
BMWHS=XX
然后,connect
by
prior
id=parentid,这里id=parentid,简单解释就是寻找其他记录里,parentid和我的id相同的记录,也就是找子节点。
应该是换成你的BMWHS=BPROD(我不知道你的BPROD
BCHLD
和哪个属性是对应的,是BMWHS吗?)
如果是的话就是下面这样(username是你要返回的值,假设你还是要返回
BSEQ
序号)
select
sys_connect_by_path(BSEQ,'>')
"Path"
from
tmbm
start
with
BMWHS=XX
connect
by
prior
BMWHS=BPROD;

❸ 请问一下,你的 win7旗舰版安装SQL Server2008错误:试图执行未经授权的操作。这个问题是怎样解决的!谢谢

oracle
10g的DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,
显示真实的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断
SQL语句所存在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。本文仅仅讲述
display_cursor函数的使用。
一、display_cursor函数用法
1、display_cursor函数语法
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id
IN
VARCHAR2
DEFAULT
NULL,
cursor_child_no
IN
NUMBER
DEFAULT
NULL,
format
IN
VARCHAR2
DEFAULT
'TYPICAL');
2、display_cursor函数参数描述
sql_id
指定位于库缓存执行计划中SQL语句的父游标。默认值为null。当使用默认值时当前会话的最后一条SQL语句的执行计划将被返回
可以通过查询V$SQL
或V$SQLAREA的SQL_ID列来获得SQL语句的SQL_ID。
cursor_child_no
指定父游标下子游标的序号。即指定被返回执行计划的SQL语句的子游标。默认值为0。如果为null,则sql_id所指父游标下所有子游标
的执行计划都将被返回。
format
控制SQL语句执行计划的输出部分,即哪些可以显示哪些不显示。使用与display函数的format参数与修饰符在这里同样适用。
除此之外当在开启statistics_level=all时或使用gather_plan_statistics提示可以获得执行计划中实时的统计信息
有关详细的format格式描述请参考:dbms_xplan之display函数的使用
中format参数的描述
下面给出启用统计信息时format新增的修饰符
iostats
控制I/O统计的显示
last
默认,显示所有执行计算过的统计。如果指定该值,则只显示最后一次执行的统计信息
memstats
控制pga相关统计的显示
allstats
此为iostats
memstats的快捷方式,即allstats包含了iostats和memstats
run_stats_last
等同于iostats
last。只能用于oracle
10g
R1
run_stats_tot
等同于iostats。只能用于oracle
10g
R1
抓一个最近一小时最消耗IO的SQL:
SELECT
sql_id,
COUNT(*)
FROM
gv$active_session_history
ash,
gv$event_name
evt
WHERE
ash.sample_time
>
SYSDATE
-
1
/
24
AND
ash.session_state
=
'WAITING'
AND
ash.event_id
=
evt.event_id
AND
evt.wait_class
=
'User
I/O'
GROUP
BY
sql_id
ORDER
BY
COUNT(*)
DESC;
执行上面的SQL:
SQL>
SELECT
sql_id,
COUNT(*)
FROM
gv$active_session_history
ash,
gv$event_name
evt
2
3
WHERE
ash.sample_time
>
SYSDATE
-
1
/
24
4
AND
ash.session_state
=
'WAITING'
5
AND
ash.event_id
=
evt.event_id
6
AND
evt.wait_class
=
'User
I/O'
7
GROUP
BY
sql_id
8
ORDER
BY
COUNT(*)
DESC;
SQL_ID
COUNT(*)
-------------
----------
g7fu6qba82m6b
668
63r47zyphdk06
526
9f5m4wd88nc1h
514
593p47drw5fhk
232
br91w16jzy4fu
120
4fvwyjpnh6tp7
78
gm0nrbfuj8kzr
70
2184k363hw4xd
68
gc4dajs7g5myy
46
8vrk9sfuwfdgq
42
ccpnb4dwdmq21
40
查看SQL的执行计划:
SELECT
*
FROM
TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));
在SQLPLUS中执行:
SQL>
set
pagesize
2000
SQL>
SELECT
*
FROM
TABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
SQL_ID
g7fu6qba82m6b,
child
number
0
-------------------------------------
UPDATE
"CPDDS_PDATA"."CDM_LEDGER"
SET
"CSTM_NAME"
=
:a1,"CSTM_NO"
=
:a2,"PAPER_TYPE"
=
:a3,"PAPER_NO"
=
:a4,"CURR_TYPE"
=
:a5,"SVT_NO"
=
:a6,"BAL_DIR"
=
:a7,"BAL"
=
:a8,"AVAL_BAL"
=
:a9,"NORM_FRATIO"
=
:a10,"PK_BAL"
=
:a11,"DR_ACCU"
=
:a12,"CR_ACCU"
=
:a13,"LAST_TRAN_DATE"
=
:a14,"LAST_TRAN_TIME"
=
:a15,"PRT_LINE_NUM"
=
:a16,"NOREG_PK_REC_NUM"
=
:a17,"PK_NO"
=
:a18,"PWD"
=
:a19,"FLAG"
=
:a20,"FRZ_FLAG"
=
:a21,"CARD_HOLD_FLAG"
=
:a22,"PK_HOLD_FLAG"
=
:a23,"BGN_INT_DATE"
=
:a24,"OPEN_DATE"
=
:a25,"ACC_HOLD_FLAG"
=
:a26,"CLS_DATE"
=
:a27,"OPEN_TLR"
=
:a28,"CLS_TLR"
=
:a29,"CLS_INT"
=
:a30,"OPEN_INST"
=
:a31,"ADD_NUM"
=
:a32,"DAC"
=
:a33,"FRZ_TIMES1"
=
:a34,"FRZ_TIMES2"
=
:a35,"HOST_SEQNO"
=
:a36,"D_UPDATE_DATE"
=
:a37
WHERE
"ACC"
=
:b0
Plan
hash
value:
319441092
-----------------------------------------------------------------------------------
|
Id
|
Operation
|
Name
|
Rows
|
Bytes
|
Cost
(%CPU)|
Time
|
-----------------------------------------------------------------------------------
|
0
|
UPDATE
STATEMENT
|
|
|
|
3
(100)|
|
|
1
|
UPDATE
|
CDM_LEDGER
|
|
|
|
|
|*
2
|
INDEX
UNIQUE
SCAN|
I_CDM_LEDGER
|
1
|
269
|
2
(0)|
00:00:01
|
-----------------------------------------------------------------------------------
Predicate
Information
(identified
by
operation
id):
---------------------------------------------------
2
-
access("ACC"=:B0)
29
rows
selected.
总结
1、与display函数不同,display_cursor显示的为真实的执行计划
2、对于format参数,使用与display函数的各个值,同样适用于display_cursor函数
3、当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息
4、根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等

❹ sql解析过程中游标是什么,什么是父游标,什么是子游标

父游标关联sql文,子游标是具体的sql文计划,绑定变量等游标详细信息。。。。你的采纳是我前进的动力,还有不懂的地方,请继续“追问”。

❺ 简单讨论在11G,10G中怎么稳定SQL执行计划

oracle10g的DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销。通过对比预估的I/O与真实的I/O开销来判断SQL语句所存在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等。本文仅仅讲述display_cursor函数的使用。一、display_cursor函数用法1、display_cursor函数语法DBMS_XPLAN.DISPLAY_CURSOR(sql_idINVARCHAR2DEFAULTNULL,cursor_child_noINNUMBERDEFAULTNULL,formatINVARCHAR2DEFAULT'TYPICAL');2、display_cursor函数参数描述sql_id指定位于库缓存执行计划中SQL语句的父游标。默认值为null。当使用默认值时当前会话的最后一条SQL语句的执行计划将被返回可以通过查询V$SQL或V$SQLAREA的SQL_ID列来获得SQL语句的SQL_ID。cursor_child_no指定父游标下子游标的序号。即指定被返回执行计划的SQL语句的子游标。默认值为0。如果为null,则sql_id所指父游标下所有子游标的执行计划都将被返回。format控制SQL语句执行计划的输出部分,即哪些可以显示哪些不显示。使用与display函数的format参数与修饰符在这里同样适用。除此之外当在开启statistics_level=all时或使用gather_plan_statistics提示可以获得执行计划中实时的统计信息有关详细的format格式描述请参考:dbms_xplan之display函数的使用中format参数的描述下面给出启用统计信息时format新增的修饰符iostats控制I/O统计的显示last默认,显示所有执行计算过的统计。如果指定该值,则只显示最后一次执行的统计信息memstats控制pga相关统计的显示allstats此为iostatsmemstats的快捷方式,即allstats包含了iostats和memstatsrun_stats_last等同于iostatslast。只能用于oracle10gR1run_stats_tot等同于iostats。只能用于oracle10gR1抓一个最近一小时最消耗IO的SQL:SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevtWHEREash.sample_time>SYSDATE-1/24ANDash.session_state='WAITING'ANDash.event_id=evt.event_idANDevt.wait_class='UserI/O'GROUPBYsql_idORDERBYCOUNT(*)DESC;执行上面的SQL:SQL>SELECTsql_id,COUNT(*)FROMgv$active_session_historyash,gv$event_nameevt23WHEREash.sample_time>SYSDATE-1/244ANDash.session_state='WAITING'5ANDash.event_id=evt.event_id6ANDevt.wait_class='UserI/O'7GROUPBYsql_id8ORDERBYCOUNT(*)DESC;SQL_IDCOUNT(*)-----------------------查看SQL的执行计划:SELECT*FROMTABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));在SQLPLUS中执行:SQL>setpagesize2000SQL>SELECT*FROMTABLE(dbms_xplan.display_cursor('g7fu6qba82m6b'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------SQL_IDg7fu6qba82m6b,childnumber0-------------------------------------UPDATE"CPDDS_PDATA"."CDM_LEDGER"SET"CSTM_NAME"=:a1,"CSTM_NO"=:a2,"PAPER_TYPE"=:a3,"PAPER_NO"=:a4,"CURR_TYPE"=:a5,"SVT_NO"=:a6,"BAL_DIR"=:a7,"BAL"=:a8,"AVAL_BAL"=:a9,"NORM_FRATIO"=:a10,"PK_BAL"=:a11,"DR_ACCU"=:a12,"CR_ACCU"=:a13,"LAST_TRAN_DATE"=:a14,"LAST_TRAN_TIME"=:a15,"PRT_LINE_NUM"=:a16,"NOREG_PK_REC_NUM"=:a17,"PK_NO"=:a18,"PWD"=:a19,"FLAG"=:a20,"FRZ_FLAG"=:a21,"CARD_HOLD_FLAG"=:a22,"PK_HOLD_FLAG"=:a23,"BGN_INT_DATE"=:a24,"OPEN_DATE"=:a25,"ACC_HOLD_FLAG"=:a26,"CLS_DATE"=:a27,"OPEN_TLR"=:a28,"CLS_TLR"=:a29,"CLS_INT"=:a30,"OPEN_INST"=:a31,"ADD_NUM"=:a32,"DAC"=:a33,"FRZ_TIMES1"=:a34,"FRZ_TIMES2"=:a35,"HOST_SEQNO"=:a36,"D_UPDATE_DATE"=:a37WHERE"ACC"=:b0Planhashvalue:319441092-----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-----------------------------------------------------------------------------------|0|UPDATESTATEMENT||||3(100)|||1|UPDATE|CDM_LEDGER||||||*2|INDEXUNIQUESCAN|I_CDM_LEDGER|1|269|2(0)|00:00:01|-----------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------2-access("ACC"=:B0)29rowsselected.总结1、与display函数不同,display_cursor显示的为真实的执行计划2、对于format参数,使用与display函数的各个值,同样适用于display_cursor函数3、当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息4、根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等

❻ 如果存在大批量有问题的sql如何排查

先分析主表,在再分析子表

❼ 获取SQL执行计划的常见几种方法

1. 预估执行计划 - Explain Plan
Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。
首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下:
explain plan for SQL语句
然后,在计划表中查询刚刚生成的执行计划,语句如下:
select * from table(dbms_xplan.display);
注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为:
1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。
2. 查询内存中缓存的执行计划 (dbms_xplan.display_cursor)
如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。方法如下:
1)获取SQL语句的游标
游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。
如果SQL语句正在运行,可以从v$session中获得它的游标信息,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
如果知道SQL语句包含某些关键字,可以从v$sql视图中获得它的游标信息,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%关键字%‘
2)获取库缓存中的执行计划
为了获取缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是以sql_id和子游标为参数,执行如下语句:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)获取前一次的执行计划:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. 查询历史执行计划(dbms_xplan.display_awr)
AWR会定时把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,如果你想要查看历史执行计划,可以采用如下方法查询:
select * from table(dbms_xplan.display_awr('sql_id');
4. 在用sqlplus做SQL开发是(Autotrace)
set autotrace是sqlplus工具的一个功能,只能在通过sqlplus连接的session中使用,它非常适合在开发时测试SQL语句的性能,有以下几种参数可供选择:
SET AUTOTRACE OFF ---------------- 不显示执行计划和统计信息,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ 只显示优化器执行计划
SET AUTOTRACE ON STATISTICS -- 只显示统计信息
SET AUTOTRACE ON ----------------- 执行计划和统计信息同时显示
SET AUTOTRACE TRACEONLY ------ 不真正执行,只显示预期的执行计划,同explain plan

5. 生成Trace文件查询详细的执行计划 (SQL_Trace, 10046)
SQL_TRACE作为初始化参数可以在实例级别启用,也可以只在会话级别启用,在实例级别启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在一般情况下,我们使用sql_trace跟踪当前进程,方法如下:
SQL>alter session set sql_trace=true;
...被跟踪的SQL语句...
SQL>alter session set sql_trace=false;
如果要跟踪其它进程,可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来实现,例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --开始跟踪
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --结束跟踪
生成trace文件后,再用tkprof 工具将sql trace 生成的跟踪文件转换成易读的格式,语法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一个升级版,它也是追踪会话,生成Trace文件,只是它里面的内容更详细,