В последнее время перед разработчиками все чаще возникает необходимость переноса приложений, созданных для базы данных Visual FoxPro, на платформу клиент-сервер. Наиболее простым способом переноса данных является использование мастера наращивания.
Мастер наращивания создает базу данных SQL Server, которая дублирует, насколько это возможно, функциональный диапазон базы данных Visual FoxPro. С помощью мастера наращивания вы можете:
Предупреждение
Наращивание может занимать много времени; это зависит от количества данных, объема сетевого трафика и числа параллельных запросов, обрабатываемых сервером. Для больших таблиц наращивание может выполняться в течение нескольких часов.
В данной главе рассмотрим использование мастера наращивания для переноса данных из Visual FoxPro в базу SQL Server.
Использование мастера наращивания для переноса данных в базу данных SQL Server
Прежде чем приступить к процессу переноса данных из Visual FoxPro в SQL Server, рассмотрим особенности и ограничения, связанные с переносом полей таблиц, выражений, правил поддержки целостности.
Соответствие типов данных Visual FoxPro и MS SQL Server представление в табл. 23.1.
Таблица 23.1. Соответствие типов данных
Сокращенное обозначение | Тип данных Visual FoxPro | Тип данных SQL Server |
С | Character | char |
Y | Currency | money |
D | Date | datetime |
Т | DateTime | datetime |
В | Double | float |
F | Float | float |
G | General | image |
I | Integer | int |
L | Logical | bit |
М | Memo | text |
М (binary) | Memo binary | image |
С (binary) | Character binary | binary |
N | Numeric | float |
Р | Picture | image |
Отображение выражений из Visual FoxPro в SQL Server мастером наращивания
Несмотря на то, что Visual FoxPro и Transact-SQL имеют несколько общих функций, многие функции Visual FoxPro не поддерживаются в SQL Server. Выражения Visual FoxPro, содержащиеся в правилах проверки достоверности на уровне полей и на уровне записей, а также в значениях по умолчанию мастер наращивания пытается преобразовать в выражения TransactSQL, используя соответствия, представленные в табл. 23.2.
Таблица 23.2. Отображение выражений из Visual FoxPro в SQL Server
Выражение Visual FoxPro | Выражение SQL Server |
Истина (.Т.) | 1 |
Ложь (.F.) | 0 |
# | <> |
.AND. | AND |
.NOT. | NOT |
.NULL. | NULL |
.OR. | OR |
= <; | <= |
= > | >= |
ASCO | ASCII () |
AT() | CHARINDEX ( ) |
CDOW ( ) | DATENAME(dw, . . . ) |
CHR() | CHAR ( ) |
CMONTH ( ) | DATENAME (mm, . . • ) |
CTODO | CONVERT {datetime, . . . ) |
CTOT ( ) | CONVERT (datetime, . . . ) |
DATE ( ) | GET DATE ( ) |
DATETIME ( } | GETDATE ( ) |
DAY () | DATEPART{dd, . . . ) |
DOW() | DATEPART (dw, . . . ) |
DTOC ( ) | CONVERT (varchar, ...) |
DTOR ( ) | RADIANS ( ) |
DTOT ( ) | CONVERT (datetime, ...) |
HOUR ( ) | DATEPART (hh, . . . ) |
LIKEO | PATINDEX ( ) |
MINUTE () | DATEPART (mi, . . . ) |
MONTH ( ) | DATEPART (mm, . . . ) |
MTON ( ) | CONVERT (money, . . . ) |
NTOM ( ) | CONVERT (float, . . . ) |
RTOD ( ) | DEGREES ( ) |
SUBSTRO | SUBSTRING () |
ТТОС ( ) | CONVERT (char, , . . ) |
TTOD{) | CONVERT (ciatetime, . . , ) |
YEAR ( ) | DATEPARTfyy, ...} |
Следующие функции имеют одинаковый вид и в Visual FoxPro, и в SQL Server.
CEILING ()
LOG (
LOWER ()
LTRIM(
RIGHT()
RTRIM()
SOUNDEX()
SPACE ()
STR()
STUFF ()
UPPER ()
Отображение типов индексов мастером наращивания
Индексы SQL Server и индексы Visual FoxPro очень похожи. В табл. 23.3 показано, как типы индексов Visual FoxPro преобразуются в типы индексов SQL Server.
Таблица 23.3. Сопоставление типов индекса Visual FoxPro типам индекса SQL Server
Тип индекса Visual FoxPro | Тип индекса SQL Server |
Первичный | Кластеризованный уникальный |
Кандидат | Уникальный |
Уникальный, обычный | Неуникальный |
Мастер наращивания использует имена индексов Visual FoxPro в качестве имен индексов в SQL Server. Если имя индекса оказывается зарезервированным ключевым словом, мастер наращивания изменяет это имя, присоединяя к нему символ "_".
Замечание
SQL Server не поддерживает убывающие и возрастающие индексы и не разрешает использовать выражения в индексах сервера. Мастер наращивания в ходе наращивания индекса удаляет выражения Visual FoxPro из выражений индекса; на сервер передаются только имена полей.
Отображение объектов мастером наращивания
В табл. 23.4 показано, как отображаются объекты из Visual FoxPro в SQL Server: Таблица 23.4. Отображение объектов мастером наращивания
Объект Visual FoxPro | Объект SQL Server |
База данных | База данных |
Таблица | Таблица |
Индексы | Индексы |
Поле | Поле |
Значение по умолчанию | Значение по умолчанию |
Правило проверки достоверности таблицы | Хранимые процедуры SQL Server, вызываемые ИЗ триггеров UPDATE И INSERT |
Правило проверки достоверности поля | Хранимые процедуры SQL Server, вызываемые ИЗ триггеров UPDATE И INSERT |
Постоянные отношения (там, где они используются в качестве ограничений ссылочной целостности) | Триггеры UPDATE, INSERT И DELETE |
Отображение правил и ссылочной целостности мастером наращивания
В табл. 23.5 описываются триггеры, создаваемые мастером наращивания. Каждый конкретный триггер может содержать код, эмулирующий какиелибо (или все) функциональные возможности Visual FoxPro из числа указанных.
Таблица 23.5. Триггеры, создаваемые мастером наращивания
Триггер | Эмулируемые функциональные возможности Visual FoxPro |
UPDATE | Правила проверки достоверности (на уровне полей и на уровне записей). Ссылочная целостность |
INSERT | Правила проверки достоверности (на уровне полей и на уровне записей). Ссылочная целостность (только триггеры дочерних таблиц) |
DELETE (только родительские таблицы) | Ссылочная целостность |
Перед запуском мастера наращивания необходимо установить драйвер ODBC для выбранной базы данных и определить источник данных для связи с базой данных. Также желательно определить именованное удаленное соединение.
Замечание
Установку драйверов ODBC, определение источника данных и создание именованного удаленного соединения мы рассмотрели в главе 22.
Выбор базы данных и источника данных
На первом этапе работы с мастером наращивания вам необходимо выбрать и открыть локальную базу данных, которая будет переноситься в базу данных SQL Server (рис. 23.1).
Рис. 23.1. Выбор локальной базы данных с исходными таблицами
На втором этапе необходимо выбрать источник данных. Если вы используете именованное соединение для доступа к источнику данных, мастер наращивания будет связывать это именованное соединение со всеми удаленными представлениями, создаваемыми в процессе наращивания. Если при регистрации в источнике данных вы вместо имени соединения используете имя источника данных, а в дальнейшем задаете создание удаленных представлений, мастер наращивания создает именованное соединение с именем Upsize (или Upsize2, Upsize3 и т. д., если определение соединения с предлагаемым именем уже существует).
При нажатии кнопки Next (Далее) мастер откроет диалоговое окно ODBC Login (ODBC Логин). Если вы используете именованное соединение с сохраненным паролем, мастер зарегистрирует вас на выбранном сервере SQL Server, не требуя ввести регистрационную информацию ODBC.
На третьем этапе вы выбираете наращиваемые таблицы. Чтобы обеспечить правильность экспортируемых данных, мастер пытается открыть все таблицы базы данных, выбранной для наращивания, в режиме эксклюзивного пользования. Если какие-либо открытые таблицы находятся в совместном пользовании, мастер закрывает их и вновь открывает в эксклюзивном режиме, что может вызвать потерю некоторых временных отношений, установленных с помощью команды SET RELATION или SET SKIP. Все таблицы, которые не удастся открыть в эксклюзивном режиме, не смогут принять участие в наращивании.
Вы не можете изменить принимаемое по умолчанию соответствие для поля ключа, если новый тип данных не позволит индексировать это поле. Вы можете изменить соответствие для поля, входящего в состав ключа индекса, если выберете тип данных, допускающий индексирование; однако после этого вы, возможно, захотите для единообразия изменить типы данных для остальных полей ключа. Visual FoxPro выдает предупреждающее сообщение при попытке изменить соответствие для поля, которое не является полем ключа, но используется в индексе Visual FoxPro. Если вы сделали ошибку, нажмите кнопку Reset To Defaults (Сброс) — произойдет сброс типов данных.
При переносе мастером наращивания таблиц Visual FoxPro имена полей и типы данных автоматически преобразуются в поля SQL Server.
Мастер показывает вам устанавливаемое по умолчанию преобразование типов данных. При необходимости вы можете изменить тип данных на сервере базы данных с помощью раскрывающегося списка Server Type (Тип сервера).
Определение базы данных назначения и ее параметров
На следующем этапе определяется база данных назначения. Если вы хотите добавить таблицы Visual FoxPro в существующую базу данных SQL Server, то можете задать наращивание до масштабов существующей базы данных. В этом случае мастер сразу переходит к восьмому этапу.
Если вы решили создать новую удаленную базу данных, ее имя может состоять не более чем из 30 символов, включая буквы, цифры и символы "#", "$" и "_". Пробелы не разрешаются.
Предупреждение
Для создания новой базы данных вы должны обладать соответствующими полномочиями. При возникновении проблем обратитесь к администратору базы данных SQL Server.
На шестом и седьмом этапах определяются устройство и размер для базы данных и журнала транзакций. Размер новой базы данных должен быть не менее 2 Мбайт: это минимальный размер, допускаемый в SQL Server. SQL Server создает для вашей базы данных журнал транзакций, который можно использовать для восстановления базы данных в случае серьезных ошибок в системе. В идеальном варианте базу данных и соответствующий ей журнал следует размещать на устройствах, находящихся на разных физических дисках. Эти устройства должны быть созданы до запуска мастера наращивания, поскольку он создает все новые устройства на одном и том же физическом диске, на котором расположено главное устройство базы данных.
По умолчанию мастер наращивания экспортирует структуру таблицы и ее содержимое. Наряду с именами полей и типами данных, вы также можете экспортировать индексы, значения по умолчанию, отношения (ограничения целостности на уровне ссылок) и правила.
Индексы и значения по умолчанию Visual FoxPro становятся индексами и значениями по умолчанию SQL Server. Если вы решили экспортировать правила, мастер наращивания пытается экспортировать в SQL Server правила уровня поля и правила уровня строки, в результате чего они превращаются в хранимые процедуры, вызываемые из триггеров SQL Server. Экспортированные табличные отношения также становятся частью этих триггеров.
Замечание
Если вы наращиваете табличные отношения, не забудьте выполнить и наращивание индексов, иначе производительность может заметно снизиться.
Если у вас только один физический диск, вы должны разместить базу данных и ее журнал на разных устройствах, чтобы можно было пользоваться командой сервера SQL DUMP TRANSACTION.
Рис. 23.2. Проект с информацией о переносе данных
Рис. 23.3. Часть отчета о выполнении наращивания базы данных
На последнем этапе вы можете выбрать следующие варианты завершения наращивания:
Первый и третий варианты доступны только в том случае, если вы обладаете на сервере SQL полномочием CREATE TABLE. Если вы выбрали один из вариантов, предусматривающий сохранение сгенерированного кода SQL, то весь код SQL, генерируемый мастером наращивания, будет сохранен на вашем жестком диске.
Мастер наращивания создает проект Report (Отчет) (рис. 23.2), который содержит таблицы, использующиеся для переноса данных из таблиц Visual FoxPro, а также отчеты о переносе данных (рис. 23.3).