Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
...
. . exported "AIS_NET"."SS_JOB_LOGS"                     635.2 MB 1550063 rows
. . exported "AIS_NET"."SD_PROCESSING_REQUESTS_T"        563.8 MB    7204 rows
. . exported "AIS_NET"."SD_MV_DOCUMENTS"                 479.7 MB 3247473 rows
^C
Export> kill_job
Are you sure you wish to stop this job ([yes]/no): yes

 

Действия после поднятия дампа

Контроль невалидных объектов

После поднятия дампа необходимо убедиться что в базе данных нет невалидных объектов.

Для этого необходимо выполнить скрипт компилляции

Code Block
languagesql
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;

И проверить наличие невалидных объектов

Code Block
languagesql
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;

В случае, если в базе есть невалидные объекты, это может быть вызвано дефектом СУБД Oracle Bug 18881811 - Data Pump Import of Wrapped PLSQL Corrupts the Body

Для устранения дефекта необходимо применить Oracle патч  и повторить действия по разворачиванию дампа.

Анализ БД

Перед началом использования БД необходимо выполнить полный анализ БД.

Для этого необходимо выполнить скрипт, приведенный ниже.

Следует учесть что анализ БД может занимать весьма продолжительное время, поэтому рекомендуется выполнять его напрямую на сервере из sqlplus с использованием оконного менеджера, например screen (это позволит скрипту доработать даже в случае неожиданного обрыва связи с компьютером администратора)

Code Block
languagesql
DECLARE
 num_N_JOB_ID        NUMBER := -101;
 --
 ch_Invalidate       SS_PARVALUES.C_FLAG_VALUE%TYPE;
 ch_StaleOnly        SS_PARVALUES.C_FLAG_VALUE%TYPE;
 num_AnalyzePercent  SS_PARVALUES.N_VALUE%TYPE;
BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('NO_INVALIDATE', 'FALSE');

 -- Сохранение текущих параметров
 num_AnalyzePercent := SS_PARS_PKG_S.GET_N_VALUE_BY_CODE(
   vch_VC_CODE  => 'PAR_JobAnalyzeSchema_AnalyzePercent',
   num_N_JOB_ID => num_N_JOB_ID);

 ch_StaleOnly := SS_PARS_PKG_S.GET_C_FLAG_VALUE_BY_CODE(
   vch_VC_CODE  => 'PAR_JobAnalyzeSchema_StaleOnly',
   num_N_JOB_ID => num_N_JOB_ID);

 ch_Invalidate := SS_PARS_PKG_S.GET_C_FLAG_VALUE_BY_CODE(
   vch_VC_CODE  => 'PAR_JobAnalyzeSchema_InvalidateCursors',
   num_N_JOB_ID => num_N_JOB_ID);

 -- Установка нужных параметров
 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_AnalyzePercent',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   num_N_VALUE          => 100,
   num_N_JOB_ID         => num_N_JOB_ID);

 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_StaleOnly',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   ch_C_FLAG_VALUE      => 'N',
   num_N_JOB_ID         => num_N_JOB_ID);

 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_InvalidateCursors',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   ch_C_FLAG_VALUE      => 'Y',
   num_N_JOB_ID         => num_N_JOB_ID);

 COMMIT;

 -- Подготовка к выполнению задания вручную
 SS_JOBS_PKG.MANUAL_START_JOB(num_N_JOB_ID);

 -- Выполнение задания в текущей сессии
 SS_JOBS_PKG.RUN_JOB(
   num_N_JOB_ID => num_N_JOB_ID,
   ch_C_REASON  => 'M');

 DBMS_STATS.SET_GLOBAL_PREFS('NO_INVALIDATE', 'DBMS_STATS.AUTO_INVALIDATE');

 -- Возврат сохраненных параметров
 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_AnalyzePercent',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   num_N_VALUE          => num_AnalyzePercent,
   num_N_JOB_ID         => num_N_JOB_ID);

 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_StaleOnly',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   ch_C_FLAG_VALUE      => ch_StaleOnly,
   num_N_JOB_ID         => num_N_JOB_ID);

 SS_PARS_PKG.SS_PARVALUES_PUT(
   num_N_PAR_ID         => SS_PARS_PKG_S.GET_PAR_ID_BY_CODE(
                             vch_VC_CODE  => 'PAR_JobAnalyzeSchema_InvalidateCursors',
                             num_N_JOB_ID => num_N_JOB_ID),
   num_N_SUBJECT_ID     => NULL,
   num_N_APPLICATION_ID => NULL,
   ch_C_FLAG_VALUE      => ch_Invalidate,
   num_N_JOB_ID         => num_N_JOB_ID);

 COMMIT;
END;