Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Предупреждение

Ниже приведены примеры команд и скриптов, конечный синтаксис будет отличаться.

Перед выполнением нужно внести соответствующие изменения описывающие параметры подключения и другие атрибуты базы данных и ее состава данных.


Экспорт данных.

Исходная БД должна иметь кодировку CL8MSWIN1251

Получаем дамп БД (только данные). 

Опции указанные в команде, четко указывают на то, что снимается не полный дамп, а только данные схемы supermag

...

expdp system/qqq@sbis58 directory=dir schemas=supermag content=DATA_ONLY dumpfile=supermag.dmp logfile=supermag.log


Получаем дамп БД (только метаданные). (Вариант №1)

Можно использовать, если количество пользователей в БД - небольшое. В противном случае, получившееся значение не уместится в скрипте.

...

где, строка INCLUDE=USER:... повторяет результат выше выполненного скрипта.



Пример файла - export.par

Произвести экспорт данных:
expdp system/qqq@sbis58 PARFILE=C:\export.par

Получаем дамп БД (только метаданные). (Вариант №2)

Создать файл: export2.par
Опции указанные в команде, четко указывают на то, что снимается не полный дамп, а только экспортировали дамп с метаданными пользователей, ролей и привилегий.

...

Произвести экспорт данных:
expdp system/qqq@sbis58 PARFILE=C:\export2.par


Подготовка БД для импорта.

Создание новой БД. 

Обязательно, при создании выбрать (указать):

...

Размер файлов табличных пространств, и их количество указываются таким образом, чтобы данные которые мы будем загружать - уместились.

Инициализация БД.

Провести инициализацию БД с помощью программы "Модуль генерации БД".

Вариант инициализации - подчиненная база, без заполнения начальными данными. (3-й пункт меню).

Отключение триггеров и ограничений.

Можно использовать скрипты, которые выполнят данную операцию. Но, автору данной инструкции удобнее использовать программу TOAD. В которой для схемы supermag - отбираются (поочередно) все ограничения и триггеры - и производится их отключение.

...

Информация

Скрипт для отключения всех включённых ограничений в схеме supermag. Он отключает ограничения в безопасном порядке: сначала внешние ключи (чтобы не зависеть от родительских ограничений), затем первичные/уникальные ключи, потом проверочные.


sql


SET
SERVEROUTPUT ON;
DECLARE v_sql VARCHAR2(4000); BEGIN FOR c IN (SELECT table_name, constraint_name, constraint_type FROM user_constraints WHERE status = 'ENABLED' ORDER BY CASE constraint_type WHEN 'R' THEN 1 -- сначала внешние ключи WHEN 'P' THEN 2 -- затем первичные WHEN 'U' THEN 3 -- уникальные WHEN 'C' THEN 4 -- проверочные ELSE 5 END) LOOP BEGIN v_sql := 'ALTER TABLE "' || c.table_name || '" DISABLE CONSTRAINT "' || c.constraint_name || '"'; EXECUTE IMMEDIATE v_sql; DBMS_OUTPUT.PUT_LINE('Отключено ограничение: ' || c.constraint_name || ' на таблице ' || c.table_name); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Ошибка отключения ' || c.constraint_name || ': ' || SQLERRM); END; END LOOP; END; /

Что делает скрипт:

  • Находит все включённые (status = 'ENABLED') ограничения в текущей схеме.

  • Отключает их в порядке: внешние ключи → первичные ключи → уникальные ограничения → проверочные. Это позволяет избежать ошибок из-за зависимостей (например, отключение первичного ключа, на который ссылается включённый внешний ключ, невозможно; сначала нужно отключить внешний ключ).

  • Выполняет ALTER TABLE ... DISABLE CONSTRAINT ... без дополнительных параметров.

  • Выводит результат или ошибку.

 

Импорт данных.

create or replace directory dir as 'C:\BASE';

Импорт данных.

Опции указанные в команде, четко указывают на то, что ,будет загружен не полный дамп, а только данные таблиц.

impdp system/qqq@sbis58 directory=dir schemas=supermag content=DATA_ONLY dumpfile=supermag.dmp logfile=supermag_import.log   table_exists_action=TRUNCATE

Импорт метаданных.

Опции указанные в команде, четко указывают на то, что ,будет загружен не полный дамп, а только метаданные.

impdp system/qqq@ORAUNI4 DIRECTORY=dir DUMPFILE=supermag_metadata.dmp LOGFILE=import.log FULL=Y CONTENT=METADATA_ONLY

Скрипты выдачи прав.

Выполнить скрипты выдачи прав.

...

grant select on V_$SESSION to SUPERMAG with grant option;
grant select on V_$INSTANCE to SUPERMAG;
grant execute on DBMS_ALERT to SUPERMAG;
grant execute on DBMS_PIPE to SUPERMAG;
grant select on DBA_USERS to SUPERMAG with grant option;
grant select on DBA_ROLES to SUPERMAG;
grant select on dba_constraints to SUPERMAG with grant option; 
grant select on dba_tab_columns to SUPERMAG with grant option; 
grant select on dba_cons_columns to SUPERMAG with grant option; 
grant create role to SUPERMAG;
grant alter any role to SUPERMAG;
grant create library to SUPERMAG;
grant create public synonym to SUPERMAG;
grant drop public synonym to SUPERMAG;
grant administer database trigger to SUPERMAG;
grant execute on DBMS_LOCK to SUPERMAG;
grant execute on DBMS_UTILITY to SUPERMAG with grant option;
grant select on dba_jobs to SUPERMAG with grant option;
grant create database link to SUPERMAG;
grant create snapshot to SUPERMAG;
grant create table to SUPERMAG;
grant ANALYZE ANY to SUPERMAG;
grant create any index to SUPERMAG;
grant drop any index to SUPERMAG;
grant global query rewrite to SUPERMAG;
grant alter system to SUPERMAG; 
grant create user to SUPERMAG with admin option;
grant alter user to SUPERMAG with admin option;
grant drop user to SUPERMAG with admin option;
grant create role to SUPERMAG with admin option;
grant drop any role to SUPERMAG with admin option;
grant grant any role to SUPERMAG with admin option;
grant select on dba_users to supermag_user;

Перекомпиляция процедур и функций.

Желательно выполнить несколько раз. (3-5 раз).

@c:\oracle\ORA12\RDBMS\ADMIN\utlrp.sql;

Активация триггеров и ограничений.

Можно использовать скрипты, которые выполнят данную операцию. Но, автору данной инструкции удобнее использовать программу TOAD. В которой для схемы supermag - отбираются (поочередно) все ограничения и триггеры - и производится их активация (включение).

...

Информация

Ниже представлен PL/SQL-скрипт для включения всех отключённых ограничений в схеме supermag (Oracle 19) без проверки уже существующих данных (опция ENABLE NOVALIDATE).

Скрипт предполагает выполнение от имени владельца схемы supermag. Если вы подключаетесь под другим пользователем, замените user_constraints на all_constraints с фильтром по owner = 'SUPERMAG'.


sql


SET SERVEROUTPUT ON;
DECLARE
   v_sql VARCHAR2(4000);
BEGIN
   FOR c IN (SELECT table_name, constraint_name, constraint_type
             FROM user_constraints 
             WHERE status = 'DISABLED'
             ORDER BY CASE constraint_type 
                        WHEN 'P' THEN 1   -- первичные ключи
                        WHEN 'U' THEN 2   -- уникальные
                        WHEN 'R' THEN 3   -- внешние ключи
                        WHEN 'C' THEN 4   -- проверочные
                        ELSE 5
                      END)
   LOOP
      BEGIN
         v_sql := 'ALTER TABLE "' || c.table_name || '" ENABLE NOVALIDATE CONSTRAINT "' || c.constraint_name || '"';
         EXECUTE IMMEDIATE v_sql;
         DBMS_OUTPUT.PUT_LINE('Включено ограничение: ' || c.constraint_name || ' на таблице ' || c.table_name);
      EXCEPTION
         WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('Ошибка включения ' || c.constraint_name || ': ' || SQLERRM);
      END;
   END LOOP;
END;
/

Что делает скрипт:

  • Находит все отключённые (status = 'DISABLED') ограничения в текущей схеме.

  • Упорядочивает их по типу: сначала первичные и уникальные ключи, затем внешние, затем проверочные. Это позволяет избежать ошибок при включении внешних ключей (для них необходимо, чтобы родительский ключ уже был активен).

  • Для каждого ограничения выполняет ALTER TABLE ... ENABLE NOVALIDATE CONSTRAINT ..., что включает констрейнт без проверки соответствия существующих данных.

  • Выводит в консоль результат (успех или ошибку).

Важные замечания:

  • ENABLE NOVALIDATE гарантирует, что все новые операции DML будут проверяться ограничением, а старые данные остаются нетронутыми (даже если они нарушают ограничение). Вы указали, что данные заведомо корректны, поэтому никаких проблем не возникнет.

  • Для первичных и уникальных ключей при включении будет создан уникальный индекс (если он был удалён при предыдущем отключении). Поскольку данные уникальны, операция пройдёт успешно.

  • Если какой-то внешний ключ ссылается на ограничение в другой схеме или таблице, убедитесь, что родительское ограничение уже активно (наш порядок включения минимизирует риск, но при кросс-схемных ссылках может потребоваться отдельная обработка).

  • Скрипт не требует дополнительных привилегий, если выполняется от владельца схемы.

 

Проверка структуры БД.

Обязательно, после выполнения всех действий.

...

Проверка структуры с эталоном производится в программе "Административный модуль" - "База данных" - "Утилиты" - "Эталон" 

Промышленная эксплуатация.

Начинаем этап опытно-промышленную эксплуатацию. Затем можно принять решение о запуске в штатном режиме.

...