Database error encountered перевод

Перевод контекст "database error" c английский на русский от Reverso Context: I think this must be some kind of bug or database error.


На основании Вашего запроса эти примеры могут содержать грубую лексику.


На основании Вашего запроса эти примеры могут содержать разговорную лексику.

ошибка базы данных

ошибки базы данных


I think this must be some kind of bug or database error.


And it was because of a database error.


I just encountered another database error when I tried to connect.


The Department of Justice blamed a database error, which failed to identify conviction information for over 8 million arrest records.



Министерство юстиции обвинение положило на ошибку баз данных, которые не смогли определить информацию относительно осуждений для более 8 миллионов записей ареста.


When search engine bots try to access the site, they will find pages that contain database error messages instead of content that is related to the site keywords.



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


Instead, if the tester encounters a database error, it means that the user input is inserted in some query which is then executed by the application.



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


ANPR database error leads to wrongful arrest



Неполадки электронной базы данных привели к ошибочным ареста


Mozilla’s website for developers leaked email addresses and encrypted passwords of registered users for about a month due to a database error, the organization said Friday.



С сайта Mozilla для разработчиков произошла утечка адресов электронной почты и зашифрованных паролей зарегистрированных в течение месяца пользователей из-за ошибки базы данных.


A Could not connect to the database error means that you didn’t enter the database data correctly and it is not possible for phpBB to connect.



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


A database error has occured.


A Database Error Occurred |

Ничего не найдено для этого значения.

Результатов: 11. Точных совпадений: 11. Затраченное время: 105 мс

Documents

Корпоративные решения

Спряжение

Синонимы

Корректор

Справка и о нас

Индекс слова: 1-300, 301-600, 601-900

Индекс выражения: 1-400, 401-800, 801-1200

Индекс фразы: 1-400, 401-800, 801-1200

Error is encountered: перевод, синонимы, произношение, примеры предложений, антонимы, транскрипция

Произношение и транскрипция

Перевод по словам

error [noun]

noun: погрешность, ошибка, заблуждение, отклонение, рассогласование, грех, блуждание, уклонение

  • balancing error — компенсирующая ошибка
  • identification error — ошибка при установлении личности
  • error correction routine — программа исправления ошибок
  • spatial error — пространственная ошибка
  • avoid an error — избежать ошибок
  • to eliminate an error — устранить ошибку
  • database i/o error — я база данных / о ошибке
  • error covariance matrix — ковариационная матрица ошибок
  • actual error — фактическая ошибка
  • sequence error — ошибка последовательности
  • , it is not yet clear, — , однако пока неясно ,
  • who is cletis tout? — Тот, которого заказали
  • IS threat — угроза ИГ
  • there is a difference — есть разница
  • we believe it is our responsibility — мы считаем, что это наша ответственность
  • a contribution is needed — вклад необходим
  • among them there is — среди них есть
  • is getting familiar — становится знакомым
  • is provided for information purposes — предоставляется в информационных целях
  • the pen is mightier than the sword — ручка сильнее меча

encountered [verb]

verb: сталкиваться, неожиданно встретить, иметь столкновение, неожиданно встретиться, наталкиваться

  • of issues encountered — вопросов столкнулись
  • still encountered — до сих пор встречаются
  • encountered an — возникновении
  • encountered problems — столкнулись с проблемами
  • may be encountered — могут возникнуть
  • she encountered — она столкнулась
  • i have ever encountered — я когда-либо сталкивался
  • encountered in the field — встречается в области
  • as they are encountered — как они встречаются
  • which are encountered — которые встречаются

Предложения с «error is encountered»

An error was encountered while deserializing the message. The message cannot be received.

Ошибка при десериализации сообщения. Сообщение не может быть принято.

During the recovery a maximum of 20 errors per error correction block is encountered .

В процессе восстановления встретилось максимум 20 ошибок на ECC блок.

This may mean that Xbox Live has encountered an error , or that your Xbox console is experiencing network connectivity trouble.

Это может означать, что возникла ошибка в работе консоли Xbox или ее сетевом подключении.

If a lagged copy encounters database page corruption (for example, a -1018 error ), the copy will have to be reseeded.

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

If you’ve encountered an error or status code, enter it exactly as shown.

Введите обнаруженный код ошибки или состояния точно так, как он отображается на экране.

The numbers represent an error message that high-tech systems encounter … when they can’t boot up.

Эти цифры обозначают сообщение об ошибке, которое выдают продвинутые системы, когда не могут загрузиться.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена запрещенная ошибка 403.

  • «error is encountered» Перевод на арабский
  • «error is encountered» Перевод на бенгальский
  • «error is encountered» Перевод на китайский
  • «error is encountered» Перевод на испанский
  • «error is encountered» Перевод на хинди
  • «error is encountered» Перевод на японский
  • «error is encountered» Перевод на португальский
  • «error is encountered» Перевод на русский
  • «error is encountered» Перевод на венгерский
  • «error is encountered» Перевод на иврит
  • «error is encountered» Перевод на украинский
  • «error is encountered» Перевод на турецкий
  • «error is encountered» Перевод на итальянский
  • «error is encountered» Перевод на греческий
  • «error is encountered» Перевод на хорватский
  • «error is encountered» Перевод на индонезийский
  • «error is encountered» Перевод на французский
  • «error is encountered» Перевод на немецкий
  • «error is encountered» Перевод на корейский
  • «error is encountered» Перевод на панджаби
  • «error is encountered» Перевод на маратхи
  • «error is encountered» Перевод на узбекский
  • «error is encountered» Перевод на малайский
  • «error is encountered» Перевод на голландский
  • «error is encountered» Перевод на польский
  • «error is encountered» Перевод на чешский

1) система || системный

2) вычислительная система

3)

вчт

операционная система; программа-супервизор

4) система уравнений

5)

вчт

большая программа

6) метод; способ; алгоритм

system halted — «система остановлена» ( экранное сообщение об остановке компьютера при наличии серьёзной ошибки)

system for event evaluation and review

system for interactive design

system of demand equations

system of units

system on glass

2-2-4 system

4-2-4 system

4-4-4 system

absolutely centralized computer system

access control list system

accounting system

Accutrack 400 system

action logic system

action-translation system

active array antenna system

active night-vision system

activity-based costing system

adaptive control system

adaptive neuro-fuzzy inference system

ADE system

adjoint system

aerial system

aerospace support system

AEW system

AGS system

airborne early-warning system

airborne warning and control system

airborne weather radar system

aircraft collision avoidance system

airfield communication system

air-traffic control system

air-traffic control radar-beacon system

airways environmental radar information system

alignment-and-exposure system

all-weather guidance system

all-weather landing system

alpha system

alpha reinforcement system

alternation-product block-cipher system

analog protection system

Andrew file system

antenna-ground system

antishock system

antiskip system

applet file system

application control and management system

application development system

Armstrong frequency-modulation system

ASR system

asymmetric cryptographic system

asynchronous address communication system

asynchronous-multiplex system

ATC system

attached processor system

attended system

A-type Dolby system

A-type professional Dolby system

audio system

audio noise-reduction Dolby system

audiovisual system

author system

authoring system

automated design engineering system

automated vision system

automatic coding system

automatic computer-controlled electronic scanning system

automatic control system

automatic data processing system

automatic degaussing system

automatic degaussing control system

automatic digital encoding system

automatic gain stabilization system

automatic intercept system

automatic noise-reduction system

automatic program search system

automatic programmable logic array synthesis system

automatic radio direction-finding system

automatic speech-recognition system

automatic stabilization and control system

automatic tape calibration system

automatic-telephone system

automatic test system

automatic tuning system

automatic vacuum deposition system

automobile navigation system

autonomous system

avionics system

aware system

balance-line system

ballistic-missile early-warning system

band-limited system

bandwidth compression system

BAR system

bare-bones system

base station system

baseband radar system

basic input/output system

batch-processing system

Batten system

BCF system

beam-current feedback system

beam-forming system

beam-guidance system

beam-rider control system

beep-only system

beep-plus-voice system

billing system

binary system

binary number system

bit-serial system

blind approach beacon system

bridge duplex system

broadcast television system

B-type Dolby system

B-type simplified Dolby system

building-block CAD system

built-in expert system

bus system

business information system

cable distribution system

cable modem termination system

CACE system

CAD system

CADIC system

CAE system

call queuing system

calorimeter system

carrier system

carrier-communication system

carrier-telegraph system

case-based expert system

CATV system

CD-4 system

celestial coordinate system

celestial guidance system

cellular radio system

central-battery system

central-control system

central nervous system

centralized automatic trouble-location system

centralized computer system

CF system

CGS system

CGS electromagnetic system

CGS electrostatic system

chaff communication system

Chain Home radar system

chain rdr system

chaotic system

chirp radar system

CH radar system

ciphertext autokey system

Civis system

classifier system

closed bus system

closed-circuit television system

closed-cycle control system

closed-loop control system

closed-loop servo system

cloud and collision warning system

clutter rejection system

CMY system

CMYK system

coarse-fine system

code addressed system

coherent carriers system

coherent spread-spectrum system

collision avoidance system

color management system

COM system

command system

command and control system

command-driven system

command guidance system

command-line operating system

common system

common carrier system

common Internet file system

common timing system

communication system

communications and tracking system

communications switching system

community antenna television system

compact-disk file system

compatible color television system

compatible single-sideband system

compatible stereo system

compatible stereo-quadraphonic record system

compatible time-sharing system

complete residue system

complex system

composite guidance system

compound interferometer system

computer system

computer-aided control engineering system

computer-aided design and test system

computer-aided engineering system

computer-aided IC design system

computer-aided retrieval system

computer-aided voice wiring system

computer-assisted radar display system

computer-augmented oscilloscope system

computer-based expert system

computer-based photoelectric-counting system

computer-controlled system

computer-controlled electron-beam system

computer-controlled recording system

computer output microfilm system

computer process control system

computer vision system

computing system

configurable system

configurable business system

connected-speech recognition system

connectionist system

conservative system

constant-frequency variable-dot system

content scrambling system

continuous presence system

continuous-wave tracking system

control system

conversational system

conversational program system

Cook system

cooling system

cooperative system

coordinate system

copy generation management system

correlated orientation tracking and range system

correlation tracking system

correlation tracking and triangulation system

cotar system

cotat system

countermeasure system

CPsystem

crossband system

crossbar system

cross-development system

crossed-coincident microphone system

cryptographic system

crystal system

CSR system

C-type Dolby system

cubic crystal system

current awareness system

customer information control system

data system

data-acquisition system

data-banking system

database management system

database management system for workgroups

data-collection system

data collection and reduction system

data communication system

data-compression system

data-gathering system

data-handling system

data management system

data-processing system

data reduction system

data-retrieval system

data-transmission system

dc diode sputtering system

dc self-synchronous system

dc triode sputter deposition system

DDC system

decentralized computer system

decimal system

decimal number system

decision support system

dedicated system

deep submicron system

defense message system

descriptor-based protection system

DEW system

df antenna system

diagnostic information system

dial telephone switching system

differential duplex system

differential global positioning system

Diffie-Hellman system

digital system

digital access and cross-connect system

digital cellular system

digital cellular system 1800 MHz

digital data-handling system

digital link management system

digital private network signaling system

Digital Research disk operating system

digital switching system

digital television system

digital voice communication system

direct-challenge system

direct-dialing telephone system

direct-digital control system

direct-feedback system

direct program search system

direction-finder antenna system

directory assistance system

direct-sequence system

direct-spread system

disaster tolerant disk system

discrete-address beacon system

discrete-addressed beacon system

discrete dynamic system

discrete-parameter system

discrete sound system

discriminating-call system

discriminating-ring system

disk operating system

disperse system

display system

dissipative system

distant early-warning system

distributed system

distributed control system

distributed data base management system

distributed file system

distributed information processing system

distributed-parameter system

distributed-processing system

distributed software system

document preparation system

document viewing system

Dolby system

Dolby A system

Dolby AC-3 system

Dolby B system

Dolby C system

Dolby Digital system

Dolby Headroom Extension Pro system

Dolby HX Pro system

Dolby Noise Reduction system

Dolby NR system

Dolby S system

Dolby Spectral system

Dolby Surround system

Dolby Surround Pro-Logic system

domain name system

domestic satellite communication system

Doppler inertial system

dot-sequential system

dot-sequential color-television system

double capstan system

dp system

DS system

dual fail-safe system

duplex system

duplicated system

dynamic system

early-warning system

Earth-satellite-Earth communication system

Edison power distribution system

educational expert system

effective technical and human implementation of computer-based systems

eight-track cartridge system

electromechanically driven projection system

electron beam deflection system

electron-beam exposure system

electronic countermeasures system

electronic data-processing system

electronic document management system

electronic funds transfer system

electronic guidance system

electronic identification system

electronic mail system

electronic meeting system

electronic performance support system

electronic-scanning system

electronic scanning radar system

electronic switching system

electronic tracking system

electron-optical system

electrooptic light-modulation system

e-mail system

embedded system

emergent system

end system

enhanced digital access communications system

enhanced total access communication system

enterprise system

enterprise network management system

entry-level system

EOLM system

equatorial satellite communication system

equatorial-orbit satellite communication system

equilibrium system

equivalent four-wire system

error-correcting reinforcement system

error-correcting telegraph system

error-detecting and feedback system

European communications satellite system

European fixed service satellite system

European radio messaging system

Eurovision system

evolutionary stable system

executive system

executive information system

expert system

extended file system-2

extra bass system

extraterrestrial reconnaissance system

Fabry-Perot mirror system

facsimile system

fail-safe system

fail-soft system

failure resistant disk system

failure tolerant disk system

FAT16 file system

FAT32 file system

fault resilient system

FDM system

FEC system

federated system

feed system

feedback-control system

feed-forward system

fiber-optics system

fiber optics transmission system

field system

field-sequential system

field-sequential color television system

field skip system

file system

file-control system

file-oriented system

film-based projection system

financial expert system

first generation wireless system

fixed-point system

fixer system

flat file system

flexible manufacturing system

floating-point system

forced-air cooling system

forward error control system

forward-loop system

four-channel sound system

four-level system

fractal information system

frame-alignment system

freeway surveillance and control system

frequency-carrier system

frequency-division multiplex system

frequency-hopping system

frequency-reuse satellite system

fuel-cell system

full field system

future public land mobile telephone system

fuzzy system

fuzzy control system

fuzzy expert system

fuzzy logic expert system

3Gwireless system

gamma system

gamma reinforcement system

gate-array CAD system

Gauss system

generalized information system

general-purpose display system

geographical information system

geolocation system

Giorgi system

global system

global system for mobile communication

global communication system

global navigation satellite system

global positioning system

global telecommunication system

global time-synchronization system

graphical kernel system

ground system

ground-based scanning antenna system

ground-control system

ground-controlled approach system

ground electrooptical deep-space surveillance system

ground guidance system

ground information processing system

ground instrumentation system

ground proximity warning system

group decision support system

group support system

guidance system

H-system

h-system

Hamiltonian system

hard system

hardware system

Hartree system

heat-seeking system

helium refrigeration system

heterogeneous agent system

heuristic-based expert system

hexagonal crystal system

hierarchical database management system

hierarchical file system

hierarchical recognition system

high-accuracy data transmission system

high-density modem system

high performance file system

highway system

HLS system

holographic ice surveying system

holographic recording and readout system

home audio system

homer system

homing system

horn-lens system

host-based system

HSB system

HSV system

hung system

hybrid computer system

hydrogen-air/lead battery hybrid system

hyperbolic guidance system

hyperbolic navigation system

hyperbolic radar system

hypertext authoring systems

identification system

image-forming system

image information system

image-processing system

independent system

inertial system

inertial control system

inertial instrument system

inertial navigation system

inertial space reference system

infinite-dimensional system

infinitely-fast control system

information system

information and control system

information exchange system

information-feedback system

information management system

information-retrieval system

infrared heat-seeking system

infrared search track system

input/output control system

inquiry and communications system

installable file system

instant program locating system

instrument-landing system

insulation system

integrated antenna system

intelligence system

intelligent knowledge-base system

interactive system

interactive application system

interactive design system

interactive graphics system

interactive pattern analysis and classification system

interactive software system

interactive voice system

intercarrier sound system

inter-city telecommunications system

intercommunication system

interconnection system

interference position monitoring system

intermediate system

intermediate system to intermediate system

intermittent control system

internetwork operating system

inter-organization system

interphone system

interplanetary radar system

interpretating system

interrupt system

Intervision system

intranet-extranet system

intrusion detection system

inverted spin system

ionoscatter system

isolated-word recognition system

isometric crystal system

isotropic system

iterated function system

iterative product-cipher system

Japanese cellular system

Java operation system

J-carrier system

job entry system

joint surveillance system

joint tactical information distribution system

Ksystem

K-carrier system

keyboard-to-disk system

keyboard-to-tape system

knowledge system

knowledge base system

knowledge-based system

knowledge-based decision support system

knowledge-based management system

Kolmogorov system

Lsystem

L*a*b* system

laminar navigation anticollision system

laminar air navigation anticollision system

land mobile radio system

laser communication system

laser-deflection system

laser inertial navigation system

laser tracking system

lasing system

L-carrier system

LCH system

learning control system

left-handed system

left-handed coordinate system

legacy system

lenticular-screen projection system

life support system

lightning protective system

lightwave system

Lindenmayer system

linear system

linear-classifier system

linear feedback control system

line-of-sight system

line-sequential system

line-sequential color television system

lithography system

local area augmentation system

local battery system

logical input/output control system

log-structured file system

long base-line system

longitudinal video recording system

long-range-accuracy radio system

long-range search system

Lorenz instrumental landing system

Lotka-Volterra system

lossless system

lossy system

loudspeaker system

low-altitude detection system

lumped-parameter system

LVR system

Macintosh file system

MADA system

maglev system

magnetic-levitation system

mail abuse prevention system

major-deflection electromagnetic system

malfunction detection system

management information system

management intellectual system

man-computer system

man-machine system

man-machine control system

manned control system

manufacturing execution system

many-level system

many-energy-level system

many-particle system

marketing information system

maser communication system

Massachusetts general hospital utility multiprogramming system

mass-storage system

master/slave computer system

matrix sound system

mature system

mechanical display system

mechanical television system

medical expert system

message-composition system

message handling system

message-rate system

message-switched communication system

meta class system

meta-information system

metallization system

meteor-burst communication system

meteor-scatter-system

metric system

microcomputer system

microcomputer-development system

microelectromechanical system

microelectronic system

microprocessor-based spatial-locating system

microprocessor-controlled system

microprocessor delay system

microprocessor development system

Microsoft disk operating system

microwave-beam power-transfer system

microwave-hologram recording system

microwave landing system

microwave relay system

middle-side system

military expert system

military information system

MIMO system

minicomputer system

MKS system

MKS rationalized system

mobile telephone system

mode-converting system

model-based expert system

model reference adaptive system

modular system

modular breadboarding system

monitor system

monoclinic crystal system

monopulse tracking system

M-S stereo system

multi-address asynchronous communication system

multiagent computer system

multichannel microwave distribution system

multicomputer system

multienergy-level system

multiline digital voice-response system

multimedia authoring systems

multiple-access discrete-address system

multiple-input multiple-output system

multiple-processor system

multiple user system

multiplex system

multiplexed information and computing system

multiplicative array antenna system

multipoint video distribution system

multipole system

multiprocessing system

multiprocessor system

multitarget sputtering system

multitrack recording system

multiuser system

multivariable system

Munsell system

mutual broadcasting system

national information processing system

naval communications system

navigation system

near-eye system

near instantaneous companding system

nearest-neighbor classifier system

negative reinforcement system

neomorphic system

NetWare management system

network administration system

network basic input/output system

network computing system

network control system

network data base management system

network file system

network operating system

neuro-fuzzy system

new technology file system

nodal switching system

noise-reducing antenna system

noise-reduction system

non-attended system

non-equilibrium system

nonlinear system

nonlinear feedback control system

nonredundant system

nonrepairable system

nonstop system

NT file system

number system

numeral system

numerical control system

object-oriented data base management system

office information system

off-line system

OLCA system

OLCD system

omnidirectional speaker system

on-demand system

on-line system

on-line circuit-analysis system

on-line circuit-design system

on-line computer system

online fault-tolerant system

on-line processing system

on-off system

on-off telegraph system

open system

open bus system

open-loop system

open-tube system

operating system

operation system

operational support system

operator services system

optical communication system

optical data-processing system

optical detection and ranging system

optical disk recording system

optical-fiber transmission system

optical-radar system

optical recognition system

optical tracking system

optical TV communication system

optimizing control system

optoelectronic system

organic system

organizational decision support system

orthorhombic crystal system

p-system

PA system

packaged system

packetized automatic routing integrated system

packet-switched data transmission system

pagemaster system

pager-phone system

paging system

parallel-redundant system

parallel software system

parametric system

partitioned-type memory-allocation system

passive homing system

passive tracking system

pattern matching system

pattern recognition system

peak-holdings system

peek-a-boo system

peripheral-oriented microcomputer system

personal call system

personal computer system

personal computer disk operating system

personal data system

personal handy-phone system

personal locator system

phased-array warning system

phase-locked system

phase-locked loop system

Philips DNL system

Philips dynamic noise-limiter system

phonetic system

phonocard system

photoelectric-guidance system

photographic projection system

photomasking system

photovoltaic power system

picture coding system

picture quality system

pilot system

plane parallel Fabry-Perot system

plant automation communications system

plasma-deposition system

PLL system

plug-in modular system

portable life support system

position control system

positive reinforcement system

power system

predictive system

predictive expert system

priority system

privacy system

processing system

production system

production expert system

production inventory control system

program development system

programmable system

programmable airline reservation system

projection cathode-ray tube system

projection display system

property management system

pseudoquadraphony system

pseudorandom coded system

public-address system

public-address reinforcement system

public expert system

public-key system

public-key cryptographic system

public telephone system

pulsed Doppler system

pulsed FM system

pulse-modulation system

QS matrix system

quadraphonic sound system

quadruple-diversity system

quasi-linear feedback control system

queuing system

quick fax system

RADA system

radar augmentation system

radar braking system

radar cross-section instrumentation system

radar guidance system

radar identification system

radar imaging system

radio command system

radiocommunication system

radio data system

radio-guidance system

radio-inertial-guidance system

radionavigation system

radio-relay system

radiosonde-radio-wind system

random-access discrete-address system

range rate tracking system

range tracking system

ranging system

rapid-scan system

rationalized system of equations

readout system

real-time system

real-time data system

real-time expert system

real-time multi-platform UNIX operating system

real-time operating system

Rebecca-Eureka system

receiver lockout system

recognition system

reconfigurable system

recording system

recursive system

redundant system

reel-to-reel tape transport system

regulating system

reinforcement system

relational data base management system

relay system

reliability index system

remote system

remote concentrating system

remote file system

remote semiconcentrating system

remote sensing system

reorder point system

reorder time system

repairable system

reproducing system

rerecording system

response-controlled reinforcement system

restorable system

restricted connected-speech recognition system

retrieval system

RF sputtering system

RGB system

rhombohedral crystal system

rho-theta system

right-handed system

right-handed coordinate system

robot system

robotics system

rod memory system

rotating coordinate system

rule-based expert system

run-time system

sampled-data system

sampling system

satellite business system

satellite communications system

satellite data transmission system

satellite multiple-access communication system

satellite radio system

satellite-switched multiple-access system

scanning-projection system

schlieren system

scientific expert system

Scophony television system

searchless identification system

second generation wireless system

secrecy system

secret-key cryptographic system

self-adaptive system

self-adjusting system

self-contained system

self-guidance system

self-organizing system

self-organizing control system

self-organizing multiple-access discrete-address system

self-oscillatory system

self-structuring system

self-test system

self-testing system

selsyn system

semiactive-homing system

semiautomatic telephone system

sequential software system

serial copy management system

serial copying management system

service provisioning system

servo system

ship’s inertial marine navigational system

ship’s self-contained navigation system

short-range air navigation system

short-range Doppler system

SI system

signaling system

simultaneous system

simultaneous TV system

single-degree-of-freedom system

single-input single-output system

single-sideband system

single-track magnetic system

singular equation system

SISO system

SOC system

socio-technical system

soft system

soft eject system

software system

solar system

sound-recording system

sound-reinforcement system

sound-reproducing system

space-communication system

space detection and tracking system

space-variant pattern-recognition system

speaker system

speaker-adaptive system

speaker-dependent system

speaker-independent system

speaker-recognition system

speaker verification system

speech-enhancement system

speech input/output system

speech processing system

speech-recognition system

speech understanding system

spin system

spinodal system

split-screen system

split-speaker system

spread-spectrum system

SQ matrix system

stand-alone system

stand-alone expert system

stand-alone graphics system

standard electronics assembly system

standby power system

standing-wave system

stand-off target acquisition system

star system

start-stop system

static system

static ripple imaging system

stationary-wave system

step-and-repeat system

step-by-step system

stereo microphone system

stereo sound system

sticks layout system

stimulus-controlled reinforcement system

stochastic system

storage and retrieval system

stored-program electronic-switching system

strapping system

Strowger system

structured cabling system

structured design system

structured software system

structured wiring system

submarine-cable system

subscriber carrier system

super anti-modulation tape system

superconductor energy-storage system

super video home system

supervisory control system

switched access system

symbol system

symbolic system

symbolic interactive design system

symmetric cryptographic system

synchro system

synchronous data link control system

tactical air navigation system

tactical communication system

talking Rebecca-Eureka system

tape auto-stop system

tape operating system

tape-transport system

TDM system

telecine system

telecommunication system

telemetering system

telemetry system

telemetry data processing system

telemetry information system

telephone system

telephone-answering system

telephone intercommunication system

telephone video system

teleprocessing system

Teleran system

teletypewriter switching system

television identification system

television relay system

tetragonal crystal system

text system

thermal imaging system

third generation wireless system

three-phase four-wire system

three-way speaker system

time-division multiplex system

time-frequency collision avoidance system

time-invariant system

time reference system

time-sharing system

time-varying system

total access communication system

touch system

tracking system

traffic-alert and collision avoidance system

traffic control and surveillance system

traffic control signal system

trainable system

trajectory-measuring system

transaction processing system

transcontinental communication system

transform adaptable-processing system

transmission system

transmitter-receiver system

transputer system

triclinic crystal system

trigger-starting system

trigonal crystal system

triple interlace system

triplex system

troposcatter system

tropospheric radio system

trunk -system

tse system

turntable drive system

turnkey system

two-channel sound system

two-coordinate scanning system

two-field interlace system

two-phase five-wire system

two-phase four-wire system

two-phase three-wire system

two-turntable quick-start system

two-way system

type system

UCSD p-system

unattended system

underdetermined system

underwater viewing system

ungrounded system

uniplexed information and computing system

uniprocessor system

universal battery system

universal mobile telecommunication system

universal serial bus system

unmanned system

unrestorable system

USB system

value system

variable-structure system

V-beam system

vehicle control system

vehicular disk reproduction system

very early warning system

vibrating system

video cassette recording system

video editing system

video-encoding system

videofile television record storage system

video home system

Videotex system

virtual key cryptographic system

virtual memory system

vision system

visual communication system

voice/data system

voice-frequency telegraph system

voice operating system

voice recognition system

voice-response system

wafer imaging system

waiting system

wave-propagating system

Web network file system

wide area augmentation system

wired broadcasting system

Wollaston-prism digital light-deflector system

word processing system

word recognition system

word-serial system

writing system

X-window system

x-y-z coordinate system

system Y-

y-system

YIQ system

YUV system

Δ-system

Время прочтения
16 мин

Просмотры 35K

Привет, Хабр! Представляю вашему вниманию перевод статьи «Error and Transaction Handling in SQL Server. Part One – Jumpstart Error Handling» автора Erland Sommarskog.

1. Введение

Эта статья – первая в серии из трёх статей, посвященных обработке ошибок и транзакций в SQL Server. Её цель – дать вам быстрый старт в теме обработки ошибок, показав базовый пример, который подходит для большей части вашего кода. Эта часть написана в расчете на неопытного читателя, и по этой причине я намеренно умалчиваю о многих деталях. В данный момент задача состоит в том, чтобы рассказать как без упора на почему. Если вы принимаете мои слова на веру, вы можете прочесть только эту часть и отложить остальные две для дальнейших этапов в вашей карьере.

С другой стороны, если вы ставите под сомнение мои рекомендации, вам определенно необходимо прочитать две остальные части, где я погружаюсь в детали намного более глубоко, исследуя очень запутанный мир обработки ошибок и транзакций в SQL Server. Вторая и третья части, так же, как и три приложения, предназначены для читателей с более глубоким опытом. Первая статья — короткая, вторая и третья значительно длиннее.

Все статьи описывают обработку ошибок и транзакций в SQL Server для версии 2005 и более поздних версий.

1.1 Зачем нужна обработка ошибок?

Почему мы обрабатываем ошибки в нашем коде? На это есть много причин. Например, на формах в приложении мы проверяем введенные данные и информируем пользователей о допущенных при вводе ошибках. Ошибки пользователя – это предвиденные ошибки. Но нам также нужно обрабатывать непредвиденные ошибки. То есть, ошибки могут возникнуть из-за того, что мы что-то упустили при написании кода. Простой подход – это прервать выполнение или хотя бы вернуться на этап, в котором мы имеем полный контроль над происходящим. Недостаточно будет просто подчеркнуть, что совершенно непозволительно игнорировать непредвиденные ошибки. Это недостаток, который может вызвать губительные последствия: например, стать причиной того, что приложение будет предоставлять некорректную информацию пользователю или, что еще хуже, сохранять некорректные данные в базе. Также важно сообщать о возникновении ошибки с той целью, чтобы пользователь не думал о том, что операция прошла успешно, в то время как ваш код на самом деле ничего не выполнил.

Мы часто хотим, чтобы в базе данных изменения были атомарными. Например, задача по переводу денег с одного счета на другой. С этой целью мы должны изменить две записи в таблице CashHoldings и добавить две записи в таблицу Transactions. Абсолютно недопустимо, чтобы ошибки или сбой привели к тому, что деньги будут переведены на счет получателя, а со счета отправителя они не будут списаны. По этой причине обработка ошибок также касается и обработки транзакций. В приведенном примере нам нужно обернуть операцию в BEGIN TRANSACTION и COMMIT TRANSACTION, но не только это: в случае ошибки мы должны убедиться, что транзакция откачена.

2. Основные команды

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

2.1 TRY-CATCH

Основным механизмом обработки ошибок является конструкция TRY-CATCH, очень напоминающая подобные конструкции в других языках. Структура такова:

BEGIN TRY
   <обычный код>
END TRY
BEGIN CATCH
   <обработка ошибок>
END CATCH

Если какая-либо ошибка появится в <обычный код>, выполнение будет переведено в блок CATCH, и будет выполнен код обработки ошибок.

Как правило, в CATCH откатывают любую открытую транзакцию и повторно вызывают ошибку. Таким образом, вызывающая клиентская программа понимает, что что-то пошло не так. Повторный вызов ошибки мы обсудим позже в этой статье.

Вот очень быстрый пример:

BEGIN TRY
   DECLARE @x int
   SELECT @x = 1/0
   PRINT 'Not reached'
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

Результат выполнения: This is the error: Divide by zero error encountered.

Мы вернемся к функции error_message() позднее. Стоит отметить, что использование PRINT в обработчике CATCH приводится только в рамках экспериментов и не следует делать так в коде реального приложения.

Если <обычный код> вызывает хранимую процедуру или запускает триггеры, то любая ошибка, которая в них возникнет, передаст выполнение в блок CATCH. Если более точно, то, когда возникает ошибка, SQL Server раскручивает стек до тех пор, пока не найдёт обработчик CATCH. И если такого обработчика нет, SQL Server отправляет сообщение об ошибке напрямую клиенту.

Есть одно очень важное ограничение у конструкции TRY-CATCH, которое нужно знать: она не ловит ошибки компиляции, которые возникают в той же области видимости. Рассмотрим пример:

CREATE PROCEDURE inner_sp AS
   BEGIN TRY
      PRINT 'This prints'
      SELECT * FROM NoSuchTable
      PRINT 'This does not print'
   END TRY
   BEGIN CATCH
      PRINT 'And nor does this print'
   END CATCH
go
EXEC inner_sp

Выходные данные:

This prints
Msg 208, Level 16, State 1, Procedure inner_sp, Line 4
Invalid object name 'NoSuchTable'

Как можно видеть, блок TRY присутствует, но при возникновении ошибки выполнение не передается блоку CATCH, как это ожидалось. Это применимо ко всем ошибкам компиляции, таким как пропуск колонок, некорректные псевдонимы и тому подобное, которые возникают во время выполнения. (Ошибки компиляции могут возникнуть в SQL Server во время выполнения из-за отложенного разрешения имен – особенность, благодаря которой SQL Server позволяет создать процедуру, которая обращается к несуществующим таблицам.)

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

CREATE PROCEDURE outer_sp AS
   BEGIN TRY
      EXEC inner_sp
   END TRY
   BEGIN CATCH
      PRINT 'The error message is: ' + error_message()
   END CATCH
go
EXEC outer_sp

Теперь мы получим на выходе это:

This prints
The error message is: Invalid object name 'NoSuchTable'.

На этот раз ошибка была перехвачена, потому что сработал внешний обработчик CATCH.

2.2 SET XACT_ABORT ON

В начало ваших хранимых процедур следует всегда добавлять это выражение:

SET XACT_ABORT, NOCOUNT ON

Оно активирует два параметра сессии, которые выключены по умолчанию в целях совместимости с предыдущими версиями, но опыт доказывает, что лучший подход – это иметь эти параметры всегда включенными. Поведение SQL Server по умолчанию в той ситуации, когда не используется TRY-CATCH, заключается в том, что некоторые ошибки прерывают выполнение и откатывают любые открытые транзакции, в то время как с другими ошибками выполнение последующих инструкций продолжается. Когда вы включаете XACT_ABORT ON, почти все ошибки начинают вызывать одинаковый эффект: любая открытая транзакция откатывается, и выполнение кода прерывается. Есть несколько исключений, среди которых наиболее заметным является выражение RAISERROR.

Параметр XACT_ABORT необходим для более надежной обработки ошибок и транзакций. В частности, при настройках по умолчанию есть несколько ситуаций, когда выполнение может быть прервано без какого-либо отката транзакции, даже если у вас есть TRY-CATCH. Мы видели такой пример в предыдущем разделе, где мы выяснили, что TRY-CATCH не перехватывает ошибки компиляции, возникшие в той же области. Открытая транзакция, которая не была откачена из-за ошибки, может вызвать серьезные проблемы, если приложение работает дальше без завершения транзакции или ее отката.

Для надежной обработки ошибок в SQL Server вам необходимы как TRY-CATCH, так и SET XACT_ABORT ON. Среди них инструкция SET XACT_ABORT ON наиболее важна. Если для кода на промышленной среде только на нее полагаться не стоит, то для быстрых и простых решений она вполне подходит.

Параметр NOCOUNT не имеет к обработке ошибок никакого отношения, но включение его в код является хорошей практикой. NOCOUNT подавляет сообщения вида (1 row(s) affected), которые вы можете видеть в панели Message в SQL Server Management Studio. В то время как эти сообщения могут быть полезны при работе c SSMS, они могут негативно повлиять на производительность в приложении, так как увеличивают сетевой трафик. Сообщение о количестве строк также может привести к ошибке в плохо написанных клиентских приложениях, которые могут подумать, что это данные, которые вернул запрос.

Выше я использовал синтаксис, который немного необычен. Большинство людей написали бы два отдельных выражения:

SET NOCOUNT ON
SET XACT_ABORT ON

Между ними нет никакого отличия. Я предпочитаю версию с SET и запятой, т.к. это снижает уровень шума в коде. Поскольку эти выражения должны появляться во всех ваших хранимых процедурах, они должны занимать как можно меньше места.

3. Основной пример обработки ошибок

После того, как мы посмотрели на TRY-CATCH и SET XACT_ABORT ON, давайте соединим их вместе в примере, который мы можем использовать во всех наших хранимых процедурах. Для начала я покажу пример, в котором ошибка генерируется в простой форме, а в следующем разделе я рассмотрю решения получше.

Для примера я буду использовать эту простую таблицу.

CREATE TABLE sometable(a int NOT NULL,
                       b int NOT NULL,
                       CONSTRAINT pk_sometable PRIMARY KEY(a, b))

Вот хранимая процедура, которая демонстрирует, как вы должны работать с ошибками и транзакциями.

CREATE PROCEDURE insert_data @a int, @b int AS 
   SET XACT_ABORT, NOCOUNT ON
   BEGIN TRY
      BEGIN TRANSACTION
      INSERT sometable(a, b) VALUES (@a, @b)
      INSERT sometable(a, b) VALUES (@b, @a)
      COMMIT TRANSACTION
   END TRY
   BEGIN CATCH
      IF @@trancount > 0 ROLLBACK TRANSACTION
      DECLARE @msg nvarchar(2048) = error_message()  
      RAISERROR (@msg, 16, 1)
      RETURN 55555
   END CATCH

Первая строка в процедуре включает XACT_ABORT и NOCOUNT в одном выражении, как я показывал выше. Эта строка – единственная перед BEGIN TRY. Все остальное в процедуре должно располагаться после BEGIN TRY: объявление переменных, создание временных таблиц, табличных переменных, всё. Даже если у вас есть другие SET-команды в процедуре (хотя причины для этого встречаются редко), они должны идти после BEGIN TRY.

Причина, по которой я предпочитаю указывать SET XACT_ABORT и NOCOUNT перед BEGIN TRY, заключается в том, что я рассматриваю это как одну строку шума: она всегда должна быть там, но я не хочу, чтобы это мешало взгляду. Конечно же, это дело вкуса, и если вы предпочитаете ставить SET-команды после BEGIN TRY, ничего страшного. Важно то, что вам не следует ставить что-либо другое перед BEGIN TRY.

Часть между BEGIN TRY и END TRY является основной составляющей процедуры. Поскольку я хотел использовать транзакцию, определенную пользователем, я ввел довольно надуманное бизнес-правило, в котором говорится, что если вы вставляете пару, то обратная пара также должна быть вставлена. Два выражения INSERT находятся внутри BEGIN и COMMIT TRANSACTION. Во многих случаях у вас будет много строк кода между BEGIN TRY и BEGIN TRANSACTION. Иногда у вас также будет код между COMMIT TRANSACTION и END TRY, хотя обычно это только финальный SELECT, возвращающий данные или присваивающий значения выходным параметрам. Если ваша процедура не выполняет каких-либо изменений или имеет только одно выражение INSERT/UPDATE/DELETE/MERGE, то обычно вам вообще не нужно явно указывать транзакцию.

В то время как блок TRY будет выглядеть по-разному от процедуры к процедуре, блок CATCH должен быть более или менее результатом копирования и вставки. То есть вы делаете что-то короткое и простое и затем используете повсюду, не особо задумываясь. Обработчик CATCH, приведенный выше, выполняет три действия:

  1. Откатывает любые открытые транзакции.
  2. Повторно вызывает ошибку.
  3. Убеждается, что возвращаемое процедурой значение отлично от нуля.

Эти три действия должны всегда быть там. Мы можете возразить, что строка

IF @@trancount > 0 ROLLBACK TRANSACTION

не нужна, если нет явной транзакции в процедуре, но это абсолютно неверно. Возможно, вы вызываете хранимую процедуру, которая открывает транзакцию, но которая не может ее откатить из-за ограничений TRY-CATCH. Возможно, вы или кто-то другой добавите явную транзакцию через два года. Вспомните ли вы тогда о том, что нужно добавить строку с откатом? Не рассчитывайте на это. Я также слышу читателей, которые возражают, что если тот, кто вызывает процедуру, открыл транзакцию, мы не должны ее откатывать… Нет, мы должны, и если вы хотите знать почему, вам нужно прочитать вторую и третью части. Откат транзакции в обработчике CATCH – это категорический императив, у которого нет исключений.

Код повторной генерации ошибки включает такую строку:

DECLARE @msg nvarchar(2048) = error_message()

Встроенная функция error_message() возвращает текст возникшей ошибки. В следующей строке ошибка повторно вызывается с помощью выражения RAISERROR. Это не самый простой способ вызова ошибки, но он работает. Другие способы мы рассмотрим в следующей главе.

Замечание: синтаксис для присвоения начального значения переменной в DECLARE был внедрен в SQL Server 2008. Если у вас SQL Server 2005, вам нужно разбить строку на DECLARE и выражение SELECT.

Финальное выражение RETURN – это страховка. RAISERROR никогда не прерывает выполнение, поэтому выполнение следующего выражения будет продолжено. Пока все процедуры используют TRY-CATCH, а также весь клиентский код обрабатывает исключения, нет повода для беспокойства. Но ваша процедура может быть вызвана из старого кода, написанного до SQL Server 2005 и до внедрения TRY-CATCH. В те времена лучшее, что мы могли делать, это смотреть на возвращаемые значения. То, что вы возвращаете с помощью RETURN, не имеет особого значения, если это не нулевое значение (ноль обычно обозначает успешное завершение работы).

Последнее выражение в процедуре – это END CATCH. Никогда не следует помещать какой-либо код после END CATCH. Кто-нибудь, читающий процедуру, может не увидеть этот кусок кода.

После прочтения теории давайте попробуем тестовый пример:

EXEC insert_data 9, NULL

Результат выполнения:

Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.

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

CREATE PROCEDURE outer_sp @a int, @b int AS
   SET XACT_ABORT, NOCOUNT ON
   BEGIN TRY
      EXEC insert_data @a, @b
   END TRY
   BEGIN CATCH
      IF @@trancount > 0 ROLLBACK TRANSACTION
      DECLARE @msg nvarchar(2048) = error_message()
      RAISERROR (@msg, 16, 1)
      RETURN 55555
   END CATCH
go
EXEC outer_sp 8, 8

Результат работы:

Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

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

Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9

Сообщение об ошибке выводит информацию о расположении конечного выражения RAISERROR. В первом случае некорректен только номер строки. Во втором случае некорректно также имя процедуры. Для простых процедур, таких как наш тестовый пример, это не является большой проблемой. Но если у вас есть несколько уровней вложенных сложных процедур, то наличие сообщения об ошибке с отсутствием указания на место её возникновения сделает поиск и устранение ошибки намного более сложным делом. По этой причине желательно генерировать ошибку таким образом, чтобы можно было определить нахождение ошибочного фрагмента кода быстро, и это то, что мы рассмотрим в следующей главе.

4. Три способа генерации ошибки

4.1 Использование error_handler_sp

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

Позвольте представить вам error_handler_sp:

CREATE PROCEDURE error_handler_sp AS
 
   DECLARE @errmsg   nvarchar(2048),
           @severity tinyint,
           @state    tinyint,
           @errno    int,
           @proc     sysname,
           @lineno   int
           
   SELECT @errmsg = error_message(), @severity = error_severity(),
          @state  = error_state(), @errno = error_number(),
          @proc   = error_procedure(), @lineno = error_line()
       
   IF @errmsg NOT LIKE '***%'
   BEGIN
      SELECT @errmsg = '*** ' + coalesce(quotename(@proc), '<dynamic SQL>') + 
                       ', Line ' + ltrim(str(@lineno)) + '. Errno ' + 
                       ltrim(str(@errno)) + ': ' + @errmsg
   END
   RAISERROR('%s', @severity, @state, @errmsg)

Первое из того, что делает error_handler_sp – это сохраняет значение всех error_xxx() функций в локальные переменные. Я вернусь к выражению IF через секунду. Вместо него давайте посмотрим на выражение SELECT внутри IF:

SELECT @errmsg = '*** ' + coalesce(quotename(@proc), '<dynamic SQL>') + 
                 ', Line ' + ltrim(str(@lineno)) + '. Errno ' + 
                 ltrim(str(@errno)) + ': ' + @errmsg

Цель этого SELECT заключается в форматировании сообщения об ошибке, которое передается в RAISERROR. Оно включает в себя всю информацию из оригинального сообщения об ошибке, которое мы не можем вставить напрямую в RAISERROR. Мы должны обработать имя процедуры, которое может быть NULL для ошибок в обычных скриптах или в динамическом SQL. Поэтому используется функция COALESCE. (Если вы не понимаете форму выражения RAISERROR, я рассказываю о нем более детально во второй части.)

Отформатированное сообщение об ошибке начинается с трех звездочек. Этим достигаются две цели: 1) Мы можем сразу видеть, что это сообщение вызвано из обработчика CATCH. 2) Это дает возможность для error_handler_sp отфильтровать ошибки, которые уже были сгенерированы один или более раз, с помощью условия NOT LIKE ‘***%’ для того, чтобы избежать изменения сообщения во второй раз.

Вот как обработчик CATCH должен выглядеть, когда вы используете error_handler_sp:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   EXEC error_handler_sp
   RETURN 55555
END CATCH

Давайте попробуем несколько тестовых сценариев.

EXEC insert_data 8, NULL
EXEC outer_sp 8, 8

Результат выполнения:

Msg 50000, Level 16, State 2, Procedure error_handler_sp, Line 20
*** [insert_data], Line 5. Errno 515: Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 50000, Level 14, State 1, Procedure error_handler_sp, Line 20
*** [insert_data], Line 6. Errno 2627: Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Заголовки сообщений говорят о том, что ошибка возникла в процедуре error_handler_sp, но текст сообщений об ошибках дает нам настоящее местонахождение ошибки – как название процедуры, так и номер строки.

Я покажу еще два метода вызова ошибок. Однако error_handler_sp является моей главной рекомендацией для читателей, которые читают эту часть. Это — простой вариант, который работает на всех версиях SQL Server начиная с 2005. Существует только один недостаток: в некоторых случаях SQL Server генерирует два сообщения об ошибках, но функции error_xxx() возвращают только одну из них, и поэтому одно из сообщений теряется. Это может быть неудобно при работе с административными командами наподобие BACKUPRESTORE, но проблема редко возникает в коде, предназначенном чисто для приложений.

4.2. Использование ;THROW

В SQL Server 2012 Microsoft представил выражение ;THROW для более легкой обработки ошибок. К сожалению, Microsoft сделал серьезную ошибку при проектировании этой команды и создал опасную ловушку.

С выражением ;THROW вам не нужно никаких хранимых процедур. Ваш обработчик CATCH становится таким же простым, как этот:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   ;THROW
   RETURN 55555
END CATCH

Достоинство ;THROW в том, что сообщение об ошибке генерируется точно таким же, как и оригинальное сообщение. Если изначально было два сообщения об ошибках, оба сообщения воспроизводятся, что делает это выражение еще привлекательнее. Как и со всеми другими сообщениями об ошибках, ошибки, сгенерированные ;THROW, могут быть перехвачены внешним обработчиком CATCH и воспроизведены. Если обработчика CATCH нет, выполнение прерывается, поэтому оператор RETURN в данном случае оказывается не нужным. (Я все еще рекомендую оставлять его, на случай, если вы измените свое отношение к ;THROW позже).

Если у вас SQL Server 2012 или более поздняя версия, измените определение insert_data и outer_sp и попробуйте выполнить тесты еще раз. Результат в этот раз будет такой:

Msg 515, Level 16, State 2, Procedure insert_data, Line 5
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 2627, Level 14, State 1, Procedure insert_data, Line 6
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

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

В этом месте вы можете сказать себе: действительно ли Microsoft назвал команду ;THROW? Разве это не просто THROW? На самом деле, если вы посмотрите в Books Online, там не будет точки с запятой. Но точка с запятой должны быть. Официально они отделяют предыдущее выражение, но это опционально, и далеко не все используют точку с запятой в выражениях T-SQL. Более важно, что если вы пропустите точку с запятой перед THROW, то не будет никакой синтаксической ошибки. Но это повлияет на поведение при выполнении выражения, и это поведение будет непостижимым для непосвященных. При наличии активной транзакции вы получите сообщение об ошибке, которое будет полностью отличаться от оригинального. И еще хуже, что при отсутствии активной транзакции ошибка будет тихо выведена без обработки. Такая вещь, как пропуск точки с запятой, не должно иметь таких абсурдных последствий. Для уменьшения риска такого поведения, всегда думайте о команде как о ;THROW (с точкой с запятой).

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

4.3. Использование SqlEventLog

Третий способ обработки ошибок – это использование SqlEventLog, который я описываю очень детально в третьей части. Здесь я лишь сделаю короткий обзор.

SqlEventLog предоставляет хранимую процедуру slog.catchhandler_sp, которая работает так же, как и error_handler_sp: она использует функции error_xxx() для сбора информации и выводит сообщение об ошибке, сохраняя всю информацию о ней. Вдобавок к этому, она логирует ошибку в таблицу splog.sqleventlog. В зависимости от типа приложения, которое у вас есть, эта таблица может быть очень ценным объектом.

Для использования SqlEventLog, ваш обработчик CATCH должен быть таким:

BEGIN CATCH
   IF @@trancount > 0 ROLLBACK TRANSACTION
   EXEC slog.catchhandler_sp @@procid
   RETURN 55555
END CATCH

@@procid возвращает идентификатор объекта текущей хранимой процедуры. Это то, что SqlEventLog использует для логирования информации в таблицу. Используя те же тестовые сценарии, получим результат их работы с использованием catchhandler_sp:

Msg 50000, Level 16, State 2, Procedure catchhandler_sp, Line 125
{515} Procedure insert_data, Line 5
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
Msg 50000, Level 14, State 1, Procedure catchhandler_sp, Line 125
{2627} Procedure insert_data, Line 6
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).

Как вы видите, сообщение об ошибке отформатировано немного не так, как это делает error_handler_sp, но основная идея такая же. Вот образец того, что было записано в таблицу slog.sqleventlog:

logid logdate errno severity logproc linenum msgtext
1 2015-01-25 22:40:24.393 515 16 insert_data 5 Cannot insert …
2 2015-01-25 22:40:24.395 2627 14 insert_data 6 Violation of …

Если вы хотите попробовать SqlEventLog, вы можете загрузить файл sqleventlog.zip. Инструкция по установке находится в третьей части, раздел Установка SqlEventLog.

5. Финальные замечания

Вы изучили основной образец для обработки ошибок и транзакций в хранимых процедурах. Он не идеален, но он должен работать в 90-95% вашего кода. Есть несколько ограничений, на которые стоит обратить внимание:

  1. Как мы видели, ошибки компиляции не могут быть перехвачены в той же процедуре, в которой они возникли, а только во внешней процедуре.
  2. Пример не работает с пользовательскими функциями, так как ни TRY-CATCH, ни RAISERROR нельзя в них использовать.
  3. Когда хранимая процедура на Linked Server вызывает ошибку, эта ошибка может миновать обработчик в хранимой процедуре на локальном сервере и отправиться напрямую клиенту.
  4. Когда процедура вызвана как INSERT-EXEC, вы получите неприятную ошибку, потому что ROLLBACK TRANSACTION не допускается в данном случае.
  5. Как упомянуто выше, если вы используете error_handler_sp или SqlEventLog, мы потеряете одно сообщение, когда SQL Server выдаст два сообщения для одной ошибки. При использовании ;THROW такой проблемы нет.

Я рассказываю об этих ситуациях более подробно в других статьях этой серии.

Перед тем как закончить, я хочу кратко коснуться триггеров и клиентского кода.

Триггеры

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

С триггерами важно понимать, что они являются частью команды, которая запустила триггер, и в триггере вы находитесь внутри транзакции, даже если не используете BEGIN TRANSACTION.
Иногда я вижу на форумах людей, которые спрашивают, могут ли они написать триггер, который не откатывает в случае падения запустившую его команду. Ответ таков: нет способа сделать это надежно, поэтому не стоит даже пытаться. Если в этом есть необходимость, по возможности не следует использовать триггер вообще, а найти другое решение. Во второй и третьей частях я рассматриваю обработку ошибок в триггерах более подробно.

Клиентский код

У вас должна быть обработка ошибок в коде клиента, если он имеет доступ к базе. То есть вы должны всегда предполагать, что при любом вызове что-то может пойти не так. Как именно внедрить обработку ошибок, зависит от конкретной среды.

Здесь я только обращу внимание на важную вещь: реакцией на ошибку, возвращенную SQL Server, должно быть завершение запроса во избежание открытых бесхозных транзакций:

IF @@trancount > 0 ROLLBACK TRANSACTION

Это также применимо к знаменитому сообщению Timeout expired (которое является не сообщением от SQL Server, а от API).

6. Конец первой части

Это конец первой из трех частей серии. Если вы хотели изучить вопрос обработки ошибок быстро, вы можете закончить чтение здесь. Если вы настроены идти дальше, вам следует прочитать вторую часть, где наше путешествие по запутанным джунглям обработки ошибок и транзакций в SQL Server начинается по-настоящему.

… и не забывайте добавлять эту строку в начало ваших хранимых процедур:

SET XACT_ABORT, NOCOUNT ON

147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

1

11.05.2018, 16:20. Показов 4746. Ответов 13


Привет всем!

Моя программа работает с удаленной базой MySQL. Всё работает чудно, но после нескольких минут простоя программы (производится только обновление таблиц с сервера с интервалом в 5 секунд) при записи новой строки в таблицу MySQL выдает ошибку «Fatal error encountered during command execution«. Подскажите, пожалуйста, от чего это может случаться и как это исправить?

Спасибо!



0



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,883

Записей в блоге: 1

11.05.2018, 18:08

2

Vinemax, полный текст исключения смотрел? С соединением как работа идет — открывается каждый раз новое или все время одно?



2



Vinemax

147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

11.05.2018, 18:23

 [ТС]

3

OwenGlendower, всё время одно. Текст исключения весь не видел, бо у меня обработчик ошибок стоит. Я тут нагуглил, что есть такое свойство, как CommanTimeout, которое по умолчанию установлено в 30 (видимо, секунд). Устанавливаю его целенаправленно в 3600 и вот сейчас проверил и опять эта же ошибка после некоторого простоя. Код операции добавления строки в таблицу на VB у меня такой:

VB.NET
1
2
3
4
5
            Dim command As New MySqlCommand("INSERT INTO ...", connection)
 
            command.CommandTimeout = 3600
 
            command.ExecuteNonQuery()

…подключение connection всё время открыто, но вот command у меня локальная в процедуре. Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ?



0



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,883

Записей в блоге: 1

11.05.2018, 18:27

4

Цитата
Сообщение от Vinemax
Посмотреть сообщение

Текст исключения весь не видел, бо у меня обработчик ошибок стоит.

Не вижу тут связи. Прежде чем что-то делать нужно точно знать что происходит. Получи полный текст исключения прежде чем двигаться дальше.

Цитата
Сообщение от Vinemax
Посмотреть сообщение

Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ?

Не надо.

Цитата
Сообщение от Vinemax
Посмотреть сообщение

подключение connection всё время открыто

Возможно поможет открытие и закрытие соединение для каждой команды. Создали соединение, открыли, выполнили команду и закрыли соединение.



2



147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

11.05.2018, 18:43

 [ТС]

5

Цитата
Сообщение от OwenGlendower
Посмотреть сообщение

Создали соединение, открыли, выполнили команду и закрыли соединение.

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

Добавлено через 12 минут
MySql.Data.MySqlClient.MySqlException: «Fatal error encountered during command execution.»

1) SocketException: Удаленный хост принудительно разорвал существующее подключение

2) IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение.

3) MySqlException: Reading from the stream has failed.

4) MySqlException: Fatal error encountered attempting to read the resultset.

Это всё одна ошибка.



0



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,883

Записей в блоге: 1

11.05.2018, 18:53

6

Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

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



2



147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

11.05.2018, 18:55

 [ТС]

7

Да вот не хотелось бы закрывать и открывать заново, это же всё время, особенно при медленном интернете



0



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,883

Записей в блоге: 1

11.05.2018, 18:56

8

Vinemax, у соединения две стороны. Одна сторона может закрыть соединение не уведомляя другую. В данном случае так поступает сервер MySql.



2



147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

11.05.2018, 19:30

 [ТС]

9

Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

OwenGlendower, сделал connection.Ping с интервалом в 5 секунд и проблема пропала. Только вот вопрос, а можно ли так часто и много пинговать, админов сайта это не насторожит, не заблокируют?



1



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,883

Записей в блоге: 1

11.05.2018, 20:05

10

Vinemax, без понятия. Время покажет.



1



147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

11.05.2018, 20:24

 [ТС]

11

OwenGlendower, спасибо!



0



Модератор

Эксперт .NET

3861 / 3184 / 479

Регистрация: 27.01.2014

Сообщений: 5,809

12.05.2018, 04:21

12

Vinemax, а зачем каждые 5 секунд делать пинг, ведь это гораздо дольше чем открывать и закрывать соединение?



1



147 / 115 / 10

Регистрация: 12.09.2011

Сообщений: 785

13.05.2018, 02:15

 [ТС]

13

Yury Komar, ну у меня происходит так… В фоновом процессе BackgroundWorker’а каждые пять секунд обновляются все таблицы программы, а точнее измененные строки всех таблиц. При запуске BackgroundWorker’а пятисекундный таймер отключается, а при завершении обновления всех таблиц опять включается, то есть через пять секунд из процедуры Tick таймера BackgroundWorker опять запускается. Ну вот в этот момент перед запуском BackgroundWorker’а я и делаю пинг. И вот практика на примере очень медленного Интернета показала, что пинг происходит очень быстро, а вот новое подключение идет две — три секунды. Дело в том, что MySqlConnection.Ping возвращает только True или False, то есть не дает всей инфы, отчего, видимо, быстро и срабатывает. Здесь получается суть не конкретно в пинге, а в том, чтобы connection хоть чем-то занять, дабы оно не разъединялось.



1



Модератор

Эксперт .NET

3861 / 3184 / 479

Регистрация: 27.01.2014

Сообщений: 5,809

13.05.2018, 02:42

14

Vinemax, понятно. Ну надеюсь будет работать без сюрпризов.



1



Понравилась статья? Поделить с друзьями:

Читайте также:

  • Dawn of war error 183
  • Dawn of war 2 не запускается error report
  • Dawn of war 2 error report при запуске
  • Davinci resolve ошибка при рендере
  • Database error connection failed unable to connect to the database please contact your server administrator

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии