Проблемы переноса данных на oracle

Проблемы переноса данных на oracle

от Alb Swan -
Количество ответов: 16

Приветствую

Пытаюсь перенести даные из mysql на oracle используя экспериментальную возможность moodle.

Moodle установлен на ubuntu server 10.04, Oracle отдельно на другой машине.

Попытки заканчивается ссобщением "Can not connect target database, sorry."

Из командной строки клиент к Oracle подключается нормально.

oci8 тоже установлено.

В php_errors.log заметил следующие варнинги.

 

[02-Sep-2013 02:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 02:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 03:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 03:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 04:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 04:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 05:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 05:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 06:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 06:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 07:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 07:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 08:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 08:39:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0
[02-Sep-2013 09:09:01] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0

oci8

OCI8 Support enabled
Version 1.4.10
Revision $Id: 44bfa713983a99b3e59477f6532e5fb51b6dee94 $
Active Persistent Connections 0
Active Connections 0
Oracle Run-time Client Library Version 11.2.0.1.0
Oracle Instant Client Version 11.2
Temporary Lob support enabled
Collections support enabled

 

DirectiveLocal ValueMaster Value
oci8.connection_class no value no value
oci8.default_prefetch 100 100
oci8.events Off Off
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics Off Off
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20

 

В какую сторону копать?

Подскажите пожалуйста если кто столкнулся с такой проблемой.

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Alb Swan -

Добавил файл в корень мудла со следующим содержанием. Сам я не разработчик нашел код в интернете.

 

<?php
$host = "10.10.1.237";
$sid = "moodle";
$port = 1521;
$db_user = "moodle";
$db_psw = "moodle";

$db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port)) ) (CONNECT_DATA = (SID = $sid) ) )";
$dsn= OCILogon( $db_user, $db_psw, $db );
if ( ! $dsn )
    {echo "Невозможно подключится к базе " ;die();}
else
    {echo "Успешное присоединение к базе" ;}

 

Если этот файл открыть на броузере получаю сообщение: Успешное присоединение к базе

А если пароль отредактирую на неправильный то получаю сообщение: Невозможно подключится к базе

Значить php c oci нормально работает?

 

Ниже добавил скриншот с мудла

 

Приложение Capture.PNG
В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Alb Swan -

В место OCILogon использовал oci_connect также нормально скрипт работает.

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

У оракакла большая любовь к переменным окружения. Я бы внимательно прочитал http://docs.moodle.org/24/en/Installing_Oracle_for_PHP на эту тему, ну и ссылки в конце.

В ответ на Виталий Лавров

Re: Проблемы переноса данных на oracle

от Alb Swan -

На убунту таких /etc/sysconfig/apache2, ~/.bashrc файлов не нашел

 

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Alb Swan -

Нашел что править, теперь вывод команды locale выглядить так

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

 

А вывод команды env | grep LD_LIB следующее
LD_LIBRARY_PATH=/opt/oracle/instantclient/

Путь клиента правильный.

Но результат прежний.

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Эти переменные окружения нужно установить в апаче ( или какой у вас там веб-сервер), что бы их получил php.

moodle использует oci_new_connect/oci_pconnect для подключения к базе.

lib/dmi/oci_native_moodle_package.sql для базы данных moodle выполнен ?

В ответ на Виталий Лавров

Re: Проблемы переноса данных на oracle

от Alb Swan -

ib/dmi/oci_native_moodle_package.sql где нужно выполнить?

на mysql или на oracle?

 

В ответ на Виталий Лавров

Re: Проблемы переноса данных на oracle

от Alb Swan -

<?php
$host = "10.10.1.237";
$sid = "moodle";
$port = 1521;
$db_user = "moodle";
$db_psw = "moodlepas";

$db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port)) ) (CONNECT_DATA = (SID = $sid) ) )";

$conn = oci_pconnect($db_user, $db_psw, $db);

{ $stmt = oci_parse($conn, "create table moodle.test1 (test varchar2(64))");

//$conn = oci_new_connect($db_user, $db_psw, $db);

//{ $stmt = oci_parse($conn, "create table moodle.test (test varchar2(64))");

 oci_execute($stmt);

 

Вот такой вот код работает, по очереди пробовал oci_new_connect и oci_pconnect.

Cоздал на оракле таблицы test и test1

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Oracle очень сложная и капризная база данных. Расскажите, почему хотите мигрировать. Теперь по сути. Если вы хотите проверить миграцию, сначала проверьте, устанавливается ли moodle с нуля на этой системе. Для oracle базу данных/пользователя (в Oracle в отличие от MySQL это одно и тоже) нужно создать самостоятельно. Проверьте подключение к Oracle каким-нибудь внешним инструментом типа sqlmaestro. У меня при подключении oracle часто ругается на несовместимость NLS_LANG, приходиться выставлять на машине location=en_US, а не ru_RU. То, что Вы указываете здесь в поле dbname в oracle называется instance или sid, возможно у вас он называется иначе, например для express edition это обязательно XE. 

В ответ на Vadim Dvorovenko

Re: Проблемы переноса данных на oracle

от Alb Swan -

Решение перейти на Oracle принял начальство, я предлагал PostgreSQL но они не хотят.

К ораклу с командной строки из машины где установлено moodle подключение есть с помощью sqlplus. Если попытаться подключится с сайта moodle  добавив кастомный код то подключение есть, и команды по созданию  удалению таблиц выполняются. Пример подключения выше добавил. В корне папки где установлено moodle добавил скрипт на php и его открыл на броузере все нормально работатет.  Но не рабоает код самаго moodle.

вот вывод команды locale

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

 

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Vadim Tabunshchik -
Изображение пользователя Developers

По умолчанию доступ к любому серверу БД разрешен только с localhost, с удаленного компьютера вы к БД по http не подключитесь.

Вывод: нужно разрешить доступ к серверу БД с внешних IP.

 

В ответ на Vadim Tabunshchik

Re: Проблемы переноса данных на oracle

от Alb Swan -

Доступ есть, проверено с моего компьютера сначало.

Потом с командной строки из сервера где установлено мудл.

Через кастомный код на мудле. Создав в корне папки moodle тестовый файл

с таким содержанием

<?php
$host = "10.10.1.237";
$sid = "moodle";
$port = 1521;
$db_user = "moodle";
$db_psw = "moodlepas";

$db = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port)) ) (CONNECT_DATA = (SID = $sid) ) )";

$conn = oci_pconnect($db_user, $db_psw, $db);

{ $stmt = oci_parse($conn, "create table moodle.test1 (test varchar2(64))");

//$conn = oci_new_connect($db_user, $db_psw, $db);

//{ $stmt = oci_parse($conn, "create table moodle.test (test varchar2(64))");

 oci_execute($stmt);

 

 

PHP нормально выполняет такой скрипт и создает на базе с ораклом таблицы

Проверил функции oci_pconnect, oci_new_connect, oci_connect, ocilogon.

Но возможность переноса данных не работает.

В ответ на Alb Swan

Re: Проблемы переноса данных на oracle

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Ещё раз говорю. Сначала сделайте отдельную установку мудла с нуля в эту базу, чтобы убедиться, что мудл с ней дружит, а уже потом сносите эту базу и проверяйте работу переноса. 

oci_native_moodle_package.sql добавляет несколько функций в базу оракла, чтобы мудл мог правильно осуществлять какие-то блокировки. А чтобы это заработало, ещё вероятно придется выполнить grant execute on sys.dbms_lock to moodle от имени sys