2.Назначение и условия применения
2.1.Виды деятельности, функции
Раздел в рамках данного документа не предусмотрен.
2.2.Программные и аппаратные требования к системе
Раздел в рамках данного документа не предусмотрен.
3.Подготовка к работе
3.1.Запуск системы
Раздел в рамках данного документа не предусмотрен.
3.2.Справочники системы
Раздел в рамках данного документа не предусмотрен.
3.3.Функции системы
Раздел в рамках данного документа не предусмотрен.
3.4.Дополнительные настройки системы
Раздел в рамках данного документа не предусмотрен.
4.Процедуры по обслуживанию систем СУФД и СУФД-портал
4.1.Ежедневные процедуры
4.1.1.Мониторинг свободного места на диске отведенного под каталог STAND
Мониторинг свободного места на диске включает в себя следующие операции:
Отслеживание больших файлов, появляющихся в каталоге STAND1.
Большими можно считать файлы, размер которых превышает 500Мб. В частности, в результате запуска ППО «АСФК (СУФД)» в консоли putty через nohup, в каталоге STAND создается файл nohup.out. Если размер этого файла превысил 500Мб, то при последующем перезапуске сервера ППО «АСФК (СУФД)» этот файл можно удалить (удаление файла осуществляется только при остановленном сервере ППО «АСФК (СУФД)»).
Отслеживание размера каталогов с логами: logs и logs_backup.
Во время работы ППО «АСФК (СУФД)» все события в системе фиксируются в лог-файлах, которые размещаются в каталоге logs. После каждого перезапуска ППО «АСФК (СУФД)» лог-файлы из каталога logs переносятся в каталог logs_backup. Если в течение дня проблем с ППО «АСФК (СУФД)» не наблюдалось, то на следующий день можно заархивировать каталог с лог-файлами предыдущего дня и хранить его в течение 90 дней. Если будут проблемы с местом, перенести архивные лог-файлы на другой носитель.
Отслеживание каталога импорта структурированных файлов, загружаемых через систему сопряжения.
При загрузке структурированных документов (ТФФ) из внешних систем (например, из ППО «СЭД»), в случае успешного прохождения контролей копия файла помещается в каталог good, в случае наличия ошибок – в каталог bad. Пути к данным каталогам настраиваются в файле STAND\etc\converter.xml. По умолчанию каталоги good и bad создаются в STAND\transformpackets, поэтому необходимо отслеживать размер данного каталога.
4.1.2.Мониторинг свободного табличного пространства (ТП)
Мониторинг свободного табличного пространства включает в себя следующие операции:
Проверка заполнения выделенного табличного пространства.
Такие операции, как репликация справочных данных, загрузка/выгрузка справочных данных, приводит к значительному росту базы данных. При помощи программного обеспечения для работы с базой данных (например, pl/sql developer2 или TOAD3) необходимо отслеживать состояние следующих табличных пространств:
SUFD_TS_LOB – LOB-сегменты BasicFiles;
SUFD_TS_DATA – таблицы;
SUFD_TS_INDX – индексы;
SUFD_SF_TS – LOB-сегменты SecureFiles;
SUFD_LOB_TS – LOB-сегменты BasicFiles;
SUFD_DATA_TS – таблицы;
SUFD_INDX_TS – индексы.
В случае их заполнения на 80-90%, или когда до заполнения табличного пространства остается 5-10Гб, необходимо расширять табличное пространство дополнительными файлами. Данные действия должен проводить компетентный администратор базы данных.
Проверка работы автопроцедур (далее АП).
В ППО «АСФК (СУФД)» существуют автопроцедуры, которые способствуют замедлению темпов роста базы данных. К этим автопроцедурам относится АП «Автопроцедура удаления вложений документов-перевозчиков» (подробное описание в документации к обновлению 005.139.014 to 005.150.015). Данную автопроцедуру необходимо настроить и периодически осуществлять проверку ее работоспособности.
Установка заданий по очистке транспортных таблиц во всех БД СУФД, которые были переданы в составе обновления на 010.262.005.
4.1.2.1.Настройка заданий по очистке и дефрагментации транспортных таблиц
Для СУФД Логистика (APRODE) и СУФД Портал (SPRODW).
В случае если штатный механизм очистки не запускался, или был некорректно настроен, он соответственно не справляется с нагрузкой.
Для этой ситуации в патче СУФД 010.253.004Т4 – 010.262.005 есть скрипты, которые выполняют функцию очистки транспортных очередей напрямую в БД.
В начале, необходимо определиться со стратегией процесса очистки транспортных таблиц.
Можно выделить два решения удаления записей в транспортных таблицах старше определенной даты:
Ежедневное (ночное) с остановом к началу рабочего дня.
Еженедельное, например, в субботу ночью, чтобы хватило времени для более полного выполнения задания.
Дефрагментацию при регулярном удалении записей можно часто не выполнять (можно раз в полгода, по умолчанию – 1 раз в месяц).
Для выполнения очистки транспортных таблиц создан пакет процедур PKG_CLEAR_QUEUE (файл pkg.sql) включающий:
процедуру удаления записей DEL_TRT;
процедуру дефрагментации DEFRAG_TRT.
В файле pkg.sql так же содержится скрипт на создание таблицы логирования процесса работы процедур.
В зависимости от выбранного варианта очистки транспортных таблиц, необходимо установить переменные в процедуре DEL_TRT:
procedure DEL_TRT is
v_pr varchar2(1) := 'Y'; /* Y – процедура проверяет текущее время и после часа установленного в v_he завершит работу, N – проверка не выполняется */
v_he number(2) := 7; /* час остановки процедуры 0 – 24 */
Для варианта 1 можно оставить установленные значения.
Для варианта 2 переменной v_pr необходимо присвоить значение 'N'.
v_pr varchar2(1) := 'N'; /* Y – процедура проверяет текущее время и после часа установленного в v_he завершит работу, N – проверка не выполняется */
Проверка времени не будет осуществляться. Соответственно, работа прекратится лишь тогда, когда будут очищены все необходимые записи. В связи с этим, может возникнуть ситуация, когда еще не все записи очищены, а уже наступил понедельник. В такой ситуации необходимо остановить исполнение JOB (см. ниже) и пересоздать процедуру по «Вариант 1». Такая ситуация может возникать, если очистка выполняется в первый раз после длительного простоя.
Далее необходимо уточнить значение дополнительных параметров очистки:
procedure DEL_TRT is
v_dl number(7) := 10000; /* количество удаляемых записей за 1 итерацию цикла */
v_cd number(5) := 7; /* количество дней хранения */
v_dl number(7) := 10000; количество удаляемых записей за 1 итерацию цикла. Параметр определяется эмпирически: Несколько дней подряд запускается с разными количествами 10000, 50000, 100000, и выбирается то, количество, при котором больше записей будет успевать очиститься (можно проверить в таблице LOG_CLEAR_QUEUE на следующий день после выполнения очистки).
v_cd number(5) := 7; количество дней хранения. Т.е. записи старше указанного в данном параметре возраста будут подлежать очистке.
После установки значений параметров в процедуре DEL_TRT, необходимо выполнить скрипты из файла pkg.sql: создать таблицу LOG_CLEAR_QUEUE и пакет процедур PKG_CLEAR_QUEUE в схеме СУФД.
Для этого откройте Oracle SQL Developer, PLSQL Developer, TOAD и т.п., подключитесь к базе данных СУФД Логистика (APRODE) или СУФД Портала (SPRODW) под пользователем SUFD, откройте в редакторе файл pkg.sql и запустите его на выполнение. Скрипт так же можно выполнить sqlplus, для чего скопируйте файл pkg.sql на сервер баз данных СУФД Логистика (APRODE) или СУФД Портала (SPRODW), по SSH подключитесь к серверу под пользователем владельцем базы данных, установите переменные окружения и выполните скрипт:
sqlplus sufd/sufd @pkg.sql
Результаты выполнения можно проверить запросом:
select object_name, status from user_objects where object_name like '%CLEAR_QUEUE';
Затем необходимо установить задания в схеме СУФД:
DEL_DOC_QUEU – выполнение процедуры DEL_TRT.
DEFR_DOC_QUEUE – выполнение процедуры DEFRAG_TRT.
Примеры установки заданий приведены в файле job.sql.
При создании JOB необходимо в параметре (v_user varchar2(30) := 'SUFD') указать имя схемы СУФД.
declare
v_user varchar2(30) := 'SUFD';
v_c number(3);
Далее под пользователем SYSTEM с помощью Oracle SQL Developer, PLSQL Developer TOAD и т.п., предварительно скорректировав TimeZone для сеанса:
alter session set time_zone='Etc/GMT-4';
Необходимо выполнить скрипт по созданию JOB-а DEL_DOC_QUEU с одним из двух вариантов расписания запуска (рекомендуется использовать первый):
Для создания ежедневного задания с понедельника по пятницу в 00:10 необходимо использовать скрипт создания JOB с комментарием «Вариант № 1 : ежедневный запуск (кроме Сб и Вс) в 0ч 10мин».
alter session set time_zone='Etc/GMT-4';
declare
v_user varchar2(30) := 'SUFD';
v_c number(3);
begin
select 1 into v_c from user_scheduler_jobs where job_name = 'DEL_DOC_QUEUE';
exception when no_data_found then
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'DEL_DOC_QUEUE',
job_type => 'STORED_PROCEDURE',
job_action => v_user||'.PKG_CLEAR_QUEUE.DEL_TRT',
repeat_interval => 'FREQ=DAILY;BYHOUR=0;BYMINUTE=10;BYDAY=MON,TUE,WED,THU,FRI',
enabled => TRUE,
auto_drop => FALSE,
comments => 'Delete in tables QUEUE_DOCUMENTs'
);
end;
/
Для создания еженедельного запуска по субботам в 00:10 необходимо использовать скрипт создания JOB с комментарием «Вариант № 2 : еженедельный запуск в Сб в 0ч 10мин».
alter session set time_zone='Etc/GMT-4';
declare
v_user varchar2(30) := 'SUFD';
v_c number(3);
begin
select 1 into v_c from user_scheduler_jobs where job_name = 'DEL_DOC_QUEUE';
exception when no_data_found then
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'DEL_DOC_QUEUE',
job_type => 'STORED_PROCEDURE',
job_action => v_user||'.PKG_CLEAR_QUEUE.DEL_TRT',
repeat_interval => 'FREQ=WEEKLY;BYDAY=SAT;BYHOUR=0;BYMINUTE=10',
enabled => TRUE,
auto_drop => FALSE,
comments => 'Delete in tables QUEUE_DOCUMENTs'
);
end;
/
Для создания JOB на выполнения сжатия БД используется скрипт с комментарием «Создание задания для запуска процедуры дефрагментации транспортных таблиц».
alter session set time_zone='Etc/GMT-4';
declare
v_user varchar2(30) := 'SUFD';
v_c number(3);
begin
select 1 into v_c from user_scheduler_jobs where job_name = 'DEFR_DOC_QUEUE';
exception when no_data_found then
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'DEFR_DOC_QUEUE',
job_type => 'STORED_PROCEDURE',
job_action => v_user||'.PKG_CLEAR_QUEUE.DEFRAG_TRT',
repeat_interval => 'FREQ=MONTHLY;BYDAY=SAT;BYMONTHDAY=1,2,3,4,5,6,7;BYHOUR=0;BYMINUTE=10',
enabled => TRUE,
auto_drop => FALSE,
comments => 'Delete in tables QUEUE_DOCUMENTs'
);
end;
/
Проверить наличие заданий можно запросом (выполнять в sqlplus).
set linesize 1000;
select job_name,state,to_char(next_run_date,'DD-MON-YY HH24:MI TZR') next_run_date from dba_scheduler_jobs where job_name like '%DOC_QUEUE'order by owner, job_name;
4.1.2.2.Настройка задания по сбору статистики по схеме SUFD
Только для СУФД Портал (SPRODW).
Задание по сбору статистики должно было быть создано при установке портала, скрипты так же были выпущены ранее патчем 008.005.000M00, задания управляются пакетом dbms_job (старый планировщик заданий oracle), проверить наличие задания можно запросом.
select job,log_user,what from dba_jobs where upper(what) like '%DBMS_STATS%'
В случае если задание отсутствует или есть необходимость переделать расписание, перенести задание на управление пакетом dbms_scheduler (новый планировщик заданий oracle), то для настройки задания, необходомо, под пользователем SYSTEM с помощью Oracle SQL Developer, PLSQL Developer, TOAD или SQLPLUS, предварительно скорректировав TimeZone сессии, выполнить ниже следующий скрипы.
В случае если «старое» задание есть (то лучше ничего не делать), то его предварительно нужно отключить, либо удалить, для этого в sqlplus как sysdba выполните скрипт:
sqlplus / as sysdba
declare
v_job number;
begin
for v_job in (select job
from dba_jobs
where upper(what) like '%DBMS_STATS%') loop
-- SYS.DBMS_JOB.REMOVE(v_job.job);
SYS.DBMS_JOB.BROKEN(v_job.job,TRUE);
commit;
end loop;
end;
/
Затем и в случае отсутствия «старого» задания выполнить скрипт:
alter session set time_zone='Etc/GMT-4';
declare
v_c number(3);
v_user varchar(30) := 'SUFD';
begin
select 1
into v_c
from user_scheduler_jobs
where job_name = 'GATHER_SCHEMA_STATS_'||v_user;
exception
when no_data_found then
dbms_scheduler.create_job(
job_name => 'GATHER_SCHEMA_STATS_'||v_user,
job_type => 'PLSQL_BLOCK',
job_action => 'begin sys.dbms_stats.gather_schema_stats('''||v_user||'''); end;',
-- repeat_interval => 'FREQ=DAILY;BYHOUR=20;BYMINUTE=0;BYDAY=MON,TUE,WED,THU,FRI',
/* Для запуска ежедневного запуска с понедельника по пятницу в 20:00 */
repeat_interval => 'FREQ=WEEKLY;BYDAY=SUN;BYHOUR=0;BYMINUTE=10',
/* Для запуска еженедельно по воскресениям в 0:10 */
enabled => TRUE,
auto_drop => FALSE,
comments => 'Gathering statistics on '||v_user||' scheme');
end;
/
В данном случае задние будет запускаться по воскресениям в 0:10, при желании можете переделать на ежедневный запуск, к примеру в 20:00, исходя из расчета 4 часа до запуска заданий по зачистке транспортных таблиц.
4.1.2.3.Партиционирование таблицы AP_TASK_PROCESS_JOURNAL
Внимание! Выполнять скрипты на остановленном СУФД.
Порядок партиционирования таблицы AP_TASK_PROCESS_JOURNAL следующий:
Выполнить скрипт SUFDCORE-10121_klaster_70.sql в схеме СУФД:
SUFDCORE-10121_klaster_70.sql
-- Первичное создание таблицы
declare
v_c number(3);
v_m1 varchar2(2);
v_y1 varchar2(4);
v_m2 varchar2(2);
v_y2 varchar2(4);
v_txt varchar2(1000);
begin
select 1 into v_c from user_tables where table_name = 'AP_TASK_PROCESS_JOURNAL' and partitioned = 'NO';
-- execute immediate 'rename AP_TASK_PROCESS_JOURNAL to AP_TASK_PROCESS_JOURNAL_OLD';
execute immediate 'drop table AP_TASK_PROCESS_JOURNAL';
select to_char(sysdate,'MM'), to_char(sysdate,'YYYY') into v_m1, v_y1 from dual;
if v_m1 = '11' then
v_m2 := '12'; v_y2 := v_y1;
elsif v_m1 = '12' then
v_m2 := '01'; v_y2 := to_char(to_number(v_y1)+1);
else
v_m2 := lpad(to_char(to_number(v_m1)+1),2,'0'); v_y2 := v_y1;
end if;
v_txt := 'create table AP_TASK_PROCESS_JOURNAL
(
ID NUMBER,
TASK_NAME VARCHAR2(400),
START_TIME TIMESTAMP(6),
ELAPSED_TIME NUMBER,
PROCESS_STATUS VARCHAR2(200),
MESSAGE CLOB,
TASK_GUID VARCHAR2(36),
TASK_ID NUMBER(19,0)
)
partition by range (START_TIME)
( partition PT_'||v_m1||v_y1||' values less than (to_date(''01.'||v_m2||'.'||v_y2||''',''DD.MM.YYYY'')),
partition PT_MAX values less than (MAXVALUE)
)';
-- dbms_output.put_line (v_txt);
execute immediate v_txt;
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL enable row movement';
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL add constraint PK_AP_TASK_PROCESS_JOURNAL primary key (ID)';
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL add constraint CH_AP_TASK_PROCESS_JOURNAL_ID check (ID IS NOT NULL)';
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL add constraint CH_AP_TASK_PROCESS_JOURNAL_2 check (TASK_NAME IS NOT NULL)';
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL add constraint CH_AP_TASK_PROCESS_JOURNAL_4 check (START_TIME IS NOT NULL)';
execute immediate 'alter table AP_TASK_PROCESS_JOURNAL add constraint CH_AP_TASK_PROCESS_JOURNAL_6 check (PROCESS_STATUS IS NOT NULL)';
exception when no_data_found then null;
end;
/
Скрипт устанавливается при запуске _sqlplusw.bat.
Лог работы заносится в файл Run_scripts.log.
Скрипт удаляет «старую» таблицу AP_TASK_PROCESS_JOURNAL и создает ту же таблицу с секциями по месяцам (партиционированную).
Также создается процедура P_MNG_PARTITION для удаления устаревших секций и создания новых.
Выполнить скрипт job.sql под пользователем SYS:
job.sql
-- Создание новой секции и удаление "старых"
create or replace procedure P_MNG_PARTITION as
v_c number(3);
v_m1 varchar2(2);
v_y1 varchar2(4);
v_m2 varchar2(2);
v_y2 varchar2(4);
v_txt varchar2(1000);
v_tbname varchar2(30) := 'AP_TASK_PROCESS_JOURNAL';
v_ptname varchar2(30);
v_dt1 date;
v_dt2 date;
cursor c_pt is select partition_name from user_tab_partitions where table_name = v_tbname and partition_name <> 'PT_MAX';
begin
select 1 into v_c from user_tables where table_name = v_tbname and partitioned = 'YES';
select to_char(sysdate,'MM'), to_char(sysdate,'YYYY') into v_m1, v_y1 from dual;
v_ptname := 'PT_'||v_m1||v_y1;
select count(*) into v_c from user_tab_partitions where table_name = v_tbname and partition_name = v_ptname;
if v_c = 0 then
if v_m1 = '12' then
v_m2 := '01'; v_y2 := to_char(to_number(v_y1)+1);
else
v_m2 := lpad(to_char(to_number(v_m1)+1),2,'0'); v_y2 := v_y1;
end if;
v_txt := 'alter table '|| v_tbname ||' split partition PT_MAX at (to_date(''01.'||v_m2||'.'||v_y2||''',''DD.MM.YYYY'')) into ( partition '|| v_ptname ||', partition PT_MAX )';
-- dbms_output.put_line (v_txt);
execute immediate v_txt;
end if;
if v_m1 = '01' then
v_m2 := '12'; v_y2 := to_char(to_number(v_y1)-1);
else
v_m2 := lpad(to_char(to_number(v_m1)-1),2,'0'); v_y2 := v_y1;
end if;
v_dt1 := to_date('01.'||v_m2||'.'||v_y2,'DD.MM.YYYY');
open c_pt;
loop
fetch c_pt into v_ptname;
exit when c_pt%notfound;
v_dt2 := to_date('01.'||substr(v_ptname,4,2)||'.'||substr(v_ptname,6,4),'DD.MM.YYYY');
if v_dt1 > v_dt2 then
v_txt := 'alter table '|| v_tbname ||' drop partition '|| v_ptname;
-- dbms_output.put_line (v_txt);
execute immediate v_txt;
end if;
end loop;
close c_pt;
exception when no_data_found then null;
end;
/
Скрипт устанавливается при запуске _sqlplusw_job.bat.
Лог работы заносится в файл Run_scripts_job.log.
В скрипте устанавливается запуск процедуры P_MNG_PARTITION два раза в месяц 1-го и 15-го числа в 1ч.
Если схема СУФД имеет имя не SUFD, то его необходимо изменить в скрипте job.sql в строке: «v_user varchar2(30) := 'SUFD';».
|