Этот сайт посвящается администрированию баз данных OpenEdge Progress.
Не корысти ради, а познания для!

С уважением,
Валерий Башкатов
Сайт разработан при участии компании Progress Technologies, официального дистрибьютора Progress Software Corp. на территории стран СНГ и Латвии.

RSS RSS подписка на обновления сайта

Поиск по сайту

Лучшие материалы

Orphus System
На сайте функционирует система коррекции ошибок. Обнаружив неточность в тексте, выделите её и нажмите Ctrl+Enter



Результаты опроса: Нужны ли книги по Progress OpenEdge на русском языке? (опрос проводился с мая 2009 по ноябрь 2010)

Да, нужны. Потому что будет легче понять материал - 268
Нет, не нужны. Достаточно материалов на английском языке - 10
Не знаю, мне всё равно - 6

А знаете ли вы что..



Порядок подготовки и конвертации OpenEdge базы данных для работы с кодировкой KZ-1048




KZ-1048 – аббревиатура для кодовой таблицы с символами казахского языка, основанной на стандарте СТ РК 1048-2002, которая используется в базах данных OpenEdge Progress.

Для примера будет использоваться база данных с кодировкой KOI8-R.
 
Предварительно, на компьютер пользователя, который будет работать с базой с поддержкой казахского языка, должны быть установлены казахские шрифты. Эти шрифты можно скачать здесь http://www.sci.kz/%7Esairan/kazwin95.html. Скачайте и установите их. После этого необходимо добавить казахскую консоль в Windows. Для этого щелкните право кнопкой на значке языка и выберите Settings


Далее всё как обычно, при добавлении языка в Windows.

Еще одно. Терминалу PuTTY нужно указать, с какой кодировкой ему придется работать, чтобы корректно отображать казахские символы. Для этого в настройках терминала выставьте значение кодировки как показано на рисунке:



Выбор кодировки Win1251 (Cyrillic) обусловлен тем, что стандарт СТ РК 1048-2002 основан именно на кодировке 1251.

 
1.    Подготовка файла convmap.cp


Необходимые файлы для кодировки KZ-1048 лежат здесь(Скачать):

convmap.dat – файл со списком кодировок, которые будут содержаться в convmap.cp
KZ-1048.dat – файл с кодировкой KZ-1048 и таблицей сопоставления с кодировкой UTF-8
KZ-1048.df – кодовая страница KZ-1048
utf-8.dat – файл с описанием кодировки UTF-8
undefine.dat – файл с описание undefined кодировки
ICU-ru.df – таблица сортировки для кириллицы
readme.txt – описание процесса создания нового файла convmap.cp
 

В дальнейшем, для работы базы данных с этой кодировкой необходимо использовать параметр –covnmap со значением, которое будет содержать полный путь к казахскому convmap.cp. Для удобства работы, по окончании конвертации этот файл можно будет поместить в установочный каталог Progress.
 
1.    Подготовка к конвертации

 
1.1    Подготовка файла для загрузки данных

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

       1. зайти в Tools -> Data Dictionary -> Admin -> Create Bulk Loader Description File...

       2. Нажать F5

3. Ввести «*», Enter – будут выделены все таблицы

4. Нажать F1, откроется окно «Make Bulk Load Description File for Some Tables»

5. Ни чего не меняя, еще раз нажать F1, начнется формирование файла
 
По завершению формирования файла будет выдано сообщение «Making of bulk load description file completed.»
 
В текущем рабочем каталоге будет создан файл <dbname>.fd, который будет в дальнейшем использован для загрузки данных.

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

 
1.2    Выгрузить текущие значения сиквенций
 

Для сохранения текущих значений автоматических счетчиков (сиквенций) необходимо выгрузить эти значения. Для этого зайдите в Tools -> Data Dictionary -> Admin -> Dump Data and Definitions –> Sequences Current Values... и нажмите F1.

По завершению выгрузки будет выдано сообщение «Dump of sequence values completed.».

В текущем каталоге будет создан файл _seqvals.d.

 
1.3    Выгрузка содержимого таблицы _user

 
Выгрузка содержимого таблицы _user необходима для сохранения информации о пользователях. Для этого необходимо зайти в Tools -> Data Dictionary -> Admin -> Dump Data and Definitions –> User Table Contents... и нажать F1.

По завершению выгрузки будет выдано сообщение «Dump of users completed.».

В текущем каталоге будет создан файл _user.d

1.4    Подготовка скриптов для выгрузки

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

cd /data/10/kz

mkdir dump

cd dump/

mkdump /data/10/kz/<dbname> –U <username> –P ********

Результатом работу утилиты будет создание в каталоге /dump/ следующих каталогов и файлов:

/ldprocs/ - каталог, содержащий программы для загрузки данных

/dmpprocs/ - каталог, содержащий программы для выгрузки данных

fileload.p – программа загрузки данных, использующая программы из каталога /ldprocs/

filedump.p – программа выгрузки данных, использующая программа из каталога /dmpprocs/

 
1.5    Выгрузка данных

Для осуществления выгрузки лучше всего сначала запустить базу данных в многопользовательском режиме. Для этого сначала необходимо отключить репликацию и и after-imaging, если они включены:

proutil /data/10/kz/<dbname> -C disableSiteReplication source

proutil /data/10/kz/<dbname> -C aimage end

proserve /data/10/kz/<dbname>

После этого можно будет запустить программу выгрузки данных. Хотелось бы предупредить. Запускаемая программа - filedump.p предназначена для последовательной выгрузки. Но при необходимости ускорения процесса, можно разделить содержимое программ на несколько небольших процессов.

Запустите программу как показано ниже:

mpro /data/10/kz/<dbname> -p filedump -U <username> –P ***********

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

Теперь выгрузим описание самих таблиц. Для этого зайдите в Tools -> Data Dictionary -> Admin -> Data Definitions (.df file)..., выберите кнопку «<Select Some...>», введите «*» и нажмите F1. Все таблицы базы данных будут помечены к выгрузке. Опять нажмите F1. В текущем каталоге будет сохранен файл с описанием таблиц, индексов, автоконнектов, сиквенций, в общем – полное описание схемы базы данных. Файл будет называться <dbname>.df.

По окончанию выгрузки остановить базу данных командой:

proshut /data/10/kz/<dbname>

 
2.    DBANALYS

 
Для анализа результатов конвертации базы данных до и после выгрузки необходимо сформировать dbanalys базы. Для этого выполните следующую команду для остановленной базы данных:
 
proutil /data/10/kz/<dbname> -C dbanalys > first-dbanalys.txt
 
Сохраните, полученный в результате работы утилиты, файл first-dbanalys.txt в отдельный каталог, он понадобится в будущем для сравнения.

 
3.    Удаление существующей базы данных

 
Теперь, мы готовы к началу конвертации. И чтобы старая база нам не мешалась – мы ее удалим:
 
prodel /data/10/kz/<dbname>
 

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

 
4.    Создание базы-пустышки с кодировкой KZ-1048
4.1    Копирование empty базы

 
Для создания пустой базы данных, необходимо скопировать «базу-пустышку», которая находится в установочном каталоге Progress /usr/dlc, и называется empty4. Цифра «4» указывает на размер блока базы данных, в нашем случае 4096 Kb.
 

Предварительно, советую в структурный файл добавить по одному тому к каждой области данных, за исключением “Schema Area”. Это необходимо, если по каким либо причинам базе данных понадобится дополнительное пространство для размещения данных. Если же этого пространства ей не хватит, то в момент загрузки данных произойдет аварийное завершение работы процесса загрузки – лучше подстраховаться, чем потом повторять всё заново.
 

И так, запустите следующую команду копирования:

procopy /usr/dlc/empty4 /data/10/kz/<dbname>

 
4.2    Загрузка кодовой таблицы KZ-1048
 

Процесс загрузки будет осуществляться через промежуточную кодовую таблицу UTF-8. Причина тому то, что не существует прямой таблицы конвертации из KOI8-R в KZ-1048.  Связанно это с отсутствием символов имеющихся в кодировке KZ-1048 у кодовой таблицы KOI8-R. Поэтому конвертация будет проходить по схеме KOI8-R -> UTF-8 -> KZ-1048.

Файл с кодовой таблицей UTF-8 вы сможете найти в установочном каталоге Progressи называется он ICU-ru.df. Для его загрузки необходимо зайти в Tools -> Data Dictionary -> Admin -> Load Data and Definitions -> Data Definitions (.df file). Найдите файл кодовой таблицы с помощью кнопки «<Files...>». После чего нажмите F1. По завершению загрузки система попросит выполнить переиндексацию данных.

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

proutil /data/10/kz/<dbname> -C idxbuild ALL -pf mu_utf.pf
 
Обратите внимание на параметр «-pf mu_utf.pf» - в указанном файле содержится информация о кодировке используемой базой теперь, т.е UTF-8. В стандартном же файле параметров, который находится в /ust/dlc/startup/pf содержится информация для KOI8-R, и утилита idxbuild не будет работать с этой кодировкой в то время как база уже имеет кодировку UTF-8.
 
Теперь, после переиндексации, необходимо выполнить те же шаги, но только для кодировки KZ-1048. Но подключаться к базе придется с указанием файла параметров для кодировки UTF-8.
 
pro bank -pf mu_utf.pf
 
При этом база данных выдаст сообщение о возможных проблемах при работе с базой данных с кодировкой UTF-8 в режиме TTY. На этой стадии для нас это сообщение значения не имеет.
 

Зайдите в Tools -> Data Dictionary -> Admin -> Load Data and Definitions -> Data Definitions (.df file). Найдите файл кодовой таблицы KZ-1048.df с помощью кнопки «<Files. После чего нажмите F1. Система опять попросит переиндексацию, выполните ее с помощью следующей команды:
 
proutil /data/10/kz/<dbname> -C idxbuild ALL -pf my_kz.pf
 

Обратите внимание на файл параметров «my_kz.pf» в нём содержится информация по использованию кодировки KZ-1048.
 
После переиндексации мы имеем готовую базу данных, поддерживающую работу кодовой таблицы с символами казахского языка KZ-1048 основанную на стандарте СТ РК 1048-2002.
 
С целью безопасности и исключения необходимости повторного выполнения указанных действий, советую выполнить первую резервную копию базы данных.
 
probkup /data/10/kz/<dbname> /data/10/kz/backup/kz-first.bak
  
5.    Подготовка данных к загрузке

 
5.1    Конвертация <dbname>.df.

 
Файл описания схемы базы данных bank.df находится в кодировке KOI8-R, его нужно сконвертировать в кодировку KZ-1048. Для этого воспользуемся системной утилитой Linux, которая называется iconv:
 
iconv -c -f KOI8-R -t STRK1048-2002 <dbname>.df > kz<dbname>.df
 

Здесь параметры означают следующее:
 
-с, игнорирование возможных ошибок во время конвертации, нам он нужен, поскольку в базе встречаются символы, оставшиеся еще от латышской кодировки (разработчики Прагмы).
 
-f, указывает название кодовой таблицы, с которой происходит конвертация

-t, указывает название кодовой таблицы, в которую происходит конвертация, в нашем случае, стандарт СТ РК 1048-2002 встроен в Linux.
 
Теперь у нас есть файл kz<dbname>.df, содержащий описание схемы базы данных в кодировке KZ-1048.
 
Осталось только одно. Необходимо убрать упоминание о кодировке KOI8-R в конце файла, просто удалите следующие строки:
.

PSC

cpstream=KOI8-R

.

0001886339

Либо замените KOI8-R на KZ-1048

 

Далее, таким же образом сконвертируйте выгруженные ранее файлы: _user.d, _seqvals.d, <dbname>.fd.

 
5.2    Конвертация содержимого таблиц

Перейдите в каталог /data/10/kz/dump/

cd /data/10/kz/dump/

Создайте каталог kzdump

mkdir kzdump
 

Берем  скрипт conv.sh. Редактируем его, указав новые пути: откуда брать файлы в кодировке KOI8-R и куда сохранять файлы в кодировке KZ-1048. Установите права доступа на скрипт 700:

chmod 700 conv.sh
 
Запустите скрипт на выполнение из каталога /data/10/kz/dump/ следующей командой:

(/data/10/kz/dump) ./conv.sh
 
Код скрипта conv.sh:

#!/bin/bash
 

pth="/data/10/kzt/dump" # Path to the dir with the files

pth2="/data/10/kz/dump/kzdump" # Path to the dir with the files

inp="KOI8-R" # Input charset

otp="STRK1048-2002" # Output charset

suff="kz" # Suffics

 

for fl in `ls -f $pth`

do

   eval iconv -c -f $inp -t $otp $fl > "$pth2/$fl" 2>&1 /dev/null # converting files

done
 
Результатом работы скрипта будет появление в каталоге /kzdump/ файлов с содержимым таблиц в кодировке KZ-1048.

 
6.    Загрузка описания схемы базы данных

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

pro bank -pf my_kz.pf
 
Выберите Tools-> Data Dictionary -> Admin -> Load Data and Definitions-> Data Definitions (.df file). С помощью кнопки «<Files...>» найдите и выберите df-файл с кодировкой KZ-1048 – kz<dbname>.df. Нажмите F1. Система выдаст сообщение об отсутствии в файле описания его кодировки «There is no Code Page defined in this input file.» - ни чего страшного, нажмите “OK”.  Будет предложено загрузить в файл в кодировке по умолчанию – KZ-1048. Нажмите F1. Начнется процесс загрузки. В случае успешной загрузки, будет выдано сообщение «Load completed.».

Теперь новая база имеет схему.

 
7.    Загрузка данных в базу.
 

Перейдите в каталог с файлами выгрузки, сконвертированными в KZ-1048:
 
cd /data/10/kz/dump/kzdump
 
Запустите следующую команду загрузки:

time proutil /data/10/kz/bank -C bulkload kz<dbname>.fd -pf my_kz.pf < forbulk.txt
 
По завершению загрузки, вы вернетесь в командную строку.

 
8.    Переиндексация базы данных

 
Поскольку утилита bulkload для ускорения процесса загрузки деактивирует все индексы, то после завершения загрузки, чтобы данные стали доступны для использования, необходимо выполнить полную переиндексацию базы данных. Для этого выполните следующую команду:
 
proutil /data/10/kz/bank -C idxbuild ALL -pf my_kz.pf
 
По завершению работы утилиты, вы должны получить следующее сообщение: «Index rebuild complete. 0 error(s) encountered.»

 
9.    Загрузить таблицу пользователей (_user)
 
Теперь мы должны загрузить в базу всех зарегистрированных в ней пользователей. Для этого зайдите в базу:
 
pro bank -pf my_kz.pf
 
Затем выберите Tools -> Data Dictionary -> Admin -> Load Data and Definitions -> User Table Contents. С помощью кнопки «<Files...>» выберите скновертированный файл пользователей _kzuser.d. Нажмите F1. При успешной загрузки вы получите сообщение «User information loaded successfully.».
 
Теперь в базе имеются пользователи, и при следующем входе будет запрошен логин и пароль.
 
Не выходя из базы приступаем к выполнению следующего пункта.
  
10.    Загрузка секвенций
 
Теперь загрузим значения счетчиков (секвенций). Выберите Tools -> Data Dictionary -> Admin -> Load Data and Definitions -> Sequences Current Values. С помощью кнопки «<Files...>» выберите скновертированный файл пользователей _kzseqvals.d. Нажмите F1. При успешной загрузки вы получите сообщение «Load of sequence values completed».
 

Теперь можно считать, что база полностью конвертирована!
 
 
11.    Формирование и сверка dbanalys.
 
Снова формируем dbanalys с помощью следующей команды:

proutil bank -C dbanalys > dbanalys-last.txt
 
По окончанию, необходимо сравнить количество записей в базе до и после конвертации, если оно одинаковое – значит, всё в порядке и конвертация прошла успешно.

Башкатов В.Г. 2008 г.




Главная |  Статьи |  Книги |  Гостевая |  Ссылки |  От автора |  Download ProKb


������ ᠩ� pr Online ProKB Blogger Welcome to Russian Progress Users Group at Facebook Welcome to Russian Progress Users Group at LinkedIn
© 2009 - 2011 Все права на материалы, находящиеся на сайте www.openedge.ru, охраняются в соответствии с законодательством РФ, в том числе, об авторском праве и смежных правах.
При любом использовании материалов сайта ссылка на источник обязательна.