Документ создан: 05.04.2019

Клонирование базы данных на удалённый хост без RMAN-бэкапа.

Действия производились на Linux-хостах.

Есть исходная БД testdb, которую нужно клонировать на другой хост, но структура каталогов и имя БД остаются без изменения, т.е. тоже testdb.

  • На новом хосте, на котором требуется развернуть клон существующей БД выполняем следующие шаги:
    1. Объявляем переменную окружения:
      export ORACLE_SID=testdb
    2. Если БД уже существовала:
      • останавливаем экземпляр:
        sqlplus -S '/ as sysdba' << EOF
        shutdown immediate;
        EOF
      • удаляем БД:
        rm -Rf ${ORACLE_BASE}/admin/${ORACLE_SID}
        rm -Rf ${ORACLE_BASE}/fast_recovery_area/${ORACLE_SID}
        rm -Rf ${ORACLE_BASE}/oradata/${ORACLE_SID}
        rm -Rf ${ORACLE_BASE}/diag/rdbms/${ORACLE_SID}
        find ${ORACLE_HOME}/dbs/ -type f -iname "*${ORACLE_SID}*" -print0 | xargs -0 rm -f
    3. воссоздаём структуру каталогов:
      mkdir -p ${ORACLE_BASE}/admin/${ORACLE_SID}/adump
      mkdir -p ${ORACLE_BASE}/fast_recovery_area/${ORACLE_SID}
      mkdir -p ${ORACLE_BASE}/oradata/${ORACLE_SID}
      mkdir -p ${ORACLE_BASE}/diag/rdbms/${ORACLE_SID}
    4. создаём password-файл:
      orapwd file=$ORACLE_HOME/dbs/orapw${ORACLE_SID} entries=10 password=<PASSWORD>

      <PASSWORD> — выставляем таким же, как на исходой БД. Иначе RMAN не сможет подключится к новой БД на одном из шагов.

    5. создаём инициализационный файл:
      echo "db_name='${ORACLE_SID}'" > $ORACLE_HOME/dbs/init${ORACLE_SID}.ora
    6. запускаем экземпляр в режиме "nomount":
      sqlplus -S '/ as sysdba' << EOF
      startup nomount;
      EOF
  • На хосте с исходной БД выполняем следующие шаги:
    1. добавляем в "$ORACLE_HOME/network/admin/tnsnames.ora" соединение с новым хостом. Например, testdb_clone:
      TESTDB_CLONE =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = newhost.domain.com)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = testdb)
          )
        )
      
    2. запускаем RMAN с подключением к обеим БД:
      rman target sys@testdb auxiliary sys@testdb_clone

      Должны получить что-то типа этого:

      Recovery Manager: Release 11.2.0.4.0 - Production on Fri Apr 5 09:38:09 2019
      
      Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
      
      target database Password:
      connected to target database: TESTDB (DBID=63772897)
      auxiliary database Password:
      connected to auxiliary database: TESTDB (not mounted)
    3. выполняем команду "duplicate":
      duplicate target database to testdb from active database password file spfile nofilenamecheck;

      Где:

      • testdb — имя БД на новом хосте, т.е. то имя, которое будет у вновь поднятой БД;
      • password file — указание перенести и password-файл тоже. Бывает нужно в случае, если в исходной БД он содержит несколько учётных записей;
      • spfile — перенести и spfile тоже;
      • nofilenamecheck — полные имена файлов исходной БД и целевой будут совпадать, что вызовет ошибки, т.к. RMAN посчитает это неправильным. Для игнорирования таких ошибок используем эту опцию.

Если всё сделано правильно, через некоторое время (зависит от объёмов БД, от пропусной способности каналов, от скорости записи дисковых подсистем,..) на удалённом хосте появится клон БД.

 
Top.Mail.Ru
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate