Перенос базы данных под управлением ORACLE на другой компьютер

dbstalker, 06 июня

Для Вашего сервера баз данных купили новый сервер. Как без лишних хлопот и в очень короткие сроки перенести данные на новый сервер? А самое главное, чтобы при этом все работало, и данные не были потеряны. В этой статье опишу свой опыт, может кому-то будет интересно.

Кратко перенос выглядит так:

Ну а теперь подробно.

Первое, что нужно сделать – это остановить переносимую базу данных (shutdown immediate).

Далее у меня возникало только два варианта развития событий: файлы данных , будут находиться на дисках с одинаковым названием (например, C:\) или с разным(например, с F:\ нужно было перенести на C:\).

  • В первом случае достаточно на новом сервере создать базу данных с помощью Database Configuration Assistant; остановить базу данных; заместить созданные файлы данных, файл паролей, файл инициализации на соответствующие файлы переносимой базы и стартовать. Проблем обычно не возникает, разве что придется, выполнить команду recover automatic database, ну может еще alter system check datafiles.
  • Во втором случае придется немного повозиться. Сначала также нужно на новом сервере создать базу данных с помощью Database Configuration Assistant; остановить базу данных; заместить созданные файлы данных, файл паролей, файл инициализации на соответствующие файлы переносимой базы. Затем с помощью sqlplus подключиться к новой базе данных и выполнить следующую команду:

SQL*Plus: Release 9.2.0.1.0 - Production on Срд Янв 17 14:16:08 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Соединен с простаивающим экземпляром.
SQL> create pfile from spfile;
Файл создан.

Таким образом, получим обычный текстовый файл инициализации, в котором нужно исправить все пути к файлам. Например, строчку

*.control_files='F:\oracle\oradata\my_db\CONTROL01.CTL','F:\oracle\oradata\my_db\CONTROL02.CTL','F:\oracle\oradata\my_db\CONTROL03.CTL'

на строку

*.control_files='C:\oracle\oradata\my_db\CONTROL01.CTL','C:\oracle\oradata\my_db\CONTROL02.CTL','C:\oracle\oradata\my_db\CONTROL03.CTL'

затем в sqlplus сделаем обратную операцию

SQL> CREATE SPFILE FROM PFILE;

Файл создан.

Попробуем стартовать.

SQL> STARTUP
Экземпляр ORACLE запущен.

Total System Global Area  126950220 bytes
Fixed Size                   453452 bytes
Variable Size             109051904 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
База данных смонтирована.
ORA-01157: нельзя идентифицировать/блокировать файл данных  1 - см. файл
трассировки DBWR
ORA-01110: файл данных 1: 'F:\ORACLE\ORADATA\MY_DB\SYSTEM01.DBF'

Этого и следовало ожидать. Вот тут и нужно немножко поработать :

SQL> ALTER DATABASE RENAME FILE 'F:\ORACLE\ORADATA\MY_DB\SYSTEM01.DBF' TO  'C:\oracle\oradata\MY_DB\system01.dbf';

База данных изменена.
SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ошибка в строке 1:
ORA-01157: нельзя идентифицировать/блокировать файл данных  2 - см. файл
трассировки DBWR
ORA-01110: файл данных 2: 'F:\ORACLE\ORADATA\MY_DB\UNDOTBS01.DBF'


SQL>  ALTER DATABASE RENAME FILE 'F:\ORACLE\ORADATA\MY_DB\UNDOTBS01.DBF' TO 'C:\oracle\oradata\MY_DB\undotbs01.dbf';

База данных изменена.

SQL> ALTER DATABASE RENAME FILE 'F:\ORACLE\ORADATA\MY_DB\DAT1.DBF' TO 'C:\oracle\oradata\MY_DB\dat1.dbf';

База данных изменена.

SQL>  ALTER DATABASE RENAME FILE 'F:\ORACLE\ORADATA\MY_DB\REDO01.LOG' TO 'C:\oracle\oradata\MY_DB\redo01.log';

База данных изменена.

SQL> ALTER DATABASE RENAME FILE 'F:\ORACLE\ORADATA\MY_DB\REDO02.LOG' TO 'C:\oracle\oradata\MY_DB\redo02.LOG';

База данных изменена.

SQL> ALTER DATABASE OPEN;

База данных изменена.

О чудо, база открыта!!!

Если Вам не нравиться так играться с ораклом, то заготовьте заранее скрипты на переименование датафайлов ( см. статью «Перенос файлов данных на другой диск»)

Иногда затем могут быть ошибочки связанные с временным табличным пространством. Поэтому можно проделать следующую операцию:

SQL> ALTER DATABASE TEMPFILE 'C:\oracle\oradata\MY_DB\temp01.dbf' DROP;

База данных изменена.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'C:\oracle\oradata\MY_DB\temp01.dbf';

Раздел изменен.

Ну, вот вроде все. Успехов Вам!

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

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

spoilt
29 октября 2007 г. в 16:28

В целом грамотно и понятно, только я бы на вашем месте привел пример с пересоздание контролфайла, если место нахождения датафайлов планируется отличным от Таргет_Хоста!

dbstalker
1 ноября 2007 г. в 15:09

Предложение очень интересное. В работе с такой ситуацией не довелось столкнуться. В ближайшее время попробую на тестовой базе и результаты предоставлю.

Андрей
4 ноября 2008 г. в 15:59

Здраствуйте уважаемый администратор,я являюсь студентом 3курса по специальности программист.До сих пор я игрался в С++ по созданию простых программ,но сейчас я хочу научится работать с базами данных....но если честно мало,что понимаю,помогите мне пожалуйста,с чего лучше начать и какую литературу читать...я слыхал,что для изучения Оракла,надо сначала выучить хорошо Sql....обьясните мне пожалуйста....Заранее огромное спасибо!!

dbstalker
5 ноября 2008 г. в 09:46

Мое мнение вряд ли Вам понравится: нужно с ораклом работать. Работать каждый день. И только тогда чтение литературы даст положительный эффект. Чтение без практики - пустая трата времени.Успехов! Просьба: аналогичные вопросы лучше задавать в разделе "Читателям -Задать вопрос и получить ответ - уже решено 8 вопросов".

leo
25 ноября 2008 г. в 15:28

Нужно перенести базу, что бы изучить структуру, и в дальнейшем (из программы) получать данные из этой БД... Вопрос: "файл паролей, файл инициализации", какие это файлы (где лежат, как называются)? Спасибо.

dbstalker
25 ноября 2008 г. в 16:01

Для девятки, например, файл паролей - C:\oracle\ora92\database\pwdmy_db.ora,
файл инициализации - C:\oracle\ora92\database\initmy_db.ora или C:\oracle\ora92\database\spfilemy_db.ora

Алексей
10 декабря 2009 г. в 11:45

Спасибо большое

 

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

Я не спамер: введите суму 6+3



 

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

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

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

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


 
 

Бизнес форум