Oracle - технология параллельного обновления схемы ... есть ли? - PullRequest
3 голосов
/ 06 ноября 2008

Существует ли какая-либо технология, которая позволит вам выполнять параллельные обновления производственных схем?

Цель состоит в том, чтобы иметь нулевое время простоя при применении обновлений к схеме в производстве. Weblogic 10 имеет аналогичную функцию для своих приложений Java EE, когда вы развертываете новую версию приложения, и новые соединения переходят в новое приложение, в то время как существующие соединения продолжают работать со старым приложением. Когда все старые подключения завершены / истекло время ожидания, старое приложение удаляется, а новое приложение продолжает работу ... время простоя ноль.

Есть ли что-то похожее в Oracle?

Ответы [ 3 ]

3 голосов
/ 07 ноября 2008

Да. Существует онлайн-пакет переопределения.

dbms_redefinition

Но я сомневаюсь, что это даст вам нулевое время простоя, это не учитывает все возможные изменения в схеме. Это позволяет вам вносить некоторые изменения в таблицу. Я думаю, что вам нужно определить ноль и насколько обширными изменения вы хотите сделать. Обычно, если вы меняете базу данных, вам также нужно сменить клиента. Если вы изменили базу данных, как клиент автоматически переключится со старой подписи процедуры на новую подпись процедуры - мгновенно?

Базы данных не работают как приложения. Существует либо FK от tableA до tableB, либо его нет ... он не может быть там для текущего соединения и существует только для нового соединения так же, как ваше приложение. Базы данных просто не совпадают.

При этом ходят слухи, что Oracle работает над версионностью пакетов ... поэтому вы можете подключиться к определенной версии пакета, чтобы упростить такую ​​миграцию. Но опять же ... это будет работать для пакетов, DBMS_redef будет работать для таблиц ... но это не общая сумма вашей базы данных.

2 голосов
/ 01 сентября 2009

Oracle выпускает сегодня 11гр2, имеет переопределение на основе редакции: http://download.oracle.com/docs/cd/E11882_01/server.112/e10881/chapter1.htm#NEWFTCH1

1 голос
/ 07 ноября 2008

Зависит от того, что вы имеете в виду или включаете в «схему». Если вы хотите добавить или удалить индекс, это можно сделать «в полете», хотя для этого потребуется блокировка, которая может временно приостановить активность. В последних версиях Oracle не требуется удерживать блокировку все время, необходимое для построения индекса, только на мгновение, чтобы зафиксировать изменение. Если у вас есть краткосрочные транзакции, это не должно быть заметно. В некоторых случаях это относится и к таблицам (например, добавление столбца, который может иметь значение NULL) или * по умолчанию.

Если вы используете PL / SQL (особенно пакеты), все может быть немного сложнее. Усовершенствования были предложены для 11gR1, чтобы включить обновление приложения в полете, но оно вышло из-под контроля и теперь ожидается в 11gR2 (вероятно, в первой половине следующего года). Между тем, обходной путь - это решение с несколькими схемами. Допустим, ваши данные располагаются в одной схеме («желтая»), а код текущего приложения выполняется в «синей» схеме, вы загружаете новое приложение в «зеленую схему». Вы переключаете свои соединения, одно за другим, с синего на зеленый. Когда все ваши соединения используют «зеленый», вы можете удалить «синий» до следующего обновления (когда «синий» станет новым приложением, а «зеленый» удален).

Если у вас подлинная система 24/7, вам, вероятно, всегда придется проводить некоторые обновления. Например, добавьте новый столбец как необязательный, обновите приложение, чтобы установить его, а затем сделайте его обязательным (возможно, с некоторым сценарием изменения данных для уже существующих строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...