Очень частое обновление товарного спраовчника.
Растут журналные таблицы карточке и почтового модуля!

--------------- Финальный прогон перед снатием дампа.
----------------------------------------------------------------------------------------------------------------------------------

1. Отключаем и удаляем аудит (5 минут) (под sys) (3 минуты)
ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE;
TRUNCATE TABLE sys.aud$;
shutdown immediate;
startup;

2. Очистка таблицы WRH$_ACTIVE_SESSION_HISTORY 
Нужно выполнить следующие шаги:
Проверить, не занимает ли активная история сессий (ASH) много места в данных AWR. Для этого можно использовать скрипт @$ORACLE_HOME/rdbms/admin/awrinfo.sql. - 10 минут (>50%)
Допустимое использование ASH — 1,1%. Если показатель высокий, нужно удалить осиротевшие строки ASH. 

2.1. Проверить наличие осиратевших строк можно с помощью запроса: 2 минуты (27455089 строк) (под sys)
SELECT COUNT(1) Orphaned_ASH_Rows FROM wrh$_active_session_history a WHERE NOT EXISTS (SELECT 1 FROM wrm$_snapshot WHERE snap_id = a.snap_id AND dbid= a.dbid AND instance_number = a.instance_number);

2.2. Удалить осиротевшие строки можно с помощью запроса: (5 час) (под sys)
DELETE FROM wrh$_active_session_history a WHERE NOT EXISTS (SELECT 1 FROM wrm$_snapshot WHERE snap_id = a.snap_id AND dbid = a.dbid AND instance_number = a.instance_number);

2.3. Уменьшить размер таблицы WRH$_ACTIVE_SESSION_HISTORY, чтобы вернуть освобождённое пространство. Для этого нужно выполнить запрос: (под sys) (6 час 30 мин) 
alter table WRH$_ACTIVE_SESSION_HISTORY shrink space; 

3. Посмотреть большие таблицы схемы (под sys) (1 мин)
select * from ( select owner "Пользователь", segment_name "ТПространство", bytes/1024/1024 "Размер в MB" from dba_segments where
segment_type = 'TABLE' and owner='SYS'  order by bytes/1024/1024 desc) where rownum <= 30;

SYS	WRI$_OPTSTAT_HISTGRM_HISTORY	232
SYS	WRI$_OPTSTAT_HISTHEAD_HISTORY	72
SYS	IDL_UB1$	48
SYS	SCHEDULER$_EVENT_LOG	29
SYS	SOURCE$	27
SYS	WRI$_ADV_MESSAGE_GROUPS	25
SYS	IDL_UB2$	24
SYS	WRH$_SQL_PLAN	23
SYS	WRH$_SYSMETRIC_HISTORY	16
SYS	WRI$_OPTSTAT_IND_HISTORY	11
SYS	ARGUMENT$	8
SYS	IDL_CHAR$	8
SYS	VIEW$	6
SYS	WRI$_OPTSTAT_TAB_HISTORY	6
SYS	WRI$_ADV_SQLT_PLANS	5
SYS	IDL_SB4$	4
SYS	WRH$_SYSMETRIC_SUMMARY	4
SYS	OBJ$	3
SYS	WRH$_SQL_BIND_METADATA	3
SYS	WRH$_SQLTEXT	3
SYS	WRI$_ADV_SQLT_PLAN_STATS	3
SYS	WRI$_ADV_RATIONALE	3
SYS	WRI$_ADV_ACTIONS	3
SYS	WRI$_ADV_OBJECTS	3
SYS	WRI$_ADV_PARAMETERS	3
SYS	SETTINGS$	3
SYS	DEPENDENCY$	3
SYS	ACCESS$	2
SYS	KOTAD$	2
SYS	HIST_HEAD$	2

4. Посмотреть большие таблицы схемы (под sys) (1 мин)
select * from ( select owner "Пользователь", segment_name "ТПространство", bytes/1024/1024 "Размер в MB" from dba_segments where
segment_type = 'TABLE' and owner='SUPERMAG'  order by bytes/1024/1024 desc) where rownum <= 30;

SUPERMAG	SMPOSTFAILIN	9833
SUPERMAG	SMCARDSECURITYLOG	6820.125
SUPERMAG	SMEGAISPOSTLOG	5517.75
SUPERMAG	SMPOSTFAILINDATA	4301
SUPERMAG	SMPRICEHISTORY	1983
SUPERMAG	SMEGAISDOCSPEC	1280
SUPERMAG	SMCASHCHECKITEMS	1091
SUPERMAG	SMSPEC	1089
SUPERMAG	FFMAPREP_	897
SUPERMAG	SMEGAISDOCSPECF2	704
SUPERMAG	SMDOCLOG	650
SUPERMAG	SMSPECCASHALCCODEDETAIL	633
SUPERMAG	SMEGAISRESTSPIECE	616
SUPERMAG	FFMAPREP	496
SUPERMAG	SMCASHITEMSDISCUKM4	453
SUPERMAG	SMSPECTAX	452
SUPERMAG	SMTIMESPANSALE	423
SUPERMAG	SMSPECSTAT	372
SUPERMAG	SMEGAISDOCHEADER	289.75
SUPERMAG	SMPOSTINLOG	265
SUPERMAG	SMPOSTQUEUEINPROCESSING	246
SUPERMAG	FFSPEC	235
SUPERMAG	SMSPECCS	218
SUPERMAG	SPALCOARTICLESPEC	217
SUPERMAG	SMCASHDISC	207
SUPERMAG	SMSPECPRICEHISTORYCO	185
SUPERMAG	SMCASHCHECKS	181
SUPERMAG	SMSPECOR	181
SUPERMAG	SPALCOINCOMESPEC	178
SUPERMAG	SMSPECCASHDISC	171

5. Отключение трассировки запросов в таблицу SUPERMAG.SSEVENTLOG. (1 мин) (под supermag)
exec supermag.trace.trace_off;
commit;

6. Удаление старых процессов (под supermag). (ORCP - прием по заказу) (5 мин)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMProcess p 
		where p.ProcessType = 'ORCP'
			and p.CompletedTime between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

7. Удаление старых процессов (под supermag). (ORCV- прием по товара) (5 минут)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMProcess p 
		where p.ProcessType = 'ORCV'
			and p.CompletedTime between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

7. Удаление старых процессов (под supermag). (ALCC- подсчет алкоголя ТСД) (5 минут)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMProcess p 
		where p.ProcessType = 'ALCC'
			and p.CompletedTime between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

8. Удаление старых процессов (под supermag). (WIWO- подсчет товаров ТСД) (5 мин)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMProcess p 
		where p.ProcessType = 'WIWO'
			and p.CompletedTime between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

9. Поиск старых документов. (под supermag) (1 мин)
select count(*) from supermag.SMDocuments D
        where D.CreatedAt < to_date('31.12.2023','DD.MM.YYYY')
            and D.DocType in ('LA','FA','OR','OC',
                        'SO','BI','SR','ME',
                        'IL','RL','AC','AB','AD',
                        'SL','PL',
                        'CI','PW','PF',
                        'RD','BA');

  COUNT(*)
----------
    239389

10. Удаление старых документов (под supermag) (9:15 - 11:30 - 2 час).

declare
	vBeforeDate date := to_date('31.12.2023','DD.MM.YYYY');
	vCount integer;
begin
	delete from supermag.TTDocList;
	insert into supermag.TTDocList(DocType,ID)
		select D.DocType, D.ID from supermag.SMDocuments D
		where D.CreatedAt < vBeforeDate
			and D.DocType in ('LA','FA','OR','OC',
						'SO','BI','SR','ME',
						'IL','RL','AC','AB','AD',
						'SL','PL',
						'CI','PW','PF',
						'RD','BA');
	commit;

	Documents.SetMassiveLoad(true);

	loop
		vCount := 0;
		for vRec in (select T.DocType, T.ID
						from supermag.SMDocuments D, supermag.TTDocList T
						where	T.DocType	= D.DocType 
							and T.ID		= D.ID
							and rownum		<= 100000)
		loop
			vCount := 1;
			delete from supermag.SMDocuments where DocType=vRec.DocType and ID=vRec.ID;
			delete from supermag.SMCommonBases where BaseDocType=vRec.DocType and BaseID=vRec.ID;
			delete from supermag.SMDocLog where DocType=vRec.DocType and ID=vRec.ID;
			delete from supermag.TTDocList where DocType = vRec.DocType and ID=vRec.ID;
		end loop;
		commit;
		exit when vCount=0;
	end loop;

	Documents.SetMassiveLoad(false);
end;
/

11. Проверка. Поиск старых документов. (под supermag) (1 мин)
select count(*) from supermag.SMDocuments D
        where D.CreatedAt < to_date('31.12.2023','DD.MM.YYYY')
            and D.DocType in ('LA','FA','OR','OC',
                        'SO','BI','SR','ME',
                        'IL','RL','AC','AB','AD',
                        'SL','PL',
                        'CI','PW','PF',
                        'RD','BA');

  COUNT(*)
----------
         0

12. Посмотреть сколько в БД старых вложений в документы. (под supermag) (1 мин)
select count(*)  from supermag.SMDocBLOBFiles b
    where exists (select 1 from supermag.SMDocuments d
                                            where d.DocType=b.DocType and d.ID=b.ID and d.Createdat<= to_date('31.12.2024','DD.MM.YYYY'))

  COUNT(*)
----------
    140317
											
13. Посмотреть сколько в БД старых вложений в документы. (под supermag) (1 мин)
select count(*)  from supermag.SMDocBLOBFiles b
    where exists (select 1 from supermag.SMDocuments d
                                            where d.DocType=b.DocType and d.ID=b.ID and d.Createdat<= to_date('31.12.2024','DD.MM.YYYY'))

14. Удаление старых вложений (под supermag) (11:40 - 11:55 - 1 час).

declare
vLastDate date := to_date('31.12.2024','DD.MM.YYYY');
vPortion int := 1000;
begin
loop
  delete from supermag.SMDocBLOBFiles b
    where exists (select 1 from supermag.SMDocuments d
                                            where d.DocType=b.DocType and d.ID=b.ID and d.Createdat<=vLastDate)
    and ROWNUM<vPortion;
  exit when SQL%ROWCOUNT=0;
  commit;  
 end loop;
end;
/

15. Уменьшить LOB сегмент (не обязательно).

Чтобы уменьшить LOB-сегмент в Oracle, можно использовать следующие методы (под sys):

Вывести список сегментов по убыванию размера. Для этого нужно выполнить команду (под sys) (1 мин): 
SELECT l.table_name, L.COLUMN_NAME, s.segment_name, S.TABLESPACE_NAME, l.owner, round(s.bytes / 1024 / 1024 / 1024) AS "GB" FROM dba_lobs l, dba_segments s WHERE s.segment_name = l.segment_name AND s.owner = l.owner ORDER BY bytes DESC;

Если не планируется в ближайшее время занять много UNUSED, можно отобрать их командой, которая откидывает пустое место в хвосте таблицы. Для этого нужно выполнить команду (под supermag) (1 мин): 
--- ALTER TABLE &TABLE_NAME MODIFY LOB (&COLUMN_NAME) (DEALLOCATE UNUSED).

ALTER TABLE SMDOCBLOBFILES MODIFY LOB (THECONTENTS) (DEALLOCATE UNUSED)

Если данные рассредоточены по всей таблице россыпью, можно выполнить команду. Для этого нужно выполнить команду (под sys) (5 час): 
--- ALTER TABLE &TABLE_NAME MODIFY LOB (&COLUMN_NAME) (SHRINK SPACE COMPACT CASCADE). 

ALTER TABLE SMDOCBLOBFILES MODIFY LOB (THECONTENTS) (SHRINK SPACE COMPACT CASCADE)


16. Просмотр информации об ошибках приема и приема пакетов Почтового модуля. Количество записей. (под supermag) (5 мин)
select count(*) from SUPERMAG.SMPOSTFAILIN;

  COUNT(*)
----------
   7442401

select count(*) from SUPERMAG.SMPOSTINLOG;

  COUNT(*)
----------
   1503833

select count(*) from SUPERMAG.SMPOSTFAILINDATA;

  COUNT(*)
----------
   1503833

17. Удаление информации об ошибках приема Почтового модуля до 31.12.2024. (под supermag) ( нужно закладывать не менее X часов)


----- 12:00 - 14:30 - (2.30 час.)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMPostFailPack i 
		where 
			i.UPLOADTIME between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

----- 14:30 - 14:35 - (5 мин)

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMPOSTFAILIN i 
		where 
			i.UPLOADTIME between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/


----- 15:00 - 15:05 - (5 мин)


declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SMPOSTFAILINDATA i 
		where 
			i.UPLOADTIME between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

18. Просмотр информации об ошибках приема и приема пакетов Почтового модуля. Количество записей. (под supermag) (5 мин)
select count(*) from SUPERMAG.SMPOSTFAILIN;

  COUNT(*)
----------
     91361

select count(*) from SUPERMAG.SMPOSTINLOG;

  COUNT(*)
----------
   1503833

select count(*) from SUPERMAG.SMPOSTFAILINDATA;

  COUNT(*)
----------
    182605

19. Просмотр количества журнальных записей карточки товара. Количество записей. (под supermag) ( 10 мин)
select count(*) from SUPERMAG.SMCARDSECURITYLOG where EVENTTIME<=to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');

  COUNT(*)
----------
  97046272


20. Удаление журнальных записей карточки товара. Количество записей. (под supermag) ( 24.01.2025 15:15 - 25.01.2025 20:16 - 30 час)
Журнал истории изменения карточек.
Огромное количество записей!
Можно делать частями, можно прерывать.

declare
	vFirstDate date := to_date('01.01.2000 00:00','DD.MM.YYYY HH24:MI');
	vLastDate date := to_date('31.12.2024 23:59','DD.MM.YYYY HH24:MI');
begin
	loop
		Delete from SUPERMAG.SMCARDSECURITYLOG s 
		where 
			s.EVENTTIME between vFirstDate and vLastDate
			and rownum <= 100000;
		exit when SQL%ROWCOUNT = 0;
		commit;
	end loop;
end;
/

21. В административном модуле установить срок хранения журналов 180 дней для (под supermag) ( 1 мин)
- реестр платежей
- журнал обмена с ЕГАИС

22. Запустить Административное задание "Сбор мусора". (под supermag) (1 мин)

23. Расчет статитики TOAD
Расчет статитики таблицы ------ ( 10:30 - 12:00 - 1,5 час)

24. Расчет статитики TOAD
Расчет статистики индексы ------ ( 12:15 - 13:00 - 45 мин)

25. Снятие дампа БД. ------ ( 28.01 13:40 - 29.01 14:10 - 25 час)

26. Развертывание дампа БД. ------ ( 12-00 - 14:00 - 2 час) (Внимание! Использовался быстрый сервер, SDD диски).

27. Тестовый расчет Товародвижения, Административный модуль (предварительно выполнена полная очистка данных).
------ ( 15-25 - 15:35 - 10 мин) (Внимание! Далее -> Использовался быстрый сервер, Intel(R) Xeon(R) CPU E5-2699 v3 @ 8х2.30GHz, SDD диски, 16 ГБ ОЗУ).

28. Расчет статитики TOAD
Расчет статитики таблицы ------ ( 15:40 - 15:50 - 10 мин)

29. Расчет статитики TOAD
Расчет статистики индексы ------ ( 15:50 - 16:00 - 10 мин)

30. Закрытие периода по 31.12.2024 (со сменой учетной политики). (8 потоков). ------ ( 16:00 - 16:30 - 30 мин)








