|
|
|
Очистка БД процедурой
|
|||
|---|---|---|---|
|
#18+
Задача - очистить БД. Условие - нет прав на DROP DATABASE / CREATE DATABASE. Но есть права на работу с другими объектами. Пишется процедура, которая выполнит корректную очистку. Плановый алгоритм: 1) Получить все FK на таблицы БД (в курсоре) и удалить их Код: sql 1. 2. 3. 2) Получить и удалить все представления в БД Код: sql 1. 2. 3. 3) Получить и удалить все таблицы БД Код: sql 1. 2. 3. Вопрос 1. Ничего не пропущено? триггеры вроде должны удалиться при удалении таблиц... Вопрос 2. По такой схеме не удаляются представления, созданные в других БД и использующие таблицы очищаемой БД в качестве источника данных. Есть способ их получить и удалить проще, чем парсинг INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 15:35 |
|
||
|
Очистка БД процедурой
|
|||
|---|---|---|---|
|
#18+
Database CleanerПолучить все FK на таблицы БД (в курсоре) и удалить ихДостаточно просто выключить. И не забыть потом включить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 15:44 |
|
||
|
Очистка БД процедурой
|
|||
|---|---|---|---|
|
#18+
Отключение не подходит. Во-первых, оно отключает все проверки, невозможно ограничить область действия отключения одной БД. А между очисткой и загрузкой новых структуры и данных может пройти значительное время. Во-вторых, включение проверок после загрузки при отсутствии референсных данных в новой структуре может плохо сказаться на данных в таблицах другой БД, ссылающихся на очищаемую - вплоть до незапланированного удаления. В третьих, не исключено, что реферальные индексы получат другие имена, будут иметь другую структуру или вообще будут удалены. Есть и ещё резоны не использовать отключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 16:31 |
|
||
|
Очистка БД процедурой
|
|||
|---|---|---|---|
|
#18+
Database Cleaner, Т.е. в базе есть одна схема (database), которую надо зачистить, и есть другая, с которой в это время идет работа ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 16:33 |
|
||
|
Очистка БД процедурой
|
|||
|---|---|---|---|
|
#18+
Да, такое возможно. Вернее, не совсем так. Это эдакий разработчицко-тестовый сервер, на котором есть изрядное количество БД. По ним распихано достаточное количество сравнительно общих таблиц-справочников. Соответственно гораздо быстрее и проще по-быстрому прицепиться к существующей таблице, чем копировать её в свою БД, да и диски опять же не резиновые. Ну и вот оно есть как есть. То есть таблицы не в работе постоянно, но если тебе понадобилось поработать с какой-то БД, которую ты месяц не трогал, будет не очень приятно обнаружить, что она сыплет ошибками. И удалённый FK в этом смысле гораздо меньшее зло, чем поломанный. Конечно, процедура будет протоколировать, что она "прибила". Посмотреть перед использованием и увидеть, что некий FK был удалён - это несложно. Если он сильно нужен - то кому нужен, тот и восстановит. Ну вот есть такой бардак, есть. А чтобы сделать как должно быть - надо эти конюшни разгребать не одну неделю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39225885&tid=1831862]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 350ms |

| 0 / 0 |
