Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Доброе время суток!

Столкнулся с проблемой.
При запуске прога (c#) коннектится к 2м базам на одном сервере.
Запускаю второй экземпляр этой проги @@SPID к одной из баз меняется а к другой остается прежним. Походу что то с пулом соединений идёт не так как я себе это представлял. Думал новый экземпляр проги новый @@SPID, а получается пул сидит над прогой где то выше. Идея при запуске в запросе заставить сервер перегенерировать @@SPID для каждой из баз. Есть ли у MSSQL 2008 есть ли у MSSQL подобная процедура? Возможно этот момент можно проконтроллировать средствами c#, продублирую вопрос и там. Если будет 2 разных решения выберу то что удобнее.

Спасибо
9 июл 13, 15:36    [14541937]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Mikhail Tchervonenko
Доброе время суток!

Столкнулся с проблемой.
При запуске прога (c#) коннектится к 2м базам на одном сервере.
Запускаю второй экземпляр этой проги @@SPID к одной из баз меняется а к другой остается прежним. Походу что то с пулом соединений идёт не так как я себе это представлял. Думал новый экземпляр проги новый @@SPID, а получается пул сидит над прогой где то выше. Идея при запуске в запросе заставить сервер перегенерировать @@SPID для каждой из баз. Есть ли у MSSQL 2008 есть ли у MSSQL подобная процедура? Возможно этот момент можно проконтроллировать средствами c#, продублирую вопрос и там. Если будет 2 разных решения выберу то что удобнее.

Спасибо


SPID это сеанс подключения к серверу. Что значит к одной из баз меняется, а к другой остаётся прежним???? Каким методом вы это смотрите?
9 июл 13, 15:39    [14541953]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
[quot BOL]@@SPID Возвращает идентификатор сеанса для текущего пользовательского процесса.[/qout]
9 июл 13, 15:40    [14541960]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
BOL
@@SPID Возвращает идентификатор сеанса для текущего пользовательского процесса.
9 июл 13, 15:41    [14541967]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Сергей Викт.
SPID это сеанс подключения к серверу. Что значит к одной из баз меняется, а к другой остаётся прежним???? Каким методом вы это смотрите?

Просто создаю 2 коннекта а потом SELECT @@SPID к каждому
9 июл 13, 15:43    [14541988]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Crimean
Member

Откуда:
Сообщений: 13147
спид может (1) не перевыдаваться и (2) перевыдаваться, но с уже выдававшимися значениями
если у вас пул, то запросто (1). если никакая активность то запросто (2)
в любом случае профайлер с логон аудитом покажет что именно происходит
спиды должны быть уникальны "каждый момент времени", но не "исторически"
9 июл 13, 15:48    [14542017]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Mikhail Tchervonenko,

подразумевается по 1му коннекту к каждой базе (они всегда получаются разные между собой но к одной из баз цифра не меняется при запуске из разных экземпляров проги.
9 июл 13, 15:49    [14542019]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mikhail Tchervonenko,

Расскажите лучше про первоначальную задачу, а не про выбранный вами способ решения. С какой целью вы проверяете @@spid процессов?
9 июл 13, 16:08    [14542212]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Crimean,

Проблема в том, что в триггерах к таблицам обеих баз мне нужно вытаскивать информацию специфичную для данного сеанса программы c#. Думал решить эту проблему создав в одной их баз табличку с полями SPID_DB1,SPID_DB2, VARNAME, VARVALUE.
При старте проги заносить в неё эти значения а в триггере по SPID_DB1 или SPID_DB2 () (для какой базы узнавать из db_name()) вытягивать их. Но получается в рамках одного экземпляра программы @@SPID не подходит для этой цели т.к. он может со временем или измениться (после Connection.Close() Connection.Open()) или остаться старым от другого экземпляра программы.
Вопрос, есть что то в MSSQL2008 что может однозначно идентифицировать текущего клиента/экземпляр программы c# на протяжении всего времени его жизни и в то же время быть доступно из триггера инициированного этим же клиентом дабы использовать это в качестве ID в таблице переменных?
Иначе не представляю себе как можно передать в триггер информацию из клиента.
9 июл 13, 16:20    [14542324]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Mikhail Tchervonenko,

автор
Проблема в том, что в триггерах к таблицам обеих баз мне нужно вытаскивать информацию специфичную для данного сеанса программы c#. Думал решить эту проблему создав в одной их баз табличку с полями SPID_DB1,SPID_DB2, VARNAME, VARVALUE.


Что это за информация такая?
9 июл 13, 16:24    [14542361]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
pkarklin
Что это за информация такая?

К примеру, при изменении таблицы в триггере мне нужно выполнить определённые действия, которые зависят от определённых параметров текущего сеанса программы с#. Например если человек вошел в программу как бугалтер то одни действия а если как секретарь то другие. При этом имя пользователя не меняется, а кто он выясняется при входе через доп. параметры.
9 июл 13, 16:34    [14542461]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Mikhail Tchervonenko
pkarklin
Что это за информация такая?

К примеру, при изменении таблицы в триггере мне нужно выполнить определённые действия, которые зависят от определённых параметров текущего сеанса программы с#. Например если человек вошел в программу как бугалтер то одни действия а если как секретарь то другие. При этом имя пользователя не меняется, а кто он выясняется при входе через доп. параметры.

А что за доп. параметры?
9 июл 13, 16:37    [14542493]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Сергей Викт.
А что за доп. параметры?

По сути не важно какие параметры, у меня это ID Клиента (int) (у разных клиентов логика может несколько отличаться).
Есть одна база с общей структурой и универсальным триггером на какой то из таблиц. И логика этого триггера зависит от того какой клиент вошел в базу.
9 июл 13, 16:43    [14542529]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Mikhail Tchervonenko
Сергей Викт.
А что за доп. параметры?

По сути не важно какие параметры, у меня это ID Клиента (int) (у разных клиентов логика может несколько отличаться).
Есть одна база с общей структурой и универсальным триггером на какой то из таблиц. И логика этого триггера зависит от того какой клиент вошел в базу.

т.е. у вас любой пользователь подключается к базе под одним логином с одними и теми же правами к БД, а права разраются приложением, так получается?
9 июл 13, 16:47    [14542557]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mikhail Tchervonenko,

До конца не осилил, но SET CONTEXT_INFO, возможно, поможет.
9 июл 13, 16:49    [14542573]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Сергей Викт.
Mikhail Tchervonenko
пропущено...

По сути не важно какие параметры, у меня это ID Клиента (int) (у разных клиентов логика может несколько отличаться).
Есть одна база с общей структурой и универсальным триггером на какой то из таблиц. И логика этого триггера зависит от того какой клиент вошел в базу.

т.е. у вас любой пользователь подключается к базе под одним логином с одними и теми же правами к БД, а права разраются приложением, так получается?


именно так. В противном случае куча накладных расходов на создание и удаление пользователей к базе. А так список стандартных пользователей со стандартными правами.
9 июл 13, 16:51    [14542586]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Mikhail Tchervonenko
Сергей Викт.
пропущено...

т.е. у вас любой пользователь подключается к базе под одним логином с одними и теми же правами к БД, а права разраются приложением, так получается?


именно так. В противном случае куча накладных расходов на создание и удаление пользователей к базе. А так список стандартных пользователей со стандартными правами.

Так всё же список стандартных пользователей или один пользователь?:) На сервере БД у вас всего один пользователь, например, user_vasja или несколько?
9 июл 13, 16:53    [14542596]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Гость333
Mikhail Tchervonenko,

До конца не осилил, но SET CONTEXT_INFO, возможно, поможет.


Огромное спасибо! именно то что нужно.
9 июл 13, 16:53    [14542602]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Сергей Викт.
Mikhail Tchervonenko
пропущено...


именно так. В противном случае куча накладных расходов на создание и удаление пользователей к базе. А так список стандартных пользователей со стандартными правами.

Так всё же список стандартных пользователей или один пользователь?:) На сервере БД у вас всего один пользователь, например, user_vasja или несколько?


их несколько, но у всех клиентов они одинаковые.
тут предложили SET CONTEXT_INFO
у меня возникли сомнения, будет ли CONTEXT_INFO() в рамках жизни экземпляра приложения всегда одинаков (даже если меняются @@SPID) или нет.
9 июл 13, 17:01    [14542645]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
baclanov
Member

Откуда:
Сообщений: 82
Mikhail Tchervonenko
Сергей Викт.
А что за доп. параметры?

По сути не важно какие параметры, у меня это ID Клиента (int) (у разных клиентов логика может несколько отличаться).
Есть одна база с общей структурой и универсальным триггером на какой то из таблиц. И логика этого триггера зависит от того какой клиент вошел в базу.


Может быть вместо триггера с табличкой использовать хранимку с параметрами?
9 июл 13, 17:08    [14542676]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
baclanov
Mikhail Tchervonenko
пропущено...

По сути не важно какие параметры, у меня это ID Клиента (int) (у разных клиентов логика может несколько отличаться).
Есть одна база с общей структурой и универсальным триггером на какой то из таблиц. И логика этого триггера зависит от того какой клиент вошел в базу.


Может быть вместо триггера с табличкой использовать хранимку с параметрами?

я собственно к этому и пытаюсь подвести)
9 июл 13, 17:12    [14542689]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Mikhail Tchervonenko
В противном случае куча накладных расходов на создание и удаление пользователей к базе. А так список стандартных пользователей со стандартными правами.


Чтобы не заниматься геморроем на уровне пользователей бд доступ (и права) предоставляют на уровне доменных групп.

Сообщение было отредактировано: 9 июл 13, 17:13
9 июл 13, 17:13    [14542695]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Сергей Викт.
baclanov
пропущено...


Может быть вместо триггера с табличкой использовать хранимку с параметрами?

я собственно к этому и пытаюсь подвести)


да, но стартовать то он должен если изменения в табличку вносятся
9 июл 13, 17:13    [14542700]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mikhail Tchervonenko
у меня возникли сомнения, будет ли CONTEXT_INFO() в рамках жизни экземпляра приложения всегда одинаков (даже если меняются @@SPID) или нет.

CONTEXT_INFO устанавливается для соединения (spid), а не для экземпляра приложения.
При инициализации нового соединения будет пустой контекст.
9 июл 13, 17:15    [14542714]     Ответить | Цитировать Сообщить модератору
 Re: Запрос генерирующий новый @@SPID. MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Гость333,

Походу решение только одно получается, при старте открывать соединение и держать его открытым. В сочетании с пулом должно работать. Единственное, при длительном простое прийдётся таймер запускать дабы сервер сам не прибил соединение.
9 июл 13, 17:18    [14542744]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить