|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Возможен ли перехват всех запросов посылаемых на Sybase 12.5? И если да, то как? Аудит и интим не предлагать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 10:07 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Imperous, The Ribo utility captures, translates, and displays the Tabular Data Stream™ (TDS) protocol flowing between a TDS client and TDS server Sybase\jutils-3_0\ribo\doc ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 10:54 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
SAV4SAVImperous, The Ribo utility captures, translates, and displays the Tabular Data Stream™ (TDS) protocol flowing between a TDS client and TDS server Sybase\jutils-3_0\ribo\doc Извиняюсь, в 12.5 клиенте будет в составе jutils-2_0 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 10:55 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Embarcadero DSAuditor ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 11:15 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
пасиб, смотрю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 11:21 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
ribo не подходит Embarcadero DSAuditor наверное тоже интересовал больше вопрос по части сделать это силами самого ASE. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 11:36 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
then: 1.logon triggers with custom audit - heavy option 2.mda tables might be used but would be tricky in configuration and can utilize up to 25% of existing resources. Anyway there is no solution to be used constantly. These two and ribo can be used to solve some existing issues only. DSAuditor may be better option but its price makes things worse. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 11:59 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Вообще нужно сделать что-то типа transaction log самодельного. Желательно, чтоб была возможность подключения/отключения этого лога на таблички по выбору. Допустим, мне нужно неделю отслеживать, кто, что, когда добавил, удалил, изменил в одной табличке. Т.е. не хотелось бы для этого включать разные мониторы, которые тупо завалят производительность всего сервера. А вот на триггер повесить процедурку какбы хотелось, но не получается тогда узнать что именно было в записи ДО выполнения действия. Т.е. нет before. Adaptive Server Enterprise/12.5.4/EBF 16831 ESD#9.1/P/x86_64/Enterprise Linux/ase1254/2146/64-bit/OPT/Wed Apr 15 03:57:32 2009 Может можно как-то расколупать его собственный транзакционный файл? Или это не реально? Мож у кого есть какие идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 13:47 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
jab А вот на триггер повесить процедурку какбы хотелось, но не получается тогда узнать что именно было в записи ДО выполнения действия. Т.е. нет before. снять копию таблицы, накатить триггеры и получить следующее: 1) что было ДО (копия таблицы) 2) что было удалено 3) что было добавлено 4) что было изменено ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 13:52 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Всем доброго дня, В принципе такое возможно и мы нечто подобное уже не раз делали, единственная проблема в хранении полей типа image, text короче всего того что не влазит в varchar 1.создаем 3 таблицы create table LO ( LO_ID numeric(6,0) not null , LO_RFN varchar(50) null , LO_ISN varchar(30) null , LO_TYPE char(1) null ) create table LL ( LL_ID numeric(16,0) not null , LL_DATE datetime not null , LO_ID numeric(6,0) null , LL_OPER char(1) null , LL_COND varchar(256) null , COMM varchar(256) null , USER_ID numeric(6,0) null , hostname char(10) null , ipaddr char(15) null , program_name varchar(30) null ) create table LD ( LL_ID numeric(16,0) not null , LO_ID numeric(6,0) not null , COL_NAME varchar(30) not null , COL_VAL varchar(256) null ) 2.Создаем процедуру /* примечание: у нас есть такая таблица CA_SYS в которой есть поле NO_LOG и всего ОДНА зарпись NO_LOG = 1 - не журанлировать ничего, но в принципе можно в таблице LO сделать флаги по отключению журнала индивидуально */ CREATE PROCEDURE dbo.sp_ll /* Запись в системный журнал */ @ll_id numeric(16,0) output /* Id записи журнала (если not null то к старой записи добавляет детализацию по колонкам ) */ , @lo_id numeric(6,0) output /* Id объекта (для детализации) */ , @LO_RFN varchar(50) , /* Полное наименование объекта (надо для авт. вставки) */ @LO_ISN varchar(30) , /* Краткое наименование объекта (надо для авт. вставки) */ @LO_TYPE char(1) , /* Тип обьекта P,T (надо для авт. вставки) */ @ll_OPER char(1) , /* Тип операции A,U,D,E*/ @LL_COND varchar(256), /* Условие поиска записи */ @COMM varchar(256), /* Комментарий */ @COL_NAME varchar(30) , /* Имя колонки */ @COL_VAL varchar(256) /* Новое значение */ AS BEGIN if @ll_id is null /* если записи в журнале еще нет - вставить, если есть то добавить детальную информацию (например изменение по списку колонок) */ begin /* определение пользователя если нет - то не журналировать*/ declare @user_id numeric(6,0), @program_name varchar(30) if isnull( (select no_log from ca_sys),1) = 1 return /* отключение */ select @user_id = null select @user_id = user_id, @program_name = program_name from usersession where spid = @@spid and isnull(no_log, 0) = 0 if @USER_ID is null select @USER_ID = 1 if @USER_ID = 1 return if @USER_ID is not null or @LL_OPER='E' /* запись не выполняется если нет @user_id или он отключен(no_log<>0) кроме типа 'E'*/ begin /* определение id объекта - таблицы */ if @lo_id is null begin select @LO_ID = null select @LO_ID = LO_ID from LO where LO_ISN = @LO_ISN and LO_TYPE = @LO_TYPE end if @LO_ID is null /* если записи нет в таблице объектов - вставить */ begin exec sp_next_key 'LO', @LO_ID output insert into LO (LO_ID, LO_RFN, LO_ISN, LO_TYPE) values (@LO_ID, @LO_RFN, @LO_ISN, @LO_TYPE) end exec sp_next_key 'LL', @LL_ID output insert into LL (LL_ID, LL_DATE, LO_ID, LL_OPER, LL_COND, COMM, USER_ID, hostname, ipaddr, program_name ) select @LL_ID, getdate(), @LO_ID, @LL_OPER, @LL_COND, @COMM, @USER_ID, hostname, ipaddr, @program_name from master..sysprocesses where spid = @@spid end end if @LO_ID is not null and @LL_ID is not null and @COL_NAME is not null begin /* вставка в LOC имени поля если такого там нет */ if not exists (select COL_NAME from LOC where LO_ID=@LO_ID and COL_NAME=@COL_NAME) insert into LOC(DW, DW_COL, LO_ID, COL_NAME) values ('default', @COL_NAME, @LO_ID, @COL_NAME) /* значения полей */ insert into LD(LL_ID, LO_ID, COL_NAME, COL_VAL) values (@LL_ID,@LO_ID, @COL_NAME,@COL_VAL) end return end 3. В триггерах на таблицы пишем create trigger ti_sg_drugs on SG_DRUGS for insert as begin .... -- в этой таблице два поля SG_ID, DRUG_ID if isnull( (select no_log from ca_sys),1)=1 return declare @ll_id numeric(16,0), @lo_id numeric(6,0), @col_val varchar(255), @ll_cond varchar(255), @SG_IDs varchar(255), @DRUG_IDs varchar(255) declare cColCur cursor for select rtrim(convert(varchar(255),SG_ID)), rtrim(convert(varchar(255),DRUG_ID)) from inserted open cColCur fetch cColCur into @SG_IDs, @DRUG_IDs while (@@sqlstatus = 0) begin select @LL_COND='SG_ID='+@SG_IDs+' AND DRUG_ID='+@DRUG_IDs exec sp_ll @ll_id output, @lo_id output, 'SANET', 'SG_DRUGS' ,'T','A',@LL_COND, null,'SG_ID',@SG_IDs exec sp_ll @ll_id output, @lo_id output, 'SANET', 'SG_DRUGS' ,'T','A',@LL_COND, null,'DRUG_ID',@DRUG_IDs select @ll_id = null fetch cColCur into @SG_IDs, @DRUG_IDs end .... Вот как то так ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 14:08 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
В дополнение к предыдущему посту 1.таблица usersession заполняется нашей прогой в момент коннекта 2.процедура нужна потому что в таблице LD, LL нельзя делать identity create procedure sp_next_key @table_name varchar(128), @max_id numeric(16) out AS begin declare @table_id int select @max_id = null select @table_id = table_id from table_key where upper(table_name) = upper(rtrim(@table_name)) if @table_id is null return begin tran update table_key set max_id = max_id + 1 where table_id = @table_id select @max_id = max_id from table_key where table_id = @table_id commit tran return 0 end 3.Таблица TABLE_KEY create table TABLE_KEY ( TABLE_ID int not null , TABLE_NAME varchar(128) not null , MAX_ID numeric(16,0) not null , CHANGE_DATE timestamp null ) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 14:14 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
On 03.02.2011 11:36, Imperous wrote: > интересовал больше вопрос по части сделать это силами самого ASE. ribo -- это ASE-шная утилита. А так есть ещё аудит. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 14:32 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
_Drive_ , получается в лог сбрасывается столько записей, сколько полей было в таблице? Просто вот в FoxPro делалось так: for countField=1 to nField cField=arrField(countField,1) arrChange(countField,1)=cField arrChange(countField,2)=oldval(cField) arrChange(countField,3)=&cField if !lIsChange and cRecOper="U" lIsChange=oldval(cField)#&cField else lIsChange=.T. endif next select &cAlias if lIsChange insert into &cAlias (dat_tran,nam_user,nam_tabl,nam_prog,oper); values(datetime(),sys(0),cTable,Program(0),cRecOper) SAVE TO MEMO What_do ALL LIKE arrChange endif Сбрасывалось в таблицу лога 1 запись, но в мемо поле загонялся массив из значений до изменения и значений после. Тут както можно узнать значение до? типа oldval(cField) В общем всеравно спасибо. Надо в этом посидеть разобраться ещё... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 14:37 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
jab, конечно можно в триггерах для ASE можно обращаться к "виртуальным" таблицам inserted (это новые значения) и deleted (это старые значения) ... например create trigger tu_ret on RET for update as begin declare @ll_id numeric(16,0), @lo_id numeric(6,0), @col_val varchar(255), @ll_cond varchar(255) declare @RET_ID varchar(10), @NEW_ORGFNAME varchar(255), @OLD_ORGFNAME varchar(255) declare cColCur cursor for select rtrim(convert(varchar(10),N.RET_ID)), rtrim(convert(varchar(255),N.ORGFNAME)), rtrim(convert(varchar(255),O.ORGFNAME)), from inserted N, deleted O where N.RET_ID = O.RET_ID open cColCur fetch cColCur into @RET_ID, @NEW_ORGFNAME, @OLD_ORGFNAME, while (@@sqlstatus = 0) begin select @ll_cond = 'RET_ID='+@RET_ID select @where = ' WHERE RET_ID='+@RET_ID -- в @NEW_ORGFNAME - новое значение -- в @OLD_ORGFNAME - старое значение end в триггере на insert есть только INSERTED в триггере на update есть INSERTED и DELETED в триггере на delete есть только DELETED ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 14:54 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
_Drive_в триггере на update есть INSERTED и DELETED Ух тыш блин.. Это как в MSSQL получается.. я чот не подумал.. даа... эт получается он типа на апдейте делает по сути 2 операции с таблицей... чот на курсах както давно рассказывали проэто и уже забыл благополучно. :) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 17:28 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
On 03.02.2011 13:47, jab wrote: > Вообще нужно сделать что-то типа transaction log самодельного. Желательно, чтоб > была возможность подключения/отключения этого лога на таблички по выбору. Объясни пож. какое отношение ты имеешь к топикстартеру. А то непонятно как-то. > процедурку какбы хотелось, но не получается тогда узнать что именно было в > записи ДО выполнения действия. Т.е. нет before. Есть INSERTED, там как раз записи ДО изменения. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 09:16 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
On 03.02.2011 17:28, jab wrote: > Ух тыш блин.. Это как в MSSQL получается.. Это у MSSQL получается "как в ASE". Если ты не в курсе, MSSQLServer -- это переделанный одноплатформенный старый Sybase ASE. (10-ка почти). Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 09:18 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
MasterZiv , я в курсе, что мелкомягкие перекупили у сайба версию. Просто так вот словосочетание получилось. Не в этом суть. Просто забывается, когда редко пользуешся. В основном пользовательским интерфейсом приходится заниматься и отчетами. А к топикстартеру имею отношение по работе. Работаем на одно предприятие. Но это тоже особо не имеет отношения к вопросу. Просто я попробовал переформулировать его вопрос, чтоб было более понятно, что нам нужно в конечном итоге. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2011, 21:55 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
все, задолбался я основательно, соорудил один вариант - работает, но мне не очень нравится, а вот второй сооруженный вариант нравится больше, но не работает... подскажите что там не так. во вложениях - ddl-ки всех объектов, их нужно только запустить на выполнение чтоб создались таблицы и процедуры, а затем выполнить инсерт заранее пасиба ps не выполняется exec() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2011, 23:59 |
|
Возможен ли перехват всех запросов посылаемых на Sybase 12.5?
|
|||
---|---|---|---|
#18+
Imperousribo не подходит Embarcadero DSAuditor наверное тоже Подскажите пожалуйста почему для капчи ТДС не подходит РИБа и ВСАудитор !? Собственно хотел задать тоже вопрос уважаемым форумчанам по теме - Capture TDS Имеем - Sybase Adaptive Server Enterprise/12.5.4/EBF 16800 ESD#10/P/x86_64/Enterprise Linux/ase1254/2159/64-bit/ Для тестирования и прогнозирования нагрузки при миграции между серверами, расчета запаса производительности озадачился вопросом съема потока данных о приложения к СУБД. Вопрос собственно поставлен - как получить TDS ? Для начала остановился на Quest SQL Optimizer for Sybase / подменю Sybase Monitoring Tables/QP Metrics. Он позволяет снять запросы из монтаблиц. Решение замечательно снимает огромное кол-во запросов которые без проблем импортируются в Quest Benchmark Factory и оттуда уже в заданном количестве потоков «отыгрывается» на тестовой БД. Но при этом при съеме в итоговую выборку не попадают все запросы и очень интенсивно забивается БД mon_db (sp_mda_collect – thank you Rob V. ). Проблемы: 1. В итоговой выборке довольно часто вываливается «SQL text unavailable». 2. В режиме SQL inspector при уменьшении интервала съема даже до 1 милисекунды все равно не попадают все запросы, к тому же в лог СУБД падает ошибка: kernel Internal error, FDP API, fdp_get_memory(): Failed to allocate 101727 bytes. kernel Allocating a shared memory segment of size 576702464 bytes. Изучив предварительно оф.доку, форумы остались вопросы собственно по SQL Optimizer: 1) каким образом оптимизер снимает данные и какие условия работы его пула к СУБД при которых происходит неудачное распределение памяти. 2) можно ли анализиром снять весь распознанный поток из монтаблиц. Может я что-то упустил в настройках !? И самый главный вопрос какие еще можно использовать инструменты для съема TDS !? Предварительно смотрю на Ribo. Заранее благодарен за подсказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2011, 16:46 |
|
|
start [/forum/topic.php?fid=55&msg=37095449&tid=2010407]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 153ms |
0 / 0 |