Как клонировать базу данных в Oracle

В этой статье расскажем как клонировать базу данных Oracle используя холодную резервную копию исходной базы данных.
Если у вас есть холодная копия, то можно переходить к шагу 2, в противном случае пойдем по порядку.

Содержание

Шаг 1

Определяем файлы базы данных и копируем их в нужное место. Для идентификации необходимых файлов базы данных выполните запрос:

SET LINES 100 PAGES 999

COL NAME FORMAT A50

SELECT NAME, BYTES

  FROM (SELECT NAME, BYTES FROM V$DATAFILE

        UNION ALL

        SELECT NAME, BYTES FROM V$TEMPFILE

        UNION ALL

        SELECT LF.MEMBER «NAME», L.BYTES

          FROM V$LOGFILE LF, V$LOG L

         WHERE LF.GROUP# = L.GROUP#) USED,

       (SELECT SUM (BYTES) AS POO FROM DBA_FREE_SPACE) FREE

/

Он покажет все файлы данных, временные файлы и журналы повторного выполнения. Кроме того, будет показан размер файлов, чтобы можно было оценить необходимый объем пространства на целевой файловой системе для хранения.

Остановите исходную базу данных, выполнив:

SHUTDOWN IMMEDIATE

Скопируйте все необходимые файлы на целевую файловую систему. Убедитесь, что все скопированные файлы и директории имеют корректного владельца и набор прав доступа.

Запустите исходную базу данных:

STARTUP

Шаг 2

Создание spfile для новой базы данных. Этот шаг предполагает, что вы используете spfile, если нет, то скопируйте существующий.
Для создания, выполните в sqlplus:

create pfile=’init_новый_SID.ora’ from spfile;

Этой командой вы создадите новый pfile в директории $ORACLE_HOME/dbs.

Только что созданный pfile необходимо отредактировать. Если клонированная база данных имеет новое имя, то его требуется сменить, так же как и некоторые пути. Просмотрите созданный файл и внесите необходимые изменения. Обратите внимание на параметры памяти, например, если вы клонируете промышленную базу на сервер разработки, уступающий по параметрам, то необходимо уменьшит соответствующие параметры, например, объем используемой оперативной памяти.

Шаг 3

На этом шаге создаются управляющие файлы для клонированной базы данных. Для этого подключаемся к исходной базе данных и делаем снимок с текущих управляющих файлов, выполнив в sqlplus:

alter database backup controlfile to trace as’/home/oracle/cr_новый_SID.sql’

/

Теперь, используя текстовый редактор внесите в полученный файл следующие изменения:

    • Удалите все строки в начале файла, до второй строки, содержащей STARTUP MOUNT
    • Удалите все строки, которые начинаются с –
    • Удалите все строки, которые начинаются с #
    • Удалите пустые строки в секции CREATE CONTROLFILE
    • Удалите строку RECOVER DATABASE USING BACKUP CONTROLFILE
    • Переместите в начало файла строку CREATE CONTROLFILE. Слово REUSE заменить на SET. Имя базы данных установить равным новому имени (если его изменили). Решите, будет ли база данных в режиме archivelog или нет
  • Если изменены пути расположения файлов, то внесите необходимые изменения

Ниже приведен пример, как примерно должен выглядеть полученный файл, база данных не в режиме ARCHIVELOG и называется TEST:

STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE «TEST» RESETLOGS FORCE LOGGING NOARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 453
LOGFILE
GROUP 1 ‘/u03/oradata/test/redo01.log’  SIZE 100M,
GROUP 2 ‘/u03/oradata/test/redo02.log’  SIZE 100M,
GROUP 3 ‘/u03/oradata/test/redo03.log’  SIZE 100M
DATAFILE
‘/u03/oradata/test/system01.dbf’,
‘/u03/oradata/test/undotbs01.dbf’,
‘/u03/oradata/test/cwmlite01.dbf’,
‘/u03/oradata/test/drsys01.dbf’,
‘/u03/oradata/test/example01.dbf’,
‘/u03/oradata/test/indx01.dbf’,
‘/u03/oradata/test/odm01.dbf’,
‘/u03/oradata/test/tools01.dbf’,
‘/u03/oradata/test/users01.dbf’,
‘/u03/oradata/test/xdb01.dbf’,
‘/u03/oradata/test/andy01.dbf’,
‘/u03/oradata/test/psstats01.dbf’,
‘/u03/oradata/test/planner01.dbf’
CHARACTER SET CL8MSWIN1251
;
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/u03/oradata/test/temp01.dbf’
SIZE 104857600  REUSE AUTOEXTEND OFF;

Шаг 4

Добавляем новое вхождение в /etc/oratab (или /opt/oracle/oratab) для новой базы данных. Источник новых переменных окружения . oraenv и проверяем, что все работает, выполнив:

echo $ORACLE_SID

если вывод не показал новое имя базы данных, то ищем причину.

Шаг 5

Создаем новый файл паролей и управляющие файлы. Для создания файла паролей выполните команду:

orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} password=

Для создания управляющих файлов выполните:

sqlplus «/ as sysdba»

@/home/oracle/cr_новый_SID

На этом этапе легко можно столкнуться с ошибками. Приведу наиболее частые и пути их решения:

ORA-01113: file 1 needs media recovery

Вероятнее всего перед копированием файлов исходная база не была остановлена, или не остановилась полностью к моменту копирования. Вернитесь к шагу 1 и повторите копирование.

ORA-01503: CREATE CONTROLFILE failed
ORA-00200: controlfile could not be created
ORA-00202: controlfile: ‘/u03/oradata/test/control01.ctl’
ORA-27038: skgfrcre: file exists

Проверьте pfile созданный на втором шаге. Убедитесь, что значение параметра control_files указывает на корректное расположение файлов. Если с control_files все в порядке, то убедитесь, что управляющие файлы не были скопированы вместе с другими файлами базы данных. Если это так, то удалите их или переименуйте.

Шаг 6

Выполним ряд проверок.

Выполните проверку, открыт ло экземпляр базы данных. Для этого выполните:

SELECT STATUS FROM V$INSTANCE;

Статус базы данных должен быть OPEN

 Проверяем файлы данных, статусы у всех должны быть ONLINE и SYSTEM:

SELECT DISTINCT STATUS FROM V$DATAFILE;

Просмотрите alert.log на наличие ошибок.

Шаг 7

Устанавливаем глобальное имя базы данных. Поскольку клонированная база данных продолжает содержать имя исходной, выполним:

ALTER DATABASE RENAME GLOBAL_NAME TO новый_SID

/

Шаг 8

Создадим spfile, выполнив в sqlplus:

CREATE SPFILE FROM PFILE;

Шаг 9

На этом шаге предстоит изменить ID базы данных, который необходим, например, при использовании RMAN. Если же RMAN использовать не планируется, то все равно лучше сменить, это будет наиболее правильно, да и лишний опыт не повредит.
Из sqlplus выполняете:

SHUTDOWN IMMEDIATE

STARTUP MOUNT

EXIT

Из командной строки UNIX выполните:

nid target=/

NID спросит, действительно ли вы хотите изменить ID, ответить – Y (да). После того, как отработает, снова запустите базу, выполнив из sqlplus:

SHUTDOWN IMMEDIATE

STARTUP MOUNT

ALTER DATABASE OPEN RESETLOGS

/

Шаг 10

При необходимости добавьте вхождения для новой базы данных в файлы listener.ora и tnsnames.ora. На этом клонирование базы данных завершено.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *