Обрезать все таблицы и сбросить автоинкремент - PullRequest
1 голос
/ 23 января 2020

Необходимо подготовить все таблицы в базе данных Oracle для производственной среды, необходимо усечь все таблицы и сбросить автоинкремент для столбцов. Как я могу это сделать?

1 Ответ

4 голосов
/ 23 января 2020

Вот что я хотел бы сделать -

Выполните следующее для генерации усеченных операторов. Обратите внимание, что он не усекает таблицы

select ' truncate table  ' || table_name || ';' from user_tables;

Просмотрите скрипт и убедитесь, что это то, что я хочу. Затем я запустите скрипт.

Сделайте аналогичные действия для последовательностей, сначала сгенерировав операторы следующим образом:

--Reset regular sequences.
--(Ignore identity sequences to avoid "ORA-32793: cannot alter a system-generated sequence".)
select 'alter sequence ' || sequence_name || ' restart start with 1;' v_sql
from user_sequences
where sequence_name not in (select sequence_name from user_tab_identity_cols)
order by 1;

--Reset sequences used in identity columns.
select 'alter table ' || table_name || ' modify ' ||
    '(' || column_name || ' generated by default on null as identity start with 1);' v_sql
from user_tab_identity_cols
order by 1;
...