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

Откуда: Москва
Сообщений: 175
Добрый день.
Подскажите пожалуйста, как изящнее решить задачу.
Задача по сборке тестовой схемы. Сейчас реализована последовательным запуском из sql plus нескольких скриптов. Хочу перетащить весь алгоритм сборки в СУБД.

1. По расписанию запускается задание по SYS
автор
DBMS_SCHEDULER.RUN_JOB( JOB_NAME => 'SYS.CREATE_STEND');
тут вопросов нет

2. Удаляется схема %DEV%. Делаю под SYS
автор
exec kill_drop_user(A_USER)

В старой реализации я дедал выборку всех объектов схемы и генерировал запрос на удаление всех объектов. Получалось быстрее. Но генерируя динамический запрос внутри СУБД, EXECUTE IMMEDIATE встречая объект, который нельзя удалить, прекращал работу и большая часть схемы оставалась целой. В старой реализации sqlplus тоже оставлял эти два объекта и ругался на них, но завершающий drop user cascade отрабатывал мгновенно, в отличии от новой реализации с кучей оставленных объектов.

3. Создается пользователь DEV. Запускаю под SYS статичный скрипт в 20 строк. Только имя пользователя и пароль передаю в него переменными.
автор
EXECUTE IMMEDIATE 'CREATE USER '||A_USER||' PROFILE DEFAULT IDENTIFIED BY "'||A_PASS||'" ... ACCOUNT UNLOCK';
тут тоже проблем нет

4. Корректируется задание на импорт. argument_value => передаю имя новой схемы, где лежит дамп, вытаскиваю из таблицы объекты исключений и т.п.
автор
argument_value => 'impdp SYSTEM/password REMAP_SCHEMA='||A_FROMUSER||':'||A_USER||' dumpfile=DATA_PUMP_DIR:'||A_FILE||'%U.dmp'...


5. Надо запустить настроенное задание на импорт данных impdp в контексте system. Как это сделать? прописывать impdp SYSTEM/Password в атрибуты задания имхо как то несекьюрно.

6. После импорта требуется скомпилировать инвалидные объекты в новой схеме DEV. Из под DEV видимо. Как запустить компиляцию в этом контексте?

7. с компиляцией явы отдельный вопрос, не связанный с контекстом. Динамическим запросом пытаюсь скомпилировать все инвалиды
автор
EXECUTE IMMEDIATE 'alter java class "'||a_objects||'" resolver ((* DEV)(* PUBLIC)) resolve';
получаю ORA-24344: success with compilation error и блок прерывает работу и все объекты INVALID. В старой реализации в sqlplus несколько объектов компилируются с ошибкой, но скрипт проходит по всем объектам выборки и основная масса работоспособна. Мне кажется похожая проблема описана в п.2

8. Собираем статистику снова под SYS
автор
dbms_stats.gather_schema_stats (ownname=>A_USER, cascade=>true, estimate_percent=>null, degree=>32);
Возможно сформулировал вопросы сумбурно. Готов уточнить. Может кто то подскажет хотя бы по одному из пунктов.
6 ноя 19, 12:39    [22010671]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
-2-
Member

Откуда:
Сообщений: 14994
Mladshiy
встречая объект, который нельзя удалить
Помимо, что определенный порядок действий и фильтр по (суб)типам объектов обеспечивает положительный результат, можно обрабатывать исключение и повторять. Впрочем, удаление пользователя более чистый вариант, так как удаляются еще и внешние хвосты.

Mladshiy
Надо запустить настроенное задание на импорт данных impdp в контексте system
Зачем именно system. И! - dbms_datapump не требует "прописывать" пароль.
Mladshiy
скомпилировать инвалидные объекты
dbms_utility
Mladshiy
Собираем статистику снова под SYS
Зачем?
6 ноя 19, 12:54    [22010680]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
Mladshiy
Member

Откуда: Москва
Сообщений: 175
-2-
Mladshiy
встречая объект, который нельзя удалить
Помимо, что определенный порядок действий и фильтр по (суб)типам объектов обеспечивает положительный результат, можно обрабатывать исключение и повторять.

Вот с исключениями хотелось бы разобраться. У меня цикл в котором отрабатывается динамический запрос
    CURSOR ix IS
        SELECT object_name, DECODE( object_type, 'DATABASE LINK', 'DB_LINK', 'JOB', "...и так далее...") object_type, owner FROM sys.dba_objects WHERE owner IN ( in_username) AND  object_type IN ( 'TABLE','INDEX','SEQUENCE','"...и так далее..." )  ORDER BY object_type;
BEGIN
   FOR x IN ix LOOP
      EXECUTE IMMEDIATE ( 'drop ' || x.object_type || ' '|| x.owner|| '.' || x.object_name
   END LOOP;
END;
BEGIN
      EXECUTE IMMEDIATE 'DROP USER ' || in_username || ' CASCADE';
END;

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

-2-
dbms_datapump
омг, день прожит не зря, пошел курить мануал. Спасибо!

DBMS_UTILITY.COMPILE_SCHEMA('USER') в каком контексте надо запускать, разве не владельца схемы?

Mladshiy
Собираем статистику снова под SYS
Зачем?

На этот вопрос мой предшетсвенник ответил - "Так стенд работает быстрее". Поскольку я не участвую в тестировании, а только собираю стенды, проверить что именно быстрее работает, мне не удалось. Если будут рекомендации по простым действиям сравнительного анализа производительности (типа AWR до и после смотри сюда, тут циферка больше), буду очень признателен.
6 ноя 19, 13:43    [22010722]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
-2-
Впрочем, удаление пользователя более чистый вариант, так как удаляются еще и внешние хвосты.

Был как-то неописуемый случай.
Грохнули админы юзера каскадом.
Ну как грохнули... попытались.
А у юзера во владении AQ-шные очереди были.
Табличка-то грохнулась, а вот очередь без таблички грохаться что-то отказалась.
Плясали потом с бубнами :)
Правда, в 10g дело было, может, и поправили с тех пор, но зависимости - они такие зависимости...
6 ноя 19, 13:44    [22010724]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1229
Mladshiy,

Ты велосипедостроитель года. Да еще и разраб начинающий. гугли liquibase
6 ноя 19, 14:40    [22010785]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
Mladshiy
Member

Откуда: Москва
Сообщений: 175
oragraf, спасибо. Радикальный подход и наверняка верное направление решения задачи в целом. Я обязательно попробую предложенную библиотеку и если не обнаружу существенных проблем, например увеличение времени сборки стенда, перейдем на ее использование. При беглом изучении я понял, что библиотека будет использовать штатные механизмы, и для написания нормального changeset мне все равно нужно решить большенство из описанных выше проблем.
6 ноя 19, 15:35    [22010852]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Mladshiy
Радикальный подход

Радикально - это просто поднимать под тестовые нужды снепшот-pdb.
6 ноя 19, 15:42    [22010861]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
Mladshiy
Member

Откуда: Москва
Сообщений: 175
andrey_anonymous,
кому как, для preprod вообще отдельную железку выделяют, а на нее так же надо реплицировать актуальные данные с продуктива. Чем же?
6 ноя 19, 16:22    [22010896]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Mladshiy
реплицировать актуальные данные с продуктива. Чем же?

OGG жеж...
6 ноя 19, 16:24    [22010899]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1229
andrey_anonymous
Mladshiy
реплицировать актуальные данные с продуктива. Чем же?

OGG жеж...
Межгалактической платной ракетой по воробьям. expdp/impdp
6 ноя 19, 19:20    [22011058]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 740
Mladshiy
... надо реплицировать актуальные данные с продуктива. Чем же?


На выбор:
1. RMAN duplicate
2. Экспорт/импорт при помощи DATAPUMP
3. Если нужно что бы данные постоянно обновлялись - EXPDP/IMPDP + GoldenGate
4. Transportable tablespace
6 ноя 19, 23:16    [22011127]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
oragraf
expdp/impdp

Прод проду, конечно, люпус, но на мелких инсталляциях редко заморачиваются отдельным железом по контурам тестирования...
7 ноя 19, 11:27    [22011347]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
Mladshiy
Member

Откуда: Москва
Сообщений: 175
Скажу больше. Поскольку днем продуктив грузить негоже, а ночью туда лезут любопытные сборщики BI кубов, дампы для актуализации стендов я снимаю со standby. Перевожу его в режим Snapshot Standby и сливаю данные, затем возвращаю на стандартный Standby режим. В аналогичном режиме проводим финальные тесты. На 1-2 дня перевожу специальный standby сервер в snapshot режим. Затем возвращаю обратно. За несколько часов подтягиваются накопленные за эти дни логи и препрод снова готов к тестам.

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

RMAN duplicate мне не очевидны его преимущества перед exp/imp в вышеописанной задаче репликации данных на стенды. А гемор на переписывание алгоритма очевиден.

Transportable tablespace - можно в двух словах о преимуществах этого механизма всравнении с перечисленными?
8 ноя 19, 10:16    [22012138]     Ответить | Цитировать Сообщить модератору
 Re: Работа с несколькими контекстами и другие сложности импорта схемы  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Mladshiy
курил доки по OGG. Соглашусь, что это тяжелый и платный инструмент.

Платный - да.
Тяжелый - нет.
Есть аналоги заподешевше, но с ними нагрузку не работал.
8 ноя 19, 15:12    [22012402]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить