| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- <?php
- include_once('../adodb.inc.php');
- include_once('adodb-replicate.inc.php');
- set_time_limit(0);
- function IndexFilter($dtable, $idxname,$flds,$options)
- {
- if (strlen($idxname) > 28) $idxname = substr($idxname,0,24).rand(1000,9999);
- return $idxname;
- }
- function SelFilter($table, &$arr, $delfirst)
- {
- return true;
- }
- function updatefilter($table, $fld, $val)
- {
- return "nvl($fld, $val)";
- }
- function FieldFilter(&$fld,$mode)
- {
- $uf = strtoupper($fld);
- switch($uf) {
- case 'SIZEFLD':
- return 'Size';
- case 'GROUPFLD':
- return 'Group';
- case 'GROUP':
- if ($mode == 'SELECT') $fld = '"Group"';
- return 'GroupFld';
- case 'SIZE':
- if ($mode == 'SELECT') $fld = '"Size"';
- return 'SizeFld';
- }
- return $fld;
- }
- function ParseTable(&$table, &$pkey)
- {
- $table = trim($table);
- if (strlen($table) == 0) return false;
- if (strpos($table, '#') !== false) {
- $at = strpos($table, '#');
- $table = trim(substr($table,0,$at));
- if (strlen($table) == 0) return false;
- }
- $tabarr = explode(',',$table);
- if (sizeof($tabarr) == 1) {
- $table = $tabarr[0];
- $pkey = '';
- echo "No primary key for $table **** **** <br>";
- } else {
- $table = trim($tabarr[0]);
- $pkey = trim($tabarr[1]);
- if (strpos($pkey,' ') !== false) echo "Bad PKEY for $table $pkey<br>";
- }
- return true;
- }
- global $TARR;
- function TableStats($rep, $table, $pkey)
- {
- global $TARR;
- if (empty($TARR)) $TARR = array();
- $cnt = $rep->connSrc->GetOne("select count(*) from $table");
- if (isset($TARR[$table])) echo "<h1>Table $table repeated twice</h1>";
- $TARR[$table] = $cnt;
- if ($pkey) {
- $ok = $rep->connSrc->SelectLimit("select $pkey from $table",1);
- if (!$ok) echo "<h1>$table: $pkey does not exist</h1>";
- } else
- echo "<h1>$table: no primary key</h1>";
- }
- function CreateTable($rep, $table)
- {
- ## CREATE TABLE
- #$DB2->Execute("drop table $table");
- $rep->execute = true;
- $ok = $rep->CopyTableStruct($table);
- if ($ok) echo "Table Created<br>\n";
- else {
- echo "<hr>Error: Cannot Create Table<hr>\n";
- }
- flush();@ob_flush();
- }
- function CopyData($rep, $table, $pkey)
- {
- $dtable = $table;
- $rep->execute = true;
- $rep->deleteFirst = true;
- $secs = time();
- $rows = $rep->ReplicateData($table,$dtable,array($pkey));
- $secs = time() - $secs;
- if (!$rows || !$rows[0] || !$rows[1] || $rows[1] != $rows[2]+$rows[3]) {
- echo "<hr>Error: "; var_dump($rows); echo " (secs=$secs) <hr>\n";
- } else
- echo date('H:i:s'),': ',$rows[1]," record(s) copied, ",$rows[2]," inserted, ",$rows[3]," updated (secs=$secs)<br>\n";
- flush();@ob_flush();
- }
- function MergeDataJohnTest($rep, $table, $pkey)
- {
- $rep->SwapDBs();
- $dtable = $table;
- $rep->oracleSequence = 'LGBSEQUENCE';
- # $rep->MergeSrcSetup($table, array($pkey),'UpdatedOn','CopiedFlag');
- if (strpos($rep->connDest->databaseType,'mssql') !== false) { # oracle ==> mssql
- $ignoreflds = array($pkey);
- $ignoreflds[] = 'MSSQL_ID';
- $set = 'MSSQL_ID=nvl($INSERT_ID,MSSQL_ID)';
- $pkeyarr = array(array($pkey),false,array('MSSQL_ID'));# array('MSSQL_ID', 'ORA_ID'));
- } else { # mssql ==> oracle
- $ignoreflds = array($pkey);
- $ignoreflds[] = 'ORA_ID';
- $set = '';
- #$set = 'ORA_ID=isnull($INSERT_ID,ORA_ID)';
- $pkeyarr = array(array($pkey),array('MSSQL_ID'));
- }
- $rep->execute = true;
- #$rep->updateFirst = false;
- $ok = $rep->Merge($table, $dtable, $pkeyarr, $ignoreflds, $set, 'UpdatedOn','CopiedFlag',array('Y','N','P','='), 'CopyDate');
- var_dump($ok);
- #$rep->connSrc->Execute("update JohnTest set name='Apple' where id=4");
- }
- $DB = ADONewConnection('odbtp');
- #$ok = $DB->Connect('localhost','root','','northwind');
- $ok = $DB->Connect('192.168.0.1','DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=natsoft;DATABASE=OIR;','','');
- $DB->_bindInputArray = false;
- $DB2 = ADONewConnection('oci8');
- $ok2 = $DB2->Connect('192.168.0.2','tnb','natsoft','RAPTOR','');
- if (!$ok || !$ok2) die("Failed connection DB=$ok DB2=$ok2<br>");
- $tables =
- "
- JohnTest,id
- ";
- # net* are ERMS, need last updated field from LGBnet
- # tblRep* are tables insert or update from Juris, need last updated field also
- # The rest are lookup tables, can copy all from LGBnet
- $tablesOrig =
- "
- SysVoltSubLevel,id
- # Lookup table for Restoration Details screen
- sysefi,ID # (not identity)
- sysgenkva,ID #(not identity)
- sysrestoredby,ID #(not identity)
- # Sel* table added on 24 Oct
- SELSGManufacturer,ID
- SelABCCondSizeLV,ID
- SelABCCondSizeMV,ID
- SelArchingHornSize,ID
- SelBallastSize,ID
- SelBallastType,ID
- SelBatteryType,ID #(not identity)
- SelBreakerCapacity,ID
- SelBreakerType,ID #(not identity)
- SelCBreakerManuf,ID
- SelCTRatio,ID #(not identity)
- SelCableBrand,ID
- SelCableSize,ID
- SelCableSizeLV,ID # (not identity)
- SelCapacitorSize,ID
- SelCapacitorType,ID
- SelColourCode,ID
- SelCombineSealingChamberSize,ID
- SelConductorBrand,ID
- SelConductorSize4,ID
- SelConductorSizeLV,ID
- SelConductorSizeMV,ID
- SelContactorSize,ID
- SelContractor,ID
- SelCoverType,ID
- SelCraddleSize,ID
- SelDeadEndClampBrand,ID
- SelDeadEndClampSize,ID
- SelDevTermination,ID
- SelFPManuf,ID
- SelFPillarRating,ID
- SelFalseTrue,ID
- SelFuseManuf,ID
- SelFuseType,ID
- SelIPCBrand,ID
- SelIPCSize,ID
- SelIgnitorSize,ID
- SelIgnitorType,ID
- SelInsulatorBrand,ID
- SelJoint,ID
- SelJointBrand,ID
- SelJunctionBoxBrand,ID
- SelLVBoardBrand,ID
- SelLVBoardSize,ID
- SelLVOHManuf,ID
- SelLVVoltage,ID
- SelLightningArresterBrand,ID
- SelLightningShieldwireSize,ID
- SelLineTapSize,ID
- SelLocation,ID
- SelMVVoltage,ID
- SelMidSpanConnectorsSize,ID
- SelMidSpanJointSize,ID
- SelNERManuf,ID
- SelNERType,ID
- SelNLinkSize,ID
- SelPVCCondSizeLV,ID
- SelPoleBrand,ID
- SelPoleConcreteSize,ID
- SelPoleSize,ID
- SelPoleSpunConcreteSize,ID
- SelPoleSteelSize,ID
- SelPoleType,ID
- SelPoleWoodSize,ID
- SelPorcelainFuseSize,ID
- SelRatedFaultCurrentBreaker,ID
- SelRatedVoltageSG,ID #(not identity)
- SelRelayType,ID # (not identity)
- SelResistanceValue,ID
- SelSGEquipmentType,ID # (not identity)
- SelSGInsulationType,ID # (not identity)
- SelSGManufacturer,ID
- SelStayInsulatorSize,ID
- SelSuspensionClampBrand,ID
- SelSuspensionClampSize,ID
- SelTSwitchType,ID
- SelTowerType,ID
- SelTransformerCapacity,ID
- SelTransformerManuf,ID
- SelTransformerType,ID #(not identity)
- SelTypeOfArchingHorn,ID
- SelTypeOfCable,ID #(not identity)
- SelTypeOfConductor,ID # (not identity)
- SelTypeOfInsulationCB,ID # (not identity)
- SelTypeOfMidSpanJoint,ID
- SelTypeOfSTJoint,ID
- SelTypeSTCable,ID
- SelUGVoltage,ID # (not identity)
- SelVoltageInOut,ID
- SelWireSize,ID
- SelWireType,ID
- SelWonpieceBrand,ID
- #
- # Net* tables added on 24 Oct
- NetArchingHorn,Idx
- NetBatteryBank,Idx # identity, FunctLocation Pri
- NetBiMetal,Idx
- NetBoxFuse,Idx
- NetCable,Idx # identity, FunctLocation Pri
- NetCapacitorBank,Idx # identity, FunctLocation Pri
- NetCircuitBreaker,Idx # identity, FunctLocation Pri
- NetCombineSealingChamber,Idx
- NetCommunication,Idx
- NetCompInfras,Idx
- NetControl,Idx
- NetCraddle,Idx
- NetDeadEndClamp,Idx
- NetEarthing,Idx
- NetFaultIndicator,Idx
- NetFeederPillar,Idx # identity, FunctLocation Pri
- NetGenCable,Idx # identity , FunctLocation Not Null
- NetGenerator,Idx
- NetGrid,Idx
- NetHVOverhead,Idx #identity, FunctLocation Pri
- NetHVUnderground,Idx #identity, FunctLocation Pri
- NetIPC,Idx
- NetInductorBank,Idx
- NetInsulator,Idx
- NetJoint,Idx
- NetJunctionBox,Idx
- NetLVDB,Idx #identity, FunctLocation Pri
- NetLVOverhead,Idx
- NetLVUnderground,Idx # identity, FunctLocation Not Null
- NetLightningArrester,Idx
- NetLineTap,Idx
- NetMidSpanConnectors,Idx
- NetMidSpanJoint,Idx
- NetNER,Idx # identity , FunctLocation Pri
- NetOilPump,Idx
- NetOtherComponent,Idx
- NetPole,Idx
- NetRMU,Idx # identity, FunctLocation Pri
- NetStreetLight,Idx
- NetStrucSupp,Idx
- NetSuspensionClamp,Idx
- NetSwitchGear,Idx # identity, FunctLocation Pri
- NetTermination,Idx
- NetTransition,Idx
- NetWonpiece,Idx
- #
- # comment1
- SelMVFuseType,ID
- selFuseSize,ID
- netRelay,Idx # identity, FunctLocation Pri
- SysListVolt,ID
- sysVoltLevel,ID_SVL
- sysRestoration,ID_SRE
- sysRepairMethod,ID_SRM # (not identity)
- sysInterruptionType,ID_SIN
- netTransformer,Idx # identity, FunctLocation Pri
- #
- #
- sysComponent,ID_SC
- sysCodecibs #-- no idea, UpdatedOn(the only column is unique),Ermscode,Cibscode is unique but got null value
- sysCodeno,id
- sysProtection,ID_SP
- sysEquipment,ID_SEQ
- sysAddress #-- no idea, ID_SAD(might be auto gen No)
- sysWeather,ID_SW
- sysEnvironment,ID_SE
- sysPhase,ID_SPH
- sysFailureCause,ID_SFC
- sysFailureMode,ID_SFM
- SysSchOutageMode,ID_SSM
- SysOutageType,ID_SOT
- SysInstallation,ID_SI
- SysInstallationCat,ID_SIC
- SysInstallationType,ID_SIT
- SysFaultCategory,ID_SF #(not identity)
- SysResponsible,ID_SR
- SysProtectionOperation,ID_SPO #(not identity)
- netCodename,CodeNo #(not identity)
- netSubstation,Idx #identity, FunctLocation Pri
- netLvFeeder,Idx # identity, FunctLocation Pri
- #
- #
- tblReport,ReportNo
- tblRepRestoration,ID_RR
- tblRepResdetail,ID_RRD
- tblRepFailureMode,ID_RFM
- tblRepFailureCause,ID_RFC
- tblRepRepairMethod,ReportNo # (not identity)
- tblInterruptionType,ID_TIN
- tblProtType,ID_PT #--capital letter
- tblRepProtection,ID_RP
- tblRepComponent,ID_RC
- tblRepWeather,ID_RW
- tblRepEnvironment,ID_RE
- tblRepSubstation,ID_RSS
- tblInstallationType,ID_TIT
- tblInstallationCat,ID_TIC
- tblFailureCause,ID_TFC
- tblFailureMode,ID_TFM
- tblProtection,ID_TP
- tblComponent,ID_TC
- tblProtdetail,Id # (Id)--capital letter for I
- tblInstallation,ID_TI
- #
- ";
- $tables = explode("\n",$tables);
- $rep = new ADODB_Replicate($DB,$DB2);
- $rep->fieldFilter = 'FieldFilter';
- $rep->selFilter = 'SELFILTER';
- $rep->indexFilter = 'IndexFilter';
- if (1) {
- $rep->debug = 1;
- $DB->debug=1;
- $DB2->debug=1;
- }
- # $rep->SwapDBs();
- $cnt = sizeof($tables);
- foreach($tables as $k => $table) {
- $pkey = '';
- if (!ParseTable($table, $pkey)) continue;
- #######################
- $kcnt = $k+1;
- echo "<h1>($kcnt/$cnt) $table -- $pkey</h1>\n";
- flush();@ob_flush();
- CreateTable($rep,$table);
- # COPY DATA
- TableStats($rep, $table, $pkey);
- if ($table == 'JohnTest') MergeDataJohnTest($rep, $table, $pkey);
- else CopyData($rep, $table, $pkey);
- }
- if (!empty($TARR)) {
- ksort($TARR);
- adodb_pr($TARR);
- asort($TARR);
- adodb_pr($TARR);
- }
- echo "<hr>",date('H:i:s'),": Done</hr>";
|