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

Ключ

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

...

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

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

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

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


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

...

(Вариант №1)

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

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


set

...

nls_lang=russian_cis.ru8pc866
или

...

так:
chcp

...

65001
set

...

NLS_LANG=AMERICAN_AMERICA.AL32UTF8
sqlplus

...

system/qqq@sbis58

SET

...

PAGESIZE

...

0

...

FEEDBACK

...

OFF

...

VERIFY

...

OFF

...

HEADING

...

OFF

...

LINESIZE

...

1000
SELECT

...

'INCLUDE=USER:"IN

...

('''

...

||

...

LISTAGG(username,

...

''',

...

''')

...

WITHIN

...

GROUP

...

(ORDER

...

BY

...

username)

...

||

...

''')"'
FROM

...

dba_users
WHERE

...

username

...

NOT

...

IN

...

('SYS','SYSTEM','ORACLE_OCM','DBSNMP','OUTLN','XDB','APPQOSSYS')
 

...

AND

...

username

...

LIKE

...

'%'

...

--

...

сюда

...

можно

...

добавить

...

условие,

...

например,

...

для

...

имён

...

с

...

кириллицей
/

Скрипт

...

вернет

...

список

...

пользователей:

INCLUDE=USER:"IN

...

('ANONYMOUS',

...

'AUDSYS',

...

'DBSFWUSER',

...

'DIP',

...

'GGSYS',

...

'GSMADMIN_INTERNAL',

...

'GSMCATUSER',

...

'GSMUSER',

...

'REMOTE_SCHEDULER_AGENT',

...

'SUPERMAG',

...

'SUPERMAG_SYS',

...

'SYS$UMF',

...

'SYSBACKUP',

...

'SYSDG',

...

'SYSKM',

...

'SYSRAC',

...

'WMSYS',

...

'XS$NULL',

...

'ИВАНОВ',

...

'ПЕТРОВ',

...

'СИДОРОВ')"

Создать

...

файл:

...

export.par
Опции

...

указанные

...

в

...

команде,

...

четко

...

указывают

...

на

...

то,

...

что

...

снимается

...

не

...

полный

...

дамп,

...

а

...

только

...

экспортировали

...

дамп

...

с

...

метаданными

...

пользователей,

...

ролей

...

и

...

привилегий.

FULL=Y
CONTENT=METADATA_ONLY
INCLUDE=USER:"IN ('ANONYMOUS', 'AUDSYS', 'DBSFWUSER', 'DIP', 'GGSYS', 'GSMADMIN_INTERNAL', 'GSMCATUSER', 'GSMUSER', 'REMOTE_SCHEDULER_AGENT', 'SUPERMAG', 'SUPERMAG_SYS', 'SYS$UMF', 'SYSBACKUP', 'SYSDG', 'SYSKM', 'SYSRAC', 'WMSYS', 'XS$NULL', 'ИВАНОВ', 'ПЕТРОВ', 'СИДОРОВ')"
INCLUDE=ROLE
INCLUDE=ROLE_GRANT
INCLUDE=SYSTEM_GRANT
INCLUDE=OBJECT_GRANT
INCLUDE=DEFAULT_ROLE
INCLUDE=TABLESPACE_QUOTA
INCLUDE=PROFILE
DIRECTORY=dir
DUMPFILE=supermag_metadata.dmp
LOGFILE=supermag_metadata.log
VERSION=19.0

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



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

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

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

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


DIRECTORY=dir
DUMPFILE=users_and_roles_only.dmp
LOGFILE=export_users.log
FULL=Y
CONTENT=METADATA_ONLY
EXCLUDE=SCHEMA:"='SYS'"
EXCLUDE=SCHEMA:"='SYSTEM'"
EXCLUDE=SCHEMA:"='ORACLE_OCM'"
EXCLUDE=SCHEMA:"='DBSNMP'"
EXCLUDE=SCHEMA:"='OUTLN'"
EXCLUDE=SCHEMA:"='XDB'"
EXCLUDE=SCHEMA:"='APPQOSSYS'"


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


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

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

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

  • кодировка AL32UTF8 
  • установить параметр: NLS_LENGTH_SEMANTICS = CHAR  
  • установить параметр: MAX_STRING_SIZE = EXTENDED

После создания БД. Необходимо синхронизировать перечень табличных пространств между созданной и экспортируемой базой. Чаще всего нужно будет завести недостающие пространства, и файлы для них. Например, табличное пространство INDX и его файлы.

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

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

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

Вариант инициализации - подчиненная база, без заполнения начальными данными. (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 ADMINISTER DATABASE TRIGGER TO SUPERMAG;
  GRANT ALTER ANY ROLE TO SUPERMAG;
  GRANT ALTER USER TO SUPERMAG WITH ADMIN OPTION;
  GRANT ANALYZE ANY TO SUPERMAG;
  GRANT CREATE DATABASE LINK TO SUPERMAG;
  GRANT CREATE LIBRARY TO SUPERMAG;
  GRANT CREATE PUBLIC SYNONYM TO SUPERMAG;
  GRANT CREATE ROLE TO SUPERMAG WITH ADMIN OPTION;
  GRANT CREATE SNAPSHOT TO SUPERMAG;
  GRANT CREATE TABLE TO SUPERMAG;
  GRANT CREATE USER TO SUPERMAG WITH ADMIN OPTION;
  GRANT DROP ANY ROLE TO SUPERMAG WITH ADMIN OPTION;
  GRANT DROP PUBLIC SYNONYM TO SUPERMAG;
  GRANT DROP USER TO SUPERMAG WITH ADMIN OPTION;
  GRANT GRANT ANY ROLE TO SUPERMAG WITH ADMIN OPTION;
  GRANT SELECT ON  SYS.DBA_CONS_COLUMNS TO SUPERMAG WITH GRANT OPTION;
  GRANT SELECT ON  SYS.DBA_CONSTRAINTS TO SUPERMAG WITH GRANT OPTION;
  GRANT SELECT ON  SYS.DBA_JOBS TO SUPERMAG WITH GRANT OPTION;
  GRANT SELECT ON  SYS.DBA_ROLES TO SUPERMAG;
  GRANT SELECT ON  SYS.DBA_TAB_COLUMNS TO SUPERMAG WITH GRANT OPTION;
  GRANT SELECT ON  SYS.DBA_USERS TO SUPERMAG WITH GRANT OPTION;
  GRANT EXECUTE ON  SYS.DBMS_ALERT TO SUPERMAG;
  GRANT EXECUTE ON  SYS.DBMS_LOCK TO SUPERMAG;
  GRANT EXECUTE ON  SYS.DBMS_OUTPUT TO SUPERMAG;
  GRANT EXECUTE ON  SYS.DBMS_PIPE TO SUPERMAG;
  GRANT SELECT ON  SYS.V_$SESSION TO SUPERMAG;
  GRANT SELECT ON SYS.V_$INSTANCE TO SUPERMAG;

...

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

Желательно выполнить несколько раз. (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 будут проверяться ограничением, а старые данные остаются нетронутыми (даже если они нарушают ограничение). Вы указали, что данные заведомо корректны, поэтому никаких проблем не возникнет.

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

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

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

 

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

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


Image Added


Дополнение инструкции не исключается, все зависит от дополнительных проверок и опытной экплуатцииэксплуатции....