Изменение DBID и имени базы данных (DB_NAME) с помощью DBNEWID

DBNEWID - это утилита для работы с базами данных, позволяющая изменить внутренний идентификатор базы данных (DBID) и имя базы данных (DBNAME). Можно изменить только DBID, DBNAME, а можно изменить и DBID, и DBNAME.

До появления утилиты DBNEWID это действие выполнялось путем пересоздания управляющего файла (controlfile). Однако это не позволяло изменить уникальный идентификатор (DBID), в результате чего исходная база данных и скопированная вручную не могли быть зарегистрированы в репозитории RMAN. Эта проблема была решена с помощью утилиты DBNEWID.

Чтобы выполнить этот тест, переименуем таблицу, которую мы восстанавливаем на том же хосте, в эту запись: https://oracleconraul.com/index.php/2023/09/13/recuperar-base-de-datos-mismo-host-con-rman/.

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

Следует отметить, что изменение имени, и особенно DBID, является сложной и серьезной процедурой, поскольку, помимо всего прочего, в результате этого изменения происходит следующее:

При изменении DBID базы данных все резервные копии и архивные журналы этой базы становятся непригодными, так как это уже другая база данных. База данных открывается с помощью resetlogs, который воссоздает интерактивные файлы redo log и сбрасывает последовательность, поэтому после изменения DBID рекомендуется в первую очередь выполнить резервное копирование базы данных. Если изменить только DBNAME, то открывать базу данных с опцией RESETLOGS не требуется, поэтому резервные копии и архивы не теряют своей актуальности. В этом случае необходимо изменить DB_NAME в файле .init, сославшись на новое имя, и, возможно, заново создать файл паролей, что может повлиять на восстановление из резервной копии, созданной до изменения имени.

При изменении DBID основной базы данных в среде data guard необходимо заново создать базу данных STANDBY.
В средах RAC перед запуском команды необходимо завершить работу всех экземпляров и выполнить запуск одного экземпляра с параметром CLUSTER_DATABASE=FALSE.

Шаги:

1- Загружаем переменные окружения базы данных для переименования/dbid.

2- Остановите базу данных (shutdown immediate ) и смонтируйте базу данных (startup mount).

3 - Выполнить команду DBNEWID

$ nid TARGET=SYS/<password>@<service> DBNAME=<NEW DB name> (tnsnames)
or
nid TARGET=SYS/<password> DBNAME=<NEW DB name>

4- Изменяем имя новой базы данных в spfile.
5- Пересоздаем файл паролей новой базы данных.

Выполнение команды:

[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0.0 - Production on Wed Sep 20 12:00:13 2023
Version 19.3.0.0.0.0
Copyright (c) 1982, 2019, Oracle. Все права защищены.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0.0 - Production
Version 19.3.0.0.0.0

SQL> show parameter uniq
NAME TYPE VALUE

db_unique_name string testcopy
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

SQL> startup mount

[oracle@localhost ~]$ nid TARGET=sys/password DBNAME=newdb
Подключен к серверу версии 19.3.0
Управляющие файлы в базе данных:
/data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl
Изменить ID базы данных и имя базы данных TEST на NEWDB? (Y/[N]) => Y

Продолжение операции
Изменение идентификатора базы данных с 2359187194 на 3388414278
Изменение имени базы данных с TEST на NEWDB
Файл управления /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl - изменен
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-SYSTEM_FNO- - dbid изменен, записано новое имя
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-SYSAUX_FNO- - dbid изменен, записал новое имя
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-UNDOTBS1_FNO- - dbid изменен, записал новое имя
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-USERS_FNO- - dbid изменен, записал новое имя
Datafile /data/test/TEST/datafile/o1_mf_temp_hz8q6jog_.tm - dbid изменен, записано новое имя
Файл управления /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl - dbid изменен, записано новое имя
Инстанс остановлен
Имя базы данных изменено на NEWDB.
Перед перезапуском модифицировать файл параметров и сгенерировать новый файл паролей.
ID базы данных NEWDB изменен на 3388414278.
Все предыдущие резервные копии и архивные журналы redo для этой базы данных непригодны.
База данных была остановлена, откройте базу данных с помощью опции RESETLOGS.
Успешно изменены имя и ID базы данных.
DBNEWID - Завершено успешно.


На этом этапе необходимо изменить DBNAME в spfile, иначе база данных не запустится из-за того, что у нее новое имя.

SQL> alter system set db_name=NEWDB scope=spfile;

Восстановление файла паролей новой базы данных:

cd $ORACLE_HOME/dbs
orapwd file=orapwnewdb password=password entries=10

В этот момент мы можем открыть базу данных с помощью open resetlogs.

SQL> alter database open resetlogs;

Мы проверяем правильность выполнения именования:

SQL> select name from v$database;

NAME
*******
NEWDB

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

Прокрутка к верху