Три или четыре года назад я где-то читал в блоге Oracle, что администратор БД использовал для разрешения чрезвычайных ситуаций функцию Oracle 10g для подстановки SQL в реальном времени. По сути, он настраивал Oracle таким образом, чтобы каждый раз, когда он получал определенный запрос A, он выполнял другой запрос B вместо этого. Без изменения кода приложения, без изменения схемы, просто простой тип конфигурации «выполнить запрос B вместо A».
Не то, чтобы я планировал использовать эту функцию (я могу подумать о некоторых нежелательных последствиях), но из любопытства она действительно существует? Если да, то как называется эта функция?
oracle
oracle-10g
b.roth
источник
источник
Ответы:
Это похоже на пакет DBMS_ADVANCED_REWRITE . Тим Холл имеет отличное руководство по использованию этого пакета для сопоставления запросов приложения с другой таблицей или представлением .
Если вы просто хотите изменить план запроса, но не указывать запрос на другую таблицу, вы можете использовать сохраненные схемы или профили SQL.
Например, у меня есть таблицы
FOO
с 1 строкой иBAR
2 рядамиЯ могу объявить эквивалентность переписывания, сказав, что запросы против
FOO
должны вместоBAR
Теперь, если я установил
query_rewrite_integrity
значение «доверенный», запросы против будутFOO
попадать в совершенно другую таблицу.Это может создать довольно интересные планы запросов, где запрашиваемый объект нигде не найден в плане.
источник