Изменение 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, при этом воссоздаются файлы оперативных журналов повторного выполнения и сбрасывается последовательность, поэтому после изменения 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: версия 19.0.0.0.0 – Производственная среда, среда, 20 сентября 2023 г., 12:00:13
Версия 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. Все права защищены.
Подключено к:
Oracle Database 19c Edition Релиз 19.0.0.0.0 – Производственная среда
Версия 19.3.0.0.0
SQL> show parameter uniq
ИМЯ ТИП ЗНАЧЕНИЕ
db_unique_name строка testcopy
SQL> shutdown immediate;
База данных закрыта.
База данных отмонтирована.
Экземпляр ORACLE завершен.
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
Продолжение операции
Изменение ID базы данных с 2359187194 на 3388414278
Изменение имени базы данных с TEST на NEWDB
Контрольный файл /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl – изменен
Файл данных /data/tescopy/TESCOPY/data_D-TEST_TS-SYSTEM_FNO- – dbid изменен, записано новое имя
Файл данных /data/tescopy/TESCOPY/data_D-TEST_TS-SYSAUX_FNO- – dbid изменен, записано новое имя
Файл данных /data/tescopy/TESCOPY/data_D-TEST_TS-UNDOTBS1_FNO- – dbid изменен, записано новое имя
Файл данных /data/tescopy/TESCOPY/data_D-TEST_TS-USERS_FNO- – dbid изменен, записано новое имя
Файл данных /data/test/TEST/datafile/o1_mf_temp_hz8q6jog_.tm – dbid изменен, записано новое имя
Контрольный файл /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl – dbid изменен, записано новое имя
Экземпляр остановлен
Имя базы данных изменено на NEWDB.
Перед перезапуском измените файл параметров и сгенерируйте новый файл паролей.
Идентификатор базы данных NEWDB изменен на 3388414278.
Все предыдущие резервные копии и архивированные журналы повторения для этой базы данных непригодны для использования.
База данных была остановлена, откройте базу данных с опцией 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
Как указывалось ранее в этом документе, в этот момент настоятельно рекомендуется выполнить резервное копирование базы данных, так как в случае возникновения проблем невозможно восстановить из предыдущих резервных копий.

