The Microsoft Jet Database Engine (also Microsoft JET Engine or simply Jet) is a database engine on which several Microsoft products have been built. The first version of Jet was developed in 1992, consisting of three modules which could be used to manipulate a database.
JET stands for Joint Engine Technology. Microsoft Access and Visual Basic use or have used Jet as their underlying database engine. However, it has been superseded for general use, first by Microsoft Desktop Engine (MSDE), then later by SQL Server Express. For larger database needs, Jet databases can be upgraded (or, in Microsoft parlance, "up-sized") to Microsoft’s flagship SQL Server database product.
However, this does not mean that a MS Jet (Red) database cannot match MS SQL Server in storage capacity. A 5 billion record MS Jet (Red) database with compression and encryption turned on requires about 1 terabyte of disk storage space, comprising hundreds of (*.mdb) files, each acting as partial table, and not as a database in itself.
Содержание
Contents
Architecture [ edit ]
![]()
Jet, being part of a relational database management system (RDBMS), allows the manipulation of relational databases. It offers a single interface that other software can use to access Microsoft databases and provides support for security, referential integrity, transaction processing, indexing, record and page locking, and data replication. In later versions, the engine has been extended to run SQL queries, store character data in Unicode format, create database views and allow bi-directional replication with Microsoft SQL Server.
![]()
There are three modules to Jet: One is the Native Jet ISAM Driver, a dynamic link library (DLL) that can directly manipulate Microsoft Access database files (MDB) using a (random access) file system API. Another one of the modules contains the ISAM Drivers, DLLs that allow access to a variety of Indexed Sequential Access Method ISAM databases, among them xBase, Paradox, Btrieve and FoxPro, depending on the version of Jet. The final module is the Data Access Objects (DAO) DLL. DAO provides an API that allows programmers to access JET databases using any programming language.
Locking [ edit ]
Jet allows multiple users to access the database concurrently. To prevent that data from being corrupted or invalidated when multiple users try to edit the same record or page of the database, Jet employs a locking policy. Any single user can modify only those database records (that is, items in the database) to which the user has applied a lock, which gives exclusive access to the record until the lock is released. In Jet versions before version 4, a page locking model is used, and in Jet 4, a record locking model is employed. Microsoft databases are organized into data "pages", which are fixed-length (2 kB before Jet 4, 4 kB in Jet 4) data structures. Data is stored in "records" of variable length that may take up less or more than one page. The page locking model works by locking the pages, instead of individual records, which though less resource-intensive also means that when a user locks one record, all other records on the same page are collaterally locked. As a result, no other user can access the collaterally locked records, even though no user is accessing them and there is no need for them to be locked. In Jet 4, the record locking model eliminates collateral locks, so that every record that is not in use is available.
There are two mechanisms that Microsoft uses for locking: pessimistic locking, and optimistic locking. With pessimistic locking, the record or page is locked immediately when the lock is requested, while with optimistic locking, the locking is delayed until the edited record is saved. Conflicts are less likely to occur with optimistic locking, since the record is locked only for a short period of time. However, with optimistic locking one cannot be certain that the update will succeed because another user could lock the record first. With pessimistic locking, the update is guaranteed to succeed once the lock is obtained. Other users must wait until the lock is released in order to make their changes. Lock conflicts, which either require the user to wait, or cause the request to fail (usually after a timeout) are more common with pessimistic locking.
Transaction processing [ edit ]
Jet supports transaction processing for database systems that have this capability. (ODBC systems have one-level transaction processing, while several ISAM systems like Paradox do not support transaction processing.) A transaction is a series of operations performed on a database that must be done together — this is known as atomicity and is one of the AC >[1] Transactions have a number of advantages over independent database updates. One of the main advantages is that transactions can be abandoned if a problem occurs during the transaction. This is called rolling back the transaction, or just rollback, and it restores the state of the database records to precisely the state before the transaction began. Transactions also permit the state of the database to remain consistent if a system failure occurs in the middle of a sequence of updates required to be atomic. There is no chance that only some of the updates will end up written to the database; either all will succeed, or the changes will be discarded when the database system restarts. With ODBC’s in-memory policy, transactions also allow for many updates to a record to occur entirely within memory, with only one expensive disk write at the end.
Implicit transactions were supported in Jet 3.0. These are transactions that are started automatically after the last transaction was committed to the database. Implicit transactions in Jet occurred when an SQL DML statement was issued. However, it was found that this had a negative performance impact in 32-bit Windows (Windows 95, Windows 98), so in Jet 3.5 Microsoft removed implicit transactions when SQL DML statements were made.
Data integrity [ edit ]
Jet enforces entity integrity and referential integrity. Jet will by default prevent any change to a record that breaks referential integrity, but Jet databases can instead use propagation constraints (cascading updates and cascading deletes) to maintain referential integrity.
Jet also supports "business rules" (also known as "constraints"), or rules that apply to any column to enforce what data might be placed into the table or column. For example, a rule might be applied that does not allow a date to be entered into a date_logged column that is earlier than the current date and time, or a rule might be applied that forces people to enter a positive value into a numeric only field.
Security [ edit ]
Access to Jet databases is done on a per user-level. The user information is kept in a separate system database, and access is controlled on each object in the system (for instance by table or by query). In Jet 4, Microsoft implemented functionality that allows database administrators to set security via the SQL commands CREATE, ADD, ALTER, DROP USER and DROP GROUP. These commands are a subset of ANSI SQL 92 standard, and they also apply to the GRANT/REVOKE commands. [1] When Jet 2 was released, security could also be set programmatically through DAO.
Queries [ edit ]
Queries are the mechanisms that Jet uses to retrieve data from the database. They can be defined in Microsoft QBE (Query By Example), through the Microsoft Access SQL Window or through Access Basic’s Data Access Objects (DAO) language. These are then converted to an SQL SELECT statement. The query is then compiled — this involves parsing the query (involves syntax checking and determining the columns to query in the database table), then converted into an internal Jet query object format, which is then tokenized and organised into a tree like structure. In Jet 3.0 onwards these are then optimised using the Microsoft Rushmore query optimisation technology. The query is then executed and the results passed back to the application or user who requested the data.
Jet passes the data retrieved for the query in a dynaset. This is a set of data that is dynamically linked back to the database. Instead of having the query result stored in a temporary table, where the data cannot be updated directly by the user, the dynaset allows the user to view and update the data contained in the dynaset. Thus, if a university lecturer queries all students who received a distinction in their assignment and finds an error in that student’s record, they would only need to update the data in the dynaset, which would automatically update the student’s database record without the need for them to send a specific update query after storing the query results in a temporary table.
History [ edit ]
| Jet version | Jet engine | DLL file name | Supported database versions |
|---|---|---|---|
| 1.0 | ?? | ?? | 1.0 |
| 1.1 | 1.10.0001 | MSAJT110.DLL | 1.0 / 1.1 |
| 2.0 | 2.00.0000 | MSAJT200.DLL | 1.0 / 1.1 / 2.0 |
| 2.5 | 2.50.1606 | MSAJT200.DLL | 1.0 / 1.1 / 2.0 |
| 3.0 | 3.0.0.2118 | MSJT3032.DLL | 1.0 / 1.1 / 2.0 / 3.0 |
| 3.5 | 3.51.3328.0 | MSJET35.DLL | 1.0 / 1.1 / 2.0 / 3.X |
| 4.0 SP8 | 4.0.8015.0 | MSJET40.DLL | 1.0 / 1.1 / 2.0 / 3.X / 4.0 |
| ACE 12 | 12.0.xxxx.xxxx | ACECORE.DLL | 1.0 / 1.1 / 2.0 / 3.X / 4.0 / ACE |
| ACE 14 | 14.0.xxxx.xxxx | ACECORE.DLL | 3.X / 4.0 / ACE |
| ACE 15 | 15.0.xxxx.xxxx | ACECORE.DLL | 4.0 / ACE |
| ACE 16 | 16.0.xxxx.xxxx | ACECORE.DLL | 4.0 / ACE |
Jet originally started in 1992 as an underlying data access technology that came from a Microsoft internal database product development project, code named Cirrus. Cirrus was developed from a pre-release version of Visual Basic code and was used as the database engine of Microsoft Access. Tony Goodhew, who worked for Microsoft at the time, says
"It would be reasonably accurate to say that up until that stage Jet was more the name of the team that was assigned to work on the DB engine modules of Access rather than a component team. For VB [Visual Basic] 3.0 they basically had to tear it out of Access and graft it onto VB. That’s why they’ve had all those Jet/ODBC problems in VB 3.0."
Jet became more componentised when Access 2.0 was released because the Access ODBC developers used parts of the Jet code to produce the ODBC driver. A retrofit was prov >[4]
Jet 2.0 was released as several dynamic linked libraries (DLLs) that were utilised by application software, such as Microsoft’s Access database. DLLs in Windows are "libraries" of common code that can be used by more than one application—by keeping code that more than one application uses under a common library which each of these applications can use independently code maintenance is reduced and the functionality of applications increases, with less development effort. Jet 2.0 comprised three DLLs: the Jet DLL, the Data Access Objects (DAO) DLL and several external ISAM DLLs. The Jet DLL determined what sort of database it was accessing, and how to perform what was requested of it. If the data source was an MDB file (a Microsoft Access format) then it would directly read and write the data to the file. If the data source was external, then it would call on the correct ODBC driver to perform its request. The DAO DLL was a component that programmers could use to interface with the Jet engine, and was mainly used by Visual Basic and Access Basic programmers. The ISAM DLLs were a set of modules that allowed Jet to access three ISAM based databases: xBase, Paradox and Btrieve. [2] Jet 2.0 was replaced with Jet 2.1, which used the same database structure but different locking strategies, making it incompatible with Jet 2.0.
Jet 3.0 included many enhancements, including a new index structure that reduced storage size and the time that was taken to create indices that were highly duplicated, the removal of read locks on index pages, a new mechanism for page reuse, a new compacting method for which compacting the database resulted in the indices being stored in a clustered-index format, a new page allocation mechanism to improve Jet’s read-ahead capabilities, improved delete operations that speeded processing, multithreading (three threads were used to perform read ahead, write behind, and cache maintenance), implicit transactions (users d >[5] Jet 3.0 also allowed for database replication. Jet 3.0 was replaced by Jet 3.5, which uses the same database structure, but different locking strategies, making it incompatible with Jet 3.0.
Jet 4.0 gained numerous additional features and enhancements. [1]
- Unicode character storage support, along with an NT sorting method that was also implemented in the Windows 95 version;
- Changes to data types to be more like SQL Server’s (LongText or Memo; Binary; LongBinary; Date/Time; Real; Float4; IEEESingle; Double; Byte or Tinyint; Integer or Integer synonyms Smallint, Integer2, and Short; LongInteger or LongInteger synonyms Int, Integer, and Counter; Currency or Money; Boolean and GUID); a new decimal data type
- Memo fields could now be indexed
- Compressible data types
- SQL enhancements to make Jet conform more closely to ANSISQL-92
- Finer grained security; views support; procedure support
- Invocation and termination (committing or rolling back) of transactions
- Enhanced table creation and modification
- Referential integrity support
- Connection control (connected users remain connected, but once disconnected they cannot reconnect, and new connections cannot be made. This is useful for database administrators to gain control of the database)
- A user list, which allows administrators to determine who is connected to the database
- Record-level locking (previous versions only supported page-locking)
- Bi-directional replication with MS SQL Server.
Microsoft Access versions from Access 2000 to Access 2010 included an "Upsizing Wizard" which could "upsize" (upgrade) a Jet database to "an equivalent database on SQL Server with the same table structure, data, and many other attributes of the original database". Reports, queries, macros and security were not handled by this tool, meaning that some manual modifications might have been needed if the application was heavily reliant on these Jet features. [6]
A standalone version of the Jet 4 database engine was a component of Microsoft Data Access Components (MDAC), and was included in every version of Windows from Windows 2000 on. [7] The Jet database engine was only 32-bit and d >[8]
With version 2007 onwards, Access includes an Office-specific version of Jet, initially called the Office Access Connectivity Engine (ACE), but which is now called the Access Database Engine (However MS-Access consultants and VBA developers who specialize in MS-Access are more likely to refer to it as "the ACE Database Engine"). [ citation needed ] This engine was backward-compatible with previous versions of the Jet engine, so it could read and write (.mdb) files from earlier Access versions. It introduced a new default file format, (.accdb), that brought several improvements to Access, including complex data types such as multivalue fields, the attachment data type and history tracking in memo fields. It also brought security changes and encryption improvements and enabled integration with Microsoft Windows SharePoint Services 3.0 and Microsoft Office Outlook 2007. [9] [10] [11]
The engine in Microsoft Access 2010 discontinued support for Access 1.0, Access 2.0, Lotus 1-2-3 and Paradox files. [12] A 64-bit version of Access 2010 and its ACE Driver/Prov >[13]
The engine in Microsoft Access 2013 discontinued support for Access 95, Access 97 and xBase files, and it also discontinued support for replication. [14]
Version 1608 of Microsoft Access 2016 restored support for xBase files, [15] and Version 1703 introduced a Large Number data type. [16]
From a data access technology standpoint, Jet is cons >[17] but Microsoft continues to support ACE as part of Microsoft Access.
Compatibility [ edit ]
Microsoft provides the JET drivers only for Microsoft Windows. Therefore, third party software support for JET databases is almost exclusively found on Windows. There is an open source project that attempts to enable working with JET databases on other platforms, MDB Tools and its much extended Java port named Jackcess.

Участник проекта Zero Day Initiative Lucas Leong (Trend Micro) раскрыл подробности о наличии критической уязвимости в Windows, позволяющей удаленно выполнить произвольный код в контексте текущего процесса. Для успешной эксплуатации проблемы потребуется участие пользователя, который должен открыть вредоносный файл или перейти по ссылке.
Уязвимость обнаружена в СУБД Microsoft JET Database Engine и представляет собой возможность записи за пределами выделенного в памяти буфера (out-of-bounds OOB write) и проявляется при открытии источника данных JET (Joint Engine Technology) через интерфейс OLE DB.

OLE DB (Object Linking and Embedding, Database, OLEDB) — набор COM-интерфейсов, позволяющих приложениям унифицировано работать с данными разных источников и хранилищ информации.
Чтобы вызвать эту уязвимость, пользователю необходимо будет открыть специально сформированный файл, содержащий данные, хранящиеся в формате СУБД Microsoft JET Database Engine. Различные приложения используют этот формат базы данных. Эксплуатация этой уязвимости может позволить выполнять код на уровне текущего процесса.
На github опубликован PoC данной уязвимости, которой подвержена вся линейка современных ОС от Microsoft: Windows 7, Windows 8.1, Windows 10, и Windows Server Edition 2008 до 2016.
Любопытным фактом является то, что детали уязвимости были предоставлены компании Microsoft еще 8 мая, 14 мая Microsoft подтвердили наличие бага. Согласно политике ZDI после 120-дневного ожидания (4 месяца), они опубликовали уязвимость. В настоящее время компания Microsoft готовит исправление, которое, предположительно, будет включено в состав плановых октябрьских обновлений.
Злоумышленники могут крайне успешно использовать эту уязвимость при фишинговых атаках, реализации APT-векторов и атаках класса watering hole. Рекомендуется применять политики использования доверенных файлов, пока не будет выпущен патч.
Персональные инструменты

«Microsoft Database Database Engine» — это механизм базы данных, на котором были созданы несколько продуктов Microsoft. Механизм базы данных является базовым компонентом базы данных, совокупностью информации, хранящейся на компьютере, систематическим образом. Первая версия Jet была разработана в 1992 году, состоящая из трех модулей, которые могут использоваться для управления базой данных. [Источник 1]
JET означает технологию Joint Engine, иногда называемую Microsoft JET Engine или просто Jet. Microsoft Access и Visual Basic используют или использовали Jet в качестве основного механизма базы данных. С тех пор он был заменен для общего использования, однако, сначала Microsoft SQL Server Desktop Engine, а затем Microsoft SQL Server Express. Для больших потребностей в базе данных, базы данных Jet могут быть обновлены (или в Microsoft parlance, «up-size») до продукта флагманской базы данных Microsoft, SQL Server.
Однако это не означает, что база данных MS Jet (Red) не может соответствовать MS SQL Server в емкости хранилища. База данных объемом 5 миллиардов записей MS Jet (Red) с включенным сжатием и шифрованием требует около 1 терабайта дискового пространства, содержащего сотни файлов (* .mdb), каждый из которых действует как частичная таблица, а не как база данных сама по себе.
На протяжении многих лет Jet стал почти синонимом Microsoft Access, поскольку многие люди ссылаются на базу данных Jet как на базу данных Access.
Содержание
История
Jet первоначально был запущен в 1992 году как базовая технология доступа к данным, которая была получена из проекта разработки внутренней базы данных Microsoft под кодовым названием Cirrus. Cirrus был разработан с предварительной версии кода Visual Basic и использовался в качестве механизма базы данных Microsoft Access. Тони Гудью, который работал в Microsoft в то время, говорит:«Было бы разумно точно сказать, что до этого этапа Jet больше назывался командой, которая была назначена для работы с модулями ядра DB Access, а не с командой компонентов. Для VB Visual Basic 3.0 они в основном должны были вырвать его из Access и перенести его на VB. Вот почему у них были все проблемы Jet / ODBC в VB 3.0 ».
Jet стал более детализированным, когда Access 2.0 был выпущен, потому что разработчики Access ODBC использовали части кода Jet для создания драйвера ODBC. Была предоставлена модификация, которая позволила пользователям Visual Basic 3.0 использовать обновленный Jet, выпущенный в Access 2.0.
Jet 2.0 был выпущен как несколько динамически связанных библиотек DLL (Dynamic-Link Library), которые использовались прикладным программным обеспечением, таким как база данных Microsoft Access. DLL в Windows — это «библиотеки» общего кода, которые могут использоваться более чем одним приложением, — сохраняя код, который использует более одного приложения в общей библиотеке, которую каждое из этих приложений может использовать независимо, обслуживание кода сокращается, а функциональность приложений увеличивается с меньшими затратами на развитие. Jet 2.0 состоял из трех библиотек DLL: DLL Jet, DLA объектов доступа к данным (DAO) и нескольких внешних ISAM-библиотек. Jet DLL определил, к какой базе данных он обращался, и как выполнять то, что было запрошено. Если источником данных был MDB-файл (формат Microsoft Access), он напрямую считывал и записывал данные в файл. Если источник данных был внешним, тогда он должен вызвать правильный драйвер ODBC для выполнения своего запроса. DAO DLL был компонентом, который программисты могли использовать для взаимодействия с движком Jet, и в основном использовался программистами Visual Basic и Access Basic. ISAM DLL были набором модулей, которые позволяли Jet получать доступ к трем базам данных на базе ISAM: xBase, Paradox и Btrieve. Jet 2.0 был заменен на Jet 2.1, который использовал ту же структуру базы данных, что и другие стратегии блокировки, что делает ее несовместимой с Jet 2.0.
Jet 3.0 включал множество улучшений, в том числе новую структуру индекса, которая уменьшала размер хранилища и время, затраченное на создание индексов, которые были сильно дублированы, удаление блокировок чтения на индексных страницах, новый механизм повторного использования страниц, новый метод уплотнения для который уплотнял базу данных, привел к тому, что индексы сохранялись в формате с кластеризованным индексом, новый механизм распределения страниц для улучшения возможностей чтения вперед, улучшенные операции удаления, которые ускоряли обработку, многопоточность (три потока использовались для чтения вперед, записи за , и обслуживание кеша), неявные транзакции (пользователям не приходилось указывать, что движок запускается вручную и фиксировать транзакции в базе данных), новый механизм сортировки, длинные значения (например, записки или двоичные типы данных) были сохранены в отдельных таблицах, и динамическую буферизацию (в соответствии с которой кеш Jet был динамически распределен при запуске и не имел ограничений и который был изменен с первой политики замены в первом входе FIFO (First In First Out)) на в последнее время используемая политика замены буфера (LRU)). Jet 3.0 также допускает репликацию базы данных. Jet 3.0 был заменен Jet 3.5, в котором используется одна и та же структура базы данных, но разные стратегии блокировки, что делает его несовместимым с Jet 3.0.
В версиях Microsoft Access от Access 2000 до Access 2010 был включен «Мастер обновления», который мог «увеличить размер» (обновить) базу данных Jet до «эквивалентной базы данных на Microsoft SQL Server с той же структурой таблиц, данными и многими другими атрибутами исходной базы данных ». Этот инструмент не обрабатывал отчеты, запросы, макросы и безопасность, а это означало, что некоторые модификации вручную могли потребоваться, если приложение сильно зависело от этих функций Jet.
Отдельная версия ядра базы данных Jet 4 была компонентом компонентов доступа к данным Microsoft (MDAC) и была включена в каждую версию Windows с Microsoft Windows 2000на. Двигатель базы данных Jet был только 32-битным и не запускался изначально под 64-разрядными версиями Windows. Это означало, что собственные 64-битные приложения (например, 64-разрядные версии SQL Server) не могли получить доступ к данным, хранящимся в файлах MDB через ODBC, OLE DB или любым другим способом, за исключением промежуточного 32-битного программного обеспечения (работающего в WoW64 ), который выступал в качестве прокси для 64-битного клиента.
С версией 2007 года Access включает в себя версию Jet для Office, первоначально называемую Microsoft Office Access Connectivity Engine (ACE), но которая теперь называется механизмом доступа к базе данных (однако консультанты MS-Access и разработчики VBA, специализирующиеся на MS-Access с большей вероятностью относятся к нему как к «механизму базы данных ACE»). Этот движок был обратно совместим с предыдущими версиями движка Jet, поэтому он мог читать и записывать файлы (.mdb) из более ранних версий Access. Он представил новый формат файла по умолчанию (.accdb), который внес несколько улучшений в Access, включая сложные типы данных, такие как многозначные поля, тип данных вложения и отслеживание истории в полях memo. Он также внес изменения безопасности и улучшения шифрования и включил интеграцию с Microsoft Windows SharePoint Services 3.0 и Microsoft Office Outlook 2007.
Механизм в Microsoft Access 2010 прекратил поддержку файлов Access 1.0, Access 2.0, Lotus 1-2-3 и Paradox. Была представлена 64-разрядная версия Access 2010 и ее драйвер / поставщик ACE, которая по сути обеспечивает 64-разрядную версию Jet. Драйвер не входит в операционную систему Windows, но доступен как распространяемый.
Механизм в Microsoft Access 2013 прекратил поддержку файлов Access 95, Access 97 и xBase. Он также прекратил поддержку для тиражирования. Поддержка DBase была в конечном итоге восстановлена.
С точки зрения технологии доступа к данным, Jet считается устаревшей технологией Microsoft , но Microsoft продолжает поддерживать ACE как часть Microsoft Access. [Источник 2]
Архитектура
Jet, являясь частью системы управления реляционными базами данных (RDBMS), позволяет манипулировать реляционными базами данных. Он предлагает единый интерфейс, который другое программное обеспечение может использовать для доступа к базам данных Microsoft и обеспечивает поддержку безопасности, ссылочной целостности, обработки транзакций, индексирования, записи и блокировки страниц и репликации данных. В более поздних версиях двигатель был расширен для выполнения SQL-запросов, хранения символьных данных в формате Unicode, создания представлений базы данных и разрешения двунаправленной репликации с помощью Microsoft SQL Server.
Реактивные DLL (Dynamic-Link Library)-файлы В Jet есть три модуля: One — это драйвер ISAM (Indexed Sequential Access Method) для родных Jet, динамическая библиотека ссылок (DLL), которая может напрямую манипулировать файлами базы данных Microsoft Access (MDB) с использованием метода индексированного последовательного доступа (ISAM). Еще один из модулей содержит драйверы ISAM, библиотеки DLL, которые предоставляют доступ к различным базам данных ISAM, среди которых: xBase, Paradox, Btrieve и Microsoft Visual FoxPro, в зависимости от версии Jet. Конечным модулем является DLA-объекты объектов доступа к данным. DAO предоставляет API, который позволяет программистам получать доступ к базам данных JET с использованием любого языка программирования. [Источник 3]
Блокировка
Jet позволяет нескольким пользователям одновременно обращаться к базе данных. Чтобы предотвратить повреждение или аннулирование данных, когда несколько пользователей пытаются редактировать одну и ту же запись или страницу базы данных, Jet использует политику блокировки. Любой отдельный пользователь может изменять только те записи базы данных (то есть элементы в базе данных), к которым пользователь применил блокировку, что дает эксклюзивный доступ к записи до тех пор, пока блокировка не будет выпущена. В версиях Jet до версии 4 используется модель блокировки страниц, а в Jet 4 используется модель блокировки записи. Базы данных Microsoft организованы в «страницы» данных, которые являются структурами фиксированной длины (2 кБ до Jet 4, 4 кБ в Jet 4). Данные хранятся в «записях» переменной длины, которые могут занимать меньше или больше одной страницы. Модель блокировки страниц работает путем блокировки страниц, а не отдельных записей, которые, хотя и менее ресурсоемкие, также означают, что когда пользователь блокирует одну запись, все остальные записи на одной странице блокируются на стороне. В результате ни один другой пользователь не может получить доступ к записям, заложенным воедино, даже если ни один пользователь не обращается к ним, и нет необходимости блокировать их. В Jet 4 модель блокировки записей исключает блокировки залога, поэтому каждая запись, которая не используется, доступна.
Существует два механизма, которые Microsoft использует для блокировки: пессимистическая блокировка и оптимистическая блокировка. При пессимистической блокировке запись или страница блокируются сразу после запроса блокировки, а при оптимистичной блокировке блокировка задерживается до тех пор, пока не будет сохранена отредактированная запись. Конфликты с меньшей вероятностью происходят с оптимистичной блокировкой, поскольку запись заблокирована только на короткий период времени. Однако с оптимистичной блокировкой нельзя быть уверенным, что обновление будет успешным, потому что другой пользователь может сначала заблокировать запись. При пессимистической блокировке обновление гарантируется после получения блокировки. Другие пользователи должны подождать, пока блокировка не будет выпущена для внесения изменений. Конфликты блокировок, которые либо требуют, чтобы пользователь ждал, либо приводил к сбою запроса (обычно после таймаута), более часто встречаются с пессимистической блокировкой.
Обработка транзакций
Jet поддерживает обработку транзакций для систем баз данных, которые обладают этой возможностью. (Системы ODBC имеют одноуровневую обработку транзакций, в то время как несколько систем ISAM, таких как Paradox, не поддерживают обработку транзакций.) Транзакция представляет собой серию операций, выполняемых с базой данных, которая должна выполняться вместе — это известно как атомарность и является одним из ACID (Atomicity, Consistency, Isolation и Durability), концепции, которые рассматриваются как ключевые функции обработки транзакций системы управления базами данных. Для обработки транзакций (до Jet 3.0) программисту необходимо было начать транзакцию вручную, выполнить операции, которые необходимо выполнить в транзакции, а затем совершить (сохранить) транзакцию. До совершения транзакции изменения производятся только в памяти и не записываются на диск. Транзакции имеют ряд преимуществ перед независимыми обновлениями баз данных. Одно из главных преимуществ заключается в том, что транзакции можно отказаться, если во время транзакции возникает проблема. Это называется откатом транзакции или просто откатом, и она восстанавливает состояние записей базы данных точно до состояния, прежде чем начнется транзакция. Транзакции также позволяют сохранять состояние базы данных в соответствии с последовательностью, если системный сбой происходит в середине последовательности обновлений, требуемых для атомарности. Нет никаких шансов, что только некоторые из обновлений будут записаны в базу данных; либо все будет успешным, либо изменения будут отброшены при перезапуске системы базы данных. С политикой ODBC в оперативной памяти транзакции также допускают, что многие обновления записи будут происходить полностью в памяти, и только одна дорогая запись диска в конце.
В Jet 3.0 поддерживались неявные транзакции. Это транзакции, которые запускаются автоматически после того, как последняя транзакция была передана в базу данных. Неявные транзакции в Jet произошли при выпуске SQL-документа DML. Однако было обнаружено, что это отрицательное влияние на производительность в 32-битной Windows (Microsoft Windows 95, Microsoft Windows 98), поэтому в Jet 3.5 Microsoft удалила неявные транзакции, когда были сделаны SQL-заявления DML. [Источник 4]
Целостность данных
Jet обеспечивает целостность объекта и ссылочную целостность. Jet по умолчанию предотвратит любое изменение записи, которая нарушает ссылочную целостность, но базы данных Jet могут вместо этого использовать ограничения распространения (каскадные обновления и каскадные удаления) для поддержания ссылочной целостности.
Jet также поддерживает «бизнес-правила» (также известные как «ограничения») или правила, применимые к любому столбцу, чтобы обеспечить, какие данные могут быть помещены в таблицу или столбец. Например, может применяться правило, которое не позволяет вводить дату в столбце date_logged, который раньше текущей даты и времени, или может применяться правило, которое заставляет людей вводить положительное значение в числовое поле
Безопасность
Доступ к базам данных Jet выполняется на уровне пользователя. Информация пользователя хранится в отдельной системной базе данных, а доступ контролируется каждым объектом в системе (например, по таблице или по запросу). В Jet 4 Microsoft реализовала функциональность, которая позволяет администраторам баз данных устанавливать безопасность с помощью команд SQL CREATE, ADD, ALTER, DROP USER и DROP GROUP. Эти команды являются подмножеством стандарта ANSI SQL 92, и они также применяются к командам GRANT / REVOKE. Когда Jet 2 был выпущен, безопасность также может быть установлена программно через DAO.
Запрос
Запросы — это механизмы, которые Jet использует для извлечения данных из базы данных. Они могут быть определены в Microsoft QBE (Query By Example), через Microsoft Access SQL Window или через Access Access Objects (DAO). Затем они преобразуются в инструкцию SQL SELECT. Затем запрос компилируется — это включает в себя синтаксический анализ запроса (включает проверку синтаксиса и определение столбцов для запроса в таблице базы данных), а затем преобразование в формат объекта внутреннего запроса Jet, который затем символизируется и упорядочивается в древовидную структуру. В Jet 3.0 они затем оптимизируются с использованием технологии оптимизации запросов Microsoft Rushmore. Затем запрос выполняется и результаты возвращаются к приложению или пользователю, запросившему данные.
Jet передает данные, полученные для запроса в dynaset. Это набор данных, которые динамически связаны с базой данных. Вместо того, чтобы результат запроса был сохранен во временной таблице, где данные не могут быть обновлены непосредственно пользователем, динасет позволяет пользователю просматривать и обновлять данные, содержащиеся в династе. Таким образом, если преподаватель университета запрашивает всех учеников, которые получили различие в своем задании и обнаруживает ошибку в записи этого ученика, им нужно будет только обновлять данные в династе, что автоматически обновляет запись базы данных ученика без необходимости в них для отправки определенного запроса на обновление после хранения результатов запроса во временной таблице.
Совместимость
Microsoft предоставляет драйверы JET только для Microsoft Windows. Поэтому сторонняя поддержка программного обеспечения для баз данных JET почти полностью доступна в Windows. Существует проект с открытым исходным кодом, который пытается включить работу с базами данных JET на других платформах, MDB Tools и его расширенном Java-порту с именем Jackcess. [Источник 5]





