Компиляция TOra в Debian
TOra - расшифровывается как "Toolkit For Oracle" и представляет из себя IDE для таких СУБД как Oracle, MySQL, PostgreSQL. На данный момент является одной из трех полноценных Oracle IDE под Linux (остальные две - это "SQL Developer" от Oracle и "Aqua Data Studio" от AquaFold). Концептуальное отличие - язык программирования исходного кода: "SQL Developer", "Aqua Data Studio" - Java, "TOra" - C++.
На днях пришлось собирать ее из исходных кодов, так как по лицензионным причинам, в стандартной сборке TOra из репозитария Debian GNU/Linux не включена поддержка Oracle.
Все работы велись в Debian Lenny: $ uname -a
Linux Debian4Test 2.6.22-3-686 #1 SMP Mon Nov 12 08:32:57 UTC 2007 i686 GNU/Linux
Версия TOra:
$ ls -l /usr/src/tora-1.3.22/
-rw-r--r-- 1 root src 3496227 2008-01-15 18:19 tora-1.3.22.tar.gz
Итак... поехали...
- Получение Oracle Instant Client Скачиваем следующие пакеты:
- oracle-instantclient-basiclite_10.2.0.3-2_i386.deb
- oracle-instantclient-devel_10.2.0.3-2_i386.deb
- oracle-instantclient-sqlplus_10.2.0.3-2_i386.deb
- Установка Oracle Instant Client
- Создание файла TNSNAMES.ORA Создаем файл /usr/lib/oracle/tnsnames.ora и заполняем его необходимыми данными для соединения с экземплярами БД Oracle.
- Настройка кэша динамических библиотек В файл /etc/ld.so.conf добавляем следующую строку:
- Настройка переменных окружения Добавляем следующие строки в файл /etc/profile:
- Получение и распаковка исходных кодов TOra Исходный код можно загрузить с оф. сайта:
- Подготовка к пересборке TOra Устанавливаем необходимые модули:
- Сборка TOra Переходим в директорию с исходным кодом и выполняем конфигурацию:
- Запуск TOra Проверяем, где располагается TOra:
Или, как вариант, можно скачать соответствующие *.rpm пакеты с сайта Oracle и с помощью утилиты "alien" преобразовать их в *.deb.
$ sudo dpkg -i oracle-instantclient-basic_10.2.0.3-2_i386.deb
$ sudo dpkg -i oracle-instantclient-devel_10.2.0.3-2_i386.deb
$ sudo dpkg -i oracle-instantclient-sqlplus_10.2.0.3-2_i386.deb
Проверяем, куда был установлен клиент Oracle:
$ whereis oracle
oracle: /usr/lib/oracle /usr/include/oracle /usr/share/oracle
/usr/lib/oracle/10.2.0.3/client/lib
После чего перегружаем кэш:
$ sudo ldconfig
LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib:$LD_LIBRARY_PATH
TNS_ADMIN=/usr/lib/oracle
export LD_LIBRARY_PATH TNS_ADMIN
$ sudo mkdir /usr/src/tora
$ cd /usr/src/tora
$ wget http://switch.dl.sourceforge.net/sourceforge/tora/tora-1.3.22.tar.gz
$ sudo tar zxvf tora-1.3.22.tar.gz
$ sudo aptitude install g++ gcc autoconf automake flex zlib1g-dev docbook-xsl
$ sudo aptitude install libqt3-mt-dev libqt3-compat-headers
$ cd /usr/src/tora/tora-1.3.22/
$ ./configure --with-oracle=$ORACLE_HOME --with-oci-version=10G CC=gcc-4.2 --without-kde --with-xinerama
В результате последней операции получаем сообщение об ошибке:
...
checking whether uic supports -nounload ... yes
checking if STL implementation is SGI like... yes
checking for oracle... checking oci works... yes
checking for qscintilla... configure: error: Couldn't compile a simple QScintilla application. See config.log or specify its location with --with-qscintilla-includes
make: *** [configure-stamp] Ошибка 1
То есть, в системе не оказалось пакета "libqscintilla-dev". Скачиваем его и повторяем попытки компиляции:
$ wget http://ftp.pl.debian.org/debian/pool/main/q/qscintilla/libqscintilla-dev_1.7.1-2_all.deb
$ sudo dpkg -i libqscintilla-dev_1.7.1-2_all.deb
$ ./configure --with-oracle=$ORACLE_HOME --with-oci-version=10G CC=gcc-2.95 --without-kde --with-xinerama
$ make
$ sudo make install
На этот раз ошибок не появилось.
$ whereis tora
tora: /usr/bin/tora /usr/lib/tora /usr/local/tora /usr/share/tora /usr/share/man/man1/tora.1.gz
Запускаем IDE:
/usr/bin/tora
22 комментария:
в 5 пункте вроде ошибка
LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.1/client/lib:$LD_LIBRARY_PATH
наверное вместо 10.2.0.1 должно быть 10.2.0.3
Спасибо, уважаемый Анонним.
Fixed.
конфиг успешно прошёл только с --with-instant-client вместо --with-oracle=$ORACLE_HOME.
Спасибо за статью!
так же помогло сообщение о --with-instant-client вместо --with-oracle=$ORACLE_HOME
сработало с:
./configure --prefix=/usr --with-instantclient --with-oracle-includes=/usr/include/oracle/10.2.0.3/client --without-kde --without-rpath --disable-new-check --enable-libsuffix=
мешал gcc-2.95
Огромное спасибо автору за этот небольшой HOWTO.
У меня есть небольшой вопросик. Не сталкивались ли вы с проблемой подключения с помощью tora не сервер oracle где установлена кодировка RUSSIAN_RUSSIA.UTF8 ? tora сообщает об ошибке, смысл которой "instant client не поддерживает данную кодировку".
Приветствую, Виталий.
В том случае, когда мне понадобилось собирать Tora, я использовал БД с AMERCIAN_AMERICA.AL32UTF8. Проблем с коннектом замечено не было.
Вы уверены, что локаль совпадает с локалью БД? Попробуйте установить нужную локаль на уровне сессии:
$ NLS_LANG=RUSSIAN_RUSSIA.UTF8 ./sqlplus user/pasword@database
ERROR:
ORA-12737: Instant Client Light: unsupported server character set CL8ISO8859P5
не помогло.. причем "CL8ISO8859P5" - не понимаю что это..
Судя по всему, кодировка на сервере совсем не UTF-8.
Проверить это можно следующим запросом:
select value
from nls_database_parameters
where parameter = 'NLS_CHARACTERSET'
VALUE CL8ISO8859P5
хмм.. что посоветуете сделать с локалью чтобы всё было нормально.. я теперь даже не понимаю в какой кодировке там всё хранится :/
Здравствуйте... не подскажете - почему при компиляции могут выводиться ошибки:
../ext/loki/loki-0.1.6/src/SmallObj.cpp:296: error: 'UCHAR_MAX' was not declared in this scope
../ext/loki/loki-0.1.6/src/SmallObj.cpp: In member function 'bool Loki::Chunk::IsCorrupt(unsigned char, size_t, bool) const':
../ext/loki/loki-0.1.6/src/SmallObj.cpp:428: error: 'UCHAR_MAX' was not declared in this scope
../ext/loki/loki-0.1.6/src/SmallObj.cpp:428: error: template argument 1 is invalid
../ext/loki/loki-0.1.6/src/SmallObj.cpp:428: error: invalid type in declaration before ';' token
../ext/loki/loki-0.1.6/src/SmallObj.cpp:460: error: request for member 'set' in 'foundBlocks', which is of non-class type 'int'
../ext/loki/loki-0.1.6/src/SmallObj.cpp:475: error: request for member 'test' in 'foundBlocks', which is of non-class type 'int'
../ext/loki/loki-0.1.6/src/SmallObj.cpp:486: error: request for member 'count' in 'foundBlocks', which is of non-class type 'int'
../ext/loki/loki-0.1.6/src/SmallObj.cpp: In member function 'bool Loki::Chunk::IsBlockAvailable(void*, unsigned char, size_t) const':
../ext/loki/loki-0.1.6/src/SmallObj.cpp:522: error: 'UCHAR_MAX' was not declared in this scope
../ext/loki/loki-0.1.6/src/SmallObj.cpp:522: error: template argument 1 is invalid
../ext/loki/loki-0.1.6/src/SmallObj.cpp:522: error: invalid type in declaration before ';' token
../ext/loki/loki-0.1.6/src/SmallObj.cpp:527: error: request for member 'set' in 'foundBlocks', which is of non-class type 'int'
../ext/loki/loki-0.1.6/src/SmallObj.cpp:536: error: request for member 'test' in 'foundBlocks', which is of non-class type 'int'
make[3]: *** [tora-SmallObj.o] Ошибка 1
make[3]: Leaving directory `/opt/soft/nix/oracle/tora-1.3.22/src'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/opt/soft/nix/oracle/tora-1.3.22/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/opt/soft/nix/oracle/tora-1.3.22'
make: *** [all] Ошибка 2
...пробовал разные версии торы и gcc :(
Может кто сталкивался с подобным (впервые ставлю тору) - соединение с сервером происходит нормально, но далее в броузере не отображается список таблиц базы - http://s54.radikal.ru/i144/0809/8d/9ece673b122d.jpg
...а проблему кодировок, описанную выше, решил использованием другого клиента:
deb http://oss.oracle.com/debian unstable main non-free
wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | apt-key add -
$ apt-get update
$ apt-get install oracle-xe-client
добавляем в /etc/profile:
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
export NLS_LANG=AMERICAN_AMERICA.UTF8
#export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export SQLPATH=$ORACLE_HOME/sqlplus
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
... Может кто сталкивался с подобным (впервые ставлю тору) - соединение с сервером происходит нормально, но далее в броузере не отображается список таблиц базы - ...
А таблицы-то вообще есть у пользователя, под которым выполняется соединение?
Проверить можно так:
select * from user_tables;
Timoshinin Evgeny, все гут с таблицами - с венды под plsql developer'ом нормально все отображает, а здесь не понятно...
...причем когда запускаю дебагер, то он отображает "сломанные" пэкеджи, а вот "живые" никак не видно :(
Получается, что с одними параметрами через pl/sql developer я вижу все объекты, а тут только пользовательские?
...подскажите, плиз, как тогда увидеть все - похоже моя чего-то не понимать :(
Прошу прощения... я само тупило :(
вопрос к анонимному:
как исправили ошибку с loki-0.1.6 ?
заранее спасибо
надо в файле SmallObj.cpp добавить
заголовочный файл climits в include
и по идее все должно скомпилиться
Tora 2.1.3
oracle 11g
при компиляции выскакивает ошибка:
tora-toawr.o: In function `~toAWR': /tmp/tora/tora-2.1.3/src/toawr.cpp:381: undefined reference to `vtable for toAWR' /tmp/tora/tora-2.1.3/src/toawr.cpp:381: undefined reference to `vtable for toAWR' /tmp/tora/tora-2.1.3/src/toawr.cpp:381: undefined reference to `vtable for toAWR' /tmp/tora/tora-2.1.3/src/toawr.cpp:381: undefined reference to `vtable for toAWR' /tmp/tora/tora-2.1.3/src/toawr.cpp:381: undefined reference to `vtable for toAWR' tora-toawr.o:/tmp/tora/tora-2.1.3/src/toawr.cpp:381: more undefined references to `vtable for toAWR' follow tora-toawr.o: In function `toAWR::tr(char const*, char const*)': /tmp/tora/tora-2.1.3/src/toawr.h:57: undefined reference to `toAWR::staticMetaObject' collect2: ld returned 1 exit status make[3]: *** [tora] Ошибка 1 make[3]: Выход из каталога `/tmp/tora/tora-2.1.3/src' make[2]: *** [all] Ошибка 2 make[2]: Выход из каталога `/tmp/tora/tora-2.1.3/src' make[1]: *** [all-recursive] Ошибка 1 make[1]: Выход из каталога `/tmp/tora/tora-2.1.3' make: *** [all] Ошибка 2 maks@maks-nb:/tmp/tora/tora-2.1.3$
лечиться либо скачать версию из транка или так:
в файле tora-2.1.3/src/Makefile.am
в секции BUILT_SOURCES зарегистрировать файл moc_toawr.cpp.
Что-то не удается победить src/toawr.h:57: undefined reference to `toAWR::staticMetaObject'
Из транка скачиваю, эта ошибка не вылазит, но там куча других. А если по рекомендации с регистрацией cpp-файла, то не компилится, все та же ошибка.
Помогло добавление строки в файл tora-2.1.3/src/Makefile.in
Отправить комментарий