使用exec dbms_system.set_sql_trace_in_session(7,284,true);进行跟踪
使用tkprof将TRC转成TXT。
结果中的SQL包含了参数: ... WHERE (UPPER(U.FNumber) = :1 AND U.FIsDelete = 0)怎么设置跟踪,才能跟踪出SQL和参数值
解决方案 »
- oracle中char(10)类型和number(11)类型
- ora-01017 invalid username/password;logon denied
- 关于创建表空间的问题
- 急!!!请教分页更新的问题。
- 有关客户端关闭监听器和Hostname远程连接的问题,谢谢各位
- 求助,java web开发程序员转到oracle方向的,是DBA还是DBD容易入门些?
- Oracle连接问题
- windows 下的备份数据,怎么样在 Linux 下恢复?
- Oracle 9i 企业管理器不能找到节点的数据库.
- 触发器的问题!!!急。。。在线等待!!!
- oracle 10g rac ocsf2存储扩容问题
- 如何把SQL查询的结果通过plsql输出出来?
这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。
例如一个 学生表, 有学号,姓名,性别
其中 学号是主键, 姓名上面有个索引。找 名字叫 强妹 的女生:
SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'
与
SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹' 数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的
比如表里面共有10000行。姓名叫 '强妹' 的只有一个。
那么通过索引,一步就定位到那一行。
然后再判断这一行数据的 性别字段, 是不是 = '女'
假如 姓名/性别 都没有索引呢?
那就是执行 全表扫描。
不分先后。
什么意思呢?
就是假如 表里面10000行数据。
那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。
并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。
我跟踪出来的语句是一个很长的语句,这个语句中有类似:1,:2,:3.....:15这样的参数。
比如题目中的... WHERE (UPPER(U.FNumber) = :1 AND U.FIsDelete = 0)部分语句中,
:1是一个字符串变量。
我现在想跟踪出:1的字符串变量值是多少。
不过这个包要在10g以后才有 PROCEDURE session_trace_enable(
session_id IN BINARY_INTEGER DEFAULT NULL,
serial_num IN BINARY_INTEGER DEFAULT NULL,
waits IN BOOLEAN DEFAULT TRUE,
binds IN BOOLEAN DEFAULT FALSE,
plan_stat IN VARCHAR2 DEFAULT NULL); -- Enables SQL trace for the given Session ID
-- Input arguments:
-- session_id - Session Identifier for which SQL trace
-- is enabled. If omitted (or NULL), the
-- user's own session is assumed
-- serial_num - Session serial number for which SQL trace
-- is enabled. If omitted (or NULL), only
-- the session ID is used to determine a session
-- waits - If TRUE, wait information will be present in the
-- the trace
-- binds - If TRUE, bind information will be present in the
-- the trace
-- plan_stat - Frequency at which we dump row source statistics.
-- Value should be 'never', 'first_execution'
-- (equivalent to NULL) or 'all_executions'.
那如果使用新版本的oracle,能不能恢复oracle 10g的数据库呢