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: Release 19.0.0.0.0 – Production on Wed Sep 20 12:00:13 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.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
Connected to server version 19.3.0
Control Files in database:
/data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl
Change database ID and database name TEST to NEWDB? (Y/[N]) => Y
Proceeding with operation
Changing database ID from 2359187194 to 3388414278
Changing database name from TEST to NEWDB
Control File /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl – modified
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-SYSTEM_FNO- – dbid changed, wrote new name
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-SYSAUX_FNO- – dbid changed, wrote new name
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-UNDOTBS1_FNO- – dbid changed, wrote new name
Datafile /data/tescopy/TESCOPY/data_D-TEST_TS-USERS_FNO- – dbid changed, wrote new name
Datafile /data/test/TEST/datafile/o1_mf_temp_hz8q6jog_.tm – dbid changed, wrote new name
Control File /data/testcopy/TESTCOPY/controlfile/o1_mf_lj1qob64_.ctl – dbid changed, wrote new name
Instance shut down
Database name changed to NEWDB.
Modify parameter file and generate a new password file before restarting.
Database ID for database NEWDB changed to 3388414278.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database name and ID.
DBNEWID – Completed succesfully.
В этот момент необходимо изменить 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
Как указывалось ранее в этом документе, в этот момент настоятельно рекомендуется выполнить резервное копирование базы данных, так как в случае возникновения проблем невозможно восстановить из предыдущих резервных копий.
