Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Передать параметр наименование базы в процедуру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Glory
iap
Или я туплю?

Нет. Просто ТС считает ненужным и трудоемким создание 100 процедур.
У него 100 баз с тысячами совершенно одинаковых объектов.
Ещё один объект на тысячу - никто и не заметит!
19 июн 14, 15:02    [16189788]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
На меня наверное наедут сейчас по полной

Униженные и оскробленные (с) Издание 2014,дополненое

a_voronin
но могу предложить вот что:

16188713
19 июн 14, 15:03    [16189797]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
minya13_85
Объясню для чего это. Есть основная база. Там сидят все продажи продукции, за весь период времени.
Есть 100 операторов, которые набивают изделия в документ для продажи. И вот каждый оператор набивает изделия для своих клиентов, в свою базу, там они "гоняют" цены (т.е. делают скидки, наценки, различные акции) Если всё верно, он выгружает это в основную базу. Так вот есть процедуры на всякие скидки, наценки, сезонные акции. Оператор должен вызвать эту процедуру в свою базу, чтобы прогнать цену у себя.


С похожим зоопарком я как раз имел дело между 2004 и 2008. Но мы поступали несколько по другому. Отдельные базы давали только крупным клиентам, а мелких держали в одной, пока бабла не заплатят на отдельную БД. Держали главную БД, где все поддерживалось в порядке, а им давали вторую БД, где они могли создавать таблицы (опосредованно через код). И вот там образовывалась полная помойка. Но все равно выполняли запросы в контексте первой базы, а динамически поставляли эти таблицы из второй базы.
19 июн 14, 15:18    [16189934]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
автор
Допустим пользователь comp1 вызывает эту процедуру.
Как передать в эту процедуру название базы comp1.

Вам придётся создать дубликаты процедур во всех базах и переключать текущую базу клиентским приложением по Вашей волшебной табличке соответствия клиент-база.
19 июн 14, 15:35    [16190090]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
minya13_85
Есть некая процедура. Допустим:
USE main
DECLARE @d int
UPDATE JORNAL set price=2*price FROM Jornal WHERE docID=@d


Есть 100 баз данных, они все идентичны и там везде есть таблица Jornal, только разные имена, в зависимости от имени пользователя компьютера. Эта процедура лежит в основной базе main. Допустим пользователь comp1 вызывает эту процедуру.

Как передать в эту процедуру название базы comp1.

Чтобы получилось:
USE comp1
DECLARE @d int
UPDATE JORNAL set price=2*price FROM Jornal WHERE docID=@d

Конечно можно закинуть эту процедуру в 100 баз, и потом если надо поправить, то править в 100 базах. Но это долго.
Хотелось бы чтобы процедуру вызывали с одного места, все пользователи.

а почему нельзя динамикой?
use Main
GO
create proc myDB_UPDATE @ID int, @Result int OUT, @DB_NAME nvarchar(256)=NULL as
begin 
   DECLARE @SQLString nvarchar(max)=REPLACE(N'
USE DDDDDDDD
UPDATE JORNAL set price=2*price FROM Jornal WHERE docID=@d;
SET @rc=@@ROWCOUNT;
',N'DDDDDDDD',ISNULL(@DB_NAME,QUOTENAME(DB_NAME())))
   DECLARE @ParmDefinition nvarchar(max)=N'@d int, @rc int out'
   EXEC SP_EXECUTESQL @SQLString, @ParmDefinition, @d=@ID, @rc=@Result OUT
end
GO

и в своей базе
use COMP1
GO
declare @rc int, @db varchar(256)=QUOTENAME(DB_NAME());
exec Main..myDB_UPDATE 9312, @rc OUT, @db;

select @rc rc, * from Jornal where docID=9312;
Ну, или определять внутри процедуры по HOST_NAME(), или там по SUSER_NAME()
19 июн 14, 17:32    [16191157]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Динамическими запросами устлана дорога в ад
19 июн 14, 17:37    [16191200]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Владислав Колосов
Динамическими запросами устлана дорога в ад


Значит я сам дьявол
19 июн 14, 18:06    [16191374]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
minya13_85, sp_msforeachdb.
19 июн 14, 18:38    [16191488]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Офисный Хомячок
Member

Откуда: Офис
Сообщений: 1358
minya13_85
Shakill
так базы операторов на том же инстансе находятся, что и основная база, или нет? если нет, то почему самим базам не дать одинаковые имена?
Да, на одном сервере. И что будет? 100 баз с одинаковыми именами на одном сервере?


Я не могу понят зачем создавать 100 БД одного типа с одинаковой структурой на одном инстансе.

PS Это не троллинг, а вопрос.
19 июн 14, 20:37    [16191950]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Офисный Хомячок
minya13_85
пропущено...
Да, на одном сервере. И что будет? 100 баз с одинаковыми именами на одном сервере?


Я не могу понят зачем создавать 100 БД одного типа с одинаковой структурой на одном инстансе.

PS Это не троллинг, а вопрос.


Если каждый пользователь в отдельности может создать серьезную нагрузку на БД или залить слишком много данных, то такое решение позволит наложить ограничения на ресурсы для каждого. В противно случае может быть такое, что один юзер за-DDOS-ит остальных или сожрет все ресурсы.
19 июн 14, 21:03    [16192010]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
a_voronin
Если каждый пользователь в отдельности может создать серьезную нагрузку на БД или залить слишком много данных, то такое решение позволит наложить ограничения на ресурсы для каждого. В противно случае может быть такое, что один юзер за-DDOS-ит остальных или сожрет все ресурсы.
О, Великий Увольнятель Админов, поведайте нам хотя бы один способ ограничения ресурсов на уровне БД?
20 июн 14, 00:30    [16192677]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Владислав Колосов
Динамическими запросами устлана дорога в ад
Тот у кого 100 идентичных баз и так уже в аду.
20 июн 14, 07:39    [16192945]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Mind
a_voronin
Если каждый пользователь в отдельности может создать серьезную нагрузку на БД или залить слишком много данных, то такое решение позволит наложить ограничения на ресурсы для каждого. В противно случае может быть такое, что один юзер за-DDOS-ит остальных или сожрет все ресурсы.
О, Великий Увольнятель Админов, поведайте нам хотя бы один способ ограничения ресурсов на уровне БД?


Хотя бы:
1) Для начала разнести БД на разные серваки, или сгруппировать их по интенсивности. В любом случае у вас появляется такая возможность.
2) Ограничить место для каждой БД.
Начинаю с 2008 можно и в пределах 1 БД http://technet.microsoft.com/en-us/library/bb895232(v=sql.105).aspx

Кстати историю про то, как админа уволили я так и не рассказал. Я рассказал ли о том, как он первых раз люлей получил за выключение джобы по обновлению статистик
20 июн 14, 12:32    [16194597]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
1) Для начала разнести БД на разные серваки

Вау !

a_voronin
или сгруппировать их по интенсивности

Каким образом ?

a_voronin
2) Ограничить место для каждой БД.

И как это поможет запретить пользователю "создать серьезную нагрузку на БД" ?

a_voronin
Начинаю с 2008 можно и в пределах 1 БД http://technet.microsoft.com/en-us/library/bb895232(v=sql.105).aspx

А вы дальше Introducing Resource Governor читали ?
Как вы предлагаете распределить ресурсы между базами то ?
20 июн 14, 12:39    [16194653]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
a_voronin
или сгруппировать их по интенсивности

Каким образом ?

Запускаем Profiler -- да Profiler на высоконагруженной боевой базе в момент пиковой нагрузки. Снимаем трассу. Когда пиковая нагрузка спадет аккуратненько перегоняем трассу в виде файла на другой сервер. Сохраняем в БД. Делает GROUP BY -- и узнаем, кто сколько жрёт ресурсов. Это ещё 2000 году можно было делать. Сейчас можно наверное покруче извернуться.
20 июн 14, 12:43    [16194694]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
a_voronin
или сгруппировать их по интенсивности

Каким образом ?

Запускаем Profiler -- да Profiler на высоконагруженной боевой базе в момент пиковой нагрузки. Снимаем трассу. Когда пиковая нагрузка спадет аккуратненько перегоняем трассу в виде файла на другой сервер. Сохраняем в БД. Делает GROUP BY -- и узнаем, кто сколько жрёт ресурсов. Это ещё 2000 году можно было делать. Сейчас можно наверное покруче извернуться.

И как это поможет распределить ресурсы то ? Да еще по базам ?
20 июн 14, 12:45    [16194719]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
a_voronin
2) Ограничить место для каждой БД.

И как это поможет запретить пользователю "создать серьезную нагрузку на БД" ?

Поможет не занять всё место.


Кстати я не сторонник создания отдельной БД для каждого пользователя. Я сторонник компромисного варианта, вынесение лишь крупных пользователей или групп пользователей в отдельные БД. У нас под пользователем понималась целая компания.
20 июн 14, 12:45    [16194721]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
И как это поможет запретить пользователю "создать серьезную нагрузку на БД" ?

Поможет не занять всё место.

Извините, но вы мудозвон.
20 июн 14, 12:47    [16194734]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
И как это поможет запретить пользователю "создать серьезную нагрузку на БД" ?

Поможет не занять всё место.

Извините, но вы мудозвон.


Glory, будьте так любезны заблокируйте себя сами на основании следующего правила

Запрещается:
публикация грубых, оскорбляющих и унижающих сообщений. Ненормативная лексика разрешена только в исключительных случаях, когда изъятие нецензурных слов из предложения полностью изменяет смысл сообщения. В случае употребления нецензурных слов, бОльшая часть слова должна быть замаскирована спецсимволами;
20 июн 14, 12:51    [16194768]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Запрещается:
публикация грубых, оскорбляющих и унижающих сообщений.

Это не оскробление. Это оценка качества ваших советов.
Впредь все подобные ваши "профессиональные" советы будут удаляться.
20 июн 14, 12:54    [16194791]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Запрещается:
публикация грубых, оскорбляющих и унижающих сообщений.

Это не оскробление. Это оценка качества ваших советов.
Впредь все подобные ваши "профессиональные" советы будут удаляться.


А вы поясните, что тут непрофессионального. Вы боевой админ боитесь запустить профайлер на боевой базе? Не знаете как это сделать, чтобы не положить сервер? Или перенос баз с одного сервера на другой, чтобы он не мешали друг другу это не работает. Сейчас конечно виртуализация пошла и т.п.
20 июн 14, 13:00    [16194828]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
А вы поясните, что тут непрофессионального. Вы боевой админ боитесь запустить профайлер на боевой базе? Не знаете как это сделать, чтобы не положить сервер? Или перенос баз с одного сервера на другой, чтобы он не мешали друг другу это не работает. Сейчас конечно виртуализация пошла и т.п.

Непрофессионализм в
- подаче неправильных советов
- подаче советов не относящихся к теме
Короче, идите занимайтесь тем, что вы умеете. А не тем, что вам кажется, что вы умеете.
20 июн 14, 13:03    [16194855]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
А вы поясните, что тут непрофессионального. Вы боевой админ боитесь запустить профайлер на боевой базе? Не знаете как это сделать, чтобы не положить сервер? Или перенос баз с одного сервера на другой, чтобы он не мешали друг другу это не работает. Сейчас конечно виртуализация пошла и т.п.

Непрофессионализм в
- подаче неправильных советов
- подаче советов не относящихся к теме
Короче, идите занимайтесь тем, что вы умеете. А не тем, что вам кажется, что вы умеете.


Я ответил на ваши вопросы. Которые вы задали в этой теме. Которые вы отнесли к данной теме.

Вы же пустились в откровенные оскорбления.

Вопрос был в том, стоит ли делит пользователей на отдельные базы. Моё мнение, что это зависит от ситуации и однозначного ответа нет нельзя, тут нет.
20 июн 14, 13:06    [16194880]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Вопрос был в том, стоит ли делит пользователей на отдельные базы.

тогда еще о непрофессионализме
- придумывание вопросов, не относящихся к теме
- увиливание от прямых ответов на заданые вопросы

a_voronin
Я ответил на ваши вопросы.

Написал что-то в ответ не означает ответил.
20 июн 14, 13:08    [16194903]     Ответить | Цитировать Сообщить модератору
 Re: Передать параметр наименование базы в процедуру  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Glory
a_voronin
И как это поможет запретить пользователю "создать серьезную нагрузку на БД" ?

Поможет не занять всё место.

Извините, но вы мудозвон.
Переведу на русский литературный.
Ваше самомнение о себе и о ваших знаниях в предметной области просто зашкаливает, при этом в реальности вы даете неправильные и/или вредные советы и налицо явные пробелы в знаниях. На попытки задать "наводящие" вопросы, вы отвечаете либо полную чушь, либо уходите от ответа. Я лично не увидел еще ни одного ответа/совета достойного профессионала, на звание которого вы так претендуете. Такое поведение порождает естественную неприязнь и неуважение у завсегдатаев данного форума.
На професcиональном англоязычном форуме конечно такого негатива бы не было, там все целуют друг-друга в попу и говорят в стиле: "коллега, я не сомневаюсь в ваших профессиональных способностях, но мне кажется что вы ошибаетесь в данном вопросе". У русских же все намного жестче, что люди думают то и говорят
Так что если выпендриваться, то идите на какой нить sqlservercentral, а здесь таких не любят.
20 июн 14, 21:57    [16197989]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить