Как переименовать базу данных ORACLE?

dbstalker, 12 июня

Задача стояла так:

  1. Создать базу данных (V9.2) на новом сервере для неё SID=stk
  2. Файлы данных должны быть размещены на новом сервере на диске K
  3. Данные перенести из старой базы данных (V9.2), имеющей SID=stb и файлы данных на диске C:
  4. И все должно работать.

Для решения этой задачи предлагаю следующую схему

Ну а теперь все по порядку и детально:

  1. По пункту 1(создание базы данных) я сейчас расписывать не буду – это не предмет данной статьи. Возьмем за исходное положение – база данных на новом сервере SID= stk создана, файлы данных должны быть размещены на новом сервере, на диске K.
  2. На старом сервере сначала узнаем (если не знали) куда формируются файлы трассировки:
    SELECT value from v$parameter where name = 'user_dump_dest';
  3. Сделаем читабельную копию контрольного файла (вернее скрипт на создание):
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
  4. После чего в папке, на которую указывает параметр user_dump_dest , будет создан файл трассировки со скриптом по созданию контрольного файла.
  5. Сделаем еще перечень всех файлов данных
    select name from v$datafile;
  6. И последнее, что нужно сделать на старом сервере: если вы для старта базы данных используете spfile , то создайте init.ora. Для этого выполните команду
    create pfile from spfile;
  7. Теперь старый сервер останавливаем
    shutdown immediate
  8. Останавливаем службу: Control Panel/Services,служба OracleServiceSTB, STOP Или для этого выполним net stop OracleServiceSTB
  9. Теперь все файлы данных переносим со старого сервера на новый в соответствующую папку на диске K. Контролируем процесс по списку, полученному в пункте 5.
  10. А теперь нужно немного поколдовать:

    • подправить init.ora полученый в п.6
    • подправить скрипт на создание контрольного файла, полученый в п.6

    По файлу инициализации делаем следующее: назовем его initSTK.ora, все вхождения “STB” в содержимом этого файла меняем на “STK” и подправьте названия всех необходимых папок так, как они должны называться на новом сервере. По скрипту: выкинем всё лишнее, поменяем название папок (названия должны отвечать новому серверу. И будьте очень внимательны - замените REUSE DATABASE "STB" на SET DATABASE "STK"! Иначе во время работы будет получена ошибка ORA-01161! Также у вас должна быть конструкция RESETLOGS. В результате скрипт должен быть аналогичен:
    CREATE CONTROLFILE SET DATABASE "STK" RESETLOGS  NOARCHIVELOG
        MAXLOGFILES 50
        MAXLOGMEMBERS 5
        MAXDATAFILES 100
        MAXINSTANCES 1
        MAXLOGHISTORY 226
    LOGFILE
      GROUP 1 'K:\ORACLE\ORADATA\STK\REDO01.LOG'  SIZE 100M,
      GROUP 2 'K:\ORACLE\ORADATA\STK\REDO02.LOG'  SIZE 100M,
      GROUP 3 'K:\ORACLE\ORADATA\STK\REDO03.LOG'  SIZE 100M
    DATAFILE
      'K:\ORACLE\ORADATA\STK\SYSTEM01.DBF',
      'K:\ORACLE\ORADATA\STK\UNDOTBS01.DBF',
      'K:\ORACLE\ORADATA\STK\CWMLITE01.DBF',
      'K:\ORACLE\ORADATA\STK\DRSYS01.DBF',
      'K:\ORACLE\ORADATA\STK\EXAMPLE01.DBF',
      'K:\ORACLE\ORADATA\STK\INDX01.DBF',
      'K:\ORACLE\ORADATA\STK\TOOLS01.DBF',
      'K:\ORACLE\ORADATA\STK\USERS01.DBF',
      'K:\ORACLE\ORADATA\STK\XDB01.DBF',
    CHARACTER SET CL8MSWIN1251;
  11. Теперь стартуем новую базу данных таким образом:
    STARTUP NOMOUNT PFILE=С:\ORACLE\ORA92\DATABASE\INITSTK.ORA
  12. Затем выполним скрипт на создание контрольного файла.
  13. ALTER DATABASE OPEN RESETLOGS;
  14. обратите внимание на временное табличное пространство:
    alter tablespace temp add tempfile 'K:\oracle\oradata\stk\temp01.dbf' size 100M;
  15. а теперь
    create spfile from pfile;
  16. выполним
    shutdown immediate
  17. и последнее
    startup
  18. Вот и все.Рекомендую сразу же сделать полный холодный бекап и приступайте к работе. Успехов Вам!

Тэги: общее

ОднаКнопка

5 комментариев

Прокоментировать

Vova
30 января 2008 г. в 13:47

а где про переименование, иль под этим слоганом скрывается суть переноса базы?

dbstalker
30 января 2008 г. в 15:47

Вы правы, материал изложено несколько избыточно ( база переносится на другой сервер и переименовывается). Постановка задачи указана в начале статьи. Если же вам не нужно переносить базу данных на другой сервер, то совсем просто самостоятельно адаптировать изложенную технологию для Вашего случая. Просто чаще всего ( в моём случае также) приходится переносить базу на другой сервер и переименовывать. Успехов Вам!

murena
22 августа 2008 г. в 10:31

хорошая статья, мне помогло :)
респект.

Andrey
12 сентября 2008 г. в 19:39

Начиная с 9 версии появилась условно документированная утилита NID, которая может сменить DBID / DBNAME, или все вместе.

5trovi4
15 июля 2009 г. в 16:10

если стартовали со стороннего pfile то spfile тоже надо с него делать, иначе он с дефалтного делает.

create spfile from pfile='С:\ORACLE\ORA92\DATABASE\INITSTK.ORA';

 

Новый комментарий

Я не спамер: введите суму 8+7



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа