Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Exp и согласованность sequences.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49764
Добрый день!

Было несколько случае, когда успешно сделанный горячий экспорт (consistent=Y) был включен, при импорте восстанавливалался не совсем корректно.

А именно : импорт проходил успешно. Но после открытия БД текущие значения sequences отставали от актуальных (тех которые были в таблице). Ситуацию лечили вручную. Корректировкой alter sequence и т.д.

Пытались добавить опции FLASHBACK_SCN но это также не помогло.

Была ли такая ситуация у кого нибудь, и кто как боролся?

(Oracle 10.2.0.4 HP-UX 64bit)

Спасибо.
8 ноя 10, 11:49    [9740617]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Soleri
Member

Откуда:
Сообщений: 80
у меня было такое но expdp с FLASHBACK_SCN решил эту проблему
8 ноя 10, 12:34    [9740994]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Soleri
Member

Откуда:
Сообщений: 80
Linux x64 11.2.0.1. Undo Retention пришлось увеличить что бы экспорт удачно проходил
8 ноя 10, 12:36    [9741013]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
Soleri
Linux x64 11.2.0.1. Undo Retention пришлось увеличить что бы экспорт удачно проходил


Это у Вас Snapshot to old скорее всего вываливался при установке consistent = y )

У автора, как он пишет, экспорт нормально проходит
8 ноя 10, 13:01    [9741252]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
2 mayton
теоретически такого бы не должно быть
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=786990&hl=#9388648

не под SYSDBA случаем экспортировали?
8 ноя 10, 14:28    [9742045]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49764
Под пользователем-владельцем.
8 ноя 10, 14:43    [9742194]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
Если пользователь дернет sequence непосредственно перед изменением соответствующей таблицы в котором он используется (например как PK), то consistent = y (i.e. TRANSACTION READ ONLY) уже не поможет

Пример:
About to export the entire database ...
. exporting tablespace definitions
. exporting profiles
. exporting user definitions
. exporting roles
. exporting resource costs
. exporting rollback segment definitions
. exporting database links
. exporting sequence numbers
. exporting directory aliases
. exporting context namespaces
. exporting foreign function library names
. exporting object type definitions
. exporting system procedural objects and actions
. exporting pre-schema procedural objects and actions
. exporting cluster definitions
. about to export SYSTEM's tables via Conventional Path ...
. . exporting table            AQ$_INTERNET_AGENTS          0 rows exported
. . exporting table       AQ$_INTERNET_AGENT_PRIVS          0 rows exported
. . exporting table                    DEF$_AQCALL          0 rows exported
. . exporting table                   DEF$_AQERROR          0 rows exported
8 ноя 10, 14:52    [9742287]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
oraspec
Если пользователь дернет sequence непосредственно перед изменением соответствующей таблицы в котором он используется (например как PK), то consistent = y (i.e. TRANSACTION READ ONLY) уже не поможет

Пример:
About to export the entire database ...
. exporting tablespace definitions
. exporting profiles
. exporting user definitions
. exporting roles
. exporting resource costs
. exporting rollback segment definitions
. exporting database links
. exporting sequence numbers
. exporting directory aliases
. exporting context namespaces
. exporting foreign function library names
. exporting object type definitions
. exporting system procedural objects and actions
. exporting pre-schema procedural objects and actions
. exporting cluster definitions
. about to export SYSTEM's tables via Conventional Path ...
. . exporting table            AQ$_INTERNET_AGENTS          0 rows exported
. . exporting table       AQ$_INTERNET_AGENT_PRIVS          0 rows exported
. . exporting table                    DEF$_AQCALL          0 rows exported
. . exporting table                   DEF$_AQERROR          0 rows exported


это была вырезка из

http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch01.htm#1005615

раздел

Export Messages
8 ноя 10, 14:55    [9742303]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49764
По вышеприведённой ссылке.
Exporting Sequences

If transactions continue to access sequence numbers during an export, sequence numbers can be skipped. The best way to ensure that sequence numbers are not skipped is to ensure that the sequences are not accessed during the export.

Sequence numbers can be skipped only when cached sequence numbers are in use. When a cache of sequence numbers has been allocated, they are available for use in the current database. The exported value is the next sequence number (after the cached values). Sequence numbers that are cached, but unused, are lost when the sequence is imported.

Насколько я понял... Если кешировнные сиквенсы превратить в некешированные, то эту ситуацию можно обойти.

Верно?
8 ноя 10, 15:02    [9742393]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
mayton
По вышеприведённой ссылке.
Exporting Sequences

If transactions continue to access sequence numbers during an export, sequence numbers can be skipped. The best way to ensure that sequence numbers are not skipped is to ensure that the sequences are not accessed during the export.

Sequence numbers can be skipped only when cached sequence numbers are in use. When a cache of sequence numbers has been allocated, they are available for use in the current database. The exported value is the next sequence number (after the cached values). Sequence numbers that are cached, but unused, are lost when the sequence is imported.

Насколько я понял... Если кешировнные сиквенсы превратить в некешированные, то эту ситуацию можно обойти.

Верно?


Не верно
8 ноя 10, 15:03    [9742407]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
oraspec
Если пользователь дернет sequence непосредственно перед изменением соответствующей таблицы в котором он используется (например как PK), то consistent = y (i.e. TRANSACTION READ ONLY) уже не поможет

Пример:


И всё же, хотелось бы полноценный пример: много последовательностей, много объектов (чтобы был ощутимый зазор между экспортом последовательностей и таблиц), много таблиц. В таблицу, которая экспортируется последней, идёт интенсивная вставка с использованием одной из последовательностей - желательно, попадающей в экспорт первой. И вот тогда можно попытаться угадать момент выполнения SET TRANSACTION READ ONLY: до экспорта последовательностей или после?..

У меня, к моему большому стыду, до сих пор не дошли руки - ни подтвердить, ни опровергнуть. :(
8 ноя 10, 15:08    [9742460]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
suPPLer
oraspec
Если пользователь дернет sequence непосредственно перед изменением соответствующей таблицы в котором он используется (например как PK), то consistent = y (i.e. TRANSACTION READ ONLY) уже не поможет

Пример:


И всё же, хотелось бы полноценный пример: много последовательностей, много объектов (чтобы был ощутимый зазор между экспортом последовательностей и таблиц), много таблиц. В таблицу, которая экспортируется последней, идёт интенсивная вставка с использованием одной из последовательностей - желательно, попадающей в экспорт первой. И вот тогда можно попытаться угадать момент выполнения SET TRANSACTION READ ONLY: до экспорта последовательностей или после?..

У меня, к моему большому стыду, до сих пор не дошли руки - ни подтвердить, ни опровергнуть. :(


без разницы на SET TRANSACTION READ ONLY
последовательности обрабатываются вне транзакций
8 ноя 10, 15:13    [9742500]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
oraspec
без разницы на SET TRANSACTION READ ONLY
последовательности обрабатываются вне транзакций

... их никто к SET TRANSACTION READ ONLY и не привязывает, именно поэтому мы можем получить после импорта номера последовательностей больше, чем они были на момент начала экспорта ... но не меньше, чем в использующих последовательности таблицах ...
8 ноя 10, 15:23    [9742574]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
oraspec
без разницы на SET TRANSACTION READ ONLY
последовательности обрабатываются вне транзакций


Подробней, пожалуйста. Я сегодня ночь не спамши, я от мысли отстаю... Намёк на это?

http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch01.htm#1005661
Export of certain metadata may require the use of the SYS schema within recursive SQL. In such situations, the use of CONSISTENT=y will be ignored. Oracle Corporation recommends that you avoid making metadata changes during an export process in which CONSISTENT=y is selected.


Так хочется повторяемый пример, доказывающий, что последовательности входят в эту certain metadata.
8 ноя 10, 15:23    [9742580]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
suPPLer
oraspec
без разницы на SET TRANSACTION READ ONLY
последовательности обрабатываются вне транзакций


Подробней, пожалуйста. Я сегодня ночь не спамши, я от мысли отстаю... Намёк на это?

http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch01.htm#1005661
Export of certain metadata may require the use of the SYS schema within recursive SQL. In such situations, the use of CONSISTENT=y will be ignored. Oracle Corporation recommends that you avoid making metadata changes during an export process in which CONSISTENT=y is selected.


Так хочется повторяемый пример, доказывающий, что последовательности входят в эту certain metadata.


нет это Не certain metadata
8 ноя 10, 15:27    [9742610]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
Собственно есть ещё возможные причины неконсистентного экспорта
http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/exp_imp.htm#sthref2252
CONSISTENT
Specifies whether or not Export uses the SET TRANSACTION READ ONLY statement to ensure that the data seen by Export is consistent to a single point in time and does not change during the execution of the exp command. You should specify CONSISTENT=y when you anticipate that other applications will be updating the target data after an export has started.

If you use CONSISTENT=n, each table is usually exported in a single transaction. However, if a table contains nested tables, the outer table and each inner table are exported as separate transactions. If a table is partitioned, each partition is exported as a separate transaction.

Therefore, if nested tables and partitioned tables are being updated by other applications, the data that is exported could be inconsistent. To minimize this possibility, export those tables at a time when updates are not being done.
8 ноя 10, 15:36    [9742678]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Viewer,

а разве подчёркнутое не относится к CONSISTENT=Y? Каждая таблица выгружается в своей транзакции, и потому относительно таблицы данные согласованы на начало выгрузки - но в случае секционирования и вложенных таблиц нет согласованности даже на этом уровне.
8 ноя 10, 15:43    [9742740]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
suPPLer
Viewer,

а разве подчёркнутое не относится к CONSISTENT=N? Каждая таблица выгружается в своей транзакции, и потому относительно таблицы данные согласованы на начало выгрузки - но в случае секционирования и вложенных таблиц нет согласованности даже на этом уровне.


Неудачно опечатался.
8 ноя 10, 15:43    [9742747]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
2 suPPLer
да, ты прав, я точно также неудачно прочитал :)
8 ноя 10, 15:55    [9742877]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49764
В принципе, решением было-бы создать некий post-export скриптик, который выгружает актуальное состояние dba_sequences. Не очень удобно, но что делать.
9 ноя 10, 11:17    [9746641]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Maltsev Max
Member

Откуда: Россия, Пермь
Сообщений: 352
В свое время столкнулся с этой проблемой и написал скрипт, который дергаю после разворачивания дампа. Пользуйтесь:

  ----------------------------------------------------------------------------------------------------------------
  -- 'Подкрутка' SEQUENCE до максимального значения PK в соответствии с зависимостями таблицы и SEQUENCE
  -- Условия:
  --  1. У таблицы существует PK
  --  2. PK не является составным 
  procedure update_sequence is
    text varchar2(2048);
  
    sql_text        varchar2(2048);
    pk_column_value number;
  
    cnt       number;
    seq_value number;
  begin
  
    for cur in (select distinct d1.referenced_name seq_name,
                                s.last_number,
                                d2.referenced_name table_name,
                                cc.column_name,
                                cc.position,
                                c.constraint_name
                  from user_dependencies d1,
                       user_dependencies d2,
                       user_constraints  c,
                       user_cons_columns cc,
                       user_sequences    s
                 where
                -- Сиквенсы и таблицы связаны через триггер
                 d1.name = d2.name
             and d1.type = 'TRIGGER'
             and d1.referenced_type = 'SEQUENCE'
             and d2.referenced_type = 'TABLE'
                -- Не берём из корзины
             and d1.referenced_name not like 'BIN$%'
             and d2.referenced_name not like 'BIN$%'
                -- Свзяь таблицы и констрента
             and d2.referenced_name = c.table_name(+)
                -- Для PK должен быть констрейнт такого типа
             and c.constraint_type(+) = 'P'
             and c.constraint_name = cc.constraint_name(+)
             and d1.referenced_name = s.sequence_name
                 order by table_name, position) loop
      text := 'table: ' || cur.table_name || ', seq: ' || cur.seq_name ||
              ', seq_value: ' || cur.last_number;
    
      if cur.column_name is not null then
        sql_text := 'select max(' || cur.column_name || ') from ' ||
                    cur.table_name;
        --        dbms_output.put_line(sql_text);
        execute immediate sql_text
          into pk_column_value;
      
        text := text || ', pk: ' || cur.column_name || ', max(pk): ' ||
                pk_column_value;
        if pk_column_value >= cur.last_number then
          cnt  := pk_column_value - cur.last_number + 1;
          text := 'ADD ' || cnt || ' ' || text;
          -- Докручиваем      
        
          sql_text := 'select ' || cur.seq_name || '.nextval from dual';
          for i in 0 .. cnt loop
            execute immediate sql_text
              into seq_value;
          end loop;
          sql_text := 'select ' || cur.seq_name || '.currval from dual';
          execute immediate sql_text
            into seq_value;
          text := text || ', new seq_value: ' || seq_value;
        
        end if;
      else
        text := 'ERR ' || text;
      end if;
      dbms_output.put_line(text);
    end loop;
  
    dbms_output.put_line('==================================');
  
    for cur in (select us.sequence_name seq_name
                  from user_sequences us
                minus
                select distinct d1.referenced_name seq_name
                  from user_dependencies d1,
                       user_dependencies d2,
                       user_constraints  c,
                       user_cons_columns cc,
                       user_sequences    s
                 where
                -- Сиквенсы и таблицы связаны через триггер
                 d1.name = d2.name
             and d1.type = 'TRIGGER'
             and d1.referenced_type = 'SEQUENCE'
             and d2.referenced_type = 'TABLE'
                -- Свзяь таблицы и констрента
             and d2.referenced_name = c.table_name(+)
                -- Для PK должен быть констрейнт такого типа
             and c.constraint_type(+) = 'P'
             and c.constraint_name = cc.constraint_name(+)
             and d1.referenced_name = s.sequence_name
             and cc.column_name is not null) loop
      dbms_output.put_line('ERR ' || cur.seq_name || ' not matched');
    end loop;
  end;

10 ноя 10, 10:37    [9752308]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49764
Maltsev Max,

Спасибо. Как раз на неделе будет еще один экспорт по горячему. Проверю ваш скрипт.
21 ноя 10, 21:07    [9815832]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
mayton,

В принципе изходя из приведенного Вами фрагмента документации:
Exporting Sequences
Sequence numbers can be skipped only when cached sequence numbers are in use...


Можно сделать вывод, что если кеша хватает на все время экспорта, то ситуации с отставанием быть не должно.
22 ноя 10, 08:30    [9816556]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
2 Сергей Арсеньев,
теоретически ситуации с отставанием быть не должно вообще
продублирую логику, которую я уже приводил по ссылке выше
Viewer
1. Экспорт выполняется с опцией CONSISTENT=Y и не под аккаунтом SYS/SYSDBA
2. CONSISTENT=Y устанавливает транзакцию SET TRANSACTION READ ONLY
3. При SET TRANSACTION READ ONLY изменения таблиц после начала экспорта не попадают в файл экспорта
4. Sequence numbers экспортируются до экспорта табличных данных ("The exported value is the next sequence number (after the cached values)")
т.е. можем получить только потерянные (неиспользованные) номера (дырки) в последовательностях, но не отставание номеров последовательностей от данных в таблицах.
22 ноя 10, 10:26    [9817020]     Ответить | Цитировать Сообщить модератору
 Re: Exp и согласованность sequences.  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
Viewer
продублирую логику, которую я уже приводил по ссылке выше

Sorry, ошибся со ссылкой,
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=786990&hl=#9388648
22 ноя 10, 10:32    [9817060]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить