Как известно, компания 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.
Комментариев нет:
Отправить комментарий