一个数据库工具的问题(50分)

  • 主题发起人 主题发起人 jsbyl
  • 开始时间 开始时间
J

jsbyl

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位高手,
有没有什么工具能查找出在某一段时间内在数据库内运行的SQL语句
 
你用的什么数据库?
 
不用工具,直接看数据库日志就可以了
 
这种管理工具有自带的。
 
我用的是oracle数据库,
有什么工具???
 
哈哈哈,分数拿来
desc v$open_cursor
名称 空? 类型
----------------------------------------- -------- ------------
SADDR RAW(4)
SID NUMBER
USER_NAME VARCHAR2(30)
ADDRESS RAW(4)
HASH_VALUE NUMBER
SQL_TEXT VARCHAR2(60) //这就是了哦

select * from v$open_cursor;
然后如果要查正在运行的sql的话
select user_name,sql_text
   from v$open_cursor
   where sid in (select sid from (select sid,serial#,username,program
   from v$session
   where status='ACTIVE'))

子查询
select sid from (select sid,serial#,username,program
   from v$session
   where status='ACTIVE')
就是查出正在Active的session的sid啦

 
honghs:感谢你回答我的问题,但是SORRY,我试了,没有用,
我再加50分,
最好是ORACLE数据库自带的工具,如果是其它工具也可以,请告诉我下载的站点
 
不会吧,look ,我从sql-plus中spool 过来的
SQL> select * from v$open_cursor;

SADDR SID USER_NAME ADDRESS HASH_VALUE
-------- ---------- ------------------------------ -------- ----------
SQL_TEXT
------------------------------------------------------------
02CA9A84 11 SYSTEM 03AB615C 4065929129
select * from v$open_cursor //sql text啊


SQL> desc v$open_cursor;
名称 空? 类型
----------------------------------------- -------- ----------------------------
SADDR RAW(4)
SID NUMBER
USER_NAME VARCHAR2(30)
ADDRESS RAW(4)
HASH_VALUE NUMBER
SQL_TEXT VARCHAR2(60)

SQL> spool off;
 
honghs:
用你说的命令可以看到执行的SQL语句,但是有两个问题:
1、看到的SQL语句都不全,能否在SQL PLUS里将SELECT输出内容重定向到本机上;
2、没有办法判断输出的内容是哪个会话的??
各位高手说数据库有自带工具可以查看SQL语句,
我试了一下,在ORACLE中有个叫instance manage的工具可以查看,
还有个叫DBARTISAN的第三方工具也可以查看,
但是都有以下问题:
如果我在客户端(自己用DELPHI编写的程序)中执行多个SQL语句,只能在工具中看到执行
的最后一条,我如果想看到所有的,有什么办法没有?
 
不是还有v$session表吗,你把v$session和v$open_cursor表结合起来不就知道那个Session发出的
sql语句了吗?这2个都是oracle的系统表。你完全可以从系统表中取数据出来做你自己的分析程序啊。
pl/sql developer就是这样子做的。而且oracle自己的工具也是自己去分析这些结果,想产生可以自己
程序分析的结果,只有用自己的程序去产生了。


 
试试SQLSERVER的Query Analyzer
 
honghs:那每次的SQL语句只显示一部分该怎么办,我在DELPHI里也试了,只显示一部分内容;
scorpions:如何listen,能不能说详细一点
tong_hui:SQL SERVER的东东能用在ORACLE上吗???

 
jsbyl,要不断地查才能知道持续时间内运行的sql语句,你在sql语句完成后查当然只能知道
最后那一句sql。如果不断地查,效率一定不会很高的了。
 
honghs:这一点我也知道,但现在的问题是v$open_cursor表中保存的SQL语句长度不够
当SQL语句(只一条SELECT或UPDATE)
很长时只能保存一部分,如果这个问题有办法解决,我就再加100分送出
 
jybs1:再看这个表(我可是看了每个系统表的说明才找到这个表的),如果这个表也搞不定的话,呵呵
V$sqlarea(中的sql_text有1000字节,应该够用的吧,难不成你要跟踪一个pl/sql块?)
用v$sqlarea的address和v$session中的address一起检索吧
SQL> desc v$sqlarea;
Name Type Nullable Default Comments
------------------- -------------- -------- ------- --------
SQL_TEXT VARCHAR2(1000) Y
SHARABLE_MEM NUMBER Y
PERSISTENT_MEM NUMBER Y
RUNTIME_MEM NUMBER Y
SORTS NUMBER Y
VERSION_COUNT NUMBER Y
LOADED_VERSIONS NUMBER Y
OPEN_VERSIONS NUMBER Y
USERS_OPENING NUMBER Y
EXECUTIONS NUMBER Y
USERS_EXECUTING NUMBER Y
LOADS NUMBER Y
FIRST_LOAD_TIME VARCHAR2(19) Y
INVALIDATIONS NUMBER Y
PARSE_CALLS NUMBER Y
DISK_READS NUMBER Y
BUFFER_GETS NUMBER Y
ROWS_PROCESSED NUMBER Y
COMMAND_TYPE NUMBER Y
OPTIMIZER_MODE VARCHAR2(25) Y
PARSING_USER_ID NUMBER Y
PARSING_SCHEMA_ID NUMBER Y
KEPT_VERSIONS NUMBER Y
ADDRESS RAW(4) Y
HASH_VALUE NUMBER Y
MODULE VARCHAR2(64) Y
MODULE_HASH NUMBER Y
ACTION VARCHAR2(64) Y
ACTION_HASH NUMBER Y
SERIALIZABLE_ABORTS NUMBER Y

SQL>
 
干什么都那么费劲啊!
Oracle自带了Sql Trace功能,跟踪的信息非常详细,包括SQL语句,参数,执行结果等等:
1、先设置好TIMED_STATISTICS,USER_DUMP_DEST,和MAX_DUMP_FILE_SIZE。
2、激活跟踪功能
a、如果对用户自己的会话进行跟踪,alter session set SQL_TRACE = TRUE;
b、系统管理员可以对其他用户的会话进行跟踪。使用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION.
该过程需要Session ID和Serial.如下取得:
select sid, serial#,osuser from v$session where osuser = 'XXXXXXX';
得到如下:8, 12, XXXXXXX
设定跟踪:
execute dbms_system.set_sql_trace_in_session(8,12,true);
激活跟踪:
dbms_ssesion.set_sql_true(true);
3、使用TKPROF查看结果
详细的用法自己查一下手册吧,如果有Oracle光盘的话,在它的HTML文档目录下
有一个STrace.htm的文件,仔细看一下。
 
steve,用工具谁不会啊。还要拿分出来问??
当然是用程序来实现啊,这才对得起分数
 
honghs:我看了一下,还是不行,不过后来我在ORACLE的站点上查了一下资料,有个叫
SQLTEXT_WITH_NEWLINES的视图可以用,但是这些系统视图的更新速度太快了,我在DELPHI
内将TIMER控件的更新时间设置为1毫秒都有些语句跟踪不到,你还有其它更好的方法没有??
如果有工具或其它方法介绍,我也会接受答案的,不一定硬要编程的方法才接受,
希望各位高手不吝赐教
 
tkprof 和explain plan 所产生的结果都是要手工分析才能知道正确的sql语句。
好象也不是很理想,在sql-plus中手工分析还可以,想让程序搞懂这些关系也是比较麻烦的。
jsyb1,从这种表中分析出来也是够麻烦的了吧,你说的那个view在那的,我的8i中好象没这个view啊
SQL> desc plan_table;
名称 空? 类型
----------------------------------------- -------- ----------------------------
STATEMENT_ID VARCHAR2(30)
TIMESTAMP DATE
REMARKS VARCHAR2(80)
OPERATION VARCHAR2(30)
OPTIONS VARCHAR2(30)
OBJECT_NODE VARCHAR2(128)
OBJECT_OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(30)
OBJECT_INSTANCE NUMBER(38)
OBJECT_TYPE VARCHAR2(30)
OPTIMIZER VARCHAR2(255)
SEARCH_COLUMNS NUMBER
ID NUMBER(38)
PARENT_ID NUMBER(38)
POSITION NUMBER(38)
COST NUMBER(38)
CARDINALITY NUMBER(38)
BYTES NUMBER(38)
OTHER_TAG VARCHAR2(255)
PARTITION_START VARCHAR2(255)
PARTITION_STOP VARCHAR2(255)
PARTITION_ID NUMBER(38)
OTHER LONG
DISTRIBUTION VARCHAR2(30)

SQL>
 
后退
顶部