Клонирование базы Oracle

Администраторы баз данных Oracle Database постоянно обновляют разрабатываемые и тестируемые базы данных, и иногда им бывает нужно клонировать базы данных для того, чтобы протестировать стратегии резервного копирования и восстановления. Если база данных имеет небольшой размер, простой процедуры Data Pump Export/Import вполне хватит, но большинство баз данных ей не поддается. Клонировать базы данных Oracle можно тремя различными способами:

  • с применением RMAN-команды DUPLICATE;
  • с использованием интерфейса OEM Database Control;
  • выполняя копирование базы данных вручную с помощью SQL*Plus.

На заметку! Создание обходной (failover) базы данных на случай кризиса не является главной целью клонирования баз данных — для этого применяются резервные (standby) базы данных.


 

Применение RMAN для клонирования базы данных

В RMAN предлагается команда DUPLICATE, которая позволяет создавать новую базу данных из резервных копий RMAN. Файлы резервных копий восстанавливаются в целевой базе данных, после чего выполняется процедура неполного восстановления, завершающаяся открытием новой базы данных с помощью команды OPEN RESETLOGS. Преимущество подхода с применением RMAN состоит в том, что все перечисленные выше шаги выполняются автоматически, без участия со стороны пользователя. Дублированная база данных может как представлять собой точную копию исходной базы данных, так и содержать только какое-то ее подмножество.

Ниже перечислены шаги, необходимые для выполнения такого вида клонирования базы данных.

1. Создайте новый файл init.ora для вспомогательной базы данных. Этот файл должен содержать следующие параметры, изменяющие имя файлов данных и файлов журналов, чтобы для новой базы данных не использовались файлы исходной базы данных:

  • DB_FILE_NAME_CONVERT — преобразует имена файлов данных целевой базы данных в имена файлов данных дублированной базы данных;
  • DB_FILE_NAME_CONVERT — преобразует имена файлов журналов повторного выполнения, принадлежащие исходной базе данных, в имена файлов журналов повторного выполнения, принадлежащие дублированной базе данных.

2. Запустите экземпляр исходной базы данных, причем обязательно в режиме NOMOUNT.

3. Подключите каталог восстановления к исходной и вспомогательной базе данных: 

RMAN> CONNECT target / catalog rman/rman1@catalog_db auxiliary
sys/password@auxiliary_db

4. Выполните RMAN-команду DUPLICATE, как показано ниже:

RMAN> DUPLICATE TARGET DATABASE TO
auxiliary_db /* действительное имя вспомогательной базы данных */
pfile =/u01/app/oracle/10.2.0/db_1/dbs/init_auxiliary_db; 

Прежде чем выполнять команду DUPLICATE DATABASE, нужно обязательно делать хранящиеся на диске резервные копии доступными для дублированного экземпляра, либо перенеся их на целевой сервер вручную, либо применив для этого NFS или разделяемые диски.

Перечисленные выше шаги являются очень упрощенной иллюстрацией процесса дублирования базы данных с помощью RMAN; более подробное описание этого процесса можно найти в документации Oracle. При выполнении команды DUPLICATE TARGET DATABASE TO..., как показывалось выше, утилита RMAN будет останавливать вспомогательную базу данных и запускать ее заново, а затем выполнять следующие шаги.

  • Восстанавливать все файлы с резервными копиями, принадлежащие целевой базе данных, во вспомогательной базе данных с использованием всех доступных архивных журналов повторного выполнения.
  • Открывать дублированную базу данных с применением параметра RESETLOGS.

На заметку! Какое бы дублирование базы данных не выполнялось — основанное на использовании резервных копий или активное — утилите RMAN всегда требуется проводить неполное восстановление. Объясняется это тем, что утилита RMAN не делает резервную копию оперативных журналов повторного выполнения, принадлежащих исходной базе данных. Она создает дублированные файлы данных во вспомогательном экземпляре и восстанавливает их с помощью архивных журналов повторного выполнения.


В предыдущем примере было показано, как дублировать базу данных за счет использования файлов резервных копий исходной базы данных. Тем не менее, базу данных можно дублировать и без участия всяких резервных копий за счет применения нового приема, называемого активным дублированием базы данных (active database duplication). Этот прием позволяет копировать файлы активной базы данных по сети прямо во вспомогательный экземпляр. Именно поэтому его еще также называют сетевым дублированием (network-enabled duplication). Далее приводится краткое описание этого приема.

В случае создания дубликата базы данных на другом хосте при дублировании базы данных, для дубликата и исходной базы данных может использоваться одинаковая структура каталогов и идентичные имена файлов данных. То есть переименовывать файлы в дублированной базе данных в такой ситуации не потребуется. Однако вместо этого вместе с командой DUPLICATE DATABASE необходимо указать конструкцию NOFILENAMECHECK, во избежание выполнения ненужных проверок на предмет того, чтобы на одном и том же хосте не использовались одинаковые имена файлов.

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

Сначала нужно создать файл паролей Oracle, поскольку выполнение активного дублирования базы данных без него не возможно. Пароль SYSDBA в файле паролей дублированной базы данных должен выглядеть точно так, как и в исходной базе данных. При желании можно просто заставлять RMAN скопировать файл паролей исходной базы данных на целевой хост, указав в команде DUPLICATE DATABASE значение для параметра PASSWORD FILE. Команда, которую можно использовать для создания файла паролей, выглядит так: 

$ orapwd file=orapwtest1 password=<пароль>
entries=20 ignorecase=n

Как уже было сказано выше, вместо того, чтобы применять такую команду, можно просто добавить к команде DUPLICATE DATABASE конструкцию PASSWORD FILE и заставить утилиту RMAN скопировать файл паролей исходной базы данных в целевую.

Хотя в этом примере дубликат и создается на том же самом сервере, из-за того, что применяется метод активного дублирования, необходимо обязательно позаботиться о том, чтобы обе базы данных использовали Oracle Net. Для этого достаточно добавить имя дублированной базы данных в файл listener.ora на хост-сервере, как показано ниже: 

SID_LIST_LISTENER=
(SID_DESC =
(GLOBAL_DBNAME = prod1)
(ORACLE_HOME = /u01/app/oracle/product/10.1g/)
(SID_NAME =prod1)
)
(SID_DESC =
(GLOBAL_DBNAME = test1)
(ORACLE_HOME = /u01/app/oracle/product/11.1/)
(SID_NAME =test1)
)
)

После внесения этого изменения потребуется перезапустить службу слушателя. Еще необходимо внести следующее изменение в файл tnsnames.ora

test1=
(DESCRIPTION=
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = prod1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test1)
)
)

Далее следует создать для вспомогательного экземпляра файл параметров инициализации. Из-за того, что в рассматриваемом примере для именования файла дублированной базы данных будет использоваться прием с параметром SPFILE, в этом файле параметров потребуется добавить только один параметр — DB_NAME

db_name=test1

Реальные имена файлов можно будет указать в значениях параметров DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT прямо в самой команде DUPLICATE DATABASE.

Далее понадобится запустить вспомогательный экземпляр в режиме NOMOUNT

$ sqlplus /nolog
SQL> connect sys/sammyy1 as sysdba
Connected to an idle instance
SQL> startup nomount
Oracle Instance started.
Total System Global Area           113246208 bytes
Fixed Size                           1218004 bytes
Variable Size                       58722860 bytes
Database Buffers                    50331648 bytes
Redo Buffers                         2973696 bytes
SQL>

Показанный здесь вспомогательный экземпляр использует простой файл параметров инициализации, в котором содержится только параметр DB_NAME. Однако позже в команде DUPLICATE DATABASE будет указана конструкция SPFILE, что приведет к копированию файла SPFILE исходной базы данных в стандартный каталог вспомогательного экземпляра.

Далее необходимо запустить утилиту RMAN и подключиться к исходной базе данных, вспомогательной базе данных и каталогу восстановления, как показано ниже: 

$rman target sys/sammyy1@eleven
connected to target database: ELEVEN (DBID=3481681133)
RMAN> connect auxiliary sys/sammyy1@test1
connected to auxiliary database: TEST1 (not mounted)
RMAN> CONNECT CATALOG rman/rman@catdb
connected to recovery catalog database
RMAN>

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

RMAN> duplicate target database
2> to test1
3> from active database
4> spfile
5> parameter_value_convert
'/u01/app/oracle/eleven','/u10/app/oracle/test1'
6> set log_file_name_convert
'/u05/app/oracle/eleven', '/u10/app/oracle/test1'
7> db_file_name_convert '/u10/app/oracle/eleven',
'/u10/app/oracle/test1';
Starting Duplicate Db at 04-APR-08
using target database control file instead of recovery catalog
contents of Memory Script:
{
sql "declare worked boolean;
begin worked := dbms_backup_restore.networkFileTransfer(
''auxdb'', null, null,
...
executing Memory Script
...
Starting backup at 04-APR-08
...
Finished backup at 04-APR-08
...
contents of Memory Script:
{
set until scn 901715;
recover
clone database
delete archivelog
;
}
...
starting media recovery
...
media recovery complete, elapsed time: 00:00:01
Finished recover at 04-APR-08
...
database opened
Finished Duplicate Db at 04-APR-08
RMAN>

Указание в команде DUPLICATE DATABASE конструкции SPFILE вынуждает утилиту RMAN копировать файл SPFILE исходной базы данных на сервер, обслуживающий вспомогательную базу данных, а параметры, задаваемые в этой конструкции — вносить в него соответствующие изменения. После этого RMAN останавливает вспомогательный экземпляр и запускает его снова с использованием уже нового отредактированного файла SPFILE.

В частности, в настоящем примере утилита RMAN сначала обновляет файл SPFILE исходной базы данных с помощью значений, которые были указаны в конструкциях PARAMETER_NAME_CONVERT и SET, а затем останавливает вспомогательный экземпляр и перезапускает его снова с использованием уже нового SPFILE. После этого утилита RMAN начинает копировать файлы исходной базы данных по сети. По завершении процесса копирования утилита RMAN, прежде чем открывать дублированную базы данных, выполняет для нее процедуру RECOVER. В ходе процесса дублирования базы данных RMAN делает следующее.

  • Копирует файлы данных, но не файлы, находящиеся в области быстрого восстановления.
  • Копирует необходимые файлы архивных журналов повторного выполнения.
  • Поскольку была указана конструкция SPFILE, копирует файл SPFILE исходной базы данных в целевую.
  • Копирует файл паролей, если указывалась конструкция PASSWORD FILE.
  • Воссоздает файлы оперативных журналов повторного выполнения.
  • Воссоздает управляющие файлы для целевой базы данных.
  • Воссоздает временные файлы в каталоге, который указан в параметре DB_CREATE_FILE_DEST.

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

 

Применение Database Control для клонирования базы данных

В OEM Database Control предлагается специальный мастер — Clone Database Wizard (Мастер клонирования базы данных), который помогает проходить процесс клонирования базы данных шаг за шагом. Ниже перечислены основные функциональные возможности этого механизма клонирования.

  • Клонировать допускается любую базу данных Oracle версии 8.1.7 или выше.
  • Исходная база данных может находиться как в режиме ARCHIVELOG, так и в режиме NOARCHIVELOG.
  • Выполнять клонирование базы данных можно и когда она находится в открытом состоянии. Для осуществления операции клонирования в Database Control на внутреннем уровне применяется утилита RMAN.
  • Database Control будет делать резервную копию файлов данных и восстанавливать их из нее в новом месте, а затем проводить процедуру RECOVER с использованием архивных журналов повторного выполнения.
  • Database Control будет создавать новый экземпляр, файл паролей, любые необходимые сетевые файлы, а также файлы init.ora и SPFILE.
  • Database Control будет автоматически запускать новый экземпляр в открытом режиме.

Ниже описаны шаги, требуемые для выполнения клонирования базы данных с помощью Database Control.

  1. Подключитесь к Database Control, отобразите домашнюю страницу базы данных (Database Home Page) и перейдите на вкладку Maintenance (Обслуживание).
  2. Щелкните на элементе Clone Database (Клонировать базы данных) в разделе Data Movement (Перемещение данных); он находится под элементом Move Database files group (Переместить группу файлов базы данных).
  3. На странице Source Type (Тип источника) выберите вариант Clone a Running Database Instance (Клонировать работающий экземпляр базы данных).
  4. На странице Source Working Directory (Рабочий каталог источника) введите имя пользователя и пароль операционной системы и щелкните на кнопке Next (Далее).
  5. На странице Select Destination (Выберите цель) введите имя новой базы данных и имя целевого хоста и щелкните на кнопке Next.
  6. На странице Destination Options (Параметры цели) при желании настройте места для размещения файлов базы данных и щелкните на кнопке Next.
  7. На странице Schedule (Расписание) укажите, нужно базу данных клонировать немедленно или в более позднее время, и щелкните на кнопке Next.
  8. На странице Clone Database Review (Клонирование базы данных: Обзор), показанной на рисунке ниже, проверьте информацию об исходной и целевой базе данных и щелкните на кнопке Submit Job (Отправить задание), чтобы начать операцию клонирования.

 

Клонирование базы данных вручную

Для выполнения клонирования базы данных вручную сначала нужно воспользоваться утилитами операционной системы для копирования всех файлов исходной базы данных в целевое место. Если это место находится на том же сервере, тогда еще потребуется изменить имя базы данных, а если на другом, тогда можно оставить и то же самое имя. Сначала делается резервная копия управляющего файла исходной базы данных в файл трассировки (с помощью оператора ALTER DATABASE BACKUP CONTROLFILE TO TRACE), а затем с использованием содержимого этого файла трассировки создается новый управляющий файл, который поможет создать новый клон базы данных.

Ниже приведен краткий перечень шагов, требуемых для выполнения клонирования базы данных вручную. Процедура выглядит довольно просто, причем большую часть времени отнимает само копирование файлов базы данных из исходного в целевое место. Предполагается, что исходная база данных носит имя prod, а целевая — test.

1. Скопируйте файлы базы данных prod в целевое место.

2. Подготовьте текстовый файл для создания управляющего файла для новой базы данных: 

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

3. В целевом месте создайте все необходимые каталоги для различных файлов.

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

5. Во всех файлах клона базы данных измените имя базы данных на test.

6. Выполните оператор CREATE DATABASE, который был подготовлен с помощью оператора ALTER DATABASE BACKUP CONTROLFILE TO TRACE.

7. Создайте управляющий файл для базы данных test с помощью следующего оператора: 

SQL> CREATE CONTROLFILE REUSE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG

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

8. Как только появится приглашение после выполнения предыдущей команды, запустите такую команду: 

SQL> ALTER DATABASE OPEN RESETLOGS USING BACKUP CONTROLFILE;

9. И, наконец, измените глобальное имя созданной только что базы данных с помощью следующей команды:

SQL> UPDATE global_name SET global name='test.world'; 

 

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 7406 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Создание базы данных Oracle
Создание базы данных Oracle 18925 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Видеокурс по администрированию...
Видеокурс по администрированию... 10574 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 5714 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Войдите чтобы комментировать