Внезапные ошибки IM004 и 08001 на сайте PHP + Sqlsrv intr anet - PullRequest
1 голос
/ 09 февраля 2020

Итак ... немного изношенности? У меня был проект PHP 5.5 + IIS 7.5 + SQL Server 2008 (работающий в Windows Server 2008), работающий с 2015 года; никогда не испытывал того, что начало происходить с начала года. Случайным образом соединение будет разорвано, и ничто не вернет его, пока мы не выполним перезапуск пула приложений в IIS.

Наиболее распространенная ошибка:

[0] => IM004
            [SQLSTATE] => IM004
            [1] => 0
            [code] => 0
            [2] => [Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed
            [message] => [Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV failed

Но мы также несколько раз получали удар по этой противной комбо:

[0] => Array
        (
            [0] => 08001
            [SQLSTATE] => 08001
            [1] => 21
            [code] => 21
            [2] => [Microsoft][ODBC Driver 11 for SQL Server]Encryption not supported on the client.
            [message] => [Microsoft][ODBC Driver 11 for SQL Server]Encryption not supported on the client.
        )

    [1] => Array
        (
            [0] => 08001
            [SQLSTATE] => 08001
            [1] => -2146893052
            [code] => -2146893052
            [2] => [Microsoft][ODBC Driver 11 for SQL Server]SSL Provider: The Local Security Authority cannot be contacted

            [message] => [Microsoft][ODBC Driver 11 for SQL Server]SSL Provider: The Local Security Authority cannot be contacted

        )

    [2] => Array
        (
            [0] => 08001
            [SQLSTATE] => 08001
            [1] => 21
            [code] => 21
            [2] => [Microsoft][ODBC Driver 11 for SQL Server]Client unable to establish connection
            [message] => [Microsoft][ODBC Driver 11 for SQL Server]Client unable to establish connection
        )

    [3] => Array
        (
            [0] => 08001
            [SQLSTATE] => 08001
            [1] => -2146893052
            [code] => -2146893052
            [2] => [Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
            [message] => [Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
        )

Последнее буквально говорит я не могу подключиться, что заставит любого сказать «Хорошо, у вас проблема с вашим SQL Сервером», но поскольку перезапуск пула приложений возвращает все к скорости, чего не может быть. Более того, поскольку это происходит случайным образом, это не значит, что пользователи изначально не работали нормально, а это означает, что подключение к серверу просто отлично.

Делать это более неясным - это тот факт, что этот проект не что-то новое, что мы только начали, это то, что мы разрабатываем и используем с 2015 года, и это не начиналось до месяца go. В течение более чем недели с 9 по 18 января ошибки не возникали, в то время как загрузка пользователя была такой же. Читая о IM004 на net, мы попытались переустановить драйвер ODB C для SQL Server 11, но это ничего не изменило. Некоторые, возможно, захотят предложить перейти на PHP 7 с обновленной библиотекой Sqlsrv и все, но это не вариант прямо сейчас , учитывая размер проекта и количество ресурсов, которое потребуется для сделать это своевременно.

Мы не представили ничего нового для сервера, кроме обновлений для приложения intr anet; это также заставляет нас задуматься о том, что мы, возможно, отбросили какой-то убийственный запрос или процесс, но когда мы начали регистрировать запрос, который начинал вызывать проблему, мы обнаружили, что это происходит с любыми запросами, а также со сложными запросами до чего-то столь же безобидного, как "SET dateformat ymd".

Я на этом сообразил, что, похоже, в этом контексте не так много документации по этому поводу. Я пытался задавать вопросы на форумах Microsoft как с точки зрения IIS + PHP, так и с точки зрения библиотеки Sqlsrv, но так и не получил ответов, потому что уверен, что люди не уверены, в чем дело.

Любая ретроспектива в этом вопросе в отношении того, что может происходить или что я могу сделать, чтобы исправить это, будет принята с благодарностью, поскольку на данный момент я просто не могу придумать что-либо еще, чтобы попытаться, и ситуация nightmari sh.

Редактировать: поэтому, хотя я и предполагал, что ничего не изменится (с чего бы это?), я обновил весь сайт до PHP 7.3.14 с соответствующим расширением SQLSrv и ODB C драйвер 17. Проблема сохраняется:

[16-Feb-2020 13:05:21 Америка / Аргентина / Buenos_Aires] PHP Предупреждение: не удалось установить соединение с базой данных в C: ... \ ezsql \ lib \ Database \ ez_sqlsrv. php в строке 112 в C: ... \ ezsql \ lib \ ezsqlModel. php в строке 225 Трассировка стека:

0 C: ... \ ezsql \ lib \ Database \ ez_sqlsrv. php (319): ezsql \ Database \ ez_sqls rv-> connect ('user', 'pass', 'database', 'host')

1 C: ... \ db. php (23): ezsql \ Database \ ez_sqlsrv -> запрос ('SET dateformat ...')

2 C: ... \ ajax_ html. php (5): require_once ('C: \ inetpub \ wwwr... ')

Когда это происходит, он зависает от 10 минут до одного часа, если мы не выполним перезапуск пула приложений. Тогда все возвращается на круги своя. Мы пытались подключиться к базе данных SQL через SQL Management Studio, прежде чем сделать это, и у нас не было никаких проблем, то есть это не проблема базы данных.

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

...