Основные команды по управлению оперативными журналами

dbstalker, 11 октября

Основные команды: создание и удаление групп, элементов групп, очистка файлов, выполнение контрольной точки, переключение журналов.

ALTER DATABASE ADD LOGFILE GROUP NN (‘C:\ORACLE\ORADATA\MY_DB\REDO1.LOG’, ‘C:\ORACLE\ORADATA\MY_DB\REDO2.LOG’) SIZE 100M; - создание группы оперативных журналов

ALTER DATABASE ADD LOGFILE MEMBER ‘C:\ORACLE\ORADATA\MY_DB\REDO3.LOG’ TO GROUP NN; - для добавления в существующую группу

ALTER DATABASE RENAME FILE ‘C:\ORACLE\ORADATA\MY_DB\REDO1.LOG’ TO ‘D:\ORACLE\ORADATA\MY_DB\REDO1.LOG’; - переименование. Переименование чаще всего нужно, если база данных переноситься на другой носитель или оперативные журналы. Но для этого нужно сначала остановить экземпляр, перемести журналы, базу смонтировать, переименовать файлы и лишь, затем база данных может быть открыта.

ALTER DATABASE DROP LOGFILE GROUP NN; - удаление группы. Эту команду можно применить только к неактивной заархивированной группе и если в базе есть не менее двух групп. В операционной системе файлы остаются.

ALTER DATABASE DROP LOGFILE MEMBER ‘C:\ORACLE\ORADATA\MY_DB\REDO2.LOG’ – удаление члена группы. Удалять можно только из неактивной заархивированной группы. В группе должен оставаться, по крайней мере, один действительный элемент. Статус элемента группы можно узнать из представления v$logfile. В результате удаления элементов в группе может быть меньше чем в прочих группах. Такая ситуация допустима, но нежелательна. После удаления элемента группы соответствующий файл из операционной системы не удаляется.

ALTER SYSTEM SWITCH LOGFILE – переключение журнальных файлов. По этой команде происходит переключение текущего журнала, но также активный журнал становится неактивным.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1         16  104857600          1 NO  INACTIVE            7852938591 18.10.2007
         2          1         18  104857600          1 NO  CURRENT             7852938830 18.10.2007
         3          1         17   10485760          1 NO  ACTIVE              7852938712 18.10.2007

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1         19  104857600          1 NO  CURRENT             7852938837 18.10.2007
         2          1         18  104857600          1 NO  INACTIVE            7852938830 18.10.2007
         3          1         17   10485760          1 NO  INACTIVE            7852938712 18.10.2007

ALTER SYSTEM CHECKPOINT - вы явно указываете ораклу выполнить контрольную точку. Если журнальный файл имел статус активный ACTIVE , то после выполнения этой команды его статус меняется на неактивный NOACTIVE.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          3  104857600          1 NO  CURRENT             7852663665 17.10.2007
         2          1          2  104857600          1 NO  ACTIVE              7852663640 17.10.2007

SQL> alter system checkpoint;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          3  104857600          1 NO  CURRENT             7852663665 17.10.2007
         2          1          2  104857600          1 NO  INACTIVE            7852663640 17.10.2007

alter database clear logfile group NN;

alter database clear unarchived logfile group NN;

alter database clear unarchived logfile group NN unrecoverable datafile;

Команды используются для чистки файла журналирования операций.Команды имеют смысл при открытой базе данных(если база "упала", то поможет только неполное восстановление). Если при открытой базе возникли проблемы с журналами, сначала, мне кажется, стоит попробовать выполнить команду:

ALTER SYSTEM SWITCH LOGFILE

А затем можно использовать команды clear logfile при возникновении проблем с текущими,активными файлами журналирования операций. Дополнительные параметры:

- GROUP номер - если Вы знаете идентификатор группы, можете указать его для сброса файлов журналирования операций конкретной группы.

- UNRECOVERABLE DATAFILE - параметр используется, если табличное пространство имеет неподключенный файл данных.После выполнения операции CLEAR LOGFILES необходимо удалить это табличное пространство и файл данных.

Об этих командах немного подробнее и с примером.Если в открытой базе данных поврежден журнальный файл и :

  • нет возможности или желания останавливать экземпляр
  • нет желания или возможности удалить поврежденный журнальный файлповрежден текущий журнальный файл

то можно для инициализации журнального файла попробовать воспользоваться указаными выше командами.Alter database clear logfile group очищается указанная журнальная группа.Alter database clear unarchived logfile group - очищает незаархивированную журнальную группу. Добавка к команде unrecoverable datafile если поврежденный файл нужен был для перевода автономного табличного пространства в оперативный режим.

Теперь пример :

остановлю базу(у меня тестовая база под WINDOWS), перенесу все не текущие журнальные файлы на другой диск, буду пробовать открывать базу данных.

SQL> startup
ORACLE instance started.

Total System Global Area  135340020 bytes
Fixed Size                   454644 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'F:\ORACLE\ORADATA\MY_DB\REDO01.LOG'


SQL> alter database clear logfile group 1;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          0  104857600          1 NO  UNUSED              7852963418 18.10.2007
         2          1          3  104857600          1 NO  INVALIDATED         7852963426 18.10.2007
         3          1          0   10485760          1 NO  UNUSED                       0 18.10.2007

SQL> alter database open ;
alter database open
*
ERROR at line 1:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: 'F:\ORACLE\ORADATA\MY_DB\REDO03.LOG'


SQL> alter database clear logfile group 3;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          0  104857600          1 NO  UNUSED              7852963418 18.10.2007
         2          1          3  104857600          1 NO  INVALIDATED         7852963426 18.10.2007
         3          1          0   10485760          1 NO  UNUSED                       0 18.10.2007

SQL> alter database open ;

Database altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          4  104857600          1 NO  CURRENT             7852989694 18.10.2007
         2          1          3  104857600          1 NO  INACTIVE            7852963426 18.10.2007
         3          1          0   10485760          1 NO  UNUSED                       0 18.10.2007

SQL> alter system switch logfile;

System altered.

SQL>  select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          4  104857600          1 NO  ACTIVE              7852989694 18.10.2007
         2          1          3  104857600          1 NO  INACTIVE            7852963426 18.10.2007
         3          1          5   10485760          1 NO  CURRENT             7852991488 18.10.2007

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          4  104857600          1 NO  INACTIVE            7852989694 18.10.2007
         2          1          6  104857600          1 NO  CURRENT             7852991494 18.10.2007
         3          1          5   10485760          1 NO  INACTIVE            7852991488 18.10.2007

Пример при открытой базе у меня не выйдет, так как Windows не разрешает портить файл занятый ораклом

Пример по активному файлу. Удалить активный журнальный файл удалось.Но ALTER DATABASE CLEAR LOGFILE позитивного результата не принесло. Получаю сообщение ORA-01624: log 3 needed for crash recovery of thread 1

Пример по текущему файлу. Эксперимент под Windows провести не удается, так как при открытой базе невозможно перенести текущий редолог. Если же файл перенести при закрытой базе, затем попытаться её открыть, то на команду ALTER DATABASE CLEAR LOGFILE выдает сообщение:

ORA-01624: log 3 needed for crash recovery of thread 1

Когда у меня буде тестовая база на LINUX, то я ещё раз проведу эксперимент

 

Новый комментарий

Я не спамер: введите суму 9+4



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Досуг для взрослых
19 червня, 1 ответа
авто
19 червня, 1 ответа
Отдых
18 червня, 2 ответа