Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Рефакторинг баз данных в dbForge Studio for MySQL, v6.0 / 25 сообщений из 275, страница 1 из 11
14.02.2013, 20:16:23
    #38151912
devart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
Мы рады сообщить вам о выпуске новой версии студии, в которой реализована функциональность рефакторинга баз данных.
Как известно, рефакторинг базы данных является непростой задачей, и каждый разработчик или администратор рано или поздно с ней сталкивается.

В каких случаях можно ожидать проблем при рефакторинге базы данных MySQL:
1) При переименовании столбца таблицы, на который ссылается столбец из другой таблицы через внешний ключ;
2) При переименовании столбца таблицы или самой таблицы, из которой происходит выборка в представлении;
3) При переименовании объектов, содержащих код.

Рассмотрим перечисленные проблемы на примерах:

1) Переименование столбца таблицы, на который ссылается столбец из другой таблицы через внешний ключ.
Есть две таблицы из базы sakila :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE country (
  country_id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  country varchar(50) NOT NULL,
  last_update timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (country_id)
)
ENGINE = INNODB;

CREATE TABLE city (
  city_id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  city varchar(50) NOT NULL,
  country_id smallint(5) UNSIGNED NOT NULL,
  last_update timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (city_id),
  INDEX idx_fk_country_id (country_id),
  CONSTRAINT fk_city_country FOREIGN KEY (country_id)
  REFERENCES country (country_id) ON DELETE RESTRICT ON UPDATE CASCADE
)
ENGINE = INNODB;



Если обычным способом попытаться переименовать столбец country_id в таблице country, выполнив следующий запрос (который, например, будет сгенерирован практически любым MySQL GUI инструментом):

Код: sql
1.
2.
ALTER TABLE sakila.country
  CHANGE COLUMN country_id id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT;



MySQL выдаст ошибку вида:
авторError on rename of '.\sakila\#sql-62c_c6' to '.\sakila\country' (errno: 150)

Таким образом, перед переименованием столбца нужно найти все внешние ключи, удалить их, переименовать столбец и заново воссоздать все удаленные ранее внешние ключи:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
ALTER TABLE city
DROP FOREIGN KEY fk_city_country;

ALTER TABLE country
CHANGE COLUMN country_id id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT;

ALTER TABLE city
ADD CONSTRAINT fk_city_country FOREIGN KEY (country_id)
REFERENCES country (id) ON DELETE RESTRICT ON UPDATE CASCADE;



2) Предыдущий случай простой, но в реальной базе sakila, столбец country_id таблицы country еще участвует в выборке созданных представлений (view-шек).

MySQL разрешит обычным способом переименовать столбец, но позже, при выборке данных из представления будет возникать ошибка:

авторUnknown column 'sakila.country.country_id' in 'on clause'

Чтобы избежать подобных ситуаций, необходимо после переименования столбца, отредактировать все представления, где участвует переименованный столбец.

3) Более "опасный" способ переименования объектов, в результате неудачи которого, можно было лишиться вообще исходного кода процедуры или функции — если в визуальном редакторе процедуры изменить имя процедуры и одновременно допустить синтаксическую ошибку в теле процедуры.
Из-за того, что MySQL не позволяет при помощи ALTER PROCEDURE изменять код процедуры, приходится пересоздать процедуру с изменениями, т.е. сначала удалить созданную процедуру, а затем создать ее с новым именем и измененным кодом.
В случае, если была допущена синтаксическая ошибка, то старая процедура успешно удалится, а новая не создастся (после чего, придется процедуру воссоздавать заново по памяти). Так работает любое приложение, для администрирования MySQL.

dbForge Studio for MySQL, v6.0 делает безопасное переименование объектов, содержащих код:

a) Создается вр е менная функция (процедура), содержащая исходный код (до переименования);
b) Удаляются все объекты, где эта функция (процедура) вызывается;
c) Создаются все объекты, где эта функция (процедура) вызывается, но с уже переименованным именем;
d) Создается функция (процедура) с новым исходным кодом и с новым именем;
e) Удаляется временная функция (процедура);
Если этап d) заканчивается неудачей, то выполнение скрипта останавливается, и исходный код функции (процедуры) можно будет восстановить из вр е менного объекта.

Рефакторинг в нашем приложении можно вызвать из контекстного меню каждого объекта в Проводнике базы данных, а также в визуальном редакторе объектов, при изменении имени уже созданного объекта.



В новой версии функциональность "Рефакторинг" стала ключевой функциональностью , набравшей максимальное количество голосов пользователей.

По нашим данным, функциональность рефакторинга баз данных не реализована ни в одном из существующих инструментов для администрирования MySQL.
По ходу реализации, нам пришлось полностью переделать функциональность: сравнение схем, бекпа, генерацию скриптов, подсказчик кода и форматтер.
В результате, это повлекло за собой задержку релиза на 2-3 месяца...

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

С уважением,
Команда devart
...
Рейтинг: 0 / 0
14.02.2013, 20:29:20
    #38151933
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
...
Рейтинг: 0 / 0
14.02.2013, 23:22:11
    #38152078
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
есть одно неудобство.
построитель-констркутор не хочет работать с временными таблицами.
багом это трудно назвать, да и фичей тоже.
это решается удалением слова TEMPORARY при создании таблицы. и потом вставки его обратно.
и соответственно удалением временной-постоянной таблицы :)

за рефакторинг спасибо, желание поправить базу были - останавливала неизвестность результата.

только последняя 5 версия не сообщает о появлении новой. это так задумано? новая версия только для sql.ru? :)
...
Рейтинг: 0 / 0
15.02.2013, 08:02:04
    #38152242
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
Это же бета
...
Рейтинг: 0 / 0
15.02.2013, 09:55:28
    #38152339
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
А где-то есть открытый баг трекер или сюда писать?
Вот сейчас нашел такой небольшой баг: если открыть таблицу на просмотр данных и установить сортировку путем клика по заголовку столбца, то при нажатии на F5 сотрировка сбрасывается на дефолтную.
...
Рейтинг: 0 / 0
15.02.2013, 13:36:21
    #38152766
devart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
вадяпостроитель-констркутор не хочет работать с временными таблицами.Поддержка временных таблиц не планируется т.к. с ними есть технические сложности.вадяза рефакторинг спасибо, желание поправить базу были - останавливала неизвестность результата.В любом случае, работает приложение правильно или нет, просто необходимо перед любыми изменениями базы данных сделать бекап .
Какой скрипт будет выполнять рефакторинг можно посмотреть, установив чекбокс "Сгенерировать скрипт не изменяя базу данных".вадятолько последняя 5 версия не сообщает о появлении новой. это так задумано? новая версия только для sql.ru?Бета ставится параллельно с релизной версией, и у нах разные каналы обновления - бета будет обновляться до следующего билда беты, а релизная версия будет обновлена до следующей релизной версии, при выходе последней.HettА где-то есть открытый баг трекер или сюда писать?Как Вам проще, можно публично через наш форум , можно индивидуально через тикеты , любый удобным способом.
HettВот сейчас нашел такой небольшой баг: если открыть таблицу на просмотр данных и установить сортировку путем клика по заголовку столбца, то при нажатии на F5 сотрировка сбрасывается на дефолтную.Мы воспроизвели эту проблему и будем ее исправлять.
...
Рейтинг: 0 / 0
16.02.2013, 10:14:03
    #38153851
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
авторВ любом случае, работает приложение правильно или нет, просто необходимо перед любыми изменениями базы данных сделать бекап.


люди делятся на 2 категории:
1 категория - делают бекап
2 категория - будут делать бекап
(не моё)


давно перешёл в 1 категорию
...
Рейтинг: 0 / 0
18.02.2013, 10:06:14
    #38155239
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
А где-то можно настроить время ожидания ответа от сервера (TCP/IP, при разрыве соединения чтобы долго не ждал ответа)
...
Рейтинг: 0 / 0
18.02.2013, 10:06:19
    #38155240
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
?
...
Рейтинг: 0 / 0
18.02.2013, 16:08:26
    #38155911
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
Случайно закрыл таблицу с данными.

открыл ее назад, выполняю запрос, ничего не появляется.

кликая по данному окну, предлагает выполнить скрипт, но если соглашусь, все равно не показывает результаты.
...
Рейтинг: 0 / 0
18.02.2013, 16:10:37
    #38155917
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
а нет,
отбой.

все нормально.
это оказывается я запятую в запросе забыл поставить.

тут скорее всего, то что в самом окне с данными, не хватает информации о ошибке.

так как окно с выводом информации я закрываю, для экономии места.
...
Рейтинг: 0 / 0
18.02.2013, 17:46:17
    #38156189
devart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
HettА где-то можно настроить время ожидания ответа от сервера (TCP/IP, при разрыве соединения чтобы долго не ждал ответа)В свойствах соединения на второй закладке можно установить таймаут подключения и таймаут выполнения.
...
Рейтинг: 0 / 0
18.02.2013, 18:00:19
    #38156223
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
devartHettА где-то можно настроить время ожидания ответа от сервера (TCP/IP, при разрыве соединения чтобы долго не ждал ответа)В свойствах соединения на второй закладке можно установить таймаут подключения и таймаут выполнения.
Точно, ведь видел же сотню раз и тут не мог вспомнить где)
...
Рейтинг: 0 / 0
18.02.2013, 23:31:51
    #38156549
Asm64D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
вадялюди делятся на 2 категории:
1 категория - делают бекап
2 категория - будут делать бекап
(не моё)

Мне больше нравится версия про 3 категории:
3) кто делает бэкап и проверяет его целостность.
...
Рейтинг: 0 / 0
21.02.2013, 05:43:00
    #38160041
mitbu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
Добрый день!


Есть 2 сервера, на обоих стоит mysql 5.6.10 настроена репликация(с использованием GTID).
Столкнулся с такой пробемой: если править табличку на мастере через визуальный редактор, это не отображается в бинлоге и соответственно не переносится на slave. если через визуальный редактор создать табличку, опять не отображается в бинлоге.
Но если делать то же самое через выполнение кода в sql-window то все корректно отображается в бинлоге. Если данные на мастере править через mysql command line client, изменения попадают в бинлог всегда.
Собственно вопрос, это нормальное поведение дб форжа? Может где то какая то галочка не стоит?
Или я криво настроил мастер?

Версия дбфоржа 5, билд последний.
...
Рейтинг: 0 / 0
21.02.2013, 11:26:26
    #38160323
devart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
mitbuЕсть 2 сервера, на обоих стоит mysql 5.6.10 настроена репликация(с использованием GTID).
Версия дбфоржа 5, билд последний.Пока поддержки MySQL 5.6 в нашей студии нет.
...
Рейтинг: 0 / 0
23.02.2013, 22:42:10
    #38163400
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
при создании резервной копии, если база большая (у меня таблица 59000, поля картинки, та что затыкалась в предыдущих версиях)
при отмене сздания, после ответов на все вопросы, сервер не останавливает посылку данных, мне не удалоь этого дождатьтся ~1мин. пришлось перегрузить mysql.
...
Рейтинг: 0 / 0
24.02.2013, 10:41:41
    #38163575
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
проще было сессию убить
...
Рейтинг: 0 / 0
24.02.2013, 10:48:24
    #38163577
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
Hett,

наверное, было б и правильней...
но мне было проще даже сервер рестартануть :)
...
Рейтинг: 0 / 0
26.02.2013, 13:04:10
    #38166236
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
как так ?
...
Рейтинг: 0 / 0
26.02.2013, 13:07:15
    #38166242
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
вадя,

а если изменить строку запроса, которая начинается на DATE_FORMAT, то ситуация изменится?
...
Рейтинг: 0 / 0
26.02.2013, 17:47:55
    #38166910
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
miksoft
строку менял, делал DATEFORMAT(...)
типа как собственная функция всё сохраняется , но в талисной части такая ж фигня.

зы
в строке правильное выражение
...
Рейтинг: 0 / 0
26.02.2013, 17:49:22
    #38166912
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
и во вкладке условия правильпо показывает
...
Рейтинг: 0 / 0
26.02.2013, 17:53:10
    #38166920
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
а так правильно преобразует
...
Рейтинг: 0 / 0
26.02.2013, 17:56:10
    #38166928
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рефакторинг баз данных в dbForge Studio for MySQL, v6.0
вадяа так правильно преобразует Не вижу, что изменилось в запросе?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Рефакторинг баз данных в dbForge Studio for MySQL, v6.0 / 25 сообщений из 275, страница 1 из 11
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]