За последние 24 часа нас посетили 21863 программиста и 1390 роботов. Сейчас ищут 683 программиста ...

при сбросе подключения пропадают записи

Тема в разделе "MSSQL", создана пользователем dima_si, 22 июн 2013.

  1. dima_si

    dima_si Активный пользователь

    С нами с:
    28 мар 2013
    Сообщения:
    4
    Симпатии:
    0
    Вновь прошу помощи.

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

    Microsoft SQL Server Management Studio 9.00.3042.00
    Клиентские средства служб Microsoft Analysis Services 2005.090.3042.00
    Компоненты доступа к данным (MDAC) 2000.086.3959.00 (srv03_sp2_rtm.070216-1710)
    PHP Version 5.2.17

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

    1. PHP скрипт отрабатывает обращение к базе инструкцией INSERT,
    2. после чего в том же скрипте выполняется проверка существования записи (так на дурака), которая показывает, что запись существует, при этом возвращает ее ID, скрипт завершен.
    3. Далее соединение разрывается.
    4. В другом скрипте, формируется соединение, производится попытка поиска сформированной строки - результат строка не найдена.
    5. Входим из под Microsoft SQL Server Management Studio - формируем точно такой же запрос, который выполнял проверку на 2 шаге - результат строка не найдена.
    6. из под Microsoft SQL Server Management Studio формируем запрос INSERT, который отрабатывался на 1 шаге
    7. из под Microsoft SQL Server Management Studio просматриваем базу - строка шага 7 существует, ее ID на 1 более нежели результат на шаге 2.
    8. разрываем соединение и выходим из Microsoft SQL Server Management Studio
    9. Входим из под Microsoft SQL Server Management Studio, просматриваем базу - строки созданные на всех вышеописанных шагах отсутствуют, при этом их индексы не посчитаны не в общем количестве записей, не в порядковом коде, при этом очередное добавление записи учитывает прирост индекса на всех описанных шагах.

    попробую описать ситуацию примером:
    исходное состояние таблицы, 1 запись с индексом 1
    PHP > соединение => INSERT .... => SELECT id FROM ... => результат 2 =>разрыв соединения
    PHP > соединение => SELECT id FROM ... => результат 1 =>разрыв соединения
    Microsoft SQL Server Management Studio > соединение => SELECT id FROM ... => результат 1 => INSERT .... => SELECT id FROM ... => результат 3 =>разрыв соединения
    Microsoft SQL Server Management Studio > соединение => SELECT id FROM ... => результат 1 => INSERT .... => SELECT id FROM ... => результат 4 =>разрыв соединения

    голову уже сломал, конечно же в рабочей таблице не одна запись, а более 100 тыс. записей, пробовал все эти действия на развернутой копии, там все работает нормально, ненормального поведения не наблюдается. следовательно делаю заключение, что все та-ки это не логика, на таблицу навешаны триггеры, ключи, ограничения и индексы, все проверял. В ограничениях заданы значения по умолчанию (бред но это так), все записи ключей, касаемые создаваемых записей существуют, в триггерах операций удаления не присутствует, триггеры вообще не видоизменяют текущую таблицу, просто формируют записи в других таблицах).

    подскажите что может быть, кто-то сталкивался с таким ?
     
  2. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    У вас может быть выключен режим неявных транзакций - это когда после каждого sql-запроса mssql делает commit (фиксирует транзакцию).
    Симптомы один в один - коннекция разорвалась, транзакция откатилась.
    Попробуйте после установки соединения с базой выполнить команду
    Код (Text):
    1. SET IMPLICIT_TRANSACTIONS ON
    Это установит режим неявных транзакций на всю сессию.
    Иначе нужно явно вызывать commit