powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Очистка БД процедурой
5 сообщений из 5, страница 1 из 1
Очистка БД процедурой
    #39225792
Database Cleaner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача - очистить БД. Условие - нет прав на DROP DATABASE / CREATE DATABASE. Но есть права на работу с другими объектами. Пишется процедура, которая выполнит корректную очистку.

Плановый алгоритм:
1) Получить все FK на таблицы БД (в курсоре) и удалить их
Код: sql
1.
2.
3.
SELECT CONSTRAINT_NAME, TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = dbName;


2) Получить и удалить все представления в БД
Код: sql
1.
2.
3.
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = dbName;


3) Получить и удалить все таблицы БД
Код: sql
1.
2.
3.
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = dbName;



Вопрос 1. Ничего не пропущено? триггеры вроде должны удалиться при удалении таблиц...
Вопрос 2. По такой схеме не удаляются представления, созданные в других БД и использующие таблицы очищаемой БД в качестве источника данных. Есть способ их получить и удалить проще, чем парсинг INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION?
...
Рейтинг: 0 / 0
Очистка БД процедурой
    #39225808
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Database CleanerПолучить все FK на таблицы БД (в курсоре) и удалить ихДостаточно просто выключить. И не забыть потом включить.
...
Рейтинг: 0 / 0
Очистка БД процедурой
    #39225880
Database Cleaner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отключение не подходит.

Во-первых, оно отключает все проверки, невозможно ограничить область действия отключения одной БД. А между очисткой и загрузкой новых структуры и данных может пройти значительное время.
Во-вторых, включение проверок после загрузки при отсутствии референсных данных в новой структуре может плохо сказаться на данных в таблицах другой БД, ссылающихся на очищаемую - вплоть до незапланированного удаления.
В третьих, не исключено, что реферальные индексы получат другие имена, будут иметь другую структуру или вообще будут удалены.

Есть и ещё резоны не использовать отключение.
...
Рейтинг: 0 / 0
Очистка БД процедурой
    #39225885
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Database Cleaner,

Т.е. в базе есть одна схема (database), которую надо зачистить, и есть другая, с которой в это время идет работа ?
...
Рейтинг: 0 / 0
Очистка БД процедурой
    #39225903
Database Cleaner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, такое возможно.

Вернее, не совсем так. Это эдакий разработчицко-тестовый сервер, на котором есть изрядное количество БД. По ним распихано достаточное количество сравнительно общих таблиц-справочников. Соответственно гораздо быстрее и проще по-быстрому прицепиться к существующей таблице, чем копировать её в свою БД, да и диски опять же не резиновые. Ну и вот оно есть как есть. То есть таблицы не в работе постоянно, но если тебе понадобилось поработать с какой-то БД, которую ты месяц не трогал, будет не очень приятно обнаружить, что она сыплет ошибками. И удалённый FK в этом смысле гораздо меньшее зло, чем поломанный.

Конечно, процедура будет протоколировать, что она "прибила". Посмотреть перед использованием и увидеть, что некий FK был удалён - это несложно. Если он сильно нужен - то кому нужен, тот и восстановит.

Ну вот есть такой бардак, есть. А чтобы сделать как должно быть - надо эти конюшни разгребать не одну неделю.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Очистка БД процедурой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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