Восстановить все последовательности в БД (оракул) - PullRequest
2 голосов
/ 23 января 2012

Добрый день.У меня очень специфическая задача: восстановить все последовательности в базе данных.В нем более 400 таблиц, поэтому я не могу сделать это руками.Может ли кто-нибудь помочь мне сделать это?Большое спасибо ..

1 Ответ

0 голосов
/ 23 января 2012

Обратите внимание, что это очень опасно. Вы можете очень хорошо делать ошибки. Сначала запустите команду select, чтобы проверить, что вы собираетесь делать, и создайте таблицу выбора, чтобы при необходимости вы могли заново создать синонимы вручную.

Использование all_synonyms или dba_synonyms вместо user_synonyms может привести к удалению системных синонимов не делайте этого , если вы хотите, чтобы ваша база данных впоследствии работала

Я бы также рекомендовал протестировать код на 1 создаваемом вами синониме, чтобы убедиться, что он точно соответствует вашему желанию.

Плюс я не вижу смысла делать это вообще? Если синонимы есть, зачем вам их заново генерировать? Или это делается на другом сервере? Если это так, добавьте @server_name после user_synonyms и удалите drop.

begin

  for xx in ( select * from user_sequences ) loop

    execute immediate 'drop sequence ' || xx.sequence_name;
    execute immediate 'create sequence ' || xx.sequence_name
                      ||  ' start with ' || xx.min_value
                      ||  '  ends with ' || xx.max_value
                      || case when xx.cycle_flag = 'N' then ' nocycle ' 
                              else ' cycle ' end
                      || case when xx.cache_size = 0 then ' nocache ' 
                              else ' cache ' end || xx.cache_size
                      || case when xx.order_flag = 'N' then ' noorder ' 
                              else ' order ' end
                      ;

   end loop;

end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...