На основании Вашего запроса эти примеры могут содержать грубую лексику.
На основании Вашего запроса эти примеры могут содержать разговорную лексику.
ошибка базы данных
ошибки базы данных
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, приведенный выше, выполняет три действия:
- Откатывает любые открытые транзакции.
- Повторно вызывает ошибку.
- Убеждается, что возвращаемое процедурой значение отлично от нуля.
Эти три действия должны всегда быть там. Мы можете возразить, что строка
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% вашего кода. Есть несколько ограничений, на которые стоит обратить внимание:
- Как мы видели, ошибки компиляции не могут быть перехвачены в той же процедуре, в которой они возникли, а только во внешней процедуре.
- Пример не работает с пользовательскими функциями, так как ни TRY-CATCH, ни RAISERROR нельзя в них использовать.
- Когда хранимая процедура на Linked Server вызывает ошибку, эта ошибка может миновать обработчик в хранимой процедуре на локальном сервере и отправиться напрямую клиенту.
- Когда процедура вызвана как INSERT-EXEC, вы получите неприятную ошибку, потому что ROLLBACK TRANSACTION не допускается в данном случае.
- Как упомянуто выше, если вы используете 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 |
Администратор 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 у меня такой:
…подключение connection всё время открыто, но вот command у меня локальная в процедуре. Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ?
0 |
Администратор 15248 / 12287 / 4904 Регистрация: 17.03.2014 Сообщений: 24,883 Записей в блоге: 1 |
|
11.05.2018, 18:27 |
4 |
Текст исключения весь не видел, бо у меня обработчик ошибок стоит. Не вижу тут связи. Прежде чем что-то делать нужно точно знать что происходит. Получи полный текст исключения прежде чем двигаться дальше.
Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ? Не надо.
подключение connection всё время открыто Возможно поможет открытие и закрытие соединение для каждой команды. Создали соединение, открыли, выполнили команду и закрыли соединение.
2 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 18:43 [ТС] |
5 |
Создали соединение, открыли, выполнили команду и закрыли соединение. Видимо, так и сделаю, если иначе не решу вопрос. Сейчас запустил без обработчика ошибок, подожду немного, чтобы увидеть весь текст исключения… Добавлено через 12 минут 1) SocketException: Удаленный хост принудительно разорвал существующее подключение 2) IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. 3) MySqlException: Reading from the stream has failed. 4) MySqlException: Fatal error encountered attempting to read the resultset. Это всё одна ошибка.
0 |
Администратор 15248 / 12287 / 4904 Регистрация: 17.03.2014 Сообщений: 24,883 Записей в блоге: 1 |
|
11.05.2018, 18:53 |
6 |
РешениеVinemax, как и предполагалось виновато соединение которое внезапно оказывается закрытым. Попробуй открывать и закрывать его явно каждый раз.
2 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 18:55 [ТС] |
7 |
Да вот не хотелось бы закрывать и открывать заново, это же всё время, особенно при медленном интернете
0 |
Администратор 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 |
РешениеOwenGlendower, сделал connection.Ping с интервалом в 5 секунд и проблема пропала. Только вот вопрос, а можно ли так часто и много пинговать, админов сайта это не насторожит, не заблокируют?
1 |
Администратор 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 |
Модератор 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 |
Модератор 3861 / 3184 / 479 Регистрация: 27.01.2014 Сообщений: 5,809 |
|
13.05.2018, 02:42 |
14 |
Vinemax, понятно. Ну надеюсь будет работать без сюрпризов.
1 |