Table of Contents |
---|
Info |
---|
This article is in English Working with the DB Dumps |
...
Пример использования dump.sh при нативной установке hydra-utils
При установке hydra-utils скрипт снятия дампов устанавливаются в следующую директорию - /opt/hydra/oracle/scripts
. Скрипт обязательно следует вызвать под пользователем oracle с инициализированным окружением. Инициализировать окружение для пользователя oracle с помощью sudo можно выполнить следующим образом:
...
Пример вызова скриптов из контейнера для переноса дампа БД с hydra
на hydra2
(для Oracle 19 вместо hydra-utils нужно вызывать hydra-utils-19с)
):
Снятие дампа с hydra:
Code Block language bash sudo docker-compose -f /etc/hydra/hydra-utils/docker-compose.yml run --rm hydra-utils dump.sh -i hydra -p password -f hydra_dump export
Очистка hydra2:
Code Block language bash sudo docker-compose -f /etc/hydra/hydra-utils/docker-compose.yml run --rm hydra-utils dump.sh -i hydra2 -p password drop
Поднятие дампа на hydra2:
Code Block language bash sudo docker-compose -f /etc/hydra/hydra-utils/docker-compose.yml run --rm hydra-utils dump.sh -i hydra2 -p password -f hydra_dump import
Warning | ||
---|---|---|
| ||
В ходе снятия дампа не должны выполняться DDL выражения, в том числе TRUNCATE и очистка очередей, иначе снятие дампа завершится с ошибкой |
Note | ||
---|---|---|
| ||
Так как процедура снятия резервных копий с помощью утилиты expdp (скрипт |
...
Note | ||
---|---|---|
| ||
При копировании дампа на внешнее хранилище необходимо копировать и лог экспорта (файл с суффиксом _expdp.log в каталоге с дампом) |
Note | |||||
---|---|---|---|---|---|
| |||||
Новые профили пользователей, отличные Полный список команд для получения DDL кастомных профилей можно получить при помощи следующего SQL запроса:
Для их автоматического резервирования рекомендуется использовать RMAN бекапы. |
Отменить процесс экспорта/импорта дампа можно с помощью CTRL-C
и команды kill_job
:
...
Code Block | ||
---|---|---|
| ||
DECLARE
ch_AlterTypes VARCHAR2(1) := 'N';
num_MaxRetries NUMBER := 0;
num_Counter NUMBER := 0;
--
num_Retries NUMBER;
PROCEDURE TRY_TO_ALTER_TYPE(
vch_VC_TYPE_NAME IN ALL_OBJECTS.OBJECT_NAME%TYPE)
IS
num_Count NUMBER;
BEGIN
SELECT COUNT(*)
INTO num_Count
FROM ALL_OBJECTS
WHERE OBJECT_NAME = vch_VC_TYPE_NAME
AND OBJECT_TYPE = 'TYPE';
IF num_Count > 0 THEN
EXECUTE IMMEDIATE 'ALTER TYPE "' || vch_VC_TYPE_NAME || '" COMPILE';
END IF;
END TRY_TO_ALTER_TYPE;
BEGIN
IF ch_AlterTypes = 'Y' THEN
TRY_TO_ALTER_TYPE('equipment_bind');
TRY_TO_ALTER_TYPE('equipment_binds');
TRY_TO_ALTER_TYPE('HYDRA_ANYDATA');
TRY_TO_ALTER_TYPE('HYDRA_ANYDATA_TABLE');
TRY_TO_ALTER_TYPE('application_context');
TRY_TO_ALTER_TYPE('deferred_task');
TRY_TO_ALTER_TYPE('command_result');
TRY_TO_ALTER_TYPE('command_results');
TRY_TO_ALTER_TYPE('command');
TRY_TO_ALTER_TYPE('commands');
TRY_TO_ALTER_TYPE('profile_attribute');
TRY_TO_ALTER_TYPE('profile_attributes');
TRY_TO_ALTER_TYPE('profile');
TRY_TO_ALTER_TYPE('profiles');
TRY_TO_ALTER_TYPE('sys_msg_line');
TRY_TO_ALTER_TYPE('sys_msg_lines');
TRY_TO_ALTER_TYPE('system_message');
TRY_TO_ALTER_TYPE('system_messages');
TRY_TO_ALTER_TYPE('service');
TRY_TO_ALTER_TYPE('services_list');
TRY_TO_ALTER_TYPE('account_services');
TRY_TO_ALTER_TYPE('LOG_MESSAGE');
END IF;
-- Выбираем список объектов
FOR rl_Object IN (
SELECT OWNER,
OBJECT_NAME,
OBJECT_TYPE
FROM ALL_OBJECTS A
WHERE OBJECT_TYPE IN ('PACKAGE', 'PACKAGE BODY', 'TRIGGER', 'VIEW')
AND OWNER = 'AIS_NET'
AND STATUS = 'INVALID'
ORDER BY OBJECT_TYPE, OBJECT_NAME)
-- Движение по списку
LOOP
num_Retries := 0;
num_Counter := num_Counter + 1;
<<retry>>
-- Компилим объект
BEGIN
-- Разные команды для пакетов ХП и остальных типов объектов
IF rl_Object.OBJECT_TYPE = 'PACKAGE BODY' THEN
EXECUTE IMMEDIATE 'ALTER PACKAGE "' || rl_Object.OWNER || '"."' || rl_Object.OBJECT_NAME || '" COMPILE BODY';
ELSE
EXECUTE IMMEDIATE 'ALTER ' || rl_Object.OBJECT_TYPE || ' "' || rl_Object.OWNER || '"."' || rl_Object.OBJECT_NAME || '" COMPILE';
END IF;
EXCEPTION WHEN others THEN
IF num_Retries < num_MaxRetries THEN
num_Retries := num_Retries + 1;
GOTO Retry;
ELSE
DBMS_OUTPUT.PUT_LINE('Ошибка: '|| rl_Object.OBJECT_TYPE || ' ' || rl_Object.OWNER || '.' || rl_Object.OBJECT_NAME);
END IF;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Total processed: ' || num_Counter);
IF ch_AlterTypes = 'Y' THEN
SYS.FIX_HYDRA_OBJECT_TYPES;
END IF;
END;
/ |
И проверить наличие невалидных объектов
...
Для устранения дефекта необходимо применить Oracle патч и повторить действия по разворачиванию дампа.
Исключением могут быть пакеты с префиксом MI_ — ядро приложения миграции (если данные объекты не используются).
Анализ БД
Перед началом использования БД необходимо выполнить полный анализ БД.
...