Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Предотвращение конфликтов при создании и удалении таблицы  [new]
fromdd
Member

Откуда:
Сообщений: 46
Есть приложение на C# которое создает таблицу бд, заполняет ее необходимыми значениями, выгружает результат в xml, а затем удаляет таблицу созданную на первом шаге. Все работает через SqlCommand, запросы берутся из файла. Так как выгружается большой объем данных, то возможна ситуация когда будут запущены два экземпляра программы и например одна программа сработает быстрее и удалит таблицу. Как можно избежать данных вариантов?
21 май 15, 09:04    [17669784]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
fromdd
Как можно избежать данных вариантов?

Написать программу так, чтобы она понимала, что запущен второй экземпляр
21 май 15, 09:06    [17669788]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
А чем временные таблицы не устраивают? У каждой программы будет свой экземпляр таблицы.
21 май 15, 09:20    [17669826]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Wilhelm Holtoff
Member

Откуда:
Сообщений: 85
fromdd,

Клиентское приложение не должно ни создавать, ни тем более удалять таблицы базы данных.
21 май 15, 09:26    [17669843]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
fromdd, наивный вопрос - как у вас будет работать второй экземпляр программы, если при попытке создать таблицу он наткнется на таблицу, созданную вторым экземпляром? Понятно, что от SQL он получит ошибку, вопрос - как он эту ошибку обработает.

Для ваших целей по такой ошибке второй экземпляр должен завершаться, поскольку одновременно должно быть запущено не более одного экземпляра.
21 май 15, 10:09    [17670072]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Поправка, "наткнется на таблицу, созданную первым экземпляром".
21 май 15, 10:10    [17670076]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Присоединяюсь к angel_zar. Почему не использовать временные таблицы?
21 май 15, 10:23    [17670155]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20607
Minamoto, сфига бы? два манагера одновременно запрашивают статистику - но с разными граничными. Второй должен сидеть и сосать лапу, пока первый не получит результат? БСК...



fromdd, используйте
CREATE TABLE #temptable
и у каждой копии программы будет своя таблица, видимая только ему. И никаких конфликтов на ЭТОЙ таблице.
21 май 15, 10:26    [17670182]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Akina, читайте условия задачи то хотя бы:

fromdd
Есть приложение на C# которое создает таблицу бд
21 май 15, 10:29    [17670207]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20607
Minamoto, читайте дальше первой строки:
fromdd
удаляет таблицу созданную на первом шаге
21 май 15, 11:14    [17670496]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Akina, не тупите.

Приложение создает таблицу, что-то с ней делает (загружает данные, выгружает), после чего удаляет таблицу и закрывается.
Т.е. Задача - не дать второму экземпляру запуститься, пока первый экземпляр что-то делает с таблицей, дабы избежать конфликта, когда один экземпляр таблицу удаляет, а второй пытается в это время с ней работать.

Для того, чтобы избежать этого конфликта, достаточно прекращать работу приложения, если таблица уже существует.

Ну или использовать временную таблицу - это более предпочтительный вариант, КМК, вариант с проверкой наличия таблицы я предложил только как альтернативу.
21 май 15, 11:29    [17670610]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20607
Minamoto
Приложение создает таблицу, что-то с ней делает (загружает данные, выгружает), после чего удаляет таблицу и закрывается.
Т.е. Задача - не дать второму экземпляру запуститься

Вот объясните, каким образом Вы из исходной посылки умудрились сделать ТАКОЙ вывод?
Почему Вы заведомо отсекаете возможность запуска двух экземпляров приложения и выполнения в них отборов с РАЗНЫМИ условиями?
Может человек захотеть увидеть на экране для сравнения два разных набора? или, может, это запрещено Конституцией?
Могут два человека одновременно запросить данные? или, может, в УК на этот счёт статья какая имеется?

ТС чётко поставил задачу - параллельно работающие экземпляры приложения (и из вопроса однозначно следует, что это допустимо!) не должны мешать друг другу, вызывая интерференцию данных. В этом случае нет ничего лучше использования сеансовой временной таблицы. И даже об её удалении заботиться не нужно.
21 май 15, 11:45    [17670746]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Akina, вы додумали что-то свое. ТС спросил, как можно избежать ситуации, когда один экземпляр программы удалит таблицу, которая используется другим экземпляром.

Теперь обоснуйте, почему мой вариант не решает эту проблему.

И, да, еще раз, я считаю, что использование временной таблицы в этом случае предпочтительнее.
21 май 15, 11:52    [17670796]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Akina
Minamoto
Приложение создает таблицу, что-то с ней делает (загружает данные, выгружает), после чего удаляет таблицу и закрывается.
Т.е. Задача - не дать второму экземпляру запуститься

Вот объясните, каким образом Вы из исходной посылки умудрились сделать ТАКОЙ вывод?
Почему Вы заведомо отсекаете возможность запуска двух экземпляров приложения и выполнения в них отборов с РАЗНЫМИ условиями? .


Условия отбора вообще не имеют отношения к вопросу.
Либо экземпляры приложения работают с одним и тем же именем таблицы (и тогда второй свалится, не сумев ее создать, так как она уже создана первым), ибо с разными - и тогда второй не сможет удалить таблицу первого.
21 май 15, 11:52    [17670803]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
komrad
Member

Откуда:
Сообщений: 5260
Akina
ТС чётко поставил задачу - параллельно работающие экземпляры приложения (и из вопроса однозначно следует, что это допустимо!) не должны мешать друг другу, вызывая интерференцию данных. В этом случае нет ничего лучше использования сеансовой временной таблицы. И даже об её удалении заботиться не нужно.

можно ничего не дропать, а добавить в таблицу поле SPID и далее:
- заполнять его номером своей сессии,
- выбирать данные из таблицы для своей сесиии
- удалять данные своей сессии при завершении работы
21 май 15, 12:01    [17670848]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20607
Minamoto
ТС спросил, как можно избежать ситуации, когда один экземпляр программы удалит таблицу, которая используется другим экземпляром.

Теперь обоснуйте, почему мой вариант не решает эту проблему.

Ваш вариант меняет условия. ТС желает, чтобы одновременный запуск был возможен. Иначе он бы спрашивал, как запретить запуск второго экземпляра (и не в этом субфоруме).

А Вы предлагаете лечить насморк отсечением носа...
21 май 15, 12:11    [17670910]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Akina, это вы меняете условия.
То, что запуск приложения возможен, не означает, что необходимо обеспечить возможность его запуска.

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

Так и автор не сказал, какое поведение для него желательно.

Если нужен одновременный запуск нескольких экземпляров - лучшее решение - временная таблица.

Если нужно запретить одновременный запуск - одно из решений - проверять наличие таблицы и отваливаться при обнаружении.
21 май 15, 12:16    [17670936]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Автор уже давно потерялся, видать нужный ответ уже получил, а дискуссия продолжается.
Ждем комментариев автора.
21 май 15, 12:31    [17671013]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20607
Minamoto
автор не сказал, какое поведение для него желательно.
Давай подождём ТС. Может, узнаем чего новенького...
21 май 15, 12:32    [17671015]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
fromdd
Member

Откуда:
Сообщений: 46
Всем спасибо решил проблему генерацией случайного имени таблицы, и потом ее удаления, тупо но работает.
27 май 15, 09:15    [17694156]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
fromdd
тупо но работает.

А потом пользователь спросит, а что в моей базе делает куча таблиц с непонятными именами
27 май 15, 09:19    [17694168]     Ответить | Цитировать Сообщить модератору
 Re: Предотвращение конфликтов при создании и удалении таблицы  [new]
Кролик-зануда
Guest
интересно, с каких пор "случайность" стала синонимом уникальности?...
27 май 15, 09:26    [17694214]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить