Error_state (transact-sql)error_state (transact-sql)
Содержание:
Ошибки, не обрабатываемые конструкцией TRY…CATCHErrors Unaffected by a TRY…CATCH Construct
Конструкции TRY…CATCH не обрабатывают следующие условия.TRY…CATCH constructs do not trap the following conditions:
-
Предупреждения и информационные сообщения с уровнем серьезности 10 или ниже.Warnings or informational messages that have a severity of 10 or lower.
-
Ошибки с уровнем серьезности 20 или выше, которые приводят к завершению обработки задачи компонентом Компонент SQL Server Database EngineSQL Server Database Engine для сеанса.Errors that have a severity of 20 or higher that stop the Компонент SQL Server Database EngineSQL Server Database Engine task processing for the session. Если возникла ошибка с уровнем серьезности 20 или выше, а подключение к базе данных не разорвано, конструкция TRY…CATCH обработает эту ошибку.If an error occurs that has severity of 20 or higher and the database connection is not disrupted, TRY…CATCH will handle the error.
-
Такие запросы, как прерывания от клиента или разрыв соединения, вызванный с клиента.Attentions, such as client-interrupt requests or broken client connections.
-
Завершение сеанса системным администратором с помощью инструкции KILL.When the session is ended by a system administrator by using the KILL statement.
Следующие типы ошибок не обрабатываются блоком CATCH, если они возникают на том же самом уровне выполнения, что и конструкция TRY…CATCH.The following types of errors are not handled by a CATCH block when they occur at the same level of execution as the TRY…CATCH construct:
-
Ошибки компиляции, такие как ошибки синтаксиса, в результате которых пакет не будет выполнен.Compile errors, such as syntax errors, that prevent a batch from running.
-
Ошибки, происходящие во время повторной компиляции уровня инструкций, такие как ошибки разрешения имен объектов, которые происходят после компиляции из-за отложенного разрешения имен.Errors that occur during statement-level recompilation, such as object name resolution errors that occur after compilation because of deferred name resolution.
-
Ошибки разрешения имен объектовObject name resolution errors
Эти ошибки возвращаются на уровень, на котором запускались пакеты, хранимые процедуры или триггеры.These errors are returned to the level that ran the batch, stored procedure, or trigger.
Если ошибка возникает во время компиляции или перекомпиляции уровня инструкций на нижнем уровне исполнения (например, при выполнении процедуры sp_executesql или определенной пользователем хранимой процедуры) внутри блока TRY, эта ошибка возникнет на уровне, более низком, чем конструкция TRY…CATCH, и будет обрабатываться соответствующим блоком CATCH.If an error occurs during compilation or statement-level recompilation at a lower execution level (for example, when executing sp_executesql or a user-defined stored procedure) inside the TRY block, the error occurs at a lower level than the TRY…CATCH construct and will be handled by the associated CATCH block.
Следующий пример показывает, как ошибка разрешения имени объекта, формируемая инструкцией , не отлавливается конструкцией , но отлавливается блоком , когда та же самая инструкция выполняется внутри хранимой процедуры.The following example shows how an object name resolution error generated by a statement is not caught by the construct, but is caught by the block when the same statement is executed inside a stored procedure.
Эта ошибка не отлавливается, а управление передается за пределы конструкции на уровень выше.The error is not caught and control passes out of the construct to the next higher level.
Выполнение инструкции внутри хранимой процедуры приведет к ошибке, которая возникнет на уровне ниже, чем блок .Running the statement inside a stored procedure will cause the error to occur at a level lower than the block. Такая ошибка будет обработана конструкцией .The error will be handled by the construct.
Действие пользователяUser Action
Проверьте следующую информацию и исправьте инструкцию соответствующим образом.Verify the following information and correct the statement as appropriate.
-
Имя объекта записано правильно.The object name is spelled correctly.
-
Контекст текущей базы данных является правильным.The current database context is correct. Если не указано имя базы данных для объекта, то объект должен существовать в текущей базе данных.If a database name for the object is not specified, the object must exist in the current database. Дополнительные сведения об установке контекста базы данных см. в статье USE (Transact-SQL).For more information about setting the database context, see USE (Transact-SQL).
-
Объект существует в системных таблицах.The object exists in the system tables. Чтобы проверить существование таблицы или другого объекта на уровне схемы, отправьте запрос к представлению каталога sys.objects.To verify whether a table or other schema-scoped object exists, query the sys.objects catalog view. Если объект отсутствует в системных таблицах, значит он был удален или у пользователя отсутствуют разрешения на просмотр метаданных объекта.If the object is not in the system tables, the object has been deleted, or the user does not have permissions to view the object metadata. Дополнительные сведения о разрешениях на просмотр метаданных объекта см. в статье Настройка видимости метаданных.For more information about permissions to view object metadata, see Metadata Visibility Configuration.
-
Объект содержится в применяемой по умолчанию схеме пользователя.The object is contained in the default schema of the user. Если его там нет, имя объекта нужно указывать в двухкомпонентном формате: имя_схемы.имя_объекта.If it is not, the object must be specified using the two-part format schema_name.object_name. Следует отметить, что скалярные функции должны всегда вызываться с использованием по меньшей мере двухкомпонентного имени.Note that scalar-valued functions must always be invoked by using at least a two-part name.
-
Учет регистра в параметрах сортировки базы данных.The case sensitivity of the database collation.
Если в базе данных используются параметры сортировки с учетом регистра, то имя объекта должно согласовываться по регистру с именем объекта в базе данных.When a database uses a case-sensitive collation, the object name must match the case of the object in the database. Например, если определенный объект имеет имя MyTable в базе данных с параметрами сортировки с учетом регистра, запросы, в которых этот объект именуется как mytable или Mytable, будут возвращать ошибку 208, так как имена объектов не согласуются.For example, when an object is specified as MyTable in a database with a case sensitive collation, queries that refer to the object as mytable or Mytable will cause error 208 to return because the object names do not match.
Параметры сортировки базы данных можно проверить, введя следующую инструкцию.You can verify the database collation by running the following statement.
Аббревиатура CS в имени параметров сортировки указывает, что учитывается регистр символов.The abbreviation CS in the collation name indicates the collation is case sensitive. Например, значение Latin1_General_CS_AS определяет параметры сортировки с учетом регистра и с учетом диакритических знаков.For example, Latin1_General_CS_AS is a case sensitive, accent sensitive collation. Значение CI указывает, что в параметрах сортировки не учитывается регистр.CI indicates a case insensitive collation.
-
Пользователь имеет разрешение на получение доступа к объекту.The user has permission to access the object. Чтобы проверить, какие разрешения имеет пользователь для доступа к объекту, можно воспользоваться системной функцией Has_Perms_By_Name.To verify the permissions the user has on the object, use the Has_Perms_By_Name system function.
RemarksRemarks
В инструкции, выполняемой до инструкции THROW, должен использоваться признак конца инструкции — точка с запятой (;).The statement before the THROW statement must be followed by the semicolon (;) statement terminator.
Если конструкция TRY…CATCH недоступна, то пакет инструкций завершается.If a TRY…CATCH construct is not available, the statement batch is terminated. Задаются номер строки и процедура, где вызывается исключение.The line number and procedure where the exception is raised are set. Серьезности задается значение 16.The severity is set to 16.
Если инструкция THROW указана без параметров, то она должна находиться внутри блока CATCH.If the THROW statement is specified without parameters, it must appear inside a CATCH block. Результатом этого будет вызов возникшего исключения.This causes the caught exception to be raised. Любая ошибка, возникающая в инструкции THROW, приводит к завершению пакета инструкций.Any error that occurs in a THROW statement causes the statement batch to be terminated.
% является зарезервированным символом в тексте сообщения инструкции THROW, и его необходимо экранировать.% is a reserved character in the message text of a THROW statement and must be escaped. Дважды укажите знак %, чтобы получить % в тексте сообщения, например: «Увеличение превышает 15 %% исходного значения.»Double the % character to return % as part of the message text, for example ‘The increase exceeded 15%% of the original value.’
Ошибки запрета доступа в MySQL
В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).
Причин для запрета доступа может быть много. Одна из них связана с учётными записями MySQL, которые сервер разрешает использовать клиентским программам при подключении. Это означает, что имя пользователя, указанное в соединении, может не иметь прав доступа к базе данных.
В MySQL есть возможность создавать учётные записи, позволяющие пользователям клиентских программ подключаться к серверу и получать доступ к данным. Поэтому при ошибке доступа проверьте разрешение УЗ на подключение к серверу через клиентскую программу.
Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):
В консоли вводим команду:
Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:
Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).
ПримерыExamples
В этом примере состояние ошибки проверки подлинности равно 8.In this example, the authentication error state is 8. Это означает, что пароль неверный.This indicates that the password is incorrect.
| ДатаDate | ИсточникSource | СообщениеMessage |
|---|---|---|
| 2007-12-05 20:12:56.342007-12-05 20:12:56.34 | Вход в системуLogon | Ошибка: 18456, серьезность: 14, состояние: 8.Error: 18456, Severity: 14, State: 8. |
| 2007-12-05 20:12:56.342007-12-05 20:12:56.34 | Вход в системуLogon | «Ошибка входа пользователя <имя_пользователя>».Login failed for user ‘<user_name>’. [КЛИЕНТ: [CLIENT: |
Примечание
Если SQL ServerSQL Server устанавливается в режиме аутентификации Windows, а затем переключается на аутентификацию SQL ServerSQL Server и Windows, то имя входа sa будет по умолчанию отключено.When SQL ServerSQL Server is installed using Windows Authentication mode and is later changed to SQL ServerSQL Server and Windows Authentication mode, the sa login is initially disabled. Это приводит к ошибке с состоянием 7: «Ошибка входа для пользователя sa». Чтобы включить имя для входа sa, выполните инструкции из статьи об изменении режима проверки подлинности сервера.This causes the state 7 error: «Login failed for user ‘sa’.» To enable the sa login, see Change Server Authentication Mode.
Завершение длительной транзакцииComplete or kill a long-running transaction
Обнаружение длительных транзакцийDiscovering long-running transactions
Очень длительная транзакция может привести к переполнению журнала транзакций.A very long-running transaction can cause the transaction log to fill. Длительные транзакции можно обнаружить следующими способами:To look for long-running transactions, use one of the following:
-
sys.dm_tran_database_transactions.sys.dm_tran_database_transactions.
Данное динамическое административное представление возвращает сведения о транзакциях на уровне базы данных.This dynamic management view returns information about transactions at the database level. Столбцы этого представления содержат сведения о времени первой записи журнала (database_transaction_begin_time), текущем состоянии транзакции (database_transaction_state)и регистрационном номере (LSN) первой записи в журнале транзакций (database_transaction_begin_lsn).For a long-running transaction, columns of particular interest include the time of the first log record (database_transaction_begin_time), the current state of the transaction (database_transaction_state), and the log sequence number (LSN) of the begin record in the transaction log (database_transaction_begin_lsn). -
DBCC OPENTRAN.DBCC OPENTRAN.
Эта инструкция позволяет установить идентификатор владельца транзакции, таким образом, можно отследить источник транзакции для более упорядоченной остановки (фиксацией, а не откатом).This statement lets you identify the user ID of the owner of the transaction, so you can potentially track down the source of the transaction for a more orderly termination (committing it rather than rolling it back).
Завершение транзакцииKill a transaction
В некоторых случаях может потребоваться завершить процесс, для этого можно применить инструкцию KILL .Sometimes you just have to end the process; you may have to use the KILL statement
Ее следует использовать с осторожностью, особенно если запущены критические процессы, которые нельзя завершать.Please use this statement very carefully, especially when critical processes are running that you don’t want to kill. Дополнительные сведения см
в разделе KILL (Transact-SQL).For more information, see KILL (Transact-SQL)
Ошибка инструментария WMI при соединении с сервером отчетов в среде Management StudioWMI error when connecting to a report server in Management Studio
По умолчанию среда Management Studio использует инструментарий управления Windows (WMI) служб Reporting Services, чтобы установить соединение с сервером отчетов.By default, Management Studio uses the Reporting Services Windows Management Instrumentation (WMI) provider to establish a connection to the report server. Если поставщик WMI установлен неправильно, при попытке установить соединение с сервером отчетов возникнет следующая ошибка.If the WMI provider is not installed correctly, you will get the following error when attempting to connect to the report server:
Невозможно установить соединение с <имя_сервера>.Cannot connect to <your server name>. Поставщик WMI служб Reporting Services не установлен или не настроен (Microsoft.SqlServer.Management.UI.RSClient)».The Reporting Services WMI provider is not installed or is misconfigured (Microsoft.SqlServer.Management.UI.RSClient).
Чтобы устранить эту ошибку, необходимо переустановить программное обеспечение.To resolve this error, you should reinstall the software. В других случаях в качестве временного решения можно соединиться с сервером отчетов через конечную точку SOAP.For all other cases, as a temporary work-around, you can connect to the report server through the SOAP endpoint:
В диалоговом окне Соединение с сервером в среде Management Studio в поле Имя серверавведите URL-адрес сервера отчетов.In the Connect to Server dialog box in Management Studio, in Server Name, type the report server URL. По умолчанию это https:///reportserver.By default, it is https:///reportserver. Или, если используется SQL Server 2008 Express with Advanced Services, это https:///reportserver$sqlexpress.Or if you are using SQL Server 2008 Express with Advanced Services, it is https:///reportserver$sqlexpress.
Чтобы устранить эту ошибку (для последующей установки соединения через поставщика WMI), запустите программу установки, чтобы исправить службы Reporting Services, либо переустановите службы Reporting Services.To resolve the error so that you can connect using the WMI provider, you should run Setup to repair Reporting Services, or reinstall Reporting Services.