3.4. Testarea instrumentelor
3.4.1. Migrarea din Oracle folosind XML
Se dă tabela Sărbători cu următoarea structură (în Oracle 10g):
Name Type Nullable Comments
---- ------------------------- --------- -----------------------
DATA DATE Data calendaristica
TIP VARCHAR2(1) Y R -Religioasa,L-Legala
DEN VARCHAR2(25) Y Denumire
Folosind procedura de mai jos, se exportă tabela sărbători în format XML. Dacă nu se setează DBMS_XMLGEN.setMaxRows(qryCtx, 5), întregul document se va regăsi în câmpul result de tip CLOB din tabela temp_clob_tab. Dacă se setează acest parametru şi tabela sărbători are 6 înregistrări în temp_clob_tab se vor găsi două înregistrări, una conţinând un document cu 5 elemente şi a doua conţinând un singur document cu un element.
DECLARE
qryCtx DBMS_XMLGEN.ctxHandle;
result CLOB;
BEGIN
qryCtx := dbms_xmlgen.newcontext('SELECT * from sarbatori');
DBMS_XMLGEN.setRowTag(qryCtx, 'SARBATORI');
DBMS_XMLGEN.setMaxRows(qryCtx, 5);
LOOP
result := DBMS_XMLGEN.getXML(qryCtx);
EXIT WHEN
DBMS_XMLGEN.getNumRowsProcessed(qryCtx) =0;
INSERT INTO temp_clob_tab VALUES(result);
END LOOP;
END;
/
În tabela temp_clob_tab obţinem două înregistrări, una cu documentul:
<?xml version="1.0"?>
01-JAN-06
L
Anul nou
02-JAN-06
L
Anul nou
24-APR-06
R
Prima zi de Paste
25-DEC-06
R
Craciun
26-DEC-06
R
Craciun
şi cealaltă cu o singură înregistrare.
<?xml version="1.0"?>
01-DEC-06
L
Ziua Nationala
Se poate schimba denumirea nodului principal din ROWSET folosind funcţia setRowsetTag, spre exemplu: dbms_xmlgen.setRowsetTag(qryCtx,'RANDURI'). Documentul astfel obţinut poate fi uşor exportat în altă bază de date cu suport nativ de XML.
Se dă tabela nomenclator_prenume având 66841 de înregistrări cu următoarea structură. Rularea procedurii de mai sus a durat 5,875 de secunde pe un calculator Barton 2500+ cu 1GB RAM, obţinându-se un singur document XML.
Name Type Comments
--------------------- ---------------------- -----------------------
PRENUME_CD VARCHAR2(40) Prenume cu diacritice
ID_PRENUME NUMBER(8) Id prenume
PRENUME_FD VARCHAR2(40) Prenume fără diacritice
Pe tabela acte_identitate având 316.562 de înregistrări şi structura de mai jos; rularea procedurii a durat 55,784 de secunde.
Name Type Comments
------------------- ------------------------------ -----------------------
ID_P NUMBER(12) ID Partener
NR_CRT NUMBER(2) Numar curent
TIP_ACT_ID VARCHAR2(2) Tip AI
SERIE VARCHAR2(15) Serie AI
NUMAR NUMBER(15) Numar AI
ELIBERAT_DE VARCHAR2(128) Eliberat de
VALABIL_PANA_LA DATE Valabil pana la
ELIBERAT_LA DATE Data eliberarii
STARE VARCHAR2(1) A-Activ, D - Dezafectat
Acest lucru arată că exportul în format XML este rentabil ca timp şi în cazul unui volum mai mare de date.
Dacă se doreşte obţinerea de documente imbricate în cazul de faţă listarea angajaţilor pe departamente, trebuie folosite TYPE-uri cât şi operatorul CAST.
CREATE OR REPLACE TYPE ang_t AS OBJECT("@angajat_id" NUMBER, nume VARCHAR2(20));
CREATE OR REPLACE TYPE anglist_t AS TABLE OF ang_t;
CREATE OR REPLACE TYPE dept_t AS OBJECT("@department_id" NUMBER, department_name VARCHAR2(20), anglist anglist_t);
DECLARE
qryCtx dbms_xmlgen.ctxHandle;
result CLOB;
BEGIN
-- get the query context;
qryCtx := dbms_xmlgen.newContext
('SELECT dept_t(department_id, department_name,
CAST(MULTISET
(SELECT a.angajat_id, a.nume
FROM angajati a
WHERE a.dep_id=d.depart_id)
AS anglist_t))
AS deptxml
FROM departamente d');
dbms_xmlgen.setMaxRows(qryCtx, 5);
LOOP
result := dbms_xmlgen.getxml(qryCtx);
INSERT INTO temp_clob_tab VALUES(result);
IF result IS NULL THEN
EXIT;
END IF;
END LOOP;
END;
3.4.2. Migrarea folosind Ispirer SQLWays 3.8
Pentru demonstrarea migrării între Oracle şi MySQL se foloseşte o bază de date Oracle 10g rulând pe un calculator Barton 2500+ cu 1GB RAM şi o bază de date MySQL 5.0.3 rulând pe un calculator Barton 2400+ cu 512 MB RAM, legate în reţea (10 Mbps). Folosind Ispirer SQLWays 3.8 se va încerca migrarea unui utilizator din Oracle în MySQL. Utilizatorul are 8 Funcţii, 1 pachet, 6 tabele, 1 viziune şi 3 declanşatori. Structura lui se află pe CD în directorul Demo/Oracle. Exportul se face rapid şi fără erori, folosind wizard-ul, conform documentaţiei [WWW02], scripturile rezultate aflându-se pe CD în directorul DemoMigrare/Mysql. La import apar însă erori, doar 5 tabele sunt create şi încărcate corect din start, iar pentru una dintre ele trebuie modificat script-ul CREATE, schimbând DEFAULT(0) în DEFAULT 0 pentru a funcţiona. Nici un declanşator nu se compilează corect şi apar erori la una din funcţii şi la pachet. De asemenea, noul utilizator a trebui să fie creat manual, script-ul generat automat nefuncţionând.
Din cele 20 obiecte, au apărut erori la 7 dintre ele rezultând
În concluzie, această metodă de migrare, bazată asistentul Ispirer SQLWays, între aceste două sisteme de gestiune a bazelor de date trebuie să se limiteze la exportul de date, exportul altor obiecte putând duce la erori. Exportarea unei tabele având 9 coloane şi 316.562 de înregistrări (tabela acte_identitate descrisă şi la paragraful anterior) durează 27 de secunde, iar importul în MYSQL folosind LOAD INFILE durează mai puţin de 10 secunde, mai puţin chiar decât în cazul generării de fişiere XML folosind pachetul DBMS_XMLGEN din Oracle.
Figura 3.3 Exportul folosind SQL WaysWizard
S-a încercat, de asemenea, migrarea unei baze de date conţinând 28 de tabele din MySQL 5.0.3 în Oracle 10g. Dacă structura tabelelor a fost migrată cu succes, datele în sine nu au fost migrate, din cauza unei folosiri defectuoase a SQL*Loader-ului de către SQL Ways.
ANALIZA COMPARATIVA A DIFERITELOR INSTRUMENTE UTILIZATE PENTRU INTEGRAREA DATELOR 116
3.1. Sisteme de gestiune a bazelor de date 116
3.2. Sisteme pentru gestiunea depozitelor de date 117
3.2.1 Oracle Discoverer 118
3.2.2 Oracle Warehouse Builder 119
3.2.3. Microsoft SQL Server 2005 Business Intelligence 123
3.3. Instrumente utilizate pentru migrarea datelor 125
3.3.1. Oracle Migration Workbench 127
3.3.2. Utilitarele SQL*Loader şi Import/Export 128
3.3.3. Ispirer SQLWays 139
3.3.4. Embarcadero DT/Studio 139
3.3.5. Microsoft DTS 139
3.4. Testarea instrumentelor 140
3.4.1. Migrarea din Oracle folosind XML 140
3.4.2. Migrarea folosind Ispirer SQLWays 3.8 143
Dostları ilə paylaş: |