Nasledujúci návod slúži na migráciu trezorov z databázových platforiem Sybase alebo Oracle na databázovú platformu PostgreSQL.
Obsah:
Predpoklady migrácie trezorov
- sú k dispozícii zdrojové trezory Sybase / Oracle
- cez ODBC rozhranie je možné sa pripojiť k trezorom Sybase / Oracle
- pre Sybase trezoroy nakonfigurujte ODBC DSN (napr. s názvom TrzSrc) na prístup k jednému konkrétnemu trezoru reprezentovanému súborom napr. Trezor.db (Sybase 11 a 12) alebo Trezor.cdb (staršie verzie Sybase)
- pre Oracle trezory nakonfigurujte ODBC DSN na prístup k Oracle databáze s trezormi. Je nutné, aby trezory boli pripojené (na čítanie alebo na zápis)
- je k dispozícii archívna databáza na PostgreSQL (verzie 9.5 a vyššej). Tento návod počíta s dvoma variantami:
- trezorovanie na PostgreSQL už bolo spustené a jeden alebo viac trezorov je už vytvorených
- trezorovanie na PostgreSQL ešte nebolo nakonfigurované
- užívateľ, ktorý importuje trezory, má administrátorské práva do PostgreSQL a vie používať administračný program pgAdmin. Pozná heslo užívateľa postgres, ktoré bolo zadávané pri inštalácii PostgreSQL.
- užívateľ má k dispozícii Microsoft Excel alebo alternatívny nástroj podporujúci prácu s .xlsx súbormi
v databázovom serveri PostgreSQL je vytvorený tablespace, v ktorom sa budú vytvárať staré trezory. Môže byť rovnaký ako tablespace, v ktorom sa vytvárajú aktuálne trezory, prípadne to môže byť archívny tablespace.
Pozn: vytvorenie tablespace D2000TRZ, ktorému zodpovedá adresár E:\PostgreSQL\D2000trz, je možné nasledujúcim SQL príkazom (v príkaze musia byť unixové lomítka aj na Windows):
CREATE TABLESPACE "D2000TRZ" OWNER dba LOCATION 'E:/PostgreSQL/D2000trz';Uistite sa, že užívateľ, pod ktorým je spustený PostgreSQL (štandardne NETWORK SERVICE), má úplné práva na prístup k adresáru, kde je umiestnený tablespace. V opačnom prípade vytvorenie tablespace zlyhá.
Aktuálne nie je zdokumentovaná migrácia z Oracle databázy používajúcej trezorové segmenty (ale je možná a bola realizovaná)
Súbory potrebné pre migráciu
Postup migrácie využíva pripojené súbory, ktoré je nutné si stiahnuť:
- TrezorsTemplate.xlsx - pomôcka pri návrhu trezorov, ktorá generuje skripty na vytvorenie a inicializovanie trezorov
- OneTrezor.bat - skript na vytvorenie jednej trezorovej databázy
- Trezory.template - SQL príkazy používané skriptom OneTrezor.bat na vytvorenie štruktúr trezorovej databázy
- fart.exe - utilita na search/replace v súboroch (používaná skriptom OneTrezor.bat)
Postup
- nakopírujte všetky stiahnuté súbory do jedného adresára na cieľovom počítačí (kde je inštalovaný cieľový PostgreSQL)
- upravte TrezorsTemplate.xlsx:
- do bunky A3 zadajte meno aplikácie (rovnaké malé a veľké písmená, ako ukazuje D2SMC)
- v bunke C3 zmeňte meno PostgreSQL tablespace, v ktorom sa vytvoria trezory, ak je iný ako D2000TRZ.
- v bunke D3 nastavte dátum začiatku prvého trezora (menší alebo rovný dátumu, od ktorého máte k dispozícii Sybase/Oracle trezory)
- ak potrebujete iné ako mesačné trezory, upravte bunku E5, ktorá definuje časový rozmer jedného trezoru. Týždňové trezory dosiahnete výrazom "=D3+7", desaťdňové "=D3+10", mesačné "=EDATE(D3;1)". Ak ste bunku E5 upravovali, skopírujte ju do všetkých buniek pod ňou, aby mali všetky vytvorené trezory rovnaký rozmer.
- namnožte riadky (4-57) tak, aby ste mali dostatočný počet riadkov pokrývajúcich aj súčasnosť. Pokiaľ už máte zapnuté trezorovanie (a sú vytvorené napr. 2 trezory za posledné 2 mesiace), tak toto obdobie už pokryť nepotrebujete
- ak už máte zapnuté trezorovanie, je nutné zmeniť ID-čka existujúcich trezorov tak, aby sme pred ne vložili trezory, ktoré ideme vytvárať. Postup je nasledovný:
- vypnite archív
- nástrojom pgAdmin choďte do archívnej databázy, nájdite v schéme public tabuľku trezors a zmeňte ID-čka existujúcich trezorov tak, aby plynule nadväzovali na IDčka starých trezorov, ktoré ideme vytvoriť.
Príklad: ideme vytvoriť 50 starých trezorov, v tabuľke trezors sú dáta 4 existujúcich trezorov. Je nutné zmeniť IDčka 1,2,3, 4 na 51, 52, 53, 54, čo možno dosiahnuť SQL príkazom
UPDATE trezors SET "ID" = "ID" + 50; - premenujte v nástroji pgAdmin existujúce trezorové databázy tak, aby mená zrkadlili zmenu IDčiek trezorov (je možné aj SQL príkazmi, napr.
ALTER DATABASE "myApp_TREZOR_1" RENAME TO "myApp_TREZOR_51";) - zapnite archív a overte príkazom LIST_TREZOR, že zmena bola korektná. Zároveň (pokiaľ sa vkladajú dáta aj do najstaršieho trezoru, prípadne dopĺňajú aj do ďalších existujúcich) odporúčame staré trezory odpojiť (ak sú pripojené) a pripojiť ich znovu, tentokrát aj na zápis. Pre príklad vyššie (máme trezory 51 - 54) by bolo treba spustiť príkazy
DISMOUNT_TREZOR 51 53
MOUNT_TREZOR 51 53 WRITE
Trezor 54 je aktuálne používaný a je teda možné doň zapisovať.
- ak nemáte ešte zapnuté trezorovanie, je nutné vytvoriť tabuľku trezors:
- nástrojom pgAdmin choďte do archívnej databázy a spustite nástroj Query
- vytvorte tabuľku trezors SQL príkazom:
CREATE TABLE public.trezors
(
"ID" integer NOT NULL,
"TIME_FROM" timestamp without time zone NOT NULL,
"TIME_TO" timestamp without time zone NOT NULL,
"STATUS" integer NOT NULL,
"DATAFILES" integer NOT NULL,
"TRZ_SEG" smallint
)
WITH (
OIDS=FALSE
); nastavte vlastníctvo tabuľky trezors užívateľovi dba, ktorého používa archív:
ALTER TABLE public.trezors OWNER TO dba;- vložte do archívnej databázy informáciu o verzie tabuľky trezors:
insert into tabver ("NAME", "VERSION", "PREV_VER") values ('TREZORS', 2, 1);
- skopírujte stĺpec F (od riadku 2) do .bat súboru a umiestnite do adresára s inštaláciou PostgreSQL (napr. ). Zdajte heslo užívateľa postgres (prvý riadok riadok "SET PGPASSWORD=***"). Po spustení dávkového súboru sa vytvoria prázdne PostgreSQL databázy, čo je možné overiť nástrojom pgAdmin.
- skopírujte stĺpec H (od riadku 3) do okna Query v pgAdmin-e pripojený k archívnej databaze. Do tabuľky trezors sa vložia informácie o vytvorených trezoroch.
Pozn: pokiaľ sa prvý trezor (v príklade č.1 zmenený na 51) nezačína presne v tom čase, ako končí posledný predchádzajúci trezor v Exceli (č. 50), je možné upraviť čas štartu (TIME_FROM) a posunúť ho do minulosti tak, aby sa zhodoval s časom konca. Napr.
update trezors set "TIME_FROM"='2016-04-27 22:00:00' where "ID" = 51
alebo inteligentnejšie s referenciou na predchádzajúci trezor 50:
update trezors set "TIME_FROM"=(select "TIME_TO from trezors where "ID" = 50) where "ID" = 51 - skopírujte stĺpec I (od riadku 3) do .bat súboru a umiestnite do adresára s ostatnými súbormi. Upravte skript OneTrezor.bat - nastavte cestu k psql.exe (set psql=) a heslo pre užívateľa postgres (SET PGPASSWORD=)
- spustením vytvoreného .bat súboru sa v trezorových databázach vytvoria potrebné tabuľky a naplnia sa
- ak nebolo trezorovanie zapnuté, je nutné ho nakonfigurovať (minimálne nastaviť parameter TrezorPeriod)
- teraz je možné vykonať ďalší reštart archívu a následne príkazom LIST_TREZOR overiť, že archív vidí ručne vytvorené trezory (všetky by mali byť prístupné na zápis).
- následne je možné utilitou arcsynchro napĺňať trezory.
Pre Oracle trezory: pre každý Oracle trezor potrebujeme spustiť jedno arcsynchro (parameter /STO x kde x=1,2,3 ... udávajúci zdrojový Oracle trezor)
Priklad (všimnite si časy od/do, ktoré pokrývajú všetky možné trezory aj s rezervou) kopíruje dáta z trezorov 1 a 2 z trezorov v zdrojovej databáze (DSN=ArcOrig) do trezorov v cieľovej databáze (DSN=SCADA.Archiv):
arcsynchro /UP /CM 50000 /LOGDT /PTO /STO 1 /TTPG0 SCADA_TREZOR_#ID# /DC 1000 /SU scada_archiv ArcOrig SCADA.Archiv "2000-01-01 00:00:00" "2030-01-01 00:00:00"
arcsynchro /UP /CM 50000 /LOGDT /PTO /STO 2 /TTPG0 SCADA_TREZOR_#ID# /DC 1000 /SU scada_archiv ArcOrig SCADA.Archiv "2000-01-01 00:00:00" "2030-01-01 00:00:00"
(...)
Pozn: aktuálne verzie arcsynchro podporujú parameter /FM (file mode), ktorý môže migráciu niekoľkonásobne zrýchliť: Adresár špecifikovaný parametrom /FM musí byť prístupný pre užívateľa, pod ktorým je spustený PostgreSQL (NETWORK SERVICE):
arcsynchro /UP /CM 50000 /FM c:\TEMP /LOGDT /PTO /STO 1 /TTPG0 SCADA_TREZOR_#ID# /DC 1000 /SU scada_archiv ArcOrig SCADA.Archiv "2000-01-01 00:00:00" "2030-01-01 00:00:00"
Pre Sybase trezory: pre každý Sybase trezor potrebujeme spustiť jedno arcsynchro. Keďže predpokladáme vytvorenie jediného Sybase DSN (TrzSrc), medzi jednotlivými spúšťaniami arcsynchro musíme do databázového súboru špecifikovaného v TrzSrc nakopírovať postupne trezor za trezorom.
Priklad (všimnite si časy od/do, ktoré pokrývajú všetky možné trezory aj s rezervou) kopíruje dáta z trezorov v zdrojovej databáze (DSN=TrzSrc) do trezorov v cieľovej databáze (DSN=SCADA.Archiv). DSN pre zdrojovú archívnu databázu sa nevyuživa, je nastavené na ľubovolný názov (Unused):
arcsynchro /UP /CM 50000 /LOGDT /PTO /TTPG0 SCADA_TREZOR_#ID# /DC 1000 /ST TrzSrc Unused SCADA.Archiv "2000-01-01 00:00:00" "2030-01-01 00:00:00"
Pozn: aktuálne verzie arcsynchro podporujú parameter /FM (file mode), ktorý môže migráciu niekoľkonásobne zrýchliť: Adresár špecifikovaný parametrom /FM musí byť prístupný pre Windows užívateľa, pod ktorým je spustený PostgreSQL (NETWORK SERVICE):
arcsynchro /UP /CM 50000 /FM c:\TEMP /PTO /TTPG0 SCADA_TREZOR_#ID# /DC 1000 /ST TrzSrc Unused SCADA.Archiv "2000-01-01 00:00:00" "2030-01-01 00:00:00"
Pozn: následný skript expand.bat bol použitý na konverziu Sybase9 .cdb trezorov na súbor D:\Trezor.db, z ktorého boli pomocou arcsynchro cez DSN "Trezor" dáta kopírované do PostgreSQL archívu.
Skript bol následne volaný v ďalšom skripte pre každý trezor, napr.
call expand.bat Trezor_2018_01_08_00.cdb
call expand.bat Trezor_2018_01_15_00.cdbrem Script for conversion of Sybase9 depository databases from *.cdb (parameter %1) -> D:\Trezor.db and load into archive via arcsynchro.
rem Arcsynchro requires existence of "Trezor" DSN pointing at D:\Trezor.db
rem parameter - name of depository database, e.g. Trezor_2020_02_03_00.cdb
echo Starting %time% %1 >> my.log
del /F D:\Trezor.db
del /F D:\Trezor.90.log
"c:\Program Files (x86)\Sybase\SQL Anywhere 9\win32\dbexpand.exe" -y d:\_Trezors\%1 D:\Trezor.db
d:\D2000\D2000_EXE\bin\arcsynchro.exe /LOGDT /UX /UP /DC 1000 /CM 100000 /ST Trezor /TAD xxx MyApp.Archiv "1990-01-01 00:00:00" "2030-01-01 00:00:00
echo Done %time% %1 >> my.log
- Synchronizáciu je možné aj paralelizovať. V prípade Oracle trezorov je možné spustiť viacero arcsynchro naraz. V prípade Sybase trezorov v zásade tiež, akurát je nutné vytvoriť niekoľko DSN ukazujúcich na niekoľko zdrojových trezorov s rôznym umiestnením na disku. Parameter /LOGDT utility arcsynchro zabezpečí, že každé arcsynchro použije vlastný logovací súbor (s časovou značkou, kedy bolo spustené).
Pridať komentár