Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Вт Ноя 27, 2012 10:18 am Заголовок сообщения: MapInfo + Oracle + EasyLoader ошибка! |
|
|
Здравствуйте!
Делаю связку MapInfo + Oracle + EasyLoader.
Заливаю данные в Oracle программой EasyLoader, вылазит ошибка по русски вкратце "вставляемое поле больше чем в структуре базы". Как выяснилось структура создается так "FIO" VARCHAR2(30 BYTE), длинна строки указывается в байтах. Меняю в базе на c Byte на Char. Пробую снова, пишет - разная структура таблиц типо досвидания. Как настроить и что настроить чтобы структура таблиц с текстовыми полями создавалась с типом CHAR?
Извините если сумбурно написано, пока сам не знаю что к чему.
Последний раз редактировалось: agentbond007 (Пн Дек 03, 2012 3:54 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Ноя 27, 2012 7:34 pm Заголовок сообщения: |
|
|
Структуру таблицы конструирует EasyLoader, у него просто в код зашито, что поле MapInfo Text(30) -> Oracle Varchar2(30). Дальше в Оракле уже идет различие Byte<>Char. У вас база в UTF8 что-ли? Оно вам точно надо по задаче? Может достаточно будет WIN1251? Попробуйте создать экземпляр в WIN1251, зальется наверняка. |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Ср Ноя 28, 2012 4:33 am Заголовок сообщения: |
|
|
Андрей, спасибо за ответ! В реестре нарыл NLS_LANG = RUSSIAN_RUSSIA.CL8MSWIN1251 - кодировка на клиенте.
Глянул кодировку на сервере NLS_CHARACTERSET = AL32UTF8.
Советуете поменять кодировку на сервере в WIN1251? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Ср Ноя 28, 2012 6:17 am Заголовок сообщения: |
|
|
Да, но это можно сделать только пересоздав экземпляр БД, насколько я помню. Попробуйте создать второй экземпляр БД в WIN1251, чтобы проверить. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Ср Ноя 28, 2012 6:19 am Заголовок сообщения: |
|
|
Да, точно, вот пример команды создания БД в Oracle, видите CHARACTER SET? Вот туда WIN1251.
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY pz6r58
USER SYSTEM IDENTIFIED BY y1tz5p
LOGFILE GROUP 1 ('/vobs/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/vobs/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/vobs/oracle/oradata/mynewdb/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/vobs/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE tempts1
DATAFILE '/vobs/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/vobs/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED; |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Чт Ноя 29, 2012 3:55 am Заголовок сообщения: |
|
|
Создал экземлляр базы с кодировкой
NLS_CHARACTERSET = CL8MSWIN1251
Попробывал создать таблицу с текстовыми полями, создает по умолчанию COLUMN1 VARCHAR2(20 BYTE) |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Ноя 29, 2012 6:58 pm Заголовок сообщения: |
|
|
Все правильно, EasyLoader'то заливает? |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Пн Дек 03, 2012 3:52 am Заголовок сообщения: |
|
|
Проверить заливку данных мне не удалось, создал кривой экземпляр базы - MapInfo к нему не подключается пишет ошибку связанную с каким то 4-м параметром. Снес Oracle и поставил заново. Подсказали что требуется прописать в переменных среды NLS_LENGTH_SEMANTICS = CHAR, так и сделал. Данные залились без проблем! Теперь следущая проблема - при открытии в MapInfo залитого слоя пишет сообщение:
"Загруженная Вами таблица не может быть изменена. Подробную информацию Вы можете найти в книге Руководство пользователя MapInfo" - ничего там не нашел или не понял =((( |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Пн Дек 03, 2012 8:55 am Заголовок сообщения: |
|
|
Поменял кодировку в базе: ALTER DATABASE CHARACTER SET INTERNAL_USE CL8MSWIN1251; Теперь данные заливаются и редактируются но не сохраняются =( Пишет что слой в базе с типом геометрии 2001, а вставляется с типом 2003. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Дек 03, 2012 3:40 pm Заголовок сообщения: |
|
|
Ну это уже другая ошибка, можно было бы и новую тему открыть или поискать на эту тему уже существующие топики.
Почему-то не хочет сохранять разный тип геометрии в слое. Попробуйте поочередно - точки, линии, регионы. Что-то сохранит. |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Ср Дек 05, 2012 5:31 am Заголовок сообщения: |
|
|
Все получилось и залить и сохранить просто надо было пересоздать пространственный индекс без параметров. Подведу итог связки MapInfo с Oracle как это у меня получилось =):
1. Устанавливаем Oracle XE 11
2. Правим реестр NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251
3. Правим кодировку в БД:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET INTERNAL_USE CL8MSWIN1251;
SHUTDOWN;
STARTUP;
4. Конвертируем в SHP и обратно в TAB для удаления мусора(точки, линии, текст)
5. Заливаем данные(полигоны) EasyLoader`ом от MapInfo 10
6. Пересоздаём индекс IndexName_SX каждого залитого слоя без параметров(PARAMETERS)
|
|
Вернуться к началу |
|
|
|