23 ноября 2013 г.

Транзакция SE14 : утилита базы данных

На уровне SAP системы существует ABAP словарь (ABAP Dictionary), который хранит  описание основных объектов данных (типы данных, таблицы, ракурсы ведения (views), объекты блокировки). С данными объектами работают ABAP программы. ABAP словарь независим от базы данных. Поэтому не стоит его путать со словарем базы данных (Database dictionary). Этой независимостью словаря на уровне SAP обеспечивается, известная всем, платформо-независимость (в данном случае независимость от базы данных) решений компании SAP.

Рис. 1. Утилита базы данных.

Связь между ABAP словарем и словарем базы данных осуществляется через утилиту базы данных, вызвать которую можно, запустив транзакцию SE14 (рис. 1).


Обычно первым этапом ABAP программист через утилиты разработки (например, транзакцию SE11) создает описание объекта (например, таблицы), а затем уже создает его на уровне базы данных. Второй этап выполняется автоматически при активации вновь созданной таблицы, индекса и т.д.

В дальнейшем объект на уровне базы данных можно посмотреть в вышеупомянутой транзакции SE14. В начальном окне транзакции вводим имя объекта (таблицы) и нажимаем кнопку "Обработать" или просто клавишу "Enter" (рис. 2).

Рис. 2. Начальный экран транзакции SE14.

На следующем экране можно видеть статус объекта (рис. 3).

Рис. 3. Статус таблицы на уровне базы данных.

Можно проверить объект на уровне базы данных, нажав кнопку "Проверить" (рис. 4 и 5).

Рис. 4. Проверка таблицы на уровне базы данных.

Рис. 5. Результаты проверки таблицы на уровне базы данных.

По какой-то причине таблица может иметь описание в ABAP словаре, но при этом отсутствовать на уровне базы данных. Тогда таблицу в базе данных можно создать, нажав соответствующую кнопку - "Создать таблицу БД" (рис. 6).

Рис. 6. Создание таблицы базы данных.

При этом формируется журнал, который в случае ошибок может помочь идентифицировать и исправить их (рис .7).

Рис. 7. Журнал создания таблицы базы данных.

Так же можно посмотреть "как себя чувствуют" индексы данной таблицы, нажав кнопку "Индексы..." и выбрав нужный из списка. С помощью этой транзакции можно пересоздать индексы в базе данных. Иногда это бывает необходимо при решении проблем с производительностью.
Только стоит учесть, что индексы для больших таблиц, особенно если с ними в данный момент работают пользователи, могут создаваться довольно долго и в этот период производительность системы снизится.

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

Рис. 8. Активация и адаптация таблицы базы данных.

В результате таблица будет пересоздана на уровне базы данных и данные в таблице сохранятся.

Как вы уже могли догадаться, есть и другая опция - можно пересоздать таблицу в базе данных с удалением данных. Для этого надо выбрать пункт "Удалить данные" и нажать кнопку "Активировать и адаптировать БД" (рис. 9).

Рис. 9. Удаление данных из таблицы.

Когда это может понадобиться? При очистке какой-то манданто-независимой таблицы. Или при обновлении манданта, копированием из другой системы. В данном случае при копировании манданта в существующий мандант с данными на первом этапе происходит удаление всех данных из таблиц с ключом номер манданта. Только после этого происходит импорт записей манданта в таблицы. Удаление данных манданта из таблиц происходит командой SQL вида:
DELETE FROM TABLE WHERE MANDT=<номер манданта>
Это команда работает медленно, а при больших таблицах с миллионами записей - очень медленно. Поэтому можно поступить так - выбрать самые большие таблицы в вашей системе.
Сделать это можно в транзакции DBACOCKPIT (DB02) по пути "Space -> Segments -> Detailed Analysis", указав тип объекта - "Table" и размер - "1000 Мб или больше" (рис. 10).

Рис. 10. Поиск таблиц с размером больше 1 Гб.

Затем проанализировать сколько записей в этих таблицах содержатся в мандантах вашей системы. Сделать это можно, войдя в каждый мандант, запустив транзакцию SE16 и нажав кнопку "Количество записей" (рис. 11).

Рис. 11. Подсчет количества записей в таблице.

Теперь, если у вас только один рабочий мандант (за исключением мандантов 000 или 066, в которых тоже необходимо проверить количество записей), который вы и обновляете, то вам очень повезло. Удалите быстро записи в таблице через транзакцию SE14 (рис. 9) и процедура удаления манданта пройдет гораздо быстрее.

Если же есть другие манданты и в них есть записи, но их не очень много (не миллионы), то можно выгрузить эти записи из этих мандантов в запросы. Обязательно деблокировать их. А после операции удаления данных из таблицы в транзакции SE14, импортировать эти запросы в эти же манданты.

Предупреждение: транзакция очень опасная, поэтому работать с ней необходимо очень аккуратно. Перепутать окна SAP GUI и случайно удалить все данные в таблице в не той системе очень легко и главное очень быстро. :)

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

Автор: Шиболов Вячеслав Анатольевич


2 комментария:

  1. Спасибо Вячеслав, за полезный информации

    ОтветитьУдалить
  2. Спасибо Вячеслав! Как всегда доходчиво,просто и понятно!

    ОтветитьУдалить