Как мне перенести изменения DDL из одной среды в другую? - PullRequest
3 голосов
/ 08 марта 2010

Я делаю изменения DDL, используя графический интерфейс разработчика SQL. Проблема в том, что мне нужно применить те же самые изменения в тестовой среде. Мне интересно, как другие решают эту проблему. В настоящее время мне приходится вручную писать операторы ALTER, чтобы привести тестовую среду в соответствие со средой разработки, но это может привести к ошибкам (повторяя одно и то же). В тех случаях, когда в тестовой среде нет важных данных, я обычно просто сдуваю все, экспортирую сценарии DDL из dev и запускаю их с нуля в тесте.

Я знаю, что есть триггеры, которые могут хранить каждое изменение DDL, но это среда с большим количеством пользователей, и я хотел бы избежать этого, если это возможно.

Может быть, я должен просто написать материал DDL вручную, а не с помощью графического интерфейса?

Ответы [ 5 ]

6 голосов
/ 09 марта 2010

Я видел множество способов «Я не знаю, как» пытался справиться с этим, и, в конце концов, я думаю, что вам нужно просто поддерживать сценарии вручную.

Теперь вам не обязательно писать тогда самим. В MSSQL, когда вы вносите изменения, есть небольшая кнопка Generate Script, которая выдаст SQL-скрипт для внесенного вами изменения. Я знаю, что вы говорите об Oracle, и прошло уже несколько лет с тех пор, как я работал с их графическим интерфейсом, но я могу только представить, что они имеют ту же функцию.

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

Единственное, что я бы порекомендовал, просто чтобы немного облегчить вашу жизнь, - это убедиться, что вы отделяете изменения схемы от изменений кода. Разница в том, что изменения схемы в таблицах и столбцах должны выполняться ровно один раз и никогда больше, и поэтому должны быть версионированы как отдельные сценарии изменений. Тем не менее, изменения кода, такие как хранимые процедуры, функции и даже представления, могут (и должны) выполняться снова и снова, и могут быть версиями, как и любой другой файл кода. Лучший подход к этому я видел, когда у нас были все procs / functions / views в VSS, и наш процесс сборки отбрасывал все и воссоздавал их при каждом обновлении. Это та же идея, что и при перестройке вашего C # / Java / любого другого кода, потому что он гарантирует, что все всегда обновлено.

3 голосов
/ 09 марта 2010

Вот триггер, который я реализовал для отслеживания изменений DDL.Использованные источники:

http://www.dba -oracle.com / t_ddl_triggers.htm

http://www.orafaq.com/forum/t/68667/0/

CREATE OR REPLACE TRIGGER ddl_trig
AFTER create OR drop OR alter
  ON scott.SCHEMA
DECLARE
  li ora_name_list_t;
  ddl_text clob;
BEGIN
  for i in 1..ora_sql_txt(li) loop
     ddl_text := ddl_text || li(i);
  end loop;

INSERT INTO my_audit_tbl VALUES
    (SYSDATE,
     ORA_SYSEVENT,
     ORA_DICT_OBJ_TYPE,
     ORA_DICT_OBJ_NAME,
     ddl_text
    );
END;
/
2 голосов
/ 08 марта 2010

Никогда не используйте GUI для таких вещей. Напишите сценарии и поместите их в систему контроля версий.

1 голос
/ 09 марта 2010

Управление изменениями базы данных / Разница в базе данных Некоторые инструменты для этого -

1) Пакет управления изменениями Oracle

Из документов -

Это позволяет нам взять базовую линию (снимок) в фиксированное время, а затем мы увидим, как изменились схема и объекты БД. CMP также может генерировать сценарии DDL, хотя я не уверен, что мы захотим его использовать.

Подробнее

2) Функция сравнения пользовательских объектов в PL / SQL Developer

        This is available from Tools -> Compare User Objects

3) Функция Diff базы данных Oracle SQL Developer

            This is available from Tools -> Database diff
            http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html#copy  See “Schema Copy and Compare”



# 1 выглядит наиболее универсальным и гибким, но могут потребоваться права администратора баз данных.

№ 2 и 3 может быть использован любым разработчиком. Я думаю, что Oracle SQL Developer проще и предоставляет больше возможностей.

Использование любого из указанных выше параметров может помочь в -

  1. Идентификация измененных объектов, а также может служить в качестве контрольного списка перед отправкой MAC.
  2. Заинтересованные разработчики могут стать владельцами определенных измененных объектов.
0 голосов
/ 15 марта 2010

Вы можете сделать это красиво с Жаба .

Вы используете функцию сравнения схем, чтобы найти все различия (она очень гибкая; вы можете указать, на какие типы объектов обращаться и многие другие параметры). Он покажет вам различия, вы можете посмотреть и убедиться, что он кажется правильным, а затем попросить его сгенерировать скрипт обновления для вас. Вуаля. Единственный улов - вам нужен модуль DBA для генерации скрипта синхронизации, что является дополнительной ценой. Но я бы сказал, что это стоит того, если вы будете делать это часто. (Или, если вы можете получить более старую версию Toad, до 9.0, я думаю, есть ошибка, которая позволяет вам извлечь скрипт синхронизации без модуля DBA.:))

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

...