Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Очистить справочник SYS.SNAP_XCMT$  [new]
MaXie
Member

Откуда:
Сообщений: 114
Доброго всем времени суток!

Просьба помочь. Как наименее затратно очистить справочник SYS.SNAP_XCMT$?

Он постоянно растет в следствии наличия "журналов" материализованных представлений(CREATE MATERIALIZED VIEW LOG ON), работающих в режиме COMMIT SCN, БЕЗ использования самих мат.представлений. Каждое изменение фиксируется в этом справочнике.

Мне известен только один способ очистки данного справочника - удалить все "журналы". Это возможно. Но есть проблемы:
1. Удаление каждого "журнала" - это полная блокировка мастер-таблицы;
2. Нельзя запустить параллельно несколько скриптов на удаление "журналов", так чтобы в несколько сессией удалять сразу несколько "журналов".

Есть какой то менее ресурсозатратный способ почистить данный справочник?
Спасибо всем кто откликнется(очень нужно).
13 июн 19, 15:03    [21907986]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
MaXie
Мне известен только один способ очистки данного справочника - удалить все "журналы".


Хирург ?

Создай MV и обновляй когда надо очистить:

SQL> CREATE TABLE TBL
  2    AS
  3      SELECT  *
  4        FROM  EMP
  5        WHERE 1 = 2
  6  /

Table created.

Elapsed: 00:00:00.02
SQL> CREATE MATERIALIZED VIEW LOG
  2    ON TBL
  3    WITH ROWID,
  4         COMMIT SCN(
  5                    EMPNO,
  6                    ENAME,
  7                    JOB,
  8                    MGR,
  9                    HIREDATE,
 10                    SAL,
 11                    COMM,
 12                    DEPTNO
 13                   )
 14         INCLUDING NEW VALUES
 15  /

Materialized view log created.

Elapsed: 00:00:00.02
SQL> CREATE MATERIALIZED VIEW TBL_MV
  2    REFRESH FAST
  3    ON DEMAND
  4    WITH ROWID
  5    AS
  6      SELECT  ROWID RID
  7        FROM  TBL
  8        WHERE 1 = 2
  9  /

Materialized view created.

Elapsed: 00:00:00.08
SQL> INSERT
  2    INTO TBL
  3    SELECT  *
  4      FROM  EMP
  5  /

14 rows created.

Elapsed: 00:00:00.02
SQL> COMMIT
  2  /

Commit complete.

Elapsed: 00:00:00.01
SQL> BEGIN
  2      FOR V_REC IN (SELECT * FROM EMP WHERE ROWNUM = 1) LOOP
  3        FOR V_I IN 1..100000 LOOP
  4          INSERT
  5            INTO TBL
  6            VALUES V_REC;
  7          COMMIT;
  8        END LOOP;
  9      END LOOP;
 10  END;
 11  /

PL/SQL procedure successfully completed.

Elapsed: 00:02:10.38
SQL> COMMIT
  2  /

Commit complete.

Elapsed: 00:00:00.01
SQL> SELECT  COUNT(*)
  2    FROM  SYS.SNAP_XCMT$
  3  /

  COUNT(*)
----------
    100001

Elapsed: 00:00:00.02
SQL> EXEC DBMS_MVIEW.REFRESH('TBL_MV')

PL/SQL procedure successfully completed.

Elapsed: 00:00:03.89
SQL> SELECT  COUNT(*)
  2    FROM  SYS.SNAP_XCMT$
  3  /

  COUNT(*)
----------
         0

Elapsed: 00:00:00.01
SQL> 


SY.

Сообщение было отредактировано: 13 июн 19, 16:39
13 июн 19, 16:38    [21908075]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
MaXie
Member

Откуда:
Сообщений: 114
Благодарю Вас за ответ.

При создании материализованного представления все равно устанавливается монопольная блокировка на мастер-таблицу. ( И само создание, при распухшем SNAP_XCMT$, длится значительное время, т.к. читается весь справочник. (

Можно что нибудь с этим сделать? Как то ускорить процесс?
13 июн 19, 17:36    [21908134]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
В приведенном примере c 100,000 строк в SNAP_XCMT$ refresh занял < 4 секунд.

SY.
13 июн 19, 17:46    [21908142]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Ну и System Tablespace Growing Too Fast, SYS.SNAP_XCMT$ Table is the Largest Consumer of Space (Doc ID 2406069.1).

SY.
13 июн 19, 17:52    [21908148]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
MaXie
Member

Откуда:
Сообщений: 114
В моем случае счет идет на сотни миллионов записей в этом справочнике(DBA продолбали). (

При создании мат.представления, насколько я понимаю, блокировка ставится на "журнал" и в мастер-таблицу ни чего не вставишь(хоть и чтение разрешено), пока не будет создано мат.представление. Т.к. при создании мат.представления идут обращения к справочнику, время пока он прочитается, к сожалению, измеряется десятками минут, а это много. (

Спасибо за ссылку, но у меня нет доступа к металинку. Я встречал ответ от тех.поддержки Оракла на этот счет. Да, оно сводится к двум пунктам: либо создание мат.представления и последующий "рефреш", либо "дроп" всех "журналов". Я бы "дропнул" и все "журналы", но их удаление, это монопольная блокировка на мастер-таблицу и перечитывание огромного справочника. Ни "параллель" не срабатывает, ни просто параллельный запуск скриптов на удаление из нескольких сессий. В итоге "даун-тайм" выходит слишком большой. (
13 июн 19, 18:44    [21908184]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
MaXie
Т.к. при создании мат.представления идут обращения к справочнику, время пока он прочитается, к сожалению, измеряется десятками минут, а это много.


Пробовал:

CREATE MATERIALIZED VIEW TBL_MV
  REFRESH FAST
  ON DEMAND
  WITH ROWID
  AS
    SELECT  ROWID RID
      FROM  TBL
      WHERE 1 = 2
/


SY.
13 июн 19, 18:50    [21908185]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
MaXie
пока не будет создано мат.представление.

ON PREBUILT TABLE не?
13 июн 19, 18:51    [21908186]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
MaXie
Member

Откуда:
Сообщений: 114
автор
Пробовал:


Да, создал таблицу с нуля и на пустую создавал мат.представление.

автор
ON PREBUILT TABLE не?


Спасибо за Ваш ответ. Можете чуть подробнее свою мысль озвучить? Признаться не сталкивался с такой опцией.

P.S. Сразу забыл указать, речь идет про Oracle Database 12c Enterprise Edition Release 12.1.0.2.0.
13 июн 19, 18:57    [21908190]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
MaXie
Member

Откуда:
Сообщений: 114
автор
ON PREBUILT TABLE не?


Вспомнил что это такое. У нас при рефакторинге большой таблицы, Экземпляр на блокировках "заклинило". Не вариант. (
13 июн 19, 19:03    [21908193]     Ответить | Цитировать Сообщить модератору
 Re: Очистить справочник SYS.SNAP_XCMT$  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
MaXie
У нас при рефакторинге большой таблицы, Экземпляр на блокировках "заклинило".

Слабо представляю себе что конкретно означает процитированный фрагмент и как это все относится к переводу неспешно подготовленной таблицы в статус mat.view, но Вам виднее.
13 июн 19, 19:28    [21908203]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить