Oracle изменить имя базы данных

Обновлено: 02.07.2024

ORA_DATABASE_NAME

Что должен возвращать следующий запрос?

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

Прежде чем приступить к непосредственному практическому изучению ora_database_name, вспомним, как трактуется она в документации Oracle. Единственное упоминание о ней мы найдем только в книге Oracle Database Application Developer's Guide - Fundamentals в разделе Coding Triggers, где описывается, что она принадлежит к группе функций для идентификации атрибутов происшедшего события. Таких разнообразных функций на самом деле около тридцати, они все начинаются с префикса ora_ и используются в основном в системных триггерах. Судя по документации, наша функция ora_database_name должна выводить имя базы данных. Проверим, действительно ли это так:

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

А вот просмотр доменной вызовет трудности. По идее эти части должны определяться на уровне создания инициализационными параметрами базы данных db_name и db_domain. Посмотрим их значения:

Если с параметром db_name всё понятно, то параметр db_domain ничего не содержит. Откуда же тогда взялась эта вторая часть глобального имени? Скорее всего, это значение по умолчанию, так как db_domain до создания базы имел значение NULL. Теперь изменение вышеприведенных параметров ни как не повлияет на состав глобального имени. Если изменить первый параметр, база просто не откроется, а изменение значения второго параметра будет просто проигнорировано.

Ясно, что хоть эти параметры и участвуют в организации глобального имени на этапе создания базы данных, но они не являются источником для функции, которую мы рассматриваем. На самом деле ora_database_name это всего лишь публичный синоним, указывающий на функцию database_name, которая в свою очередь состоит из единственного вызова одноимённой функции database_name пакета dbms_standard. В свою очередь функция пакета, использует внешнюю С функцию.

Казалось, след потерян, доступа к функции нет. Но не всё так плохо. Есть одно системное представление global_name, содержимое которого идентично результату выполненного ранее нами запроса. Может оно приведёт нас к источнику нашей функции:

Данное представление ссылается на строку с именем GLOBAL_DB_NAME в таблице props$ схемы sys. Эта таблица относится к словарю и содержит некоторые значения фиксированных параметров базы данных. Попробуем изменить это параметр прямо в таблице и посмотреть, изменится ли значение возвращаемое функцией ora_database_name:

Выводимый результат функции не изменился. Он изменится только после перезагрузки экземпляра. Но уже сейчас ясно, что строка GLOBAL_DB_NAME таблицы props$ не связана напрямую с результатом, который выводит функция ora_database_name.

И так, похоже, мы нашли способ, который изменит выводимое значение глобального имени. Но правка системной таблицы Oracle не самый лучший вариант. К счастью в Oracle есть команда ALTER DATABASE RENAME GLOBAL_NAME, которая предназначена для изменения глобального имени базы данных. Попробуем с её помощью изменить наше глобальное имя:

Как видим, функция ora_database_name стала сразу выдавать необходимый нам результат, при этом нам не понадобилось даже перезагружать экземпляр. Правда в этом способе изменения глобального имени есть небольшая оговорка. Например, если у предыдущего имени есть доменная составляющая, то отбросить её с помощью ALTER DATABASE в новом имени уже не получиться:

Придётся комбинировать эти два способа:

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

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

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

Существует ли простой и быстрый способ изменить SID тестовых баз данных на сервере?

Удаление и воссоздание базы данных вариант для меня. Но я ищу что-то, требующее меньше времени.

Другой вариант назначения имен в клиентах tnsnames.ora подвержен ошибкам, поскольку они не администрируются централизованно.

По сравнению со временем удаления и создания базы данных на SQL-сервере, время, необходимое для создания новой базы данных Oracle, чрезмерно больше. Далее на SQL-сервере вы можете переименовать экземпляры SQL-Server. [Обычно вы переименовываете сервер, на котором работает SQL-Server, и у вас возникают проблемы, пока вы тоже не переименуете сервер].

Вы упоминаете, что вы можете удалить и воссоздать базы данных. У вас есть доступ к производственной базе данных и ее резервным копиям? Вы можете использовать RMAN и команду duplicate для воссоздания базы данных и одновременного изменения SID. Нет, я работаю администратором баз данных по разработке и тестированию баз данных Oracle. Когда вы используете базу данных в SQL Server, вы обычно используете схему (= user) в Oracle.

С 9i утилита dbnewid (nid) может использоваться для изменения имени базы данных (и DBID, если требуется). Если имя базы данных изменяется только тогда, сброс журналов не требуется:

1 автозагрузка базы данных в режиме монтирования

2 запустите nid, чтобы изменить имя базы данных:

3 выключите и запустите базу данных в режиме монтирования:

4 изменить db_name в spfile (или в pfile редактирование файла):

5 воссоздать файл паролей:

6 запуск базы данных

это хороший ответ, когда вопрос был: как переименовать базу данных. Вопрос: как сменить SID.

Вам нужно пересоздать контрольный файл

Этот пост Каунайна Ахмеда описывает необходимые шаги:

  1. do: изменить контрольный файл резервной копии базы данных для трассировки;
  2. извлеките команду «create controlfile» из файла трассировки background-dump-destination.
  3. отключение БД.
  4. Измените имя DB в вашем init.ora и измените init.ora
  5. Измените SID в / etc / oratab или / var / opt / oracle / oratab
  6. Измените SID в своей среде и получите его
  7. Запуск базы данных для монтирования состояния при запуске монтирования
  8. Повторно создайте контрольный файл с оператором из позиции 2.
  9. Измените в базе данных имя global_name на 10. Измените конфигурацию TNS соответственно $ ORACLE_HOME / network / admin / *. Ora Найдите SID и GLOBAL_NAME

Есть другие инструменты, упомянутые в теме.

Вот пост AskTom, в котором более подробно описан процесс. Пока он на 10г, все равно должен работать.

Для пользователей Windows, вам также необходимо использовать утилиту «oradim» для установки новой службы.

Да, вы можете, и это тоже довольно легко.

В Oracle ORACLE_SID - это просто имя экземпляра Oracle, и оно не очень связано с DBNAME. База данных с именем PROD может обслуживаться с использованием экземпляров с любым допустимым именем. Нет прямой связи между SID и DBNAME. Это соединение осуществляется с использованием параметров.

Файл параметров идентифицируется как init $ .ora или spfile $ .ora. В файле параметров находится параметр db_name. Именно здесь устанавливается связь между экземпляром Oracle и базой данных.

Таким образом, вам не нужно заново создавать контрольный файл, вам не нужно использовать nid, просто убедитесь, что ваш файл параметров имеет правильное имя, отключите старый экземпляр Oracle и запустите новый экземпляр Oracle после установки ORACLE_SID к новому имени экземпляра Oracle. Файл параметров и файл паролей находятся с использованием $ как части их имени.

Повторное создание контрольного файла необходимо только тогда, когда необходимо изменить имя DBNAME. nid необходим после операции клонирования, где необходимо изменить DBID, чтобы предотвратить аварии, которые могут повредить резервные копии исходной базы данных.

Этот выпуск посвящен некоторым аспектам проблемы переименования и клонирования базы данных. Начнем с простого - как узнать и изменить идентификатор службы (SID) и имя базы данных (DB_NAME). Последний раз Том Кайт вернулся к этому вопросу 20 августа 2002 года.

Что такое SID, как его узнать и как изменить

Ответ Тома Кайта

Изменить его сложнее, чем кажется. Я знаю, что вы работаете в ОС Unix, поэтому следующая последовательность шагов для изменения SID (или имени базы данных) в Unix - для вас. В NT последовательность шагов - немного другая.

Как найти sid -- с помощью оператора select instance from v$thread .

НАЗНАЧЕНИЕ

Здесь описано, как найти и изменить имя базы данных ( db_name ) или ORACLE_SID для экземпляра, не пересоздавая базу данных.

ДЛЯ КОГО ЭТА ЗАМЕТКА

Для АБД, которым надо найти или изменить db_name или ORACLE_SID .

Чтобы найти текущие значения DB_NAME и ORACLE_SID:

Выполните запросы к представлениям v$database и v$thread .

Если ORACLE_SID = DB_SID и db_name = DBNAME :

Чтобы найти текущее значение ORACLE_SID :

Чтобы найти текущее значение DB_NAME :

Изменение базы данных для работы с новым ORACLE_SID :

  1. Остановите экземпляр
  2. Скопируйте все управляющие файлы, журналы повторного выполнения и файлы данных.
  3. Пройдите по файлам .profile , .cshrc , .login , oratab , tnsnames.ora и задайте переменной среды ORACLE_SID новое значение.

Например, пройдите по всем каталогам и выполните grep ORACLE_SID *

  • init<sid>.ora (или используйте для задания файла параметров инициализации файл pfile .)
  • управляющий файл (файлы). Это не обязательно, если вы не переименовываете управляющие файлы и используете параметр control_files . Параметр control_files устанавливается в файле init<SID>.ora или в файле, на который ссылается в нем параметр ifile . Проверьте, что параметр control_files не указывает на старые имена управляющиъ файлов, если вы их переименовали.
  • crdb<sid>.sql и crdb2<sid>.sql , Это не обязательно, пеоскольку эти файлы используются только при создании базы данных.
  • startup<sid>.sql . Это не обязательно. На некоторых платформах этот файл может находиться в каталоге $ORACLE_HOME/rdbms/install . Проверьте, что содержимое этого файла не ссылается на старые файлы init<SID>.ora , которые вы переименовали. Этот файл упрощает процесс запуска с сервера базы данных в исключительном режиме ( startup exclusive ).

Будет выдан запрос архивного файла журнала повторного выполнения. После применения текущего файла журнала базу данных, возможно, удастся открыть. Но, это НЕ ГАРАНТИРОВАНО . Если после применения текущего файла журнала повторного выполнения база данных не открывается, весьма вероятно, придется повторить все с начала, предварительно нормально остановив старую базу данных.

Чтобы найти список активных журнальных файлов:

Cколько АБД Oracle надо, чтобы поменять лампочку. Комментарий от 13 сентября 2001 года

Удивительно, сколько механической работы требуется в Oracle для простых вещей.

Смысл реляционной модели - нормализация; если проще - устранение избыточных данных. А что мы имеем - SID в десятке мест?

Ответ Тома Кайта

Чтобы было просто -- не меняйте SID .

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

НА САМОМ ДЕЛЕ, мы сталкиваемся с попыткой ИЗМЕНИТЬ ПЕРВИЧНЫЙ КЛЮЧ.

Это, на самом деле, ПРЕКРАСНАЯ демонстрация особенностей реляционной модели. Первичным ключом для базы данных является SID. Вы пытаетесь изменить первичный ключ (чего в реляционных базах данных делать КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ) и реализовать действие on update cascade .

Так что, даже при наличии ОДНОГО внешнего ключа, пробюлема будет аналогичной. Если вы когда-нибудь изменяли значение первичного ключа, вам приходилось делать то же самое (находить все внешние ключи и изменять их соответственно).

Почему вы считаете изменение SID "простой вещью" (мне этот процесс кажется весьма мутным -- мне ни разу не приходилось самому это делать за 15 лет).

Комментарий от 1 марта 2001 года

Прекрасное описание процедуры изменения sid. Я постоянно это делала на прежней работе при создании тестовых экземпляров. Одна проблема, связанная с sid, меня всегда беспокоила - как узнать этот самый sid. Если вы не знаете sid, как вы подключитесь к экземпляру и спросите значение sid?

Ответ Тома Кайта

например: получаем 7 значений sid, работающих сечас на моей тестовой машине -- ora_pmon_$ORACLE_SID

Если вы работате не на сервере, sid просто не имеет значения, - вам нужна запись tns в файле tnsnames.ora .

На NT посмотрите список служб Oracle в Панели управления.

Оригинал обсуждения этого вопроса можно найти здесь.

Изменение SID на платформе Windows, кстати, описано вот здесь.

Copyright © 2003 Oracle Corporation

В этой статье описывается, как переименовать пользовательскую базу данных в SQL Server или Базу данных SQL Azure с помощью SQL Server Management Studio или Transact-SQL. Имя базы данных может содержать все символы, соответствующие правилам для идентификаторов.

Чтобы переименовать базу данных в Azure Synapse Analytics или Parallel Data Warehouse, используйте инструкцию RENAME (Transact-SQL).

ограничения

  • Системные базы данных не могут быть переименованы.
  • Имя базы данных невозможно изменить, пока другие пользователи обращаются к этой базе данных.
    • Используйте Монитор активности SQL Server Management Studio, чтобы найти другие подключения к базе данных, и закройте их. Дополнительные сведения см. в разделе Открытие Монитора активности в SQL Server Management Studio (SSMS).
    • В SQL Server можно установить для базы данных однопользовательский режим, чтобы закрыть все открытые соединения. Дополнительные сведения см. в разделе Установка однопользовательского режима базы данных.
    • В базе данных SQL Azure необходимо убедиться, что отсутствуют открытые подключения других пользователей к базе данных, которую требуется переименовать.

    Разрешения

    Необходимо разрешение ALTER на базу данных.

    Использование SQL Server Management Studio

    Чтобы переименовать базу данных SQL Server или SQL Azure с помощью SQL Server Management Studio, выполните следующие действия.

    В среде SQL Server Management Studio выберите элемент Обозреватель объектов. Чтобы открыть обозреватель объектов, нажмите клавишу F8. Либо в главном меню щелкните Вид и выберите пункт Обозреватель объектов:

    В обозревателе объектов подключитесь к экземпляру SQL Server и разверните его.

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

    В обозревателе объектов разверните узел Базы данных, щелкните правой кнопкой мыши базу данных, которую необходимо переименовать, а затем выберите Переименовать.

    Введите новое имя базы данных и нажмите кнопку ОК.

    Если эта база данных была базой данных по умолчанию, см. раздел Сброс базы данных по умолчанию после переименования.

    Обновите список баз данных в обозревателе объектов.

    Использование Transact-SQL

    Переименование базы данных SQL Server путем перевода ее в однопользовательский режим

    Выполните следующие действия, чтобы переименовать базу данных SQL Server с помощью T-SQL в SQL Server Management Studio, включая действия по переводу базы данных в однопользовательский режим и возврат ее в многопользовательский режим после переименования.

    1. Подключитесь к базе данных master для своего экземпляра.
    2. Откройте окно запроса.
    3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере имя базы данных MyTestDatabase изменяется на MyTestDatabaseCopy .

    Чтобы быстро получить монопольный доступ, в примере кода используется параметр завершения WITH ROLLBACK IMMEDIATE . Произойдет откат всех незавершенных транзакций, а любые другие соединения с базой данных AdventureWorks2012 будут немедленно разорваны.

    1. Кроме того, если эта база данных была базой данных по умолчанию, см. раздел Сброс базы данных по умолчанию после переименования.

    Переименование базы данных SQL Azure

    Выполните следующие действия, чтобы переименовать базу данных SQL Azure с помощью T-SQL в SQL Server Management Studio.

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

    Откройте окно запроса.

    Убедитесь, что больше никто не использует эту базу данных.

    Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере имя базы данных MyTestDatabase изменяется на MyTestDatabaseCopy .

    Резервное копирование после переименования базы данных

    После переименования базы данных в SQL Server выполните резервное копирование базы данных master . В базе данных SQL Azure это не требуется, так как резервное копирование выполняется автоматически.

    Сброс базы данных по умолчанию после переименования

    Если вы переименовываете базу данных, которая была задана в качестве базы данных по умолчанию для имени входа SQL Server, может возникнуть ошибка 4064, Cannot open user default database . Используйте следующую команду, чтобы установить переименованную базу данных в качестве базы данных по умолчанию:

    какова правильная процедура переименования базы данных?

    пример: у меня есть база данных, к которой я могу получить доступ с помощью SQL Server Management Studio и имеет имя "MyDatabase". Физических файлов базы данных

    • данных mydatabase.МДФ
    • MyDatabase_log.ldf

    Как я могу переименовать эти логические и физические имена в "MyNewDatabase"?

    спасибо за помощь

    взято дословно из здесь:

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

    используйте SSMS, чтобы отключить базу данных (щелкните правой кнопкой мыши на базе данных, выберите задачи, отключите), измените имя файлов на уровне ОС,а затем включите ее.

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

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

    использование T SQL

    изменение базы данных имя базы данных набора в автономном режиме GO

    изменить базы данных базы данных изменить файл (название =дБ, C:\Program именем = ' Файлы\Microsoft SQL Server\MSSQL.2\MSSQL\Data\db.МДФ") ИДТИ -- при изменении файла журнала имя

    изменить файл базы данных базы данных изменить (имя = db_log, именем = "C:\Program файлы\Microsoft SQL Server\MSSQL.2\MSSQL\Data\db.ЛДФ') GO

    ALTER DATABASE databaseName SET ONLINE GO

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

    давайте сделаем это правильно. он должен работать всегда.

    enter image description here

    1. отключить база данных: Используя Management Studio, щелкните правой кнопкой мыши базу данных > перейдите в "задачи" > "отсоединить", нажмите кнопку ОК, чтобы отсоединить базу данных (Примечание: БД не может быть использован для отсоединения)
    2. переименовать физические файлы: после отсоединения базы данных Физические файлы разблокированы, и вы можете переименовать их с помощью Проводника Windows:

    присоединение базы данных с новым именем: для этого используйте T SQL:

    использовать [master] СОЗДАННАЯ БАЗА ДАННЫХ [SqlAndMe] ON (FILENAME = N’C:\. \NewName - . МДФ’), (FILENAME = N’C:\. \NewName_log - . ЛДФ’) ДЛЯ ATTACH

    переименовать логические имена файлов: выполните этот T SQL:

    использовать [NewName] Изменить базу данных [NewName] Изменить файл (NAME=N'Oldname’, NEWNAME=N'Newname’) Изменить базу данных [NewName] Изменить файл (NAME=N'Oldname_log’, NEWNAME=N'Newname_log’) Выберите имя, параметр physical_name Из [NewName].системный.database_files

    Это должно сработать!

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

    но убедитесь, что база данных не используется.

    • вы можете переименовать базу данных с помощью SSMS; rclick database > rename
    • вы можете изменить логическое имя с помощью SSMS; база данных > свойства > файлы > изменить логические имена
    • отсоединить базу данных с помощью SSMS; база данных > задачи > отсоединить.
    • вы можете изменить имена файлов с помощью Проводника Windows (после отсоединения)

    после того, как имена файлов были изменены, вы не можете использовать GUI для повторного присоединения

    СОЗДАТЬ БАЗУ ДАННЫХ MyAdventureWorks
    ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data - . mdf'),
    (FILENAME = 'C:\MySQLServer\AdventureWorks_Log - . ldf')
    ДЛЯ ПРИСОЕДИНЕНИЯ;

    обновите SSMS, и все готово.

    Примечание: Если вы предпочитаете вводить как можно меньше кода, как вероятный. После отсоединения базы данных используйте графический интерфейс, чтобы начать процесс повторного присоединения перед изменением имен файлов. Используйте действие " Script to. "и получить код. После изменения имен файлов с помощью Проводника Windows обновите их в коде в SSMS и запустите его.

    Читайте также: