Что такое код alter exception


Содержание

4 Errors and Exception Handling

This chapter describes the flexible error trapping and error handling you can use in your PL/SQL programs.

For more information on error-handling and exceptions in PL/SQL, see «PL/SQL Error Handling» in Oracle Database PL/SQL Language Reference .

See the end of this chapter for TimesTen-specific considerations.

The following topics are covered:

Under standing exceptions

This section provides an overview of exceptions in PL/SQL programming, covering the following topics:

About exceptions

An exception is a PL/SQL error that is raised during program execution, either implicitly by TimesTen or explicitly by your program. Handle an exception by trapping it with a handler or propagating it to the calling environment.

For example, if your SELECT statement returns multiple rows, TimesTen returns an error (exception) at runtime. As the following example shows, you would see TimesTen error 8507, then the associated ORA error message. ( ORA messages, originally defined for Oracle Database, are similarly implemented by TimesTen.)

You can handle such exceptions in your PL/SQL block so that your program completes successfully. For example:

Exc eption types

There are three types of exceptions:

Predefined exceptions are error conditions that are defined by PL/SQL.

Non-predefined exceptions include any standard TimesTen errors.

User-defined exceptions are exceptions specific to your application.

In TimesTen, these three types of exceptions are used in the same way as in Oracle Database.

Exception Description How to handle
Predefined TimesTen error One of approximately 20 errors that occur most often in PL/SQL code You are not required to declare these exceptions. They are predefined by TimesTen. TimesTen implicitly raises the error.
Non-predefined TimesTen error Any other standard TimesTen error These must be declared in the declarative section of your application. TimesTen implicitly raises the error and you can use an exception handler to catch the error.
User-defined error Error defined and raised by the application These must be declared in the declarative section. The developer raises the exception explicitly.

Trapping exceptions

This section describes how to trap predefined TimesTen errors or user-defined errors.

Trap ping predefined TimesTen errors

Trap a predefined TimesTen error by referencing its predefined name in your exception-handling routine. PL/SQL declares predefined exceptions in the STANDARD package.

Table 4-1 lists predefined exceptions supported by TimesTen, the associated ORA error numbers and SQLCODE values, and descriptions of the exceptions.

Table 4-1 Predefined exceptions

Program attempted to assign values to the attributes of an uninitialized object.

None of the choices in the WHEN clauses of a CASE statement were selected and there is no ELSE clause.

Program attempted to apply collection methods other than EXISTS to an uninitialized nested table or varray, or program attempted to assign values to the elements of an uninitialized nested table or varray.

Program attempted to open an already opened cursor.

Program attempted to insert duplicate values in a column that is constrained by a unique index.

There is an illegal cursor operation.

Conversion of character string to number failed.

Single row SELECT returned no rows or your program referenced a deleted element in a nested table or an uninitialized element in an associative array (index-by table).

PL/SQL has an internal problem.

Host cursor variable and PL/SQL cursor variable involved in an assignment statement have incompatible return types.

PL/SQL ran out of memory or memory was corrupted.

A program referenced a nested table or varray using an index number larger than the number of elements in the collection.

A program referenced a nested table or varray element using an index number that is outside the legal range (for example, -1).

The conversion of a character string into a universal rowid failed because the character string does not represent a ROWID value.

Single row SELECT returned multiple rows.

An arithmetic, conversion, truncation, or size constraint error occurred.

A program attempted to divide a number by zero.

Example 4-1 Using the ZERO_DIVIDE predefined exception

In this example, a PL/SQL program attempts to divide by 0. The ZERO_DIVIDE predefined exception is used to trap the error in an exception-handling routine.

Trap ping user-defined exceptions

You can define your own exceptions in PL/SQL in TimesTen, and you can raise user-defined exceptions explicitly with either the PL/SQL RAISE statement or the RAISE_APPLICATION_ERROR procedure.

Usi ng the RAISE statement

The RAISE statement stops normal execution of a PL/SQL block or subprogram and transfers control to an exception handler. RAISE statements can raise predefined exceptions, or user-defined exceptions whose names you decide.


Example 4-2 Using RA ISE statement to trap user-defined exception

In this example, the department number 500 does not exist, so no rows are updated in the departments table. The RAISE statement is used to explicitly raise an exception and display an error message, returned by the SQLERRM built-in function, and an error code, returned by the SQLCODE built-in function. Use the RAISE statement by itself within an exception handler to raise the same exception again and propagate it back to the calling environment.

Given the same error condition in TimesTen and Oracle Database, SQLCODE returns the same error code, but SQLERRM does not necessarily return the same error message. This is also noted in «TimesTen error messages and SQL codes».

Us ing the RAISE_APPLICATION_ERROR procedure

Use the RAISE_APPLICATION_ERROR procedure in the executable section or exception section (or both) of your PL/SQL program. TimesTen reports errors to your application so you can avoid returning unhandled exceptions.

Use an error number between -20,000 and -20,999. Specify a character string up to 2,048 bytes for your message.

Example 4-3 Using the RAISE_APPLICATION_ERROR procedure

This example attempts to delete from the employees table where last_name=Patterson . The RAISE_APPLICATION_ERROR procedure raises the error, using error number -20201.

Sho wing errors in ttIsql

You can use the show errors command in ttIsql to see details about errors you encounter in executing anonymous blocks or compiling packages, procedures, or functions. This is shown in Example 4-4.

Example 4-4 ttIsql show errors command

Again consider Example 2-17. Assume the same package specification shown there, which declares the procedures and functions hire_employee , remove_employee , and num_above_salary . But instead of the body definition shown there, consider the following, which defines hire_employee and num_above_salary but not remove_employee :

Attempting this body definition after the original package specification results in the following:

To get more information, run ttIsql and use the command show errors . In this example, show errors provides the following:

Dif ferences in TimesTen: exception handing and error behavior

You should be aware of some error-related behaviors that differ between TimesTen PL/SQL and Oracle Database PL/SQL:

TimesTen PL/SQL tran saction and rollback behavior for unhandled exceptions

TimesTen PL/SQL differs from Oracle Database PL/SQL in a scenario where an application executes PL/SQL in the middle of a transaction, and an unhandled exception occurs during execution of the PL/SQL. Oracle Database rolls back to the beginning of the anonymous block. TimesTen does not roll back.

An application should always handle any exception that results from execution of a PL/SQL block, as in the following example, run with autocommit disabled:

The second INSERT fails because values must be unique, so an exception occurs and the program performs a rollback. Running this in TimesTen results in the following.

The result is equivalent in Oracle Database, with the SELECT results showing no rows.

Now consider a TimesTen example where the exception is not handled, again run with autocommit disabled:

In TimesTen, the SELECT query indicates execution of the first two inserts:

If you execute this in Oracle Database, there is a rollback to the beginning of the PL/SQL block, so the results of the SELECT indicate execution of only the first insert:

If there is an unhandled exception in a PL/SQL block, TimesTen leaves the transaction open only to allow the application to assess its state and determine appropriate action.

An application in TimesTen should not execute a PL/SQL block while there are uncommitted changes in the current transaction, unless those changes together with the PL/SQL operations really do constitute a single logical unit of work and the application is able to determine appropriate action. Such action, for example, might consist of a rollback to the beginning of the transaction.

If autocommit is enabled and an unhandled exception occurs in TimesTen, the entire transaction is rolled back.

TimesTen er ror messages and SQL codes

Given the same error condition, TimesTen does not guarantee that the error message returned by TimesTen is the same as the message returned by Oracle Database, although the SQL code is the same. Therefore, the information returned by the SQLERRM function may be different, but that returned by the SQLCODE function is the same.

For further information:

Example 4-2 uses SQLERRM and SQLCODE .

Refer to «Warnings and Errors» in Oracle TimesTen In-Memory Database Error Messages and SNMP Traps for information about specific TimesTen error messages.

Refer to «SQLERRM Function» and «SQLCODE Function» in Oracle Database PL/SQL Language Reference for general information.

W arnings not visible in PL/SQL

Oracle Database does not have the concept of runtime warnings, so Oracle Database PL/SQL does not support warnings.

TimesTen does have the concept of warnings, but because the TimesTen PL/SQL implementation is based on the Oracle Database PL/SQL implementation, TimesTen PL/SQL does not support warnings.

As a result, in TimesTen you could execute a SQL statement and see a resulting warning, but if you execute the same statement through PL/SQL you would not see the warning.

Unsup ported predefined errors

«Trapping predefined TimesTen errors» lists predefined exceptions supported by TimesTen, the associated ORA error numbers and SQLCODE values, and descriptions of the exceptions.

Table 4-2 notes predefined exceptions that are not supported by TimesTen.

Table 4-2 Predefined exceptions not supported by TimesTen

Exception name Oracle Database error number SQLCODE Description

User name or password is invalid.

Program issued a database call without being connected to the database.

Program attempted to invoke a MEMBER method, but the object was not initialized.

Timeout occurred while the database was waiting for a resource.

Possibility of runtime errors after clean compile (use of Oracle Database SQL parser)


The TimesTen PL/SQL implementation uses the Oracle Database SQL parser in compiling PL/SQL programs. (This is discussed in «PL/SQL in TimesTen versus PL/SQL in Oracle Database».) As a result, if your program uses Oracle Database syntax or built-in procedures that are not supported by TimesTen, the issue is not discovered during compilation. A runtime error occurs during program execution, however.

Use of TimesTen expressions at runtime

TimesTen SQL includes several constructs that are not present in Oracle Database SQL. The PL/SQL language does not include these constructs. To use TimesTen-specific SQL from PL/SQL, execute the SQL statements using the EXECUTE IMMEDIATE statement. This avoids compilation errors.

For lists of TimesTen-specific SQL and expressions, see «Compatibility Between TimesTen and Oracle Databases» in Oracle TimesTen Application-Tier Database Cache User’s Guide .

For more information about EXECUTE IMMEDIATE , refer to «Dynamic SQL in PL/SQL (EXECUTE IMMEDIATE statement)».

Что такое код alter exception

Table of Contents

This section describes how to create, modify and delete custom exceptions for use in error handlers in PSQL modules.

CREATE EXCEPTION

Used for: Creating a new exception for use in PSQL modules

Available in: DSQL, ESQL

Table 5.36. CREATE EXCEPTION Statement Parameters

Exception name Oracle Database error number SQLCODE Description
Parameter Description
exception_name Exception name. The maximum length is 31 characters
message Default error message. The maximum length is 1,021 characters

The statement CREATE EXCEPTION creates a new exception for use in PSQL modules. If an exception of the same name exists, the statement will fail with an appropriate error message.

The exception name is a standard identifier. In a Dialect 3 database, it can be enclosed in double quotes to make it case-sensitive and, if required, to use characters that are not valid in regular identifiers. See Identifiers for more information.

The default message is stored in character set NONE , i.e., in characters of any single-byte character set. The text can be overridden in the PSQL code when the exception is thrown.

Any user connected to the database can create an exception.

  1. Creating an exception named E_LARGE_VALUE:
  2. Creating an exception named ERROR_REFIN_RATE:

Grouping CREATE EXCEPTION statements together in system update scripts will simplify working with them and documenting them. A system of prefixes for naming and categorising groups of exceptions is recommended.

Custom exceptions are stored in the system table RDB$EXCEPTIONS .

Что такое код alter exception

Встроенные исключения в Oracle PL/SQL, блок Exception, коды ошибок

Задание:

Вам представлен следующий код PL / SQL :

SET SERVEROUTPUT ON;

Измените его таким образом, чтобы:

· если пользователь выбирает для второго числа 0, выводилось сообщение «Деление на ноль!»;

· если пользователь вводит символьные значения типа ‘ abc ‘, выводилось сообщение «Неверный тип данных»;

· в других ситуациях выводилось сообщение «Неизвестная ошибка».

Результат выполнения кода должен быть таким, как представлено на рис. Лаб. 18.1-1.

Примечание. Некоторые исключения все равно перехватываться не будут. Убедитесь, что ваш код перехватывает исключения для 0 и ‘ abc ‘.

Как поймать и обрабатывать только определенные исключения Oracle?

От этого и this , я думаю, что нет предопределенных Именованных Исключений Системы для ORA-00955.

Как я могу переписать следующее, чтобы поймать только ошибку ORA-00955?

BTW Есть ли какой-либо синтаксис для улавливания ошибок, просто указав коды ошибок?

2 ответа

У вас есть два варианта:

Обратитесь к исключению напрямую по номеру:

Другой вариант — использовать директиву EXCEPTION_INIT Pragma, чтобы связать известный номер ошибки Oracle с пользовательским исключением;

BTW Есть ли какой-либо синтаксис для улавливания ошибок, просто указав коды ошибок?

Да, я продемонстрировал это в первом примере

Дальнейшее чтение вариантов для этого:

Подобно тому, что уже предложил Сатья, но мне нравится избегать when others полностью, если это возможно — необработанное исключение, как правило, является правильным результатом для исключений, которые вы специально не обрабатываете:

Исключения в python. Конструкция try — except для обработки исключений


Исключения (exceptions) — ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках.

Самый простейший пример исключения — деление на ноль:

Разберём это сообщение подробнее: интерпретатор нам сообщает о том, что он поймал исключение и напечатал информацию (Traceback (most recent call last)).

Далее имя файла (File «»). Имя пустое, потому что мы находимся в интерактивном режиме, строка в файле (line 1);

Выражение, в котором произошла ошибка (100 / 0).

Название исключения (ZeroDivisionError) и краткое описание исключения (division by zero).

Разумеется, возможны и другие исключения:

В этих двух примерах генерируются исключения TypeError и ValueError соответственно. Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.

Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встретиться и другие, так как программисты могут создавать собственные исключения. Данный список актуален для python 3.3, в более ранних версиях есть незначительные изменения.

  • BaseException — базовое исключение, от которого берут начало все остальные.
    • SystemExit — исключение, порождаемое функцией sys.exit при выходе из программы.
    • KeyboardInterrupt — порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C).
    • GeneratorExit — порождается при вызове метода close объекта generator.
    • Exception — а вот тут уже заканчиваются полностью системные исключения (которые лучше не трогать) и начинаются обыкновенные, с которыми можно работать.
      • StopIteration — порождается встроенной функцией next, если в итераторе больше нет элементов.
      • ArithmeticError — арифметическая ошибка.
        • FloatingPointError — порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто.
        • OverflowError — возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях.
        • ZeroDivisionError — деление на ноль.
      • AssertionError — выражение в функции assert ложно.
      • AttributeError — объект не имеет данного атрибута (значения или метода).
      • BufferError — операция, связанная с буфером, не может быть выполнена.
      • EOFError — функция наткнулась на конец файла и не смогла прочитать то, что хотела.
      • ImportError — не удалось импортирование модуля или его атрибута.
      • LookupError — некорректный индекс или ключ.
        • IndexError — индекс не входит в диапазон элементов.
        • KeyError — несуществующий ключ (в словаре, множестве или другом объекте).
      • MemoryError — недостаточно памяти.
      • NameError — не найдено переменной с таким именем.
        • UnboundLocalError — сделана ссылка на локальную переменную в функции, но переменная не определена ранее.
      • OSError — ошибка, связанная с системой.
        • BlockingIOError
        • ChildProcessError — неудача при операции с дочерним процессом.
        • ConnectionError — базовый класс для исключений, связанных с подключениями.
          • BrokenPipeError
          • ConnectionAbortedError
          • ConnectionRefusedError
          • ConnectionResetError
        • FileExistsError — попытка создания файла или директории, которая уже существует.
        • FileNotFoundError — файл или директория не существует.
        • InterruptedError — системный вызов прерван входящим сигналом.
        • IsADirectoryError — ожидался файл, но это директория.
        • NotADirectoryError — ожидалась директория, но это файл.
        • PermissionError — не хватает прав доступа.
        • ProcessLookupError — указанного процесса не существует.
        • TimeoutError — закончилось время ожидания.
      • ReferenceError — попытка доступа к атрибуту со слабой ссылкой.
      • RuntimeError — возникает, когда исключение не попадает ни под одну из других категорий.
      • NotImplementedError — возникает, когда абстрактные методы класса требуют переопределения в дочерних классах.
      • SyntaxError — синтаксическая ошибка.
        • IndentationError — неправильные отступы.
          • TabError — смешивание в отступах табуляции и пробелов.
      • SystemError — внутренняя ошибка.
      • TypeError — операция применена к объекту несоответствующего типа.
      • ValueError — функция получает аргумент правильного типа, но некорректного значения.
      • UnicodeError — ошибка, связанная с кодированием / раскодированием unicode в строках.
        • UnicodeEncodeError — исключение, связанное с кодированием unicode.
        • UnicodeDecodeError — исключение, связанное с декодированием unicode.
        • UnicodeTranslateError — исключение, связанное с переводом unicode.
      • Warning — предупреждение.


Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы можем их обрабатывать. Для обработки исключений используется конструкция try — except.

Первый пример применения этой конструкции:

В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.

Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит).

Ещё две инструкции, относящиеся к нашей проблеме, это finally и else. Finally выполняет блок инструкций в любом случае, было ли исключение, или нет (применима, когда нужно непременно что-то сделать, к примеру, закрыть файл). Инструкция else выполняется в том случае, если исключения не было.

спящий внешний ключ: ошибка при выполнении DDL «alter table. «

У меня довольно простая структура объектов, которая дает мне ошибку, которую я не могу решить. Проделали кучу поиска, и я думаю, что это должно быть довольно распространенным случаем, поэтому не уверен, в чем проблема. У меня эти три класса:

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

У меня есть эти свойства в моей конфигурации

Мне показалось, что я довольно тщательно прошел через документы и думаю, что это довольно простой дизайн объектов. любые идеи относительно того, как разрешить, и где в документах я должен более тщательно исследовать, чтобы понять первопричину?

Конструкция On E:Exception Do

Добрый день! Подскажите пожалуйста, в чем смысл конструкции On E:Exception Do? Что такое E? Правильно ли я понимаю, что эта конструкция реагирует на любое исключение?

Добавлено через 44 минуты
Проблема решена, разобрался.

Комментарий модератора
Согласно правилам форума п4.11, если ответ найден самостоятельно, то следует его опубликовать.

Добавлено через 4 часа 55 минут
Решение:
E — объект класса Exception. Да, данная конструкция и правда реагирует на любое исключение, дальнейшая обработка сводится к определению типа (например, E.ClassName) и выводу сообщения (например, E.Message), либо иному действию.
Все исключения:

12.02.2013, 19:39

Как избавится от «First chance exception Exception class EOutOfResources with message ‘Out of system resources’.»?
Как избавится от «First chance exception at $765CC54F. Exception class EOutOfResources with message.

First chance exception at $77ADB09E. Exception class EAccessViolation with message ‘Access Violation’. Process
Объясните в каких случаях возникает эта ошибка, из-за чего? Как справиться с этой ошибкой? Только.

Database Exception – yii\db\Exception ↵ Caused by: PDOException
«Database Exception – yii\db\Exception Caused by: PDOException» Помогите , пожалуйста.

12.02.2013, 20:15 2

В приведенном ниже вообще возможно срабатывание блока else? Тут и EMyException блок не срабатывает, т.к. Exception более общий случай и встречается раньше:

12.02.2013, 23:09 3

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

Что такое код alter exception

с помощью конструкции try .. exceprion можно экранировать ошибки, а как вывести сообщение об ошибке, скажем в Мемо?

Ну и ищи в хелпе по этим ключевым словам. Находится за секунды и с примером.

try
except On E:Exception
Memo1.Lines.Add (E.Message)
end

Че нить типа такого
try
.
except
on e:exception do
begin
MLog.Lines.Add(«Ошибка вышла «+#+e.Message);
raise Exception.Create(«Ошибка в разтаком-то модуле «+e.Message);
end;
end;

А On здесь зачем?


> А On здесь зачем?

Иначе undeclared identifier: «e»

> YurikGL © (14.06.08 19:40) [5]

Гы. и верно ведь. позор на мои седины. :o)


> Гы. и верно ведь. позор на мои седины. :o)

Вопрос, как к мастеру. насколько корректно
raise Exception.Create(«Ошибка в разтаком-то модуле «+e.Message);
в секции except?
Я использую эту конструкцию для «вытаскивания» всей цепочки ошибок. Т.е. если одна функция вызывает другую, та — третью и т.д. выйдет весь текст ошибки по цепочке.

> YurikGL © (14.06.08 20:49) [7]

Дык. а что ж тут некорректного? Все нормально.

Совет — посмотрите в сторону Assert, бывает очень полезно. Дело в том, что сообщение EAssertionFailed содержит имя модуля и номер строки. То есть, для локализации ошибки можно использовать что-то типа этого:
on E: Exception do
Assert(false, «Ошибка » + E.ClassName + «: » + E.Message);

можно и без on, через ExceptObject


> Юрий Зотов © (14.06.08 21:37) [8]

На E.ClassName ругается, зараза.


> Германн © (15.06.08 01:23) [10]
>
>
> > Юрий Зотов © (14.06.08 21:37) [8]
>
> На E.ClassName ругается, зараза.
>

Был не прав. Не ругается и не зараза.
:)

> Дык. а что ж тут некорректного? Все нормально.

Юрий, раньше Вы меня за такое ругали. А теперь это корректно? ;)

Сам обычно использую такую конструкцию:

function ReCreateEObject(E: Exception; const FuncName: string): Exception;
var
S: string;
begin
S := Format(«%s -> %s», [FuncName, E.Message]);
Result := ExceptClass(E.ClassType).Create(S);
end;


try
.
except
on E: Exception do
begin
.
raise ReCreateEObject(E, «MyFunc»);
end;
end;

> Loginov Dmitry © (15.06.08 10:45) [12]

1. За такое я ругать не мог (потому что это самый обычный способ «ручного» отслеживания и ругать тут не за что). А вот за что-то, хотя внешне и похожее, но по сути другое — мог.

2. Зачем пересоздавать объект исключения, если можно просто изменить его Message?


> Loginov Dmitry © (15.06.08 10:45) [12]

> Сам обычно использую такую конструкцию:

И сейчас будем ругать.
Хотя класс исключения будет тот же, но иная
дополнительная информация будет утеряна.

Сравни

try
raise TMyException.Create(«error»);
except
on E: TMyException do
begin
E.Message := Format(«reraise %s», [E.Message]);
raise;
end;
end;


Regards, LVT.

для системных исключений нельзая изменить текст. Изменение текста катит только для родных дельфийский эксепшенов.


> Loginov Dmitry © (15.06.08 17:42) [15]

> Изменение текста катит только для родных дельфийский эксепшенов.

В дельфи иных исключений и нет.

> В дельфи иных исключений и нет.

procedure TForm1.Button6Click(Sender: TObject);
var
a, b: double;
begin
a := 1;
b := 0;
try
a := a / b;
floattostr(a);
except
on E: Exception do
begin
E.Message := Format(«reraise %s», [E.Message]);
raise;
end;
end;
end;

Куда reraise девается? То-то же!


> Loginov Dmitry © (15.06.08 18:05) [17]

> Куда reraise девается? То-то же!

Ну и не надо никаких on E: Exception.
Если обработчику неизвестно исключение —
он _обязан_ его пропустить.

Коды ошибок SQL для клиентских приложений базы данных SQL: ошибки подключения к базе данных и другие проблемы SQL error codes for SQL Database client applications: Database connection errors and other issues

В этой статье перечислены коды ошибок SQL для клиентского приложения базы данных SQL, включая ошибки подключения к базе данных, временные ошибки (или временные сбои), ошибки управления ресурсами, проблемы при копировании баз данных, ошибки пула эластичных БД и другие ошибки. This article lists SQL error codes for SQL Database client applications, including database connection errors, transient errors (also called transient faults), resource governance errors, database copy issues, elastic pool, and other errors. Большинство категорий относятся к базам данных SQL Azure и не применяются к Microsoft SQL Server. Most categories are particular to Azure SQL Database, and do not apply to Microsoft SQL Server. Дополнительные сведения см. в статье Системные сообщения об ошибках. See also system error messages.

Ошибки подключения к базе данных и временные ошибки Database connection errors, transient errors, and other temporary errors

В следующей таблице перечислены коды ошибок SQL для ошибок потери подключения и других временных ошибок, которые могут возникнуть, когда приложение пытается получить доступ к базе данных SQL. The following table covers the SQL error codes for connection loss errors, and other transient errors you might encounter when your application attempts to access SQL Database. Учебники по началу работы с подключением к базе данных SQL Azure доступны в разделе Подключение к базе данных SQL Azure. For getting started tutorials on how to connect to Azure SQL Database, see Connecting to Azure SQL Database.

Наиболее распространенные ошибки подключения к базе данных, а также временные сбои и ошибки Most common database connection errors and transient fault errors

Инфраструктура Azure способна динамически изменять конфигурацию серверов при высокой рабочей нагрузке на службу баз данных SQL. The Azure infrastructure has the ability to dynamically reconfigure servers when heavy workloads arise in the SQL Database service. Такое динамическое поведение может привести к разрыву подключения между клиентской программой и базой данных SQL. This dynamic behavior might cause your client program to lose its connection to SQL Database. Такое состояние называется временной ошибкой. This kind of error condition is called a transient fault.

Настоятельно рекомендуем включить в клиентской программе логику повторных попыток, чтобы программа смогла восстановить подключение после определенного периода, позволяющего временной ошибке самоустраниться. It is strongly recommended that your client program has retry logic so that it could reestablish a connection after giving the transient fault time to correct itself. Рекомендуется подождать 5 секунд, прежде чем выполнять первую повторную попытку. We recommend that you delay for 5 seconds before your first retry. Повторная попытка после ожидания менее 5 секунд может привести к перегрузке облачной службы. Retrying after a delay shorter than 5 seconds risks overwhelming the cloud service. Для каждой последующей повторной попытки ожидание должно увеличиваться экспоненциально, но не более чем до 60 секунд. For each subsequent retry the delay should grow exponentially, up to a maximum of 60 seconds.

Временные сбои обычно проявляются в виде одного из следующих сообщений об ошибке из клиентских программ: Transient fault errors typically manifest as one of the following error messages from your client programs:

Примеры кода с логикой повторных попыток см. в следующих статьях: For code examples of retry logic, see:

Обсуждение периода блокировки для клиентов, которые используют ADO.NET, см. в статье Организация пулов соединений SQL Server (ADO.NET). A discussion of the blocking period for clients that use ADO.NET is available in SQL Server Connection Pooling (ADO.NET).

Коды ошибок для временных сбоев Transient fault error codes

Ниже приведены временные ошибки, для которых в приложении следует реализовать логику повтора. The following errors are transient, and should be retried in application logic:

Код ошибки Error code Уровень серьезности Severity Description (Описание) Description
4060 4060 16 16 Невозможно открыть базу данных %.*ls, запрашиваемую именем входа. Cannot open database «%.*ls» requested by the login. Вход в систему не выполнен. The login failed. Дополнительные сведения см. в разделе ошибки с 4000 по 4999 . For more information, see Errors 4000 to 4999
40197 40197 17 17 При обработке вашего запроса служба обнаружила ошибку. The service has encountered an error processing your request. Повторите попытку позже. Please try again. Код ошибки: %d. Error code %d.

Эта ошибка возникает, если служба не работает по причине обновления программного или аппаратного обеспечения, аппаратных ошибок или проблем при отработке отказа. You receive this error when the service is down due to software or hardware upgrades, hardware failures, or any other failover problems. Код ошибки (% d), внедренный в сообщение об ошибке 40197 , содержит дополнительные сведения о типе сбоя или отработки отказа, которые произошли. The error code (%d) embedded within the message of error 40197 provides additional information about the kind of failure or failover that occurred. В сообщении об ошибке 40197 может быть указан код ошибки 40020, 40143, 40166 или 40540. Some examples of the error codes are embedded within the message of error 40197 are 40020, 40143, 40166, and 40540.

При повторном подключении сервер Базы данных SQL автоматически подключается к рабочей копии базы данных. Reconnecting to your SQL Database server automatically connects you to a healthy copy of your database. Приложение должно зафиксировать ошибку 40197, зарегистрировать указанный в сообщении код ошибки (%d) для устранения неполадок и повторять попытки подключения к базе данных SQL, пока не появится доступ к ресурсам, а подключение не будет восстановлено. Your application must catch error 40197, log the embedded error code (%d) within the message for troubleshooting, and try reconnecting to SQL Database until the resources are available, and your connection is established again. Дополнительные сведения см. в разделе временные ошибки. For more information, see Transient errors.

40501 40501 20 20 Служба в настоящий момент занята. The service is currently busy. Повторите запрос через 10 секунд. Retry the request after 10 seconds. Идентификатор инцидента: %ls. Incident ID: %ls. Код: %d. Code: %d. Дополнительные сведения можно найти в разделе For more information, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.
40613 40613 17 17 База данных %.*ls на сервере %.*ls в данный момент недоступна. Database ‘%.*ls’ on server ‘%.*ls’ is not currently available. Повторите попытку подключения позже. Please retry the connection later. Если проблема повторится, обратитесь в службу поддержки пользователей и сообщите идентификатор трассировки сеанса %.*ls. If the problem persists, contact customer support, and provide them the session tracing ID of ‘%.*ls’.

Эта ошибка может возникать, если уже имеется выделенное административное соединение (DAC), установленное для базы данных. This error may occur if there is already an existing dedicated administrator connection (DAC) established to the database. Дополнительные сведения см. в разделе временные ошибки. For more information, see Transient errors.

49918 49918 16 16 Не удается обработать запрос. Cannot process request. Недостаточно ресурсов для обработки запроса. Not enough resources to process request.

Служба в настоящий момент занята. The service is currently busy. Повторите запрос позже. Please retry the request later. Дополнительные сведения можно найти в разделе For more information, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.

49919 49919 16 16 Невозможно обработать запрос на создание или обновление. Cannot process create or update request. Для подписки «%ld» выполняется слишком много операций создания или обновления. Too many create or update operations in progress for subscription «%ld».

Служба занята обработкой нескольких запросов на создание или обновление для вашей подписки или сервера. The service is busy processing multiple create or update requests for your subscription or server. В данный момент запросы блокируются для оптимизации ресурсов. Requests are currently blocked for resource optimization. Выполните запрос sys.dm_operation_status для ожидающих операций. Query sys.dm_operation_status for pending operations. Подождите, пока выполнятся ожидающие запросы на создание или обновление, либо удалите один из ожидающих запросов и повторите свой запрос позже. Wait until pending create or update requests are complete or delete one of your pending requests and retry your request later. Дополнительные сведения можно найти в разделе For more information, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.

49920 49920 16 16 Не удается обработать запрос. Cannot process request. Для подписки «%ld» выполняется слишком много операций. Too many operations in progress for subscription «%ld».

Служба занята обработкой нескольких запросов для этой подписки. The service is busy processing multiple requests for this subscription. В данный момент запросы блокируются для оптимизации ресурсов. Requests are currently blocked for resource optimization. Выполните запрос sys.dm_operation_status для состояния операции. Query sys.dm_operation_status for operation status. Подождите, пока выполнятся ожидающие запросы, либо удалите один из ожидающих запросов и повторите свой запрос позже. Wait until pending requests are complete or delete one of your pending requests and retry your request later. Дополнительные сведения можно найти в разделе For more information, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.

4221 4221 16 16 Произошел сбой при входе в базу данных-получатель для чтения из-за длительного ожидания выполнения HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING. Login to read-secondary failed due to long wait on ‘HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING’. Вход в реплику невозможен, так как отсутствуют версии строк для транзакций, которые выполнялись при перезапуске реплики. The replica is not available for login because row versions are missing for transactions that were in-flight when the replica was recycled. Чтобы устранить проблему, откатите реплику или зафиксируйте активные транзакции в первичной реплике. The issue can be resolved by rolling back or committing the active transactions on the primary replica. Большинство таких случаев можно избежать, если не выполнять длительные транзакции записи в базе данных-источнике. Occurrences of this condition can be minimized by avoiding long write transactions on the primary.

Коды внедренных ошибок Embedded error codes

Следующие ошибки внедрены в более общий код ошибки 40197: The following errors are embedded in the more general error code 40197:

Код ошибки Error code Уровень серьезности Severity Description (Описание) Description
1104 1104 17 17 В базе данных TEMPDB закончилось место во время сброса. TEMPDB ran out of space during spilling. Создание пространства путем удаления объектов и (или) перезаписи запроса для использования меньшего количества строк. Create space by dropping objects and/or rewrite the query to consume fewer rows. Если проблема сохраняется, попробуйте обновить ее до более высокой цели уровня обслуживания. If the issue still persists, consider upgrading to a higher service level objective.
40020 40020 16 16 База данных находится в состоянии перехода, а транзакции завершаются. The database is in transition and transactions are being terminated.
40143 40143 16 16 Реплика, содержащая узел данных для запрошенной секции, не является первичной. The replica that the data node hosts for the requested partition is not primary.
40166 40166 16 16 Выполняется перенастройка CloudDB, и все новые пользовательские транзакции прерываются. A CloudDB reconfiguration is going on and all new user transactions are aborted.
40540 40540 16 16 Транзакция была прервана, так как база данных перемещена в режим «только для чтения». Transaction was aborted as database is moved to read-only mode. Это временная ситуация, и повторите операцию. This is a temporary situation and please retry the operation.

Сведения о других внедренных ошибках можно найти с помощью запроса sys.messages . Details on other embedded errors can be found by querying sys.messages :

Ошибки копирования базы данных Database copy errors

При копировании базы данных в базе данных SQL Azure могут возникнуть следующие ошибки. The following errors can be encountered while copying a database in Azure SQL Database. Дополнительные сведения см. в статье Копирование базы данных SQL Azure. For more information, see Copy an Azure SQL Database.

Код ошибки Error code Уровень серьезности Severity Description (Описание) Description
40635 40635 16 16 Клиент с IP-адресом %.*ls временно отключен. Client with IP address ‘%.*ls’ is temporarily disabled.
40637 40637 16 16 Возможность создания копии базы данных в настоящее время отключена. Create database copy is currently disabled.
40561 40561 16 16 Не удалось скопировать базу данных. Database copy failed. Исходная или целевая база данных не существует. Either the source or target database does not exist.
40562 40562 16 16 Не удалось скопировать базу данных. Database copy failed. Исходная база данных удалена. The source database has been dropped.
40563 40563 16 16 Не удалось скопировать базу данных. Database copy failed. Целевая база данных удалена. The target database has been dropped.
40564 40564 16 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Database copy failed due to an internal error. Удалите целевую базу данных и повторите попытку. Please drop target database and try again.
40565 40565 16 16 Не удалось скопировать базу данных. Database copy failed. Допускается не более одной одновременной операции копирования базы данных из одного источника. No more than 1 concurrent database copy from the same source is allowed. Удалите целевую базу данных и повторите попытку позднее. Please drop target database and try again later.
40566 40566 16 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Database copy failed due to an internal error. Удалите целевую базу данных и повторите попытку. Please drop target database and try again.
40567 40567 16 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Database copy failed due to an internal error. Удалите целевую базу данных и повторите попытку. Please drop target database and try again.
40568 40568 16 16 Не удалось скопировать базу данных. Database copy failed. Исходная база данных стала недоступна. Source database has become unavailable. Удалите целевую базу данных и повторите попытку. Please drop target database and try again.
40569 40569 16 16 Не удалось скопировать базу данных. Database copy failed. Целевая база данных стала недоступна. Target database has become unavailable. Удалите целевую базу данных и повторите попытку. Please drop target database and try again.
40570 40570 16 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Database copy failed due to an internal error. Удалите целевую базу данных и повторите попытку позднее. Please drop target database and try again later.
40571 40571 16 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Database copy failed due to an internal error. Удалите целевую базу данных и повторите попытку позднее. Please drop target database and try again later.

Ошибки управления ресурсами Resource governance errors

Ниже представлены ошибки, возникающие из-за чрезмерного использования ресурсов при работе с базой данных SQL Azure. The following errors are caused by excessive use of resources while working with Azure SQL Database. Например: For example:

  • транзакция остается открытой слишком долго; A transaction has been open for too long.
  • транзакция содержит слишком много блокировок; A transaction is holding too many locks.
  • приложение использует слишком много памяти; An application is consuming too much memory.
  • приложение использует слишком много пространства TempDb . An application is consuming too much TempDb space.

Связанные разделы: Related topics:

  • Дополнительные сведения можно найти в разделе For more information, see:
    • Ограничения ресурсов сервера базы данных Database server resource limits
    • Ограничения на основе DTU для отдельных баз данных DTU-based limits for single databases
    • Ограничения на основе DTU для эластичных пулов DTU-based limits for elastic pools
    • ограничения на основе виртуальное ядро для отдельных баз данных vCore-based limits for single databases
    • ограничения для эластичных пулов на основе виртуальное ядро vCore-based limits for elastic pools
    • Ограничения ресурсов управляемых экземпляров. Managed instance resource limits.


Код ошибки Error code Уровень серьезности Severity Description (Описание) Description
10928 10928 20 20 Идентификатор ресурса: %d. Resource ID: %d. Предел %s для базы данных составляет %d, и он достигнут. The %s limit for the database is %d and has been reached. Дополнительные сведения см. в статье Ограничения ресурсов Базы данных SQL для отдельных баз данных и баз данных в пуле. For more information, see SQL Database resource limits for single and pooled databases.

Идентификатор ресурса указывает на ресурс, предел которого был достигнут. The Resource ID indicates the resource that has reached the limit. Для рабочих потоков идентификатор ресурса = 1. For worker threads, the Resource > Для сеансов идентификатор ресурса — 2. For sessions, the Resource >

Дополнительные сведения об этой ошибке и способах ее устранения см. в статье: For more information about this error and how to resolve it, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.

10929 10929 20 20 Идентификатор ресурса: %d. Resource ID: %d. Минимальная гарантия %s составляет %d, максимальное значение равно %d, а текущее использование для базы данных — %d. The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. Тем не менее, в настоящее время сервер слишком занят, чтобы обработать более чем %d запросов для этой базы данных. However, the server is currently too busy to support requests greater than %d for this database. Идентификатор ресурса указывает на ресурс, предел которого был достигнут. The Resource ID indicates the resource that has reached the limit. Для рабочих потоков идентификатор ресурса = 1. For worker threads, the Resource > Для сеансов идентификатор ресурса — 2. For sessions, the Resource > Дополнительные сведения можно найти в разделе For more information, see:
ограничения ресурсов сервера базы данных • • Database server resource limits
• ограничения на основе DTU для отдельных баз данных • DTU-based limits for single databases
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.
В противном случае повторите попытку позже. Otherwise, please try again later.
40544 40544 20 20 База данных достигла предельного размера. The database has reached its size quota. Секционируйте или удалите данные, удалите индексы или попробуйте найти возможное решение в документации. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Сведения об масштабировании базы данных см. в статье масштабирование ресурсов отдельной базы данных и масштабирование ресурса эластичного пула. For database scaling, see Scale single database resources and Scale elastic pool resources.
40549 40549 16 16 Сеанс остановлен из-за наличия транзакции с длительным временем выполнения. Session is terminated because you have a long-running transaction. Попробуйте сократить время выполнения транзакции. Try shortening your transaction. Сведения о пакетировании см. в разделе Использование пакетной обработки для повышения производительности приложения базы данных SQL. For information on batching, see How to use batching to improve SQL Database application performance.
40550 40550 16 16 Сеанс остановлен, поскольку он использует слишком много блокировок. The session has been terminated because it has acquired too many locks. Попробуйте сократить количество читаемых или изменяемых строк в одной транзакции. Try reading or modifying fewer rows in a single transaction. Сведения о пакетировании см. в разделе Использование пакетной обработки для повышения производительности приложения базы данных SQL. For information on batching, see How to use batching to improve SQL Database application performance.
40551 40551 16 16 Сеанс остановлен из-за чрезмерного использования TEMPDB . The session has been terminated because of excessive TEMPDB usage. Попробуйте изменить запрос, чтобы сократить использование временного табличного пространства. Try modifying your query to reduce the temporary table space usage.

Если вы используете временные объекты, то для экономии места в базе данных TEMPDB удаляйте их сразу после того, как в них исчезнет необходимость. If you are using temporary objects, conserve space in the TEMPDB database by dropping temporary objects after they are no longer needed by the session. Дополнительные сведения об использовании tempdb в базе данных SQL см. в разделе база данных tempdb в базе данных SQL. For more information on tempdb usage in SQL Database, see Tempdb database in SQL Database.

40552 40552 16 16 Сеанс остановлен из-за чрезмерного использования места для журналов транзакций. The session has been terminated because of excessive transaction log space usage. Попробуйте сократить количество изменяемых строк в одной транзакции. Try modifying fewer rows in a single transaction. Сведения о пакетировании см. в разделе Использование пакетной обработки для повышения производительности приложения базы данных SQL. For information on batching, see How to use batching to improve SQL Database application performance.

В случае выполнения массовых вставок с использованием служебной программы bcp.exe или класса System.Data.SqlClient.SqlBulkCopy попробуйте ограничить количество строк, копируемых на сервер при каждой транзакции, с помощью параметра -b batchsize или BatchSize . If you perform bulk inserts using the bcp.exe utility or the System.Data.SqlClient.SqlBulkCopy class, try using the -b batchsize or BatchSize options to limit the number of rows copied to the server in each transaction. В случае перестройки индекса с помощью оператора ALTER INDEX попробуйте использовать параметр REBUILD WITH ONLINE = ON . If you are rebuilding an index with the ALTER INDEX statement, try using the REBUILD WITH ONLINE = ON option. Сведения о размерах журналов транзакций для модели приобретения Виртуальное ядро см. в следующих статьях: For information on transaction log sizes for the vCore purchasing model, see:
• ограничения на основе виртуальное ядро для отдельных баз данных • vCore-based limits for single databases
• ограничения на основе виртуальное ядро для эластичных пулов • vCore-based limits for elastic pools
• ограничения ресурсов для управляемого экземпляра . • Managed instance resource limits.

40553 40553 16 16 Сеанс остановлен из-за чрезмерного потребления памяти. The session has been terminated because of excessive memory usage. Попробуйте изменить запрос и задать обработку меньшего числа строк. Try modifying your query to process fewer rows.

Сокращение количества операций ORDER BY и GROUP BY в коде Transact-SQL позволяет уменьшить потребление памяти при выполнении запроса. Reducing the number of ORDER BY and GROUP BY operations in your Transact-SQL code reduces the memory requirements of your query. Сведения об масштабировании базы данных см. в статье масштабирование ресурсов отдельной базы данных и масштабирование ресурса эластичного пула. For database scaling, see Scale single database resources and Scale elastic pool resources.

Ошибки пула эластичных БД Elastic pool errors

Приведенные ниже ошибки связаны с созданием и использованием эластичных пулов. The following errors are related to creating and using elastic pools:

Код ошибки Error code Уровень серьезности Severity Description (Описание) Description Корректирующее действие Corrective action
1132 1132 17 17 Хранилище эластичного пула достигло своего предельного значения. The elastic pool has reached its storage limit. Уровень использования хранилища для эластичного пула не может превышать (%d) МБ. The storage usage for the elastic pool cannot exceed (%d) MBs. Попытка записи данных в базу данных, когда было достигнуто предельное значение хранилища эластичного пула. Attempting to write data to a database when the storage limit of the elastic pool has been reached. Сведения об ограничениях ресурсов см. в следующих статьях: For information on resource limits, see:
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для эластичных пулов. • vCore-based limits for elastic pools.
Если это возможно, попробуйте увеличить DTU эластичного пула и (или) добавить в него пространство хранения для увеличения предельного размера его хранилища, сократить объем памяти, используемой отдельными базами данных в эластичном пуле, или удалить базы данных из пула. Consider increasing the DTUs of and/or adding storage to the elastic pool if possible in order to increase its storage limit, reduce the storage used by individual databases within the elastic pool, or remove databases from the elastic pool. Сведения о масштабировании эластичных пулов см. в статье масштабирование ресурсов эластичного пула. For elastic pool scaling, see Scale elastic pool resources.
10929 10929 16 16 Минимальная гарантия %s составляет %d, максимальное значение равно %d, а текущее использование для базы данных — %d. The %s minimum guarantee is %d, maximum limit is %d, and the current usage for the database is %d. Тем не менее, в настоящее время сервер слишком занят, чтобы обработать более чем %d запросов для этой базы данных. However, the server is currently too busy to support requests greater than %d for this database. Сведения об ограничениях ресурсов см. в следующих статьях: For information on resource limits, see:
• ограничения на основе DTU для эластичных пулов • DTU-based limits for elastic pools
• ограничения на основе виртуальное ядро для эластичных пулов. • vCore-based limits for elastic pools.
В противном случае повторите попытку позже. Otherwise, please try again later. Минимальное количество DTU или виртуальных ядер на базу данных; максимальное количество DTU или виртуальных ядер на базу данных. DTU / vCore min per database; DTU / vCore max per database. Общее количество одновременных работников (запросов) по всем базам данных в эластичном пуле превысило ограничение пула. The total number of concurrent workers (requests) across all databases in the elastic pool attempted to exceed the pool limit.
Если это возможно, попробуйте увеличить DTU или число виртуальных ядер эластичного пула для увеличения предельно допустимого количества работников или удалить базы данных из эластичного пула. Consider increasing the DTUs or vCores of the elastic pool if possible in order to increase its worker limit, or remove databases from the elastic pool.
40844 40844 16 16 База данных ‘%ls’ на сервере ‘%ls’ является базой данных выпуска ‘%ls’ в эластичном пуле и не может иметь связь непрерывной копии. Database ‘%ls’ on Server ‘%ls’ is a ‘%ls’ edition database in an elastic pool and cannot have a continuous copy relationship. Недоступно N/A
40857 40857 16 16 Эластичный пул для сервера ‘%ls’ не найден, имя эластичного пула: ‘%ls’. Elastic pool not found for server: ‘%ls’, elastic pool name: ‘%ls’. На указанном сервере указанный эластичный пул не существует. Specified elastic pool does not exist in the specified server. Укажите допустимое имя эластичного пула. Provide a valid elastic pool name.
40858 40858 16 16 Эластичный пул «%ls» на сервере «%ls» уже существует. Elastic pool ‘%ls’ already exists in server: ‘%ls’. Указанный эластичный пул уже существует на указанном сервере Базы данных SQL. Specified elastic pool already exists in the specified SQL Database server. Укажите новое имя эластичного пула. Provide new elastic pool name.
40859 40859 16 16 Эластичный пул не поддерживает уровень служб ‘%ls’. Elastic pool does not support service tier ‘%ls’. Для подготовки эластичного пула указанный уровень служб не поддерживается. Specified service tier is not supported for elastic pool provisioning. Укажите правильный выпуск или оставьте значение уровня служб пустым, чтобы использовать значение по умолчанию. Provide the correct edition or leave service tier blank to use the default service tier.
40860 40860 16 16 Недопустимая комбинация эластичного пула ‘%ls’ и цели службы ‘%ls’. Elastic pool ‘%ls’ and service objective ‘%ls’ combination is invalid. Эластичный пул и уровень служб можно указать вместе только в том случае, если тип ресурса задан как ElasticPool. Elastic pool and service tier can be specified together only if resource type is specified as ‘ElasticPool’. Укажите правильную комбинацию эластичного пула и уровня служб. Specify correct combination of elastic pool and service tier.
40861 40861 16 16 Выпуск «%.ls» базы данных не может отличаться от уровня служб пула эластичных БД, который равен «%. ls». The database edition ‘%.ls’ cannot be different than the elastic pool service tier which is ‘%. ls’. Выпуск базы данных отличается от уровня служб эластичного пула. The database edition is different than the elastic pool service tier. Не указывайте выпуск базы данных, который отличается от уровня служб эластичного пула. Do not specify a database edition which is different than the elastic pool service tier. Обратите внимание, что выпуск базы данных указывать не требуется. Note that the database edition does not need to be specified.
40862 40862 16 16 Если указана цель служб эластичного пула, то необходимо указать имя этого эластичного пула. Elastic pool name must be specified if the elastic pool service objective is specified. Цель службы эластичного пула неоднозначно определяет эластичный пул. Elastic pool service objective does not uniquely identify an elastic pool. Если используется цель служб эластичного пула, укажите имя этого эластичного пула. Specify the elastic pool name if using the elastic pool service objective.
40864 40864 16 16 Число DTU для эластичного пула должно составлять по крайней мере (%d) DTU для уровня служб «%.*ls». The DTUs for the elastic pool must be at least (%d) DTUs for service tier ‘%.*ls’. Попытка задать для эластичного пула DTU, значение которого ниже минимального ограничения. Attempting to set the DTUs for the elastic pool below the minimum limit. Повторите попытку, установив для эластичного пула DTU, значение которого хотя бы равно минимальному ограничению. Retry setting the DTUs for the elastic pool to at least the minimum limit.
40865 40865 16 16 Число DTU для эластичного пула не должно превышать (%d) DTU для уровня служб «%.*ls». The DTUs for the elastic pool cannot exceed (%d) DTUs for service tier ‘%.*ls’. Попытка задать для эластичного пула DTU, значение которого выше максимального ограничения. Attempting to set the DTUs for the elastic pool above the maximum limit. Повторите попытку, установив для эластичного пула DTU, значение которого не превышает максимальное ограничение. Retry setting the DTUs for the elastic pool to no greater than the maximum limit.
40867 40867 16 16 Максимальное количество DTU на каждую базу данных должно составлять как минимум (%d) для уровня служб «%.*ls». The DTU max per database must be at least (%d) for service tier ‘%.*ls’. Попытка задать максимальное количество DTU на каждую базу данных ниже поддерживаемого ограничения. Attempting to set the DTU max per database below the supported limit. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр. Consider using the elastic pool service tier that supports the desired setting.
40868 40868 16 16 Максимальное количество DTU на каждую базу данных не должно превышать (%d) для уровня служб «%.*ls». The DTU max per database cannot exceed (%d) for service tier ‘%.*ls’. Попытка задать максимальное число DTU на каждую базу данных, которое находится за пределами поддерживаемого ограничения. Attempting to set the DTU max per database beyond the supported limit. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр. Consider using the elastic pool service tier that supports the desired setting.
40870 40870 16 16 Минимальное количество DTU на каждую базу данных не должно превышать (%d) для уровня служб «%.*ls». The DTU min per database cannot exceed (%d) for service tier ‘%.*ls’. Попытка задать минимальное число DTU на каждую базу, которое находится за пределами поддерживаемого ограничения. Attempting to set the DTU min per database beyond the supported limit. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр. Consider using the elastic pool service tier that supports the desired setting.
40873 40873 16 16 Количество баз данных (%d) и минимальное количество DTU на каждую базу данных (%d) не может превышать DTU эластичного пула (%d). The number of databases (%d) and DTU min per database (%d) cannot exceed the DTUs of the elastic pool (%d). Попытка задать минимальное количество DTU для баз данных в эластичном пуле, превышающее DTU эластичного пула. Attempting to specify DTU min for databases in the elastic pool that exceeds the DTUs of the elastic pool. Попробуйте увеличить количество DTU эластичного пула, уменьшить минимальное количество DTU на каждую базу данных или уменьшить количество баз данных в эластичном пуле. Consider increasing the DTUs of the elastic pool, or decrease the DTU min per database, or decrease the number of databases in the elastic pool.
40877 40877 16 16 Эластичный пул не может быть удален до тех пор, пока он содержит какую-либо базу данных. An elastic pool cannot be deleted unless it does not contain any databases. Эластичный пул содержит одну или несколько баз данных и не может быть удален. The elastic pool contains one or more databases and therefore cannot be deleted. Чтобы удалить эластичный пул, удалите из него базы данных. Remove databases from the elastic pool in order to delete it.
40881 40881 16 16 В эластичном пуле ‘%.*ls’ достигнуто предельное количество баз данных. The elastic pool ‘%.*ls’ has reached its database count limit. Максимальное количество баз данных для пула эластичных баз данных не может превышать (%d) для пула эластичных баз данных с (%d) DTU. The database count limit for the elastic pool cannot exceed (%d) for an elastic pool with (%d) DTUs. Попытка создания или добавления базы данных в эластичный пул, когда было достигнуто предельное количество баз данных эластичного пула. Attempting to create or add database to elastic pool when the database count limit of the elastic pool has been reached. Если это возможно, попробуйте увеличить DTU эластичного пула, чтобы увеличить предельное количество баз данных, или удалить базы данных из эластичного пула. Consider increasing the DTUs of the elastic pool if possible in order to increase its database limit, or remove databases from the elastic pool.
40889 40889 16 16 Невозможно уменьшить количество DTU или размер хранилища для эластичного пула ‘%.*ls’, так как недостаточно места в хранилище баз данных. The DTUs or storage limit for the elastic pool ‘%.*ls’ cannot be decreased since that would not provide sufficient storage space for its databases. Попытка ограничить размер хранилища эластичного пула, при которой уменьшается размер используемого им хранилища. Attempting to decrease the storage limit of the elastic pool below its storage usage. Попробуйте сократить использование хранилища отдельными базами данных в эластичном пуле или удалить базы данных из пула, чтобы уменьшить количество DTU или размер хранилища. Consider reducing the storage usage of individual databases in the elastic pool or remove databases from the pool in order to reduce its DTUs or storage limit.
40891 40891 16 16 Минимальное число DTU на базу данных (%d) не может превышать максимального числа DTU на базу данных (%d). The DTU min per database (%d) cannot exceed the DTU max per database (%d). Попытка задать минимальное число DTU на каждую базу данных, превышающее максимальное число DTU на каждую базу данных. Attempting to set the DTU min per database higher than the DTU max per database. Убедитесь, что минимальное число DTU на базу данных не превышает максимального числа DTU на базу данных. Ensure the DTU min per databases does not exceed the DTU max per database.
ПОДЛЕЖИТ УТОЧНЕНИЮ TBD 16 16 Размер хранилища для отдельной базы данных в эластичном пуле не может превышать максимальный размер, допустимый уровнем служб эластичного пула «%.*ls». The storage size for an individual database in an elastic pool cannot exceed the max size allowed by ‘%.*ls’ service tier elastic pool. Максимальный размер базы данных превышает максимальный размер, допустимый уровнем служб эластичного пула. The max size for the database exceeds the max size allowed by the elastic pool service tier. Укажите максимальный размер базы данных, который находится в пределах ограничений на максимальный размер, допустимый уровнем служб эластичного пула. Set the max size of the database within the limits of the max size allowed by the elastic pool service tier.

Связанные разделы: Related topics:

Общие ошибки General errors

Приведенные ниже ошибки не входят ни в одну из предыдущих категорий. The following errors do not fall into any previous categories.

Расширенные возможности языка хранимых процедур InterBase

Расширенные возможности языка хранимых процедур InterBase

Эта глава посвящена тем возможностям языка хранимых процед>р InteiBase, которые позволяют эффективно реализовывать бизнес-логику на уровне базы данных и разрабатывать устойчивые и высокопроизводительные приложения баз данных

Обработка исключений и ошибок

Первой из рассматриваемых особенностей языка хранимых процедур (ХП) и триггеров InterBase является возможность использовать «исктючения»
Исключения InterBase во многом похожи на исключения других языков высокого уровня, однако имеют свои особенности Фактически исключение InterBase — это сообщение об ошибке, которое имеет собственное, задаваемое программистом имя и текст сообщения об ошибке. Создается исключение следующим образом:

Например, мы можем создать исключение такого вида:

CREATE EXCEPTION test_except ‘Test exception’;

Исключение легко удалить или изменить — удаление совершается командой DROP EXCEPTION , а изменение — ALTER EXCEPTION
Чтобы использовать исключение в хранимой процедуре или триггере, необходимо воспользоваться командой следующего вида:

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

CREATE EXCEPTION zero_divide ‘Cannot divide by zero!’;

Создадим хранимую процедуру, использующую это исключение:

CREATE PROCEDURE SP_DIVIDE (
DELIMOE DOUBLE PRECISION,
DELITEL DOUBLE PRECISION)
RETURNS (
RESULT DOUBLE PRECISION)
AS
BEGIN
if (Delitel
BEGIN
EXCEPTION zero_divide;
Result=0;
END
ELSE
BEGIN
Result=Delimoe/Delitel;
END
SUSPEND;
END

Как видите, текст ХП тривиален — на входе получаем Delitel и Delimoe, затем сравниваем Delitel с 0.0000001, т. е. фактически с нулем, в пределах выбранной погрешности в одну десятимиллионную (так как вещественные числа невозможно непосредственно сравнивать из-за погрешностей в дробной части). Если Delitel близок к нулю в пределах выбранной погрешности, то мы возбуждаем исключение zero_divide. Что же происходит в случае возникновения исключения? Если мы попробуем вызвать исключение, выполняя процедуру SP_divide с нулевым делителем в isql. то получим следующее

SQL> select * from sp_divide(300,0);
RESULT
==========
Statement failed, SQLCODE = -836
exception 1
-Cannot divide by zero!

Если мы вызовем эту ХП с нулевым делителем в каком-либо другом приложении, то скорее всего получим сообщение об ошибке следующего вида:

Рис 1.4. Сообщение о возникновении исключения

Другими словами, сообщение об ошибке — это результат обработки нашего исключения сервером InterBase. Когда InterBase обнаруживает возникшее в ХП или триггере исключение он прерывает работу этой хранимой процедуры и откатывает все изменения, сделанные в текущем блоке BEGIN END, причем если ХП является процедурой-выборкой, то отменяются действия лишь до последнего оператора SUSPEND.
Это значит, что если в процедуре-выборке есть цикл, в котором производятся какие-то действия, и в теле цикла есть SUSPEND, то при возбуждении исключения О1меня1ся все дейс1вия, выполненные в этом цикле до последнего оператора SUSPEND.
Надо сказать, что в исключениях было бы мало пользы, если бы у разработчика СУБД не было возможности обработать их на уровне базы данных. Чтобы разработчик смог обработать возникшее исключение, применяется следующая конструкция языка XП и триггеров:

WHEN EXCEPTION DO
BEGIN
/*обработка исключения*/
END

Использование этой конструкции помогает избежать возвращения стандартной ошибки с текстом исключения и произвести собственные действия по обработке исключения.
Когда возбуждается исключение, происходит следующее: выполнение хранимой процедуры (или триггера) прерывается. InterBase начинает искать конструкцию WHEN EXCEPTION. DO для обработки возникшего исключения в текущем блоке BEGIN. END. Если не находит, то поднимается на уровень выше (выше в том смысле, если имеются вложенные блоки BEGIN. END или когда одна ХП вызвана из другой) и ищет обработчик исключения там и т. д., пока либо не найдет подходящий обработчик исключения, либо не закончится вложенность уровней хранимой процедуры. Если обработчик исключения так и не был найден, то возвращается стандартное сообщение об ошибке, включающее текст исключения. Если обработчик найден, то выполняются действия в его блоке BEGIN. END и управление передается на первый оператор, следующий за END обработчика.
Давайте рассмотрим пример обработки исключения, возбуждаемого в нашей процедуре SP_DIVIDE. Предположим, что мы имеем некоторую внешнюю процедуру SP_divide_all, вызывающую SPJDFVIDE для того, чтобы поделить два числа. Конечно, пример сильно утрирован, но он позволяет пояснить способ и смысл использования исключений.
Итак, вот текст нашей хранимой процедуры:

CREATE PROCEDURE sp_test_except(Delltel DOUBLE PRECISION)
RETURNS (rslt DOUBLE PRECISION, status VARCHAR(SO))
AS
BEGIN
Status=’Everything is Ok’;
SELECT result FROM sp_divide(12,:Delitel) INTO :rslt;
SUSPEND;
WHEN EXCEPTION Zero_divide DO
BEGIN
Status=’zero value found!’;
rslt=-l;
SUSPEND;
END
END

Эта процедура вызывает процедуру SP_DIVIDE. Если параметр Delitel не равен нулю, то процедура SP_DIVIDE выполняется без проблем и в возвращаемое значение rslt помещается частное от деления, а статусная переменная status принимает значение ‘Everything is Ok’. В случае, если возникла исключительная ситуация деления на нуль, то результирующая переменная rslt будет равна -1, а в переменной status будет содержаться сообщение об ошибке — ‘zero value found!’. Разумеется, в обработчике исключения можно произвести и более сложную обработку, например записать некорректные данные в особую таблицу или попытаться изменить данные для выполнения операции и вновь попробовать ее выполнить и т. д.

Обработка ошибок SQL и InterBase

Разобравшись с обработкой исключений, определяемых пользователем, можем перейти к обработке ошибок InterBase. Ошибка — это фактически то же самое исключение, только возбуждаемое InterBase. Принцип обработки ошибок тот же самый что и исключений: если возникает какая-то ошибка, то сервер ищет ее обработчик, последовательно просматривая все уровни вложенности (если они есть) хранимой процедуры, начиная с того уровня, на котором возникла ошибка.
Если обработчик найден, то выполняется код внутри его, а затем управление передается на первый оператор за обработчиком исключений.
Конструкция, с помощью которой производится обработка ошибок, такая же, как и для обработки исключений, только вместо EXCEPTION стоит либо GDSCODE, либо SQLCODE:

WHEN GDSCODE SQLCODE DO
BEGIN
/*обрабатываем ошибку*/
END

В зависимости от того, стоит ли в конструкции обработки ошибок GDSCODE или SQLCODE, обрабатываются различные ошибки. Если стоит SQLCODE, то обрабатываются ошибки SQL, а если GDSCODE — то ошибки InterBase. Примером ошибки SQL является ошибка с SQLCODE=-802 «Arithmetic exception, numeric overflow, or string truncation» или SQLCODE=-817 «Attempted update during read-only transaction» Список ошибок SQL и соответствующих им значений SQLCODE приведен в таблице «SQLCODE codes and messages’. Примером ошибки InterBase является ошибка isc_bad_dbkey 335544322L «invalid database key».
Таким образом, внутри хранимой процедуры можно «перехватить» практически любую ошибку и корректно на нее отреагировать. Можно перечислять обработчики ошибок один за другим, чтобы определить реакцию на разные ошибки.
А что делать, если нужно прореагировать на любую ошибку? Не прописывать же обработчики всех сотен возможных ошибок? Конечно же, нет. Для того чтобы написать безусловный обработчик, реагирующий на любую ошибку — SQL, InterBase или исключение, следует воспользоваться конструкцией WHEN DO с ключевым словом ANY:

WHEN ANY DO
BEGIN
/*действия при любой нестандартной операции ошибке
или исключении */
END

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

Работа с массивами в хранимых процедурах

Массивы, как было сказано в главе «Типы данных», позволяют хранить в одном поле набор данных какого-нибудь одного элементарного типа. Однако «простым» SQL-запросом данные не извлечь и не изменить. Необходим особый пеиход для раосмы с массивами InteiBase в клиешских приложениях — см paздел «Поддержка array-полей в FIBPIus» в главе (ч 2) и «Разработка клиентских приложений СУБД InterBase с использованием технологии Microsoft OLE DB» (ч. 3). К тому же не все библиотеки доступа поддерживают работу с массивами.
Хранимые процедуры позволяют легко просматривать данные из массивов. Они используют простой и очевидный синтаксис для обращения к элементам массива. Например, пусть у нас будет таблица, содержащая поле типа массив целых чисел:

CREATE TABLE table_array(
ID_table INTEGER,
Arrayl INTEGER[3,2]);

Теперь можно продемонстрировать, как можно просмотреть данные из этого массива. Для этого внутри хранимой процедуры применяется конструкция вида

SELECT Arrayl[:i, :j] FROM table_array INTO :ElemValue;

Давайте оформим механизм доступа к массиву в виде следующей хранимой процедуры:

CREATE PROCEDURE SelectFromArr(ID_row INTEGER,
x INTEGER, у INTEGER, vl integer)
Returns (ElemValue INTEGER)
AS
BEGIN
SELECT arrayl[:x,:y]
FROM table_array
WHERE >
INTO :ElemValue;
SUSPEND;
END

Как видите, текст ХП очевиден — просто извлекаем нужные значения из элемента массива с заданными индексами х и у в строке таблицы table_array с идентификатором >

В этой главе был рассмотрен ряд дополнительных возможностей языка хранимых процедур (и триггеров) СУБД InterBase. Использование описанных конструкций языка позволит разрабатывать более развитые и надежные хранимые процедуры, а значит, более быстрые и надежные приложения баз данных.

Илон Маск рекомендует:  ruby в HTML
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL