Перенос файлов временного табличного пространства.

    «Место на файловой системе начало подходить к коцу. Здесь же, на диске D располагаются bigfile пространства, довольно большие, переносить их не очень хочется, да и особо некуда, а место для их роста освободить не помешает.» — руководствуясь такими рассуждениями принимаю решение перенести что-то наименее критичное — это пара temp файлов.

1. Используя следующий запрос, посмотрим какие TEMP файлы имеет смысл переносить:
select round((bytes/1024/1024/1024),2) GB, Name from v$tempfile;

Нашли два файла по 60Гб каждый, их и будем переносить. Идём дальше.

2. Проверяем состояние этих файлов:
SELECT v.file#, t.file_name, v.status
FROM dba_temp_files t, v$tempfile v
WHERE t.file_id = v.file#;

3. Что бы успешно скопировать файлы, нам нужно отключить их от базы данных, чтобы в них не производилась запись данных:
ALTER DATABASE TEMPFILE 'D:\AGRT\AGRT\AGRP_01_TEMP04.TMP' OFFLINE;
ALTER DATABASE TEMPFILE 'D:\AGRT\AGRT\AGRP_02_TEMP04.TMP' OFFLINE;
_
Database tempfile 'D:\AGRT\AGRT\AGRP_01_TEMP04.TMP' altered.
Database tempfile 'D:\AGRT\AGRT\AGRP_02_TEMP04.TMP' altered.

4. Давайте проверим, отключились ли эти файлы, поле status = OFFLINE:
SELECT v.file#, t.file_name, v.status
FROM dba_temp_files t, v$tempfile v
WHERE t.file_id = v.file#;

5. После того, как файлы ушли в оффлайн и в них не происходит запись, мы можем их спокойно скопировать на другую файловую систему, где полно места:
copy D:\AGRT\AGRT\AGRP_01_TEMP04.TMP E:\AGRT\AGRT\AGRP_01_TEMP04.TMP
copy D:\AGRT\AGRT\AGRP_02_TEMP04.TMP E:\AGRT\AGRT\AGRP_02_TEMP04.TMP
_
D:\AGRT\AGRT>copy D:\AGRT\AGRT\AGRP_01_TEMP04.TMP E:\AGRT\AGRT\AGRP_01_TEMP04.TMP
1 file(s) copied.
D:\AGRT\AGRT>copy D:\AGRT\AGRT\AGRP_02_TEMP04.TMP E:\AGRT\AGRT\AGRP_02_TEMP04.TMP
1 file(s) copied.

6. Настало время поменять ссылки в БД на новые файлы, переименовываем:
ALTER DATABASE RENAME FILE 'D:\AGRT\AGRT\AGRP_01_TEMP04.TMP' TO 'E:\AGRT\AGRT\AGRP_01_TEMP04.TMP';
ALTER DATABASE RENAME FILE 'D:\AGRT\AGRT\AGRP_02_TEMP04.TMP' TO 'E:\AGRT\AGRT\AGRP_02_TEMP04.TMP';
_
Database rename FILE altered.
Database rename FILE altered.

7. Очередная проверка нашумевшим запросом, посмотрите, что путь к файлам правильный, что они действительно переименованы в БД:
SELECT v.file#, t.file_name, v.status
FROM dba_temp_files t, v$tempfile v
WHERE t.file_id = v.file#;

8. Возвращаем файлы в онлайн режим, чтобы БД продолжила их использовать:
ALTER DATABASE TEMPFILE 'E:\AGRT\AGRT\AGRP_01_TEMP04.TMP' ONLINE;
ALTER DATABASE TEMPFILE 'E:\AGRT\AGRT\AGRP_02_TEMP04.TMP' ONLINE;
_
Database tempfile 'E:\AGRT\AGRT\AGRP_01_TEMP04.TMP' altered.
Database tempfile 'E:\AGRT\AGRT\AGRP_02_TEMP04.TMP' altered.

9. Проверяем (куда уж без этого), что файлы имеют корректный ONLINE статус:
SELECT v.file#, t.file_name, v.status
FROM dba_temp_files t, v$tempfile v
WHERE t.file_id = v.file#;

--10 Udalyaem starie
del D:\AGRT\AGRT\AGRP_01_TEMP04.TMP
del D:\AGRT\AGRT\AGRP_02_TEMP04.TMP

В Windows эти файлы ОС может не дать удалить, так как они всё ещё они используются экземпляром. К сожалению, помогает рестарт.
Конечно, можно попытаться снять блокировки с файла, каким-нибудь unlocker`ом и удалить, но смелости не хватает сделать это на работающей боевой БД.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *