07май
Как осуществить перенос файлов данных БД ORACLE на другой диск?
Такую задачу достаточно часто приходиться решать. Поэтому неплохо иметь для этого готовый регламент робот. Коротко это выглядит так:
Обычно я поступаю следующим образом:
- Сначала нужно знать какие файлы данных есть в нашей базе данных. Для этого выполним:
select name from v$datafile;
Таким образом, перечень готов, к тому же теперь знаем где файлы находятся.
- Теперь приготовим скрипт для переименования файлов данных. Предполагаем, что нужно перенести с диска С: на диск K:. Выполнив вот такой запрос, получим скрипт на переименование файлов данных.
Select 'alter database rename file '''||name||''' to ''K'||substr(name,2)||''';' from v$datafile;
Результат таков:
alter database rename file 'C:\ORACLE\ORADATA\STB\SYSTEM01.DBF' to 'K:\ORACLE\ORADATA\STB\SYSTEM01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\UNDOTBS01.DBF' to 'K:\ORACLE\ORADATA\STB\UNDOTBS01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\DRSYS01.DBF' to 'K:\ORACLE\ORADATA\STB\DRSYS01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\INDX01.DBF' to 'K:\ORACLE\ORADATA\STB\INDX01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\TOOLS01.DBF' to 'K:\ORACLE\ORADATA\STB\TOOLS01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\USERS01.DBF' to 'K:\ORACLE\ORADATA\STB\USERS01.DBF;
alter database rename file 'C:\ORACLE\ORADATA\STB\XDB01.DBF' to 'K:\ORACLE\ORADATA\STB\XDB01.DBF;
- Если нужно перенести и управляющие файлы на тот же диск, то выполним следующие манипуляции:
- выполнив команду
create pfile from spfile;, получим init.ora (файл инициализации) нашей базы данных.
- В файле инициализации строку
control_files='c:\oracle\oradata\STB\control01.ctl','c:\oracle\oradata\STB\control02.ctl','c:\oracle\oradata\STB\control03.ctl'
заменить нужно, например, на
control_files='k:\oracle\oradata\STB\control01.ctl','k:\oracle\oradata\STB\control02.ctl','k:\oracle\oradata\STB\control03.ctl'
- Если необходимо перенести архивные файлы журнализации и чтобы они формировались в новое месторасположение, то измените еще и параметр LOG_ARCHIVE_DEST_1
- Если необходимо перенести файлы журнализации, то командой
Select 'alter database rename file '''||member||''' to ''K'||substr(member,2)||''';' from v$logfile;
Получим скрипт:
alter database rename file 'C:\ORACLE\ORADATA\STB\REDO01.LOG' to 'K:\ORACLE\ORADATA\STB\REDO01.LOG;
alter database rename file 'C:\ORACLE\ORADATA\STB\REDO02.LOG' to 'K:\ORACLE\ORADATA\STB\REDO02.LOG;
alter database rename file 'C:\ORACLE\ORADATA\STB\REDO03.LOG' to 'K:\ORACLE\ORADATA\STB\REDO03.LOG;
- Теперь сервер останавливаем
shutdown immediate
- Останавливаем службу: Control Panel/Services,служба OracleServiceSTB, STOP
- Или для этого выполним net stop OracleServiceSTB
- Теперь все файлы данных переносим в соответствующую папку на диске K. Контролируем процесс по списку, полученному в пункте 1.
- Затем стартуем базу данных
SQL> STARTUP MOUNT PFILE=C:\oracle\ora92\database\initstb.ora;
ORACLE instance started.
Total System Global Area 2392403784 bytes
Fixed Size 458568 bytes
Variable Size 1862270976 bytes
Database Buffers 528482304 bytes
Redo Buffers 1191936 bytes
Database mounted.
- Затем выполним наш скрипт на переименование файлов данных и файлов журнализации:
SQL> @c:\1\r.sql;
Database altered.
Database altered.
……………….
Database altered.
SQL> alter database open;
Database altered.
SQL> create spfile from pfile;
File created.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 2392403784 bytes
Fixed Size 458568 bytes
Variable Size 1862270976 bytes
Database Buffers 528482304 bytes
Redo Buffers 1191936 bytes
Database mounted.
Database opened.
Все!