Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Работа с несколькими контекстами и другие сложности импорта схемы / 14 сообщений из 14, страница 1 из 1
06.11.2019, 12:39
    #39885699
Mladshiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Добрый день.
Подскажите пожалуйста, как изящнее решить задачу.
Задача по сборке тестовой схемы. Сейчас реализована последовательным запуском из 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); Возможно сформулировал вопросы сумбурно. Готов уточнить. Может кто то подскажет хотя бы по одному из пунктов.
...
Рейтинг: 0 / 0
06.11.2019, 12:54
    #39885706
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy
встречая объект, который нельзя удалить
Помимо, что определенный порядок действий и фильтр по (суб)типам объектов обеспечивает положительный результат, можно обрабатывать исключение и повторять. Впрочем, удаление пользователя более чистый вариант, так как удаляются еще и внешние хвосты.

Mladshiy
Надо запустить настроенное задание на импорт данных impdp в контексте system
Зачем именно system. И! - dbms_datapump не требует "прописывать" пароль.
Mladshiy
скомпилировать инвалидные объекты
dbms_utility
Mladshiy
Собираем статистику снова под SYS
Зачем?
...
Рейтинг: 0 / 0
06.11.2019, 13:43
    #39885732
Mladshiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
-2-
Mladshiy
встречая объект, который нельзя удалить
Помимо, что определенный порядок действий и фильтр по (суб)типам объектов обеспечивает положительный результат, можно обрабатывать исключение и повторять.

Вот с исключениями хотелось бы разобраться. У меня цикл в котором отрабатывается динамический запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    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 до и после смотри сюда, тут циферка больше), буду очень признателен.
...
Рейтинг: 0 / 0
06.11.2019, 13:44
    #39885733
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
-2-
Впрочем, удаление пользователя более чистый вариант, так как удаляются еще и внешние хвосты.

Был как-то неописуемый случай.
Грохнули админы юзера каскадом.
Ну как грохнули... попытались.
А у юзера во владении AQ-шные очереди были.
Табличка-то грохнулась, а вот очередь без таблички грохаться что-то отказалась.
Плясали потом с бубнами :)
Правда, в 10g дело было, может, и поправили с тех пор, но зависимости - они такие зависимости...
...
Рейтинг: 0 / 0
06.11.2019, 14:40
    #39885780
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy,

Ты велосипедостроитель года. Да еще и разраб начинающий. гугли liquibase
...
Рейтинг: 0 / 0
06.11.2019, 15:35
    #39885822
Mladshiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
oragraf, спасибо. Радикальный подход и наверняка верное направление решения задачи в целом. Я обязательно попробую предложенную библиотеку и если не обнаружу существенных проблем, например увеличение времени сборки стенда, перейдем на ее использование. При беглом изучении я понял, что библиотека будет использовать штатные механизмы, и для написания нормального changeset мне все равно нужно решить большенство из описанных выше проблем.
...
Рейтинг: 0 / 0
06.11.2019, 15:42
    #39885830
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy
Радикальный подход

Радикально - это просто поднимать под тестовые нужды снепшот-pdb.
...
Рейтинг: 0 / 0
06.11.2019, 16:22
    #39885852
Mladshiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
andrey_anonymous,
кому как, для preprod вообще отдельную железку выделяют, а на нее так же надо реплицировать актуальные данные с продуктива. Чем же?
...
Рейтинг: 0 / 0
06.11.2019, 16:24
    #39885855
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy
реплицировать актуальные данные с продуктива. Чем же?

OGG жеж...
...
Рейтинг: 0 / 0
06.11.2019, 19:20
    #39885961
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
andrey_anonymous
Mladshiy
реплицировать актуальные данные с продуктива. Чем же?

OGG жеж...
Межгалактической платной ракетой по воробьям. expdp/impdp
...
Рейтинг: 0 / 0
06.11.2019, 23:16
    #39885995
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy
... надо реплицировать актуальные данные с продуктива. Чем же?


На выбор:
1. RMAN duplicate
2. Экспорт/импорт при помощи DATAPUMP
3. Если нужно что бы данные постоянно обновлялись - EXPDP/IMPDP + GoldenGate
4. Transportable tablespace
...
Рейтинг: 0 / 0
07.11.2019, 11:27
    #39886128
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
oragraf
expdp/impdp

Прод проду, конечно, люпус, но на мелких инсталляциях редко заморачиваются отдельным железом по контурам тестирования...
...
Рейтинг: 0 / 0
08.11.2019, 10:16
    #39886628
Mladshiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Скажу больше. Поскольку днем продуктив грузить негоже, а ночью туда лезут любопытные сборщики BI кубов, дампы для актуализации стендов я снимаю со standby. Перевожу его в режим Snapshot Standby и сливаю данные, затем возвращаю на стандартный Standby режим. В аналогичном режиме проводим финальные тесты. На 1-2 дня перевожу специальный standby сервер в snapshot режим. Затем возвращаю обратно. За несколько часов подтягиваются накопленные за эти дни логи и препрод снова готов к тестам.

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

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

Transportable tablespace - можно в двух словах о преимуществах этого механизма всравнении с перечисленными?
...
Рейтинг: 0 / 0
08.11.2019, 15:12
    #39886823
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с несколькими контекстами и другие сложности импорта схемы
Mladshiy
курил доки по OGG. Соглашусь, что это тяжелый и платный инструмент.

Платный - да.
Тяжелый - нет.
Есть аналоги заподешевше, но с ними нагрузку не работал.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Работа с несколькими контекстами и другие сложности импорта схемы / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]