(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Опыт прикладного программиста в деле перевода базы данных с MS Access на SQL-Server

Источник: delphikingdom

Здравствуйте, уважаемые коллеги. Хочу поделиться недавним опытом перевода базы данных из формата Access 2000 на платформу MS SQL Server 7.0. Конечно, моя статья не отличается профессионализмом и полнотой изложения. Мой практический опыт работы с SQL-Server до этого момента был равен почти абсолютному нулю. Но как можно заметить, летом статей настолько мало, что искренне хочется поддержать наше Королевство. Итак, приступим.
Несмотря на использование ODBC DSN и родных майкрософтовских драйверов обнаружилась некоторая несовместимость.
Используемые драйвера:

  • MS Access - "Microsoft Access Driver" из состава MS Office 2000
  • SQL-Server - "SQL Server" из состава MS SQL-Server 7.0
Операционная система сервера приложений - Windows 2000.

Весь перевод производился с помощью мастера "DTS Import Wizard", входящего в состав SQL-Server.

Перевод данных с датами  

При переводе одной из таблиц обнаружились две ошибки:

  • Несмотря на запрет пустых значений для одного из полей в формате "дата-время", в таблице Access имелось 3 записи с пустыми значениями в этих полях. Всего записей в таблице более 17 тысяч. Как эти три там оказались - никто не знает.
  • После исправления этой ситуации процесс перевода был прерван ошибкой:

Как оказалось, в таблице имелась куча записей с годами вроде 2089, 2095, 2099. Причина этого понятна - использование маски при некорректной настройке формата даты в системе. Непонятно, почему эти данные не принял SQL-Server. Тем не менее, спасибо ему за это. Корректировке были подвергнуты более 3000 записей (программа не сопровождалась три года). Чтобы подобное не повторилось в дальнейшем, я поставил проверку на значение даты перед операцией "Post". В дальнейшем перевод 24 таблиц прошел быстро и без затруднений. Объем базы данных в формате Access на момент перевода составлял 7.8 Мб после операции "сжатия-восстановления".

Особенность типов данных 

По умолчанию в процессе перевода данных таблицы создавались с полями формата nvarchar и ntext. Как оказалось, при использовании майкрософтовского ODBC-драйвера "SQL Server" эти форматы не воспринимаются через BDE. Пришлось менять форматы на varchar и text. Varchar соответствует "текстовому" формату Access, а text - "полю Memo". Также было замечено, что логические поля, приобретшие теперь тип "bit", не допускают использование пустых значений. Поэтому им необходимо указать значения по умолчанию (0 или -1). После перевода все таблицы свободно открывались и редактировались через BDE. Как оказалось, индексы и реляционные связи не были конвертированы. Не желая испытывать судьбу, я тут же присвоил всем таблицам первичные индексы.

Некоторые особенности построения SQL-запросов 

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

  • Использование условий вроде "= true" для логических полей порождало ошибку. Замена "true" на -1, а "false" на 0 решило проблему.
  • Использование в запросах условия "<> Null" оказалось недопустимым. Требуется писать "Is Not Null".
  • Условия на даты пришлось переписать в формате yyyymmdd в кавычках и без разделителей. При работе с Access использовалась маска #mm/dd/yyyy# с разделителем "/". Благодаря централизованному использованию функции преобразования даты в программе пришлось изменить только ее. Отсюда совет: используйте функции преобразования централизованно.
  • Последнее, с чем я столкнулся - это особенность работы функции Str() в запросе, которою я использовал для получения строкового значения логического поля. Access давал результат " -1" и " 0" для true и false соответственно. SQL-Server предложил " -1" и " 0" - уже с 10 пробелами перед значением. Это просто решается с помощью функции LTrim().
Вот и все! Затраченное на перевод время - 2,5 часа с тремя перекурами и одним перерывом на кофе. Несмотря на отсутствие вторичных индексов, выполнение запросов замедлилось не более, чем в два раза, а повторное открытие запроса - около полутора. Просто так лепить индексы мне не хочется, поэтому пока оставлю так, а как появится время, воспользуюсь утилитой "Query analyzer", который входит в состав SQL-Server. Как написано в умной книжке, она позволяет отслеживать этапы выполнения запроса по времени, из чего можно сделать вывод о необходимости тех или иных вторичных индексов. Самое приятное, что сразу бросилось в глаза:
  • Быстрый backup и возможность архивации по расписанию. Установи два-три расписания с разными периодами и голова не болит. Недостаток: архивация возможна только на локальные носители. Подключенные сетевые диски и сетевые адреса не воспринимаются.
  • Исчезли проблемы с медленным сохранением Memo-полей, из-за чего запись блокировалась на значительное время.
В завершение несколько советов по использованию Access (опыт - четыре года):
  • Одни из лучших компонентов для доступа - фирмы Regatta Systems.
  • Тем не менее лучшим считаю вариант ODBC с драйвером MS Access 2000. Однако из-за проблем с Memo-полями, в частности, в больших таблицах, приходилось использовать отдельные запросы на их изменение.
  • При настройке DSN установите параметр "Safe transaction" равным 1. По умолчанию 0. Из справки: "Если имеет значение 0 (по умолчанию), все транзакции передаются немедленно. Если имеет значение 1, все транзакции сохраняются на диске только после операции передачи. При этом немного снижается быстродействие."
  • Наибольшая скорость работы с базой данных (практически мгновенно) была получена на операционной системе Windows 2000.
На этом желаю всем приятной работы. И пожалуйста, особо не критикуйте статью: во-первых, это моя первая статья в Королевство, а во-вторых, написана она была исключительно для того, чтобы не видеть каждый день аннотацию, что последняя статья была в королевстве две недели назад :)

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 17.06.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Windows Professional 10, Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100