Я не уверен, насколько это возможно для вас, чтобы изменить способ обработки вашей конфигурации, но мы реализовали нечто похожее на это, используя идею локальных переопределений. В частности, у вас есть две таблицы конфигурации, которые идентичны (назовите их CentralConfig и LocalConfig). CentralConfig поддерживается в центральном месте и реплицируется в ваши спутниковые местоположения, где он доступен только для чтения. LocalConfig можно настроить на локальном сайте. Ваша процедура, которая запрашивает данные конфигурации, сначала ищет данные в таблице LocalConfig, а если не найдена, извлекает ее из таблицы CentralConfig.
Например, если вы пытаетесь сделать это со значениями в таблице v $ параметров, вы можете запросить конфигурацию с помощью функции FIRST_VALUE в аналитике SQL:
SELECT DISTINCT
NAME
, FIRST_VALUE(VALUE) OVER(PARTITION BY NAME
ORDER BY localsort
) VALUE
FROM (SELECT t.*
, 0 localsort
FROM local_parameter t
UNION
SELECT t.*
, 1 localsort
FROM v$parameter t
)
ORDER BY NAME;
Колонном localsort в профсоюзах нужно только убедиться, что значения local_parameter имеют приоритет над значениями параметра v $.
В нашей системе это на самом деле гораздо сложнее, чем это. В дополнение к «имени» для параметра, который вы просматриваете, у нас также есть столбец «контекст», который описывает контекст, который мы ищем. Например, у нас может быть параметр «timeout», который устанавливается централизованно, но даже локально мы имеем несколько компонентов, которые используют это значение. Все они могут быть одинаковыми, но мы также можем настроить их по-разному. Поэтому, когда инструмент просматривает значение «тайм-аут», он также ограничивает объем. В самой конфигурации, можно использовать подстановочные знаки, когда мы определяем, что мы хотим для применения, например:
CONTEXT NAME VALUE
------------- ------- -----
Comp Engine A timeout 15
Comp Engine B timeout 10
Comp Engine % timeout 5
% timeout 30
Конфигурация выше говорит, для всех компонентов, использовать тайм-аут 30, но для Comp двигателей любого типа , используйте тайм-аут 5, однако для двигателей Comp A & B используйте 15 & 10 соответственно.Последние две конфигурации могут поддерживаться в CentralConfig, но другие два могут быть сохранены в LocalConfig, и вы бы решить эти параметры при этом так:
SELECT DISTINCT
NAME
, FIRST_VALUE(VALUE) OVER(PARTITION BY NAME
ORDER BY (TRANSLATE(Context
, '%_'
, CHR(1) || CHR(2)
) DESC
, localsort
) VALUE
FROM (SELECT t.*
, 0 localsort
FROM LocalConfig t
WHERE 'Comp Engine A' LIKE Context
UNION
SELECT t.*
, 1 localsort
FROM CentralConfig t
WHERE 'Comp Engine A' LIKE Context
)
ORDER BY NAME;
Это в основном тот же запрос, за исключением того, что я вставив что ПЕРЕВЕСТИ выражение перед моим localsort, и я ограничиваю контекст. Он делает преобразование символов% и _ в chr (1) & chr (2), что сделает их сортировкой по алфавитно-цифровым символам в нисходящей сортировке. Таким образом, явно определенный «Comp Engine A» появится перед «Comp Engine%», который, в свою очередь, будет представлен до «%». В случаях, когда контексты определены одинаково, локальная конфигурация имеет приоритет над центральными; если вы хотите, чтобы местный всегда ковырялся в центре, даже в тех случаях, когда центральная область была охвачена более жестко, вы просто изменили бы позиции двух типов сортировки.