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

Откуда: Moscow
Сообщений: 28168
ldfanate
А если в бизнес-логику вынести на клиент, то можно двухфазно комитить - сначала сам документ (критичные данные), потом неспеша историю (менее критичные). Сохраняться будет дольше, но зато общая нагрузка на систему будет равномернее, и СУБД не так будет нагружаться.
Идея хорошая, но это более сложно, значит, более багоёмко, кроме того, нарушается принцип атомарности - после некоторых видов сбоев или восстановлений, данные могут остаться без истории - тут уж надо смотркеть, допустимо это, или нет.
10 апр 19, 15:04    [21858398]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Спасибо что многие отозвались.

Хотел бы повторить суть проблемы и подвести итог так сказать.

по сути было два вопроса 1) какой метод использовать для хранения истории (также с этим связана авторизация чтоб получить имя пользователя)
2) проблема с spid


по первому вопросу решил для себя следующее: в идеале использовать свою систему авторизации (свои таблицы с пользователями, группами, правами пользователей...) и в месте с этим использовать историю в виде доп. таблицы (где кроме записи есть поля кто,когда и что делал)

для того чтоб использовать триггеры (получить пользователя) нам необходимо использовать "маппинг" для таблицы и по
@sspid, дата, пользователь( учетка под которой зашли ) определять своего пользователя

пример :

create table dbo.SessionToUserMapping
(
session_id int constraint PK_SessionToUserMapping primary key,
login_name sysname,
login_time datetime,
custom_user_id int
);

--регистрация пользователя
merge into dbo.SessionToUserMapping t
using (
select
session_id, login_name, login_time, @custom_user_id as custom_user_id
from
sys.dm_exec_session
where
session_id = @@SPID
) s on t.session_id = s.session_id
when not matched then
insert
(session_id, login_name, login_time, custom_user_id)
values
(s.session_id, s.login_name, s.login_time, s.custom_user_id)
when matched then
update
set
login_name = s.login_name,
login_time = s.login_time,
custom_user_id = s.custom_user_id;

--получение пользователя
select
m.custom_user_id
from
dbo.SessionToUserMapping m join
sys.dm_exec_sessions s on s.session_id = m.session_id and s.login_name = m.login_name and s.login_time = m.login_time;


от сюда появляется проблема так как подключение держать на всем времени работы программы не правильно то login_time будет всегда разное из-за секунд ( если брать только дату то возможны путаницы с пользователем)

как можно исправить этот момент ?????
-регистрировать пользователя при запуске программы
- тащить пользователя при каждом обращении к бд
-или использовать еще какието параметры кроме login_time ,login_name ,session_id
10 апр 19, 15:24    [21858428]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
пример подключения к бд

SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["BD"].ConnectionString;
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "PROCEDURE";
cmd.Parameters.AddWithValue("PaRAM", PaRAM);
cmd.Parameters.Add("Result", System.Data.SqlDbType.Int);
cmd.Parameters["Result"].Direction = System.Data.ParameterDirection.Output;
bool res = false;

try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
id = Convert.ToInt32(cmd.Parameters["Result"].Value);

if (id > 0) res = true; ;
}
catch (Exception ex)
{

if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();

}
10 апр 19, 15:26    [21858430]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
вам уже намекали на использование USING, почитайте , поищите примеры
10 апр 19, 15:30    [21858435]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
вы имеете в виду намек это

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


согласен именно это и нужно пример подобной реализации в гугле подобного, корректного примера я не нашел в связи с чем и прошу помощи

(пример подобного я привел выше )
10 апр 19, 15:34    [21858442]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
или как правильно назвать такой подход " линк таблицу куда писать соответствие Spid и пользователя"
10 апр 19, 15:36    [21858445]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
если у вас 1С , то вам ничего не поможет

почитайте для начала про CDC из коробки:
https://www.red-gate.com/simple-talk/sql/learn-sql-server/introduction-to-change-data-capture-cdc-in-sql-server-2008/
10 апр 19, 15:41    [21858456]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

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

нет 1С не используется


используется c# и MSSQL
10 апр 19, 15:43    [21858461]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

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

"почитайте для начала про CDC из коробки: " интересная статья но не понял как определяется пользователь который сделал изменение как то об этом не рассказывают
10 апр 19, 15:45    [21858469]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
тогда тем более не понятно, что вы выбираете. вы пишите сейчас систему с нуля? выбираете методы авторизации на уровне сервера базы данных? сейчас современные приложения работают с пулами соединений и как правило в рамках своей роли, контекст безопасности определяется не на уровене базы данных
10 апр 19, 15:45    [21858470]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
вы такими вопросами уводите в сторону

система с нуля,
авторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...)
причем тут пул соединений ?-- на сколько помню он по умолчанию включен и используется "для скорости подключения к бд" -так очень кратко ( как писал раньше login_time будет всегда разным)
я ж это все описал раньше
10 апр 19, 15:52    [21858479]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36096
Kyvaldenius
авторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...)
Ну вот и задайте вопрос тому, кто принял это решение, как теперь на стороне сервера определять конечного пользоваткля.
10 апр 19, 15:53    [21858483]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )
10 апр 19, 15:54    [21858484]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3878
Kyvaldenius,

Не изобретайте велосипед. Изучите данную тему:

https://en.wikipedia.org/wiki/Slowly_changing_dimension
10 апр 19, 15:55    [21858487]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Гавриленко Сергей Алексеевич,

хах)))
просто лучший ответ

тут выше примеры, и описания подходов что говорит о том что это в полне реализуемый подход и в реализации этого подхода столкнулся с проблемой о которой и спрашиваю совета

а что посоветуете использовать для авторизации?
10 апр 19, 15:56    [21858488]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
попахивает нетленкой

автор
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )

какэта?
10 апр 19, 15:57    [21858490]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

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

вы серьезно??

используется "Тип 4: добавить таблицу истории " ( писал об этом 8 сообщений выше)
10 апр 19, 15:58    [21858491]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
TaPaK
попахивает нетленкой

автор
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )

какэта?


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят
10 апр 19, 15:58    [21858492]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
Konst_One
TaPaK
попахивает нетленкой

пропущено...

какэта?


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят

и по этому будет один spid?
10 апр 19, 15:59    [21858495]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
TaPaK
Konst_One
пропущено...


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят

и по этому будет один spid?


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно
10 апр 19, 16:02    [21858500]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
как вы так определили ??

@sspid будет выглядеть так

54
55
56
.
.
.
но так как мы подключились выполнили действие и отключились то sspid не будет висеть постоянно а будет заполнять ся другим подключением
получится ситуация

подключился пользователь "USER" присвоен 54 user сделал дело и отключился номер 54 освободился и присвоен другому
10 апр 19, 16:02    [21858502]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
Konst_One
TaPaK
пропущено...

и по этому будет один spid?


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно

а зачем вообще использовать spid для логирования, если пользователь уже определён
10 апр 19, 16:03    [21858504]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
изобретайте дальше свой велосипед, удачи
10 апр 19, 16:04    [21858506]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

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

"поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно" по этому используется
@sspid, login, time (выше описано)
10 апр 19, 16:04    [21858507]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11155
TaPaK
Konst_One
пропущено...


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно

а зачем вообще использовать spid для логирования, если пользователь уже определён


это к ТС вопрос, я тут не при делах.
10 апр 19, 16:04    [21858508]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить