Сервер переехал на новый сайт http://www.oraclegis.com/blog. Здесь идет ретрансляция

вторник, 25 ноября 2008 г.

Импорт данных Navteq для Oracle Spatial

Как известно, компания Navteq – глобальный партнер Oracle и поставщик данных для Oracle. Главное их отличие от остальных поставщиков – это ориентированность в поставках именно на СУБД Oracle (http://solutions.oracle.com/partners/navteq). Аналогичное партнерство у Oracle существует и с компанией Teleatlas.

Компания Navteq поставляет данные в формате табличных пространств для Oracle. Это позволяет избежать утомительной загрузки данных из дампов.

Ниже я опишу процесс загрузки данных. Предварительно я скачал и распаковал партнерский пакет данных Navteq для Oracle. Пакет состоит из трех типов данных: карта, данные для маршрутизации и  данные для геокодирования. Пакет у меня за первый квартал 2008 года – общий объем 105 Гб.

Вот такой список файлов:

Тип данных Файлы Количество Объем данных
Карта MAP_EU_Q108_XX.ORA 8 штук (XX от 01 до 08) 30 Гб
Данные для маршутизации RC_EU_Q108_XX.ORA 18 штук (XX от 01 до 18) 45 Гб
Данные для геокодирования GC_EU_Q108_01.ORA 14 штук (XX от 01 до 14) 36 Гб

1. Предварительные требования

- Для использования этих данных необходима база данных Oracle Database Enterprise Edition with Spatial с версией минимум 10.2.0.3. Версия Oracle Database 11.1.0.6 работать не будет. Версия 11.1.0.7 работает нормально.

???? Перед заливкой данных проверьте параметр COMPATIBLE черех SQL plus:

???? SHOW parameter COMPATIBLE;

- NLS настройки должны быть следующими:

NLS_CHARACTERSET  AL32UTF8 
NLS_NCHAR_CHARACTERSET  AL16UTF16 

Желательно выставить NLS_LANG в значение AMERICAN_AMERICA.UTF8. Если значение у Вас другое, то стоит проконсультироваться с поддержкой.

- нужно понимание того, как работает технология Transportable Tablespaces. Эти знания можно почерпнуть в документации в разделе “8 Managing Tablespaces” в книге Oracle® Administrator's Guide 10g Release 2 (10.2) или аналогичной для 11-ой версии базы.

- поддерживаемое количество файлов db_files (файл параметров Oracle init.ora) должно быть достаточным. Полная инсталляция требует как видно из таблицы 30 файлов данных. Прибавьте сюда файлы уже имеющиеся в базе данных. Перед импортом данных нужно установить этог параметра в приемлимое значение

- набор данных от Navteq использует блок Oracle размером 8 кб. Ваша база должна быть с тем же размером блока. Посмотреть можно командой SHOW PARAMETER db_block_size. Если база имеет другой размер блока, то самое время почитать раздел “Setting the Buffer Cache Initialization Parameters” в книге Oracle® Administrator's Guide 10g Release 2 (10.2) о поддержке разных размеров блоков данных в Oracle.

- для Oracle Database 10g желательно установить патч 10.2.0.4 – это связано с рядом проблем с геокодирование и маршрутизацией.

2. Подготовка

2.1 Общая информация

Данные поставляются в 3-х табличных пространствах. Данные для каждого модуля Geocoding (GC), Route Calculation (RC), Map Display (MAP) лежат в свое табличном пространстве. Мы будем все импортировать в одну базу данных. Если нужно, чтобы данные загрузились не табличное пространство или пользователя по-умолчанию, то при импорте данных можно выполнить ремапинг. Для более подробной информации можно посмотреть документацию по impdp.

Имя пользователя для данных генерируется компанией Navteq по следующей схеме: <Prefix>_<Region>_<Quarter><Year>

Пример:

Набор данных для Европы (куда входит Россия) (EU) квартала Q1/2008 поставляется со следующими именами пользователя и табличных пространств
Пользователь = ODF_EU_Q108
Geocoding Tablespace = GC_EU_Q108
Routing Tablespace = RC_EU_Q108
Map Display Tablespace = MAP_EU_Q108

Имена регионов:

TTS Short Identifier Регион
EU Европа
NA Северная Америка
WM World Markets
MEX Мексика

Файлы данных имеют расширение “.ORA”. Файлы дампа имеет имя “.DMP”.

2.2. Создание пользователя-владельца пространственных данных.

GRANT CONNECT, CREATE TABLE, CREATE VIEW, CREATE ANY TABLE, CREATE
PROCEDURE, CREATE SEQUENCE, CREATE ANY INDEX TO <ODF User> IDENTIFIED BY
<ODF password>; 

Имя пользователя в <> нужно изменить на нужное. В моем случае для Европы в 1-ом квартале 2008 года было так:

GRANT CONNECT, CREATE TABLE, CREATE VIEW, CREATE ANY TABLE, CREATE
PROCEDURE, CREATE SEQUENCE, CREATE ANY INDEX TO ODF_EU_Q108  IDENTIFIED BY
oracle; 

2.3. Копирование, проверка и распаковка данных

Данные необходимо скопировать с DVD дисков. В результате получим структуру каталогов: data, doc, sql. В каталоге будет множество компрессированных файлов (*.gz). Нужно будет проверить их на целостность. Сделать это можно с помощью md5.

md5sum -c GC_digest.md5
md5sum -c MAP_digest.md5
md5sum -c RC_digest.md5

Файлы контрольных сумм должны лежать в том же каталоге, что и файлы (*.gz). В поставке Windows md5sum нет. Взять его можно, например, в cygwin.

Дале нужно распаковать все файлы

gzip -d *.gz

После распаковки Navteq рекомендует защить файлы от записи. У себя я сделал вот так

chmod -R u-w,o-w,g-w /u02/navteqdata/data

3. Загрузка данных (делается для каждого типа данных отдельно)

Загружать можно через Enterprise Manager, либо через impdp. В разделе 3.1 – через Enterprise Manager, в 3.2 – через impdp.

•  Войдите в Enterprise Manager Web Console (обычно адрес в 10-ке http://server:1158/em, в 11g https://server:1158/em)
•  Для Oracle Database 10g выбрать “Maintenance” –> “Data Movement” -> “Move Database Files” -> “Transport Tablespaces”. Для 11g “Data Movement” –> “Transport Tablespaces”
•  Выбрать “Integrate an existing transportable tablespace set”. Введите имя пользователя и пароль для операционной системы (для Windows: пользователь должен обладать правами Log on as Batch Job - подробнее здесь)
•  Шаг 1 (файлы): 
-  Выбрать имя файла  (*.DMP), вводите полный путь к файлу (у меня это файлы GC_EU_Q108.DMP, MAP_EU_Q108.DMPRC_EU_Q108.DMP). Пусть мы грузим данные для карты, т.е. файл MAP_EU_Q108.DMP
-  Выбрать формат файлов  “Datapump”
Добавьте файлы данных: Введите маску файлов, включая полный путь (например /u02/navteqdata/data/MAP*.ORA), затем нажмите “Add”
•  Шаг 2(местоположение файлов):
-  Для более быстрого импорта выберите  “Do not copy the datafiles”
•  Шаг 3 (Options):
-  Если необходимо провести ремаинг схем, то укажите из какой схемы в какую. Мы это делать не будем
-  Выберите “Put the transportable tablespaces into read/write mode”.
(Note: Если импорт пройдет с ошибкой, то tablespace останется в read-only и нужно будет вручную сделать его Read-Write)
•  Шаг 4 (Schedule): 
-  Укажите имя работы (по нему в будущем можно будет отследить состоянии импорта)
-  Выберите когда начинать импорт
•  Шаг 5 (Review): 
Проверитьте параметры
•  Нажмите Submit job.

4. Действия после загрузки

4.1. Если это не произошло автоматические переведите табличное пространство в режим Read Write.
ALTER TABLESPACE <TABLESPACE_NAME> READ WRITE;

4.2. Установите табличное пространство по-умолчанию для пользователя ODF

ALTER USER <ODF user> DEFAULT TABLESPACE <TABLESPACE_NAME>;
ALTER USER <ODF user> QUOTA UNLIMITED ON <TABLESPACE_NAME>;

4.3 Загрузите информацию о пространственных индексах.

Сделать это можно двумя способами – использовать уже построенные индексы транспортированные индексы (4.3.1), либо строить их с нуля (4.3.2). Первый вариант предпочтительнее

4.3.1. Загрузка индексов из TTS

- убедитесь, что табличное пространство в состоянии READ WRITE

- восстановите информацию об индексах (запускается из под ODF пользователя)

update SDO_INDEX_TTS_METADATA$
set SDO_INDEX_OWNER = '<YOUR_ODF_IMPORT_USER>';
commit;

у меня это было вот так

update SDO_INDEX_TTS_METADATA$
set SDO_INDEX_OWNER = 'ODF_EU_Q108';
commit;

Запустите SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS();

- удалите таблицу SDO_INDEX_TTS_METADATA$ после загрузки подключившись под пользователем ODF
drop table SDO_INDEX_TTS_METADATA$;

4.3.2. Перестройка индексов с помощью скриптов SQL

- запустите sql/CF_Create_Procedures.sql
этот скрипт нужно запускать только один раз 

- для карты (MAP) запустите скрипты:
sql/xCreate_WOM_SDO.sql
sql/xNTC_Create_MapSDO.sql

- для Geocoding (GC) запуститет скрипт (вместо <GC_TABLESPACE> – укажите имя табличного пространства): 
sql/GC_CreateSpatialIndex.sql <GC_TABLESPACE>

- для маршрутизации (RC) запустите скрипт (вместо <GC_TABLESPACE> – укажите имя табличного пространства):   
sql/RC_CreateSpatialIndex.sql <RC_TABLESPACE>

!!! После каждого скрипта (MAP, GC, RC) нужно удалять таблицу SDO_INDEX_TTS_METADATA$

drop table SDO_INDEX_TTS_METADATA$;

 

Troubleshooting

1. Если получили вот такую ошибку

Import: Release 11.1.0.7.0 - Production on Monday, 24 November, 2008 8:45:45

Copyright (c) 2003, 2007, Oracle. All rights reserved.

Username:
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."INTEGRATETTS000001" successfully loaded/unloaded
Starting "SYSTEM"."INTEGRATETTS000001": SYSTEM/******** dumpfile=MAP_EU_Q108.DMP
directory=EM_TTS_DIR_OBJECT transport_datafiles=/u02/navteqdata/data/MAP_EU_Q108_01.ORA
job_name=INTEGRATETTS000001 logfile=IMPORT.LOG
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: Data Pump transportable tablespace job aborted
ORA-29345: cannot plug a tablespace into a database using an incompatible character set

Job "SYSTEM"."INTEGRATETTS000001" stopped due to fatal error at 08:46:03


то нужно будет создавать новую базу с соответствующей кодировкой – AL32UTF8  (см. предварительные требования). Если это неприемлимо, то придется создавать новую базу данных, импортировать туда данные, экспортировать и импортировать в целувую базу данных уже стандартными средствами. А вообще пора мигрировать в UTF8.


Комментариев нет: