Я включил потоки в php, чтобы я мог выполнять несколько задач одновременно, цель состоит в том, чтобы извлечь данные с сервера Oracle (12C) на мой локальный компьютер.
Почему по темам ?? Потому что в какой-то момент мы собираемся обработать около 500 миллионов записей между несколькими таблицами, поэтому я хочу извлечь данные одновременно, чтобы попытаться минимизировать время обработки.
Это мой php код:
<?php
//*************Thread 1
class table1Class extends Thread{
public $bdconn;
public function __construct($bdconn) {
$this->bdconn = $bdconn;
}
public function run(){
$stTable1 = oci_parse($this->bdconn, 'INSERT INTO TABLE_1
SELECT * FROM TABLE_1@DBLINK');
oci_execute($stTable1); //******* LINE 13
}
}
//***********Thread 2
class table2Class extends Thread{
public $bdconn;
public function __construct($bdconn) {
$this->bdconn = $bdconn;
}
public function run(){
$stTable2 = oci_parse($this->bdconn, 'INSERT INTO TABLE_2
SELECT * FROM TABLE_2@DBLINK');
oci_execute($stTable2); //****** LINE 27
}
}function pad($val) {
return ($val > 9) ? $val : "0".$val;
}$start= microtime(true); //time
require_once '../../lib/bd_con.php';
$bdconn= conBd(); //open connection
/**********TRUNCATE LOCAL TABLES*/
$trunPref= oci_parse($bdconn, 'TRUNCATE TABLE TABLE_1');
oci_execute($trunPref);
$trunCruz= oci_parse($bdconn, 'TRUNCATE TABLE TABLE_2');
oci_execute($trunCruz);
/************END*///***********BEGIN THREADS
$table1 = new table1Class($bdconn);
$table1->start();
$table2 = new table2Class($bdconn);
$table2->start();//*********WAINT FOR THREADS TO END
$table1->join();
$table2->join();oci_close($bdconn); //close connection
//PRINT TIME INFORMATION
$end= microtime(true); //al final del archivo
$tiempo_segundos = number_format($end-$start,4);
echo pad(((Int)($tiempo_segundos/60))).":".pad(((Int)($tiempo_segundos%60)))." minutes";
И это ошибка, которую я получаю при выполнении:
Предупреждение: oci_execute (): ORA-01013: пользователь запросил отмену текущего
операция в C: \ xampp \ htdocs … \ file.php в строке 13Предупреждение: oci_execute (): ORA-03117: переполнение области сохранения двух задач в
C: \ xampp \ htdocs … \ file.php в строке 27
Небольшое объяснение того, для чего предназначен код: обрезать мои локальные таблицы и выполнить два потока, чтобы снова вставить данные с сервера oracle, используя dblink.
Буду благодарен, если кто-нибудь может дать идею, как это исправить, пожалуйста.
Задача ещё не решена.
Других решений пока нет …