Вы здесь

ВАУ!

ekaterina@clearscale.net

Классический запрос Т.Кайта для нахождения столбцов с ограничениями ссылочной целостности без индексов (Unindexed Foreign Keys)

select table_name,
       constraint_name,
       cname1 || nvl2(cname2, ',' || cname2, null) ||
       nvl2(cname3, ',' || cname3, null) ||
       nvl2(cname4, ',' || cname4, null) ||
       nvl2(cname5, ',' || cname5, null) ||
       nvl2(cname6, ',' || cname6, null) ||
       nvl2(cname7, ',' || cname7, null) ||
       nvl2(cname8, ',' || cname8, null) columns
  from (select b.table_name,
               b.constraint_name,
               max(decode(position, 1, column_name, null)) cname1,
               max(decode(position, 2, column_name, null)) cname2,
               max(decode(position, 3, column_name, null)) cname3,
               max(decode(position, 4, column_name, null)) cname4,
               max(decode(position, 5, column_name, null)) cname5,
               max(decode(position, 6, column_name, null)) cname6,
               max(decode(position, 7, column_name, null)) cname7,
               max(decode(position, 8, column_name, null)) cname8,
               count(*) col_cnt
          from (select substr(table_name, 1, 30) table_name,
                       substr(constraint_name, 1, 30) constraint_name,
                       substr(column_name, 1, 30) column_name,
                       position
                  from user_cons_columns) a,
               user_constraints b
         where a.constraint_name = b.constraint_name
           and b.constraint_type = 'R'
         group by b.table_name, b.constraint_name) cons
 where col_cnt > ALL (select count(*)
          from user_ind_columns i
         where i.table_name = cons.table_name
           and i.column_name in (cname1,
                                 cname2,
                                 cname3,
                                 cname4,
                                 cname5,
                                 cname6,
                                 cname7,
                                 cname8)
           and i.column_position <= cons.col_cnt
         group by i.index_name)
/

Тот же запрос с использованием LISTAGG для Oracle 11g+ из комментария к блогу Т.Кайта

SELECT decode(b.table_name, NULL, '****', 'ok') status,
       a.table_name,
       a.columns fk_columns,
       b.columns index_columns
  FROM (SELECT a.table_name,
               a.constraint_name,
               LISTAGG(a.column_name, ',') within GROUP(ORDER BY a.position) columns
          FROM dba_cons_columns a, dba_constraints b
         WHERE a.constraint_name = b.constraint_name
           AND b.constraint_type = 'R'
           AND a.owner = b.owner
         GROUP BY a.table_name, a.constraint_name) a,
       (SELECT table_name,
               index_name,
               LISTAGG(c.column_name, ',') within GROUP(ORDER BY c.column_position) columns
          FROM dba_ind_columns c
         GROUP BY table_name, index_name) b
 WHERE a.table_name = b.table_name(+)
   AND b.columns(+) LIKE a.columns || '%'
 ORDER BY status, table_name
/

Медленный запрос для подсчёта количества блоков бд, занятых строками сегмента таблицы в отсутствии chained rows:

with rowid_blocks as
 (select /*+ materialize*/
   dbms_rowid.rowid_relative_fno(rowid) relative_fno,
   dbms_rowid.rowid_block_number(rowid) block_number
    from "&&1"."&&2")
select relative_fno,
       count(distinct block_number) used_blocks,
       count(block_number) used_rows
  from rowid_blocks
 group by rollup(relative_fno)
/

ORA-30036: unable to extend segment by % in undo tablespace %:

использование UNDO текущими длинными транзакциями:

SQL> --
SQL> SELECT b.start_time, a.inst_id, a.sid, a.username, a.program, b.used_urec, b.used_ublk
2    FROM gv$session a, gv$transaction b
3   WHERE a.saddr = b.ses_addr
4     and a.inst_id = b.inst_id
5   ORDER BY b.used_ublk DESC
6  /
 
START_TIME        INST_ID  SID USERNAME PROGRAM                              USED_UREC  USED_UBLK
----------------- ------- ---- -------- ----------------------------------- ---------- ----------
03/01/12 15:51:46       1   19 APPS     frmweb@appl1.oebs.net (TNS V1-V3)         9048        130
03/01/12 15:54:16       2   16 APPS     STANDARD@appl1.oebs.net (TNS V1-V3)       2389         58
...
 
SQL> -- из статистики подключённых сессий
SQL> select inst_id, sid, name, value
2    from gv$sesstat s, v$statname n
3   where s.statistic# = n.statistic#
4     and name = 'undo change vector size'
5   order by value desc
6  /
 
INST_ID  SID NAME                         VALUE
------- ---- ----------------------- ----------
2       1504 undo change vector size  710425472 -- bytes, статистика использования UNDO по сессиям
2        411 undo change vector size  522984516
1        705 undo change vector size   90755560
...

UNDOSTAT.SQL Запрос текущего, а также оценки среднего и максимально необходимого (при равномерной по времени генерации undo блоков) размера UNDO пространства на основании статистики V$UNDOSTAT

, пример:

SQL> @undostat
 
INST_ID Max Req.Undo Space, MB Avg Req.Undo Space, MB UNDO_RETENTION  MIN_TUNED_UNDORETENTION MAX_TUNED_UNDORETENTION
------- ---------------------- ---------------------- --------------- ----------------------- -----------------------
1                 30,210                    887 4500                               4500           52442
2                 44,716                    813 4500                               3484           52864

Мониторинг использования индексов — V$OBJECT_USAGE показывает только объекты текущей схемы, все наблюдаемые индексы можно наблюдать в обзоре V$ALL_OBJECT_USAGE:

прицеп 1: 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
6 + 3 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.