Commit edebd7

2025-12-06 10:18:07 feagor: -/-
oracle/oracle_files/Redo_-_Массовое_пересоздание_redo_логов.md ..
@@ 2,3 2,102 @@
> [!CAUTION]
> Логи с отличным от дефолтного(512 байт) размером блока после превращения в архивлог, судя по всему не жрутся Informatiкой
+
+ #### Имеющиеся файлы и их размер
+ ```ora select group#,members,status,archived,bytes/1024/1024 as mb,first_time,next_time from v$log t order by 1;```
+
+ #### Расположение файлов
+ ```ora SELECT * FROM v$logfile;```
+
+ #### Добавление новых групп
+ ```ora ALTER DATABASE ADD LOGFILE GROUP 4 (
+ '/u01/db/system/DW/redo04a.log',
+ '/u01/db/system/DW/redo04b.log') SIZE 2048M;
+ ALTER DATABASE ADD LOGFILE GROUP 5 (
+ '/u01/db/system/DW/redo05a.log',
+ '/u01/db/system/DW/redo05b.log') SIZE 2048M;
+ ALTER DATABASE ADD LOGFILE GROUP 6 (
+ '/u01/db/system/DW/redo06a.log',
+ '/u01/db/system/DW/redo06b.log') SIZE 2048M;
+ ```
+
+ #### Если нужно переключиться вручную на другую группу, то необходимо выполнить
+ ```ora Alter system switch logfile;```
+ --Формирование чекпоинта, для перехода групп в состояние INACTIVE
+ ```ora alter system checkpoint;```
+ #### Удаление группы
+ Перед удалением старых файлов необходимо удостовериться, что они в данный момент в состоянии INACTIVE и ARCHIVE предварительно выполнив запрос
+ ```sql select group#,members,status,archived,bytes/1024/1024 as mb,first_time,next_time from v$log t order by 1;```
+
+ После чего можно по одному удалять неактивные группы файлов.
+ ```ora alter database drop logfile group 6;```
+
+ #### Скрипт пересоздания логфайлов
+ ```ora
+ --select group#,members,status,archived,bytes/1024/1024 as mb,first_time,next_time from v$log t order by 1;
+ --SELECT * FROM v$logfile;
+ declare
+ l_path1 varchar2(400):= '/u01/db/redolog_a/CBSPROD/';
+ l_path2 varchar2(400):= '/u01/db/redolog_b/CBSPROD/';--поставить null если нужОн только 1 член в группе
+ l_size varchar2(400):= '2048M';
+ l_grpcnt int:= 5; --Количество групп логов
+ ---------------------------------------------------
+ l_maxgrp# int;
+ l_curcnt int;
+ l_cmd varchar2(4000);
+ begin
+ execute immediate 'alter system switch logfile';
+ execute immediate 'alter system checkpoint';
+ select max( group#),count(1) into l_maxgrp#,l_curcnt from v$log t;
+ DBMS_OUTPUT.PUT_LINE( 'max group# is '||l_maxgrp#);
+ if l_maxgrp#-l_curcnt>greatest(l_curcnt,l_grpcnt) then
+ l_maxgrp# :=0;
+ DBMS_OUTPUT.PUT_LINE( 'max group# set to 0');
+ end if;
+
+ for r in (
+ SELECT t.*,row_number() over (order by p#,next_time,group#) rn
+ FROM (
+ SELECT group#,status,next_time,
+ decode(status,'UNUSED',1,'INACTIVE',2,'ACTIVE',3,'CURRENT',4) p#,count(1) over () as cnt
+ FROM v$log t
+ ) t
+ order by p#,next_time,group#
+ ) loop
+ if r.cnt-r.rn>1 then
+ l_cmd:='alter database clear logfile group '||r.group#;
+ DBMS_OUTPUT.PUT_LINE(l_cmd);
+ execute immediate l_cmd;
+ l_cmd:='alter database drop logfile group '||r.group#;
+ DBMS_OUTPUT.PUT_LINE(l_cmd);
+ execute immediate l_cmd;
+ end if;
+ end loop;
+ for i in l_maxgrp#+1..l_maxgrp#+l_grpcnt loop
+ if l_path2 is null then
+ l_cmd := 'ALTER DATABASE ADD LOGFILE GROUP '||i||'('''||l_path1||'redo'||lpad(i,2,'0')||'.log'') SIZE '||l_size;
+ else
+ l_cmd := 'ALTER DATABASE ADD LOGFILE GROUP '||i||'('''||l_path1||'redo'||lpad(i,2,'0')||'.log'','''||l_path2||'redo'||lpad(i,2,'0')||'.log'') SIZE '||l_size;
+ end if;
+ DBMS_OUTPUT.PUT_LINE( l_cmd);
+ execute immediate l_cmd;
+ end loop;
+ execute immediate 'alter system switch logfile';
+ dbms_lock.sleep(2);
+ execute immediate 'alter system switch logfile';
+ dbms_lock.sleep(2);
+ execute immediate 'alter system checkpoint';
+ for r in (
+ SELECT group#,status,row_number() over(order by next_time nulls last, group#) rn,count(1) over () as cnt,
+ count(1) over () - row_number() over(order by next_time nulls last) d
+ FROM v$log t
+ order by next_time nulls last,group#
+ ) loop
+ if r.cnt-r.rn>=l_grpcnt then
+ l_cmd := 'alter database drop logfile group '||r.group#;
+ DBMS_OUTPUT.PUT_LINE( l_cmd);
+ execute immediate l_cmd;
+ end if;
+ end loop;
+ end;
+ ```
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9