Добавить в корзинуПозвонить
Найти в Дзене
Oracle Developer

Dbms_rowid интересный пакет, который может пригодится

Dbms_rowid интересный пакет, который может пригодится Друзья, всем привет! 👋 С вами Денис. В нашем канале разного уровня специалисты, этот пост зайдет Middle- и Senior-ребятам, но и Junior могут почерпнуть полезное. Итак, каждый разработчик Oracle хотя бы раз сталкивался с ROWID — уникальным идентификатором строки в базе. Cодержит информацию о типе ROWID, идентификаторе объекта, относительном номере файла (relative file number), номере блока и номере строки в блоке. Но как разобрать его на части или создать искусственно? Здесь на помощь приходит пакет DBMS_ROWID. Это не просто утилита, а мощный инструмент для глубокого анализа и манипуляций с данными на уровне блоков. В реальной жизни он спасает при отладке, миграциях или оптимизации хранения. Без него сложно понять, где именно лежит ваша запись в файлах данных. Пакет DBMS_ROWID появился в Oracle для работы с ROWID из PL/SQL и SQL. Он позволяет извлекать информацию о блоках данных, файлах, объектах и даже создавать тестовые ROWID.

Dbms_rowid интересный пакет, который может пригодится

Друзья, всем привет! 👋

С вами Денис.

В нашем канале разного уровня специалисты, этот пост зайдет Middle- и Senior-ребятам, но и Junior могут почерпнуть полезное.

Итак, каждый разработчик Oracle хотя бы раз сталкивался с ROWID — уникальным идентификатором строки в базе. Cодержит информацию о типе ROWID, идентификаторе объекта, относительном номере файла (relative file number), номере блока и номере строки в блоке.

Но как разобрать его на части или создать искусственно? Здесь на помощь приходит пакет DBMS_ROWID. Это не просто утилита, а мощный инструмент для глубокого анализа и манипуляций с данными на уровне блоков. В реальной жизни он спасает при отладке, миграциях или оптимизации хранения. Без него сложно понять, где именно лежит ваша запись в файлах данных.

Пакет DBMS_ROWID появился в Oracle для работы с ROWID из PL/SQL и SQL. Он позволяет извлекать информацию о блоках данных, файлах, объектах и даже создавать тестовые ROWID.

Ключевые функции пакета

DBMS_ROWID.ROWID_CREATE — создает ROWID для тестирования. Полезно, когда нужно симулировать запись без реальной БД.

DECLARE

v_rowid ROWID;

BEGIN

v_rowid := DBMS_ROWID.ROWID_CREATE(

rowid_type => sys.dbms_rowid.rowid_type_extended,

object_number => 12345,

relative_fno => 1,

block_number => 100,

row_number => 5

);

DBMS_OUTPUT.PUT_LINE(v_rowid);

END;

DBMS_ROWID.ROWID_INFO — разбирает существующий ROWID на компоненты: тип, номер объекта, файл, блок и строку.

DECLARE

v_rowid ROWID := 'AAAAAAAABAAAALaAAA';

v_type NUMBER;

v_object NUMBER;

v_file NUMBER;

v_block NUMBER;

v_row NUMBER;

BEGIN

DBMS_ROWID.ROWID_INFO(

rowid_in => v_rowid,

rowid_type => v_type,

object_number => v_object,

relative_fno => v_file,

block_number => v_block,

row_number => v_row

);

DBMS_OUTPUT.PUT_LINE('Объект: ' || v_object || ', Блок: ' || v_block);

END;

Другие полезные модули

ROWID_BLOCK_NUMBER возвращает номер блока,

ROWID_OBJECT — номер объекта,

ROWID_RELATIVE_FNO — относительный номер файла,

ROWID_ROW_NUMBER — номер строки в блоке,

ROWID_TO_ABSOLUTE_FNO — абсолютный номер файла,

ROWID_TO_EXTENDED и ROWID_TO_RESTRICTED для конвертации типов,

ROWID_TYPE для проверки типа,

ROWID_VERIFY для валидации.

Для чего использовать DBMS_ROWID

🔸 Диагностика инцидентов — быстро найти физическое местоположение проблемной строки по ROWID из alert.log/trace.

🔸 Анализ ошибок — определить повреждённый блок, файл и объект.

🔸 Контроль миграций/восстановлений — сверка фактического физического размещения строк между средами.

🔸 Анализ распределения данных — понять плотность блоков, выявить горячие сегменты или неэффективную кластеризацию.

🔸 Работа с партиционированием — определить точный партишен/subpartition, где находится строка.

🔸 Точечный доступ к данным — выборка строк по известным физическим координатам без сложных JOIN.

🔸 Служебное логирование — фиксировать ROWID проблемных записей для последующей диагностики.

🔸 Создание воспроизводимых тестов — моделирование ситуаций с повреждёнными или смещёнными строками.

Пост был навеян лекцией в субботу. Показывал ребятам свой код с Магнита, написанный в 17м году. И наткнулся на dbms_rowid.rowid_object(v_rowid). На скрине выше ⬆️

Используете ли вы DBMS_ROWID в проектах? Поделитесь кейсами, когда он выручил, в комментариях 💬

Всем продуктивного дня и удачных запросов! 🌟

#oracle #dbms_rowid #rowid #plsql #oracledev #базыданных #sql

Канал Oracle Developer | Чатик 💬

Мини-курс Оптимизация: Быстрый старт 🚀

Анкета предзаписи на 7 поток "Оптимизация Oracle SQL"

📱 Facebook 📱 YouTube 📱 ВКонтакте 📱 LinkedIn 📱 Threads RUTUBE