Как создать control-файлы Oracle / Как создать контрол-файлы Oracle
Всем привет в данной статье рассмотрим вопрос как создать control-файлы Oracle. Когда требуется пересоздавать control-файлы Oracle? Я понимаю, что в России не так много компаний, кто в качестве платформы для баз данных использует именно ее, уж очень она дорогая при покупке. Думаю этот небольшой пост покажется для кого-то полезным, как в ознакомительных целях, так и в практических. Предпосылки, которые мы решаем:
- У Вас их нет или они повреждены.
- Меняется физическое расположение файлов БД
Что такое контрольный файл?
Каждая база данных Oracle имеет управляющий файл, представляющий собой небольшой двоичный файл, в котором записана физическая структура базы данных. Контрольный файл включает:
- Имя базы данных
- Имена и расположение связанных файлов данных и файлов журнала повторного выполнения
- Отметка времени создания базы данных
- Текущий порядковый номер журнала
- Информация о КПП
Управляющий файл должен быть доступен для записи сервером базы данных Oracle всякий раз, когда база данных открыта. Без контрольного файла база данных не может быть смонтирована и ее восстановление будет затруднено.
Управляющий файл базы данных Oracle создается одновременно с базой данных. По умолчанию при создании базы данных создается как минимум одна копия контрольного файла. В некоторых операционных системах по умолчанию создается несколько копий. Вы должны создать две или более копий управляющего файла во время создания базы данных. Вы также можете создать контрольные файлы позже, если вы потеряете контрольные файлы или захотите изменить определенные настройки в контрольных файлах.
Делаем скрипт для создания control-файлов
SQL> alter database backup controlfile to trace;
Данная команда создаст trace-файл в каталоге udump
В моем случае это:
\ora\admin\work\udump\orcl_ora_2052.trc
В этом файле есть команды из которых можно легко сделать скрипт для создания контрол-файлов.
переименуем orcl_ora_2052.trc в ctl.sql и отредактируем как нам надо:
CREATE CONTROLFILE REUSE DATABASE "work" RESETLOGS ARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 14
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 '\ora\oradata\work\REDO01.LOG' SIZE 100M,
GROUP 2 '\ora\oradata\work\REDO02.LOG' SIZE 100M,
GROUP 3 '\ora\oradata\work\REDO03.LOG' SIZE 100M
DATAFILE
'\ora\oradata\work\SYSTEM01.DBF',
'\ora\oradata\work\UNDOTBS01.DBF',
'\ora\oradata\work\EXAMPLE01.DBF',
'\ora\oradata\work\INDX01.DBF',
'\ora\oradata\work\TOOLS01.DBF',
'\ora\oradata\work\USERS01.DBF',
'\ora\oradata\work\OEM_REPOSITORY.DBF',
'\ora\oradata\work\CWMLITE01.DBF',
'\ora\oradata\work\DRSYS01.DBF',
'\ora\oradata\work\ODM01.DBF',
'\ora\oradata\work\XDB01.DBF',
'\ora\oradata\work\USERS02.DBF',
'\ora\oradata\work\USERS03.DBF',
'\ora\oradata\work\USERS04.DBF'
CHARACTER SET WE8MSWIN1252
ALTER DATABASE OPEN RESETLOGS;
Стартуем СУБД в nomount mode и запустим ctl.sql под sysdba
sqlplus / as sysdba
SQL> startup nomount
ORACLE instance started.
Total System Global Area 80812648 bytes
Fixed Size 453224 bytes
Variable Size 54525952 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @ctl.sql
Control file created.
Database altered.
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------
\ora\oradata\work\CONTROL01.CTL
\ora\oradata\work\CONTROL02.CTL
\ora\oradata\work\CONTROL03.CTL
Для переименования базы данных достаточно поменять в скрипте reuse на set:
CREATE CONTROLFILE SET DATABASE "work" RESETLOGS ARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 14
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 '\ora\oradata\work\REDO01.LOG' SIZE 100M,
GROUP 2 '\ora\oradata\work\REDO02.LOG' SIZE 100M,
GROUP 3 '\ora\oradata\work\REDO03.LOG' SIZE 100M
DATAFILE
'\ora\oradata\work\SYSTEM01.DBF',
'\ora\oradata\work\UNDOTBS01.DBF',
'\ora\oradata\work\EXAMPLE01.DBF',
'\ora\oradata\work\INDX01.DBF',
'\ora\oradata\work\TOOLS01.DBF',
'\ora\oradata\work\USERS01.DBF',
'\ora\oradata\work\OEM_REPOSITORY.DBF',
'\ora\oradata\work\CWMLITE01.DBF',
'\ora\oradata\work\DRSYS01.DBF',
'\ora\oradata\work\ODM01.DBF',
'\ora\oradata\work\XDB01.DBF',
'\ora\oradata\work\USERS02.DBF',
'\ora\oradata\work\USERS03.DBF',
'\ora\oradata\work\USERS04.DBF'
CHARACTER SET WE8MSWIN1252
;
ALTER DATABASE OPEN RESETLOGS;