Для Вашего сервера баз данных купили новый сервер. Как без лишних хлопот и в очень короткие сроки перенести данные на новый сервер? А самое главное, чтобы при этом все работало, и данные не были потеряны. В этой статье опишу свой опыт, может кому-то будет интересно.
Ну а теперь подробно.
Первое, что нужно сделать – это остановить переносимую базу данных (shutdown immediate).
Далее у меня возникало только два варианта развития событий: файлы данных , будут находиться на дисках с одинаковым названием (например, C:\) или с разным(например, с F:\ нужно было перенести на C:\).
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';
Раздел изменен.
Ну, вот вроде все. Успехов Вам!