4 ответов:
Я подозреваю, что вы просто хотите захватить несколько столбцов из V$SESSION и оператор SQL из V$SQL. Предполагая, что вы хотите исключить фоновые процессы, которые сам Oracle работает
SELECT sess.process, sess.status, sess.username, sess.schemaname, sql.sql_text FROM v$session sess, v$sql sql WHERE sql.sql_id(+) = sess.sql_id AND sess.type = 'USER'внешнее соединение должно обрабатывать те сеансы, которые в настоящее время не активны, предполагая, что вы хотите их. Вы также можете получить столбец sql_fulltext из V$SQL, который будет иметь полный оператор SQL, а не первые 1000 символов, но это CLOB и, вероятно, немного больше с этим сложно иметь дело.
реалистично, вы, вероятно, хотите посмотреть на все, что доступно в V$SESSION, потому что, вероятно, вы можете получить гораздо больше информации, чем предоставляет SP_WHO.
посмотрев на sp_who, Oracle не имеет этой способности как таковой. Oracle имеет по крайней мере 8 процессов, которые запускают БД. Как РМОН и т. д.
вы можете спросить БД, какие запросы выполняются как это просто запрос таблицы. Посмотрите на таблицы V$.
Пример:
SELECT sid, opname, sofar, totalwork, units, elapsed_seconds, time_remaining FROM v$session_longops WHERE sofar != totalwork;
Это показывает SQL, который в настоящее время"активен": -
select S.USERNAME, s.sid, s.osuser, t.sql_id, sql_text from v$sqltext_with_newlines t,V$SESSION s where t.address =s.sql_address and t.hash_value = s.sql_hash_value and s.status = 'ACTIVE' and s.username <> 'SYSTEM' order by s.sid,t.piece /Это показывает замков. Иногда все идет медленно, но это потому, что он заблокирован в ожидании блокировки:
select object_name, object_type, session_id, type, -- Type or system/user lock lmode, -- lock mode in which session holds lock request, block, ctime -- Time since current mode was granted from v$locked_object, all_objects, v$lock where v$locked_object.object_id = all_objects.object_id AND v$lock.id1 = all_objects.object_id AND v$lock.sid = v$locked_object.session_id order by session_id, ctime desc, object_name /это хорошо подходит для поиска длинных операций (например, полное сканирование таблицы). Если это из-за большого количества коротких операций, ничего не будет отображаться.
COLUMN percent FORMAT 999.99 SELECT sid, to_char(start_time,'hh24:mi:ss') stime, message,( sofar/totalwork)* 100 percent FROM v$session_longops WHERE sofar/totalwork < 1 /
имейте в виду, что в базе данных есть процессы, которые в настоящее время могут не поддерживать сеанс.
Если вас интересуют все процессы, вы хотите посмотреть на V$process (или GV$process на RAC)
Comments