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.cdb

    rem 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é).



Napíšte komentár