Правильная ссылка на эту страницу
http://az-design.ru/Support/DataBase/SQL/sql002.shtml

Как написать SQL-script
(2-й маленький совет)

       То, что было сказано в предыдущей статье об использовании SQL-скриптов, хорошо работает с Interbase v.5x, но для Interbase v.6x/Firebird есть проблемы. В этих версиях нет программы WI_SQL – вместо нее используется программа IBConsole, в которой работа со скриптами не так удобна. С другой стороны – есть программа isql.exe (SQL в командной строке) и есть прием более удобный, о котором дальше пойдет речь.
       1) Так как программа isql.exe работает в командной строке, то есть возможность (и это разумнее) сделать запуск нескольких скриптов в bat-файле. Это позволяет разбить большой проект на отдельные части и комбинировать их, получая различные варианты БД.
       При этом иногда возникает необходимость запускать скрипты на различных серверах (прошлый год приходилось работать как в Москве, так и в Питере, соответственно имена хостов были разные), а для этого заголовки, обеспечивающие подключение к существующей БД нужно делать в отдельных файлах.
       2) Программа isql.exe позволяет выводить протокол работы скрипта, но дописывает его в конец к существующему файлу. Поэтому необходимо удалять файлы протоколов от предыдущего запуска.
       3) Так как получается много файлов, то удобнее разложить и по разным каталогам. Я использую следующую структуру:

\Compile\doc\   - для файлов word
        \res\   - для файлов-результата работы скрипта
        \sql\   - для готовых файлов скриптов
        \src\   - для скриптов с расширением .txt без начальных заголовков

Итак, что получается в результате. Ниже приведен пример рабочего bat-файла:

del /Q res\*.*
isql.exe -m -i sql\AZCreate.txt -o res\AZCreate_r.txt
isql.exe -m -i sql\Users.sql -o res\Users_r.txt
rem
rem VIPerson - FirstName, ..., SurName
copy src\hd02.txt+src\FName.txt+src\MName.txt+src\LName.txt+src\SurName.txt+src\PostName.txt sql\XName.sql
copy src\hd02.txt+src\VIPerson.txt+src\VIPerson001.txt sql\VIPerson.sql
isql.exe -m -i sql\XName.sql -o res\XName_r.txt
isql.exe -m -i sql\VIPerson.sql -o res\VIPerson_r.txt
rem
copy src\hd02.txt+src\GrTitle.txt sql\GrTitle.sql
isql.exe -m -i sql\GrTitle.sql -o res\GrTitle_r.txt
rem Address
copy src\hd02.txt+src\StatList.txt+src\AreaList.txt+src\CityList.txt+src\StreetList.txt src\Adr01.txt
copy src\Adr01.txt+src\BildList.txt+src\BlockList.txt+src\OfficeList.txt sql\AddressList.sql
del /Q src\Adr01.txt
Copy src\hd02.txt+src\Adr_00RusFederation.txt sql\Adr_00RusFederation.sql
Copy src\hd02.txt+src\Adr_78SPb.txt+src\Adr_47LenArea.txt sql\Adr_Spb.sql
Copy src\hd02.txt+src\Adr_78SPb_Area.txt+src\Adr_78SPB_Gorelovo.txt+src\Adr_78SPB_Kolpino.txt src\Adr_78SPB_Area01.txt
Copy src\Adr_78SPB_Area01.txt+src\Adr_78SPB_KrasnoeSelo.txt+src\Adr_78SPb_Kronstadt.txt src\Adr_78SPB_Area02.txt
Copy src\Adr_78SPB_Area02.txt+src\Adr_78SPb_LisiNos.txt+src\Adr_78SPb_Lomonosov.txt src\Adr_78SPB_Area03.txt
Copy src\Adr_78SPB_Area03.txt+src\Adr_78SPb_Olgino.txt+src\Adr_78SPb_Pavlovsk.txt src\Adr_78SPB_Area04.txt
Copy src\Adr_78SPB_Area04.txt+src\Adr_78SPb_Petergof.txt+src\Adr_78SPb_PetroSlavjanka.txt src\Adr_78SPB_Area05.txt
Copy src\Adr_78SPB_Area05.txt+src\Adr_78SPb_Pontonniy.txt+src\Adr_78SPb_Pushkin.txt  src\Adr_78SPB_Area06.txt
Copy src\Adr_78SPB_Area06.txt+src\Adr_78SPb_Sestroreck.txt+src\Adr_78SPb_Zelenogorsk.txt src\Adr_78SPB_Area07.txt
Copy src\Adr_78SPB_Area07.txt+src\Adr_78SPb_Pavlovsk.txt+src\Adr_78SPb_Shushary.txt sql\Adr_78SPb_Area.sql
del \Q src\Adr_78SPB_Area01.txt
del \Q src\Adr_78SPB_Area02.txt
del \Q src\Adr_78SPB_Area03.txt
del \Q src\Adr_78SPB_Area04.txt
del \Q src\Adr_78SPB_Area05.txt
del \Q src\Adr_78SPB_Area06.txt
del \Q src\Adr_78SPB_Area07.txt
rem
isql.exe -m -i sql\AddressList.sql -o res\AddressList_r.txt
isql.exe -m -i sql\Adr_00RusFederation.sql -o res\Adr_00RusFederation_r.txt
isql.exe -m -i sql\Adr_Spb.sql -o res\Adr_Spb_r.txt
isql.exe -m -i sql\Adr_78Spb_Area.sql -o res\Adr_78Spb_Area_r.txt
rem
Copy src\hd02.txt+src\PhoneList.txt+src\PhoneLst001.txt sql\PhoneList.sql
isql.exe -m -i sql\PhoneList.sql -o res\PhoneList_r.txt
Copy src\hd02.txt+src\Partners.txt+src\Partners001.txt sql\Partners.sql
isql.exe -m -i sql\Partners.sql -o res\Partners_r.txt
Copy src\hd02.txt+src\CallBase001.txt sql\CallBase.sql
isql.exe -m -i sql\CallBase.sql -o res\CallBase_r.txt

       Таким образом после прохода этого командного файла будет построена БД по тому адресу, который указан в файле src\hd02.txt, причем БД уже будет наполнена данными, которые записывались в правильном порядке с учетом ограничений между таблицами. Те кто работал с языком C увидят много похожего с файлом makefile.

Подробнее:

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

SET ECHO ON;
SET NAMES WIN1251;
SET TIME ON;
SET STATS OFF;
SET AUTODDL ON;
SET SQL DIALECT 3;
CREATE DATABASE 'azsrv2k.rt-press.ru:D:\Firms\AZBaseV2.gdb'
       USER 'SYSDBA'  PASSWORD 'masterkey' 
       PAGE_SIZE=8192 DEFAULT character set win1251
       FILE 'D:\Firms\AZBaseV2.g01' starting at page 250001 length 250000 pages
       FILE 'D:\Firms\AZBaseV2.g02' starting at page 500001 length 250000 pages;
COMMIT;

       Такой вариант будет более универсальным.

       Третья строка в .bat файле заполняет в созданной БД таблицу пользователей с их правами (и обязанностями :-)).

       Дальнейшие строки (строки начинающиеся с rem в операции не участвуют) копируют заголовок и один или несколько файлов скриптов в один:

copy src\hd02.txt+src\VIPerson.txt+src\VIPerson001.txt sql\VIPerson.sql

       после чего запускают на выполнение:

isql.exe -m -i sql\VIPerson.sql -o res\VIPerson_r.txt

       И так до тех пор, пока все скрипты не будут выполнены. Если на диске много места, то можно не обращать внимание на то, что скрипты по сути имеются в трех копиях — основной, с заголовком и результат. Однако последняя База Данных имела размер более 3 Гб и скрипты занимали только в одном каталоге 1,7 Гб. В этих случаях полезно после запуска каждого скрипта удалять его копию с заголовком.

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

 

 

© 17.01.2003, Архангельский А.Г.

Оглавление
Главная страница




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/DataBase/SQL/sql002.shtml