Написал данную заметку для внутренней корпоративной Wiki, но решил поделиться и в своем блоге немного изменив подачу материала, считаю, что моим читателям будет интересно.
Руководство по обновлению систем SAP с помощью утилиты SUM говорит, что после обновления системы старое табличное пространство можно удалить. НО, если вы обновляли систему с помощью SUM впервые, то вас может ожидать не очень приятная новость - табличное пространство вы удалите, но получите ошибку о том, что удалить физические файлы невозможно (точно не помню, но то ли потому что они используются БД, то ли brspace ждет какой-то команды от Oracla и ее не получает).
Казалось бы, ничего страшного, подумал я и вырубив систему и БД - переименовал физические файлы, чтобы их удалить в дальнейшем, если эксперимент завершится удачно. Запустил базу и систему, они запустились - я обрадовался. Но рано...
При входе в систему посыпались дампы с указанием на таблицу TTREE. Поиск нот привел к 1819182 - Tables (TTREE*) remain in old exchange tablespace. Оказалось, что я не переместил важные таблицы, которые остались в старом табличном пространстве. Заглядываю в SE14, вижу, что таблица не существует в БД. Активирую эту таблицу и несколько следующих через SE11, перезахожу в систему - все работает. Но опять рано радоваться...
При более детальном изучении оказалось, что пропало стандартное SAP меню. Пытаюсь "нагуглить" ответ - подходящего ответа нет, нот тоже, поддержка молчит - на дворе 6-е января ж :)
Понимаю, что основной моей ошибкой было то, что я не проверил табличное пространство на заполненность. Решаю исправиться. Системный администратор (не SAP) восстанавливает виртуалку с SAP-системой из бекапа. И тут я сталкиваюсь с другой оказией, не стартует система.
Начинаю разбираться. Восстанавливаю часть файлов, система запускается.
Теперь я уже научен, и приступаю к нормальному удалению табличного пространства.
1. Иду в DB02, жму Обновить и проверяю, что табличное пространство пустое.
2. После этого из командной строки подключаюсь к БД и проверяю сколько объектов осталось в табличном пространстве.
Теперь я уже научен, и приступаю к нормальному удалению табличного пространства.
1. Иду в DB02, жму Обновить и проверяю, что табличное пространство пустое.
2. После этого из командной строки подключаюсь к БД и проверяю сколько объектов осталось в табличном пространстве.
- SQL> select count(*) from dba_segments where tablespace_name = "PSAPSR3702";
если count не равен 0, то
- SQL> select owner, segment_name, segment_type from dba_segments where tablespace_name = '<tablespace_name>';
Получаю список таблиц, он почти идентичен тому, который упоминается в ноте 1819182.
3. Дальше используя ноту 646681 - Reorganization of tables with BRSPACE и перемещаю все таблицы с помощью команды:
- brspace -u / -f tbreorg -s "PSAPSR3702" -t "*" -n "PSAPSR3702X"
4. Выполняю пункт 2 еще раз и проверяю, что табличное пространство действительно пусто.
5. Удаляю табличное пространство с помощью команды:
Ссылки:
5. Удаляю табличное пространство с помощью команды:
- brspace -u / -f tsdrop -t "PSAPSR3702"
Ссылки:
Я бы на всякий случай для перемещённых таблиц ещё проверил наличие индексов.
ОтветитьУдалитьИ если таковые найдутся, то обязательно не забыть их отребилдить ( можно online ).
А то с битыми индексами - можно получить в саповском приложении тележку ошибок...