Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Администрирование баз данных и файловые системы....docx
Скачиваний:
6
Добавлен:
31.07.2019
Размер:
38.25 Кб
Скачать

Администрирование баз данных и файловые системы. Именование файлов. Защита файлов. Режим многопользовательского доступа.

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

1. Файловые системы

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

2. Именование файлов

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

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

Другой крайний вариант был реализован в файловых системах операционной системы Multics. В файловой системе Miltics пользователи представляли всю совокупность каталогов и файлов как единое дерево. Полное имя файла начиналось с имени корневого каталога, и пользователь не обязан был заботиться об установке на дисковое устройство каких-либо конкретных дисков.

Компромиссное решение применено в файловых системах ОС UNIX. На базовом уровне в этих файловых системах поддерживаются изолированные архивы файлов. Один из этих архивов объявляется корневой файловой системой. После монтирования общей файловой системы именование файлов производится так же, как если бы она с самого начала была централизованной.

2.3. Защита файлов

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

2.4. Режим многопользовательского доступа

В операции открытия файла (первой и обязательной операции, с которой должен начинаться сеанс работы с файлом) среди прочих параметров указывался режим работы (чтение или изменение). Если к моменту выполнения этой операции от имени некоторого пользовательского процесса A файл уже находился в открытом состоянии от имени некоторого другого процесса B, причем файл был открыт в режиме, который несовместим с желаемым режимом открытия (совместимы только режимы чтения), то в зависимости от особенностей системы процессу A либо сообщалось о невозможности открытия файла в желаемом режиме, либо он блокировался до тех пор, пока в процессе B не выполнялась операция закрытия файла.

Объектно-ориентированное программирование в СУБД Visual FoxPro. Объектная модель и ее свойства. Базовые классы в Visual FoxPro.

Система Microsoft Visual FoxPro 6.0 содержит все необходимые средства для создания и управления высокопроизводительными 32-х разрядными приложениями и компонентами баз данных. Надежные инструментальные средства и объектно-ориентированный язык, специализированный для работы с данными, идеально подходят для создания современных масштабируемых многоуровневых приложений, интегрируемых в архитектуру клиент/сервер и Интернет

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

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

Почти все базовые классы являются визуальными. Объекты, созданные на их основе, отображаются на экране. Некоторые из базовых классов невидимы. Они используются для объединения объектов (например, FormSet), обработки специальных событий (например, Timer) или создания невизуальных объектов (например, ProjectHook).

В Visual FoxPro широко применяется вложенность классов. Вложенным является класс, являющийся частью другого класса, называемого контейнером (container class). Наиболее яркий пример контейнера представляет собой таблица, компоненты которой — это столбцы и надписи к ним. При создании формы и после запуска ее на выполнение вы можете получить доступ ко всем компонентам контейнера.

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

Многопользовательская работа в локальной сети. Блокировки в Visual FoxPro.

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

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

В Visual FoxPro вы можете использовать два типа блокировок: блокировку таблицы и записи. Блокировка таблицы запрещает доступ другим пользователям ко всей таблице, пока вы редактируете одну или несколько записей. Применение блокировки записи не допускает изменения записи кем-либо, кроме пользователя, установившего блокировку.

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

Иногда бывает необходимо применить ручную блокировку. Visual FoxPro блокирует текущую таблицу с помощью функции FLOCK(). В отличие от команды SET EXCLUSIVE ON, которая предотвращает любой доступ к таблице со стороны других пользователей, FLOCK() блокирует таблицу, оставляя ее доступной для чтения. Остальные пользователи могут открывать таблицу и просматривать записи, даже не задумываясь о том, что она заблокирована. FLOCK() блокирует текущую таблицу и возвращает .T., если блокировка прошла успешно.

Если в качестве аргумента функции вы укажете псевдоним или номер рабочей области, то у вас появится возможность заблокировать таблицу в другой, не текущей рабочей области. Например: FLOCK(1) или FLOCK(Account). Эта особенность очень полезна для блокировки связанных таблиц. RLOCK() и LOCK() блокируют текущую запись и возвращают .T., если блокировка завершилась успешно.

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

OPEN DATABASE "auto store" SET REPROCESS TO 3 AUTOMATIC STORE 1,2,3,4 TO cRecList cOldExcl=SET("EXCLUSIVE") SET EXCLUSIVE OFF

USE model

?LOCK(cReclist,model)

UNLOCK IN model

SET EXCLUSIVE &cRecList

Буферизация и использование транзакций в Visual FoxPro.

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

При использовании буферизации Visual FoxPro копирует запись в память или на диск. Первоначальная запись все еще остается доступной для других пользователей. Когда указатель записи перемещается или совершается попытка ее модификации программным путем, Visual FoxPro пытается заблокировать запись, проверяет, что другой пользователь не сделал никаких изменений, и затем записывает изменения на диск. Хорошо при этом иметь задействованный обработчик ошибок для разрешения конфликтов, которые могут случиться при попытке записать изменения в таблицу. Буферизация записи отличается от буферизации таблицы тем, что при первом типе изменения записываются в таблицу либо при перемещении указателя, либо при использовании функции TABLEUPDATE(). При буферизации таблицы изменения записываются только после использования функции TABLEUPDATE(). Буферизация устанавливается с помощью функции CURSORSETPROP(). После установки буферизация она остается в действии до ее отключения с помощью той же функции CURSORSETPROP(), либо до закрытия таблицы.

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

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

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

Для установки пессимистической блокировки записи используйте функцию CURSORSETPROP() и следующие параметры: = CURSORSETPROP("Buffering",2)

Visual FoxPro пытается заблокировать запись, на которой установлен указатель. Если блокировка завершилась успешно, Visual FoxPro помещает запись в буфер и разрешает редактирование. Когда вы перемещаете указатель записи или выполняете функцию TABLEUPDATE(), Visual FoxPro записывает данные из буфера в таблицу.

Для установки оптимистической буферизации записи используйте функцию CURSORSETPROP() и следующие параметры: = CURSORSETPROP("Buffering",3)

Когда вы перемещаете указатель записи или выполняете функцию TABLEUPDATE(), Visual FoxPro пытается блокировать запись. Если блокировка успешно завершена, Visual FoxPro сравнивает текущее значение записи на диске со значением перед началом буферизации. Если эти значения одинаковые, изменения записываются в таблицу, если же значения разные, то Visual FoxPro генерирует ошибку.

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

Для управления транзакциями используется три команды, представленные в табл. 20.7.

Таблица. 20.7. Команды, используемые для управления транзакциями

Команда

Назначение

BEGIN TRANSACTION

Инициирует транзакцию

ROLLBACK

Осуществляет откат, т. е. аннулирует все выполненные в течение транзакции действия

END TRANSACTION

Завершает транзакцию и сохраняет все выполненные действия в базе данных

В некоторых случаях вам может понадобиться использовать вложенные транзакции, при этом каждая из них должна начинаться командой BEGIN TRANSACTION и завершаться командой END TRANSACTION. Выполнение команды ROLLBACK действует только на транзакцию, внутри которой она выполняется. Команды BEGIN и END TRANSACTION могут находиться в разных функциях или процедурах. 

События в Visual FoxPro. Последовательность обработки событий в Visual FoxPro.

Visual FoxPro иерархия событий

0) Событие BeforeOpenTable для Data Environment

1) Событие Load Formы Событие Load наступает самым первым перед всеми остальными событиями формы.

2) Инициализация Data Environment  Инициализация объекта "Data Environment" осуществляется после загрузки формы, но перед ее инициализацией и перед инициализацией любого из объектов управления формы. Это необходимо для того, чтобы была возможность связывания данных из таблиц с элементами управления в форме.

2) Инициализация элементов управления формы Перед инициализацией формы инициализируются все элементы управления, которые в ней содержатся. Если один из элементов в процессе своей инициализации вернул значение FALSE (.F.) из своего события INIT(), оставшиеся элементы управления и сама форма не инициализируются, а вызывается событие "Destroy".

3) Инициализация формы Наступает инициализация формы. В ходе этого события можно использовать данные из таблиц. Можно устанавливать указатель записи таблиц, открытых в "Data Environment" или "Load Event" формы. Если событие INIT() вернуло значение FALSE (.F.) форма не активизируется и вызывается событие "Destroyt".

5) События WHEN() и "Focus для элементов управления формы " После завершения активизации формы выполняется событие WHEN() для первого элемента управления в форме. Если оно удовлетворяется, т.е. в нем нет кода или оно вернуло значение TRUE (.T.), форма передает фокус этому элементу. Если событие WHEN() для первого элемента не выполнелось, т.е. код возврата FALSE (.F.), Visual FoxPro проверяет событие WHEN() для следующего элемента управления. Если ни один из элементов не получил фокус, сама форма не может получить фокус.

6) Другие события при выполненн формы После того как элемент управления получил фокус, могут наступить другие события, например, "KeyPress" или события обработки мыши.. Событие VALID() вызывается перед событием LostFocus(). Только когда VALID() вернет .T. или есть код, который позволит пользователю покинуть поле, наступает событие LostFocus(). Клик мыши вызвает события MouseDown() и MouseUp() перед самим событием Click(). И затем только после этих трех событий наступает событие Valid() (Если клик пришелся вне поля, на котором только что было управление).

7) Закрытие формы Когда нажата клавиша для закрытия формы, наступает последовательность событий, подобная той, что была при открытии формы :

QueryUnload() событие.

Form's Destroy() событие.

Destroy() событие для каждого элемента.

Form's событие Unload(), если все события Destroy() завершились успешно.

Наконец, DataEnvironment закрывает все таблицы и файлы.

AfterCloseTables() событие, перед событием .....

Destroy() для DataEnvironment

Технология OLE в Visual FoxPro. Работа с MS Word, MS Excel, OO Calc, OO Writer в Visual FoxPro.

В Visual FoxPro имеется возможность хранить в таблицах сами объекты или связь с объектами, которые созданы в приложении, поддерживающем механизм связывания и внедрения (OLE). Основное отличие между связыванием и внедрением состоит в том, каким образом данные запоминаются и обновляются после того, как их поместили в базу данных.

При связывании данные обновляются, когда изменяется исходный файл. Связанные данные запоминаются в исходном файле; в базе данных сохраняются только сведения о месте расположения исходного файла. Внедренные объекты сохраняются в базе данных. Если установить на внедренный объект указатель и дважды щелкнуть мышью, откроется приложение, в котором объект был создан. В нем можно редактировать внедренный объект, при этом измененные данные записываются в базу данных.

Объект, который внедряется или связывается, называется OLE-объектом. Исходное приложение, в котором был создан OLE-объект, называется приложением-сервером, а приложение, в которое внедряется или с которым связывается OLE-объект, — приложением-клиентом.  

В Visual FoxPro OLE-объекты могут храниться и отображаться только в полях типа General (Общий). Для внедрения OLE-объекта в таблицу Visual FoxPro выполните следующие действия:

  1. Создайте в таблице, предназначенной для хранения OLE-объекта, поле типа General.

  2. Откройте таблицу в режиме Browse (Обзор) (рис. 21.1), выполнив команду Browse (Обзор) из меню View (Вид) или нажав кнопку Browse (Обзор) окна проекта. Откроется окно просмотра таблицы.

Замечание

Если поле типа General (Общий) пусто, то при просмотре таблицы в нем появляется пометка gen. Если поле содержит OLE-объект, то пометка принимает вид Gen.

  1. Для вставки OLE-объекта дважды щелкните на поле типа General (Общий), содержащем значение gen. Откроется окно редактирования этого поля (рис. 21.2).

  2. В меню Edit (Правка) выберите команду Insert Object (Вставить объект). Откроется диалоговое окно Вставка объекта (рис. 21.3).

  3. Это диалоговое окно содержит два переключателя, предоставляющих два варианта включения OLE-объекта:

  • Создать новый — позволяет создать новый OLE-объект и вставить его в поле;

  • Создать из файла — позволяет разместить в поле таблицы OLE-объект из файла.

При выборе переключателя Создать новый выберите из предложенного списка Тип объекта сервер, который хотите использовать для создания объекта, и нажмите кнопку ОК. Откроется приложение, в котором создайте объект, после чего вернитесь в Visual FoxPro.

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