# Instalarea ROA pe Oracle 21c / Windows Kit de instalare și migrare a sistemului ROA pe un server Windows cu Oracle 21c (Express Edition sau Standard Edition). Se rulează pe serverul clientului. Oracle **nu** se instalează de aici — vezi întâi [`docs/00-INSTALL-ORACLE-XE.md`](docs/00-INSTALL-ORACLE-XE.md) sau [`docs/00-INSTALL-ORACLE-SE.md`](docs/00-INSTALL-ORACLE-SE.md). --- ## Cerințe - Windows Server 2016+ / Windows 10-11 Pro, cu drepturi de **administrator** - Oracle 21c XE sau SE deja instalat, cu parola SYS/SYSTEM `romfastsoft` - PowerShell 5.1+ - Spațiu: minimum 20 GB liberi (XE e limitat oricum la 12 GB date utilizator) - Fișierele DMP șablon (vezi [Fișierele DMP](#fișierele-dmp)) --- ## Alege scenariul | # | Situația | Ce rulezi | Downtime | |---|---|---|---| | **A** | Migrare de pe un server vechi, cu utilizatori care lucrează | `FAZA1.cmd` ziua, `FAZA2.cmd` seara | minute | | **B** | Client nou, fără date anterioare | `FAZA1.cmd /faralicente` | irelevant | | **C** | Migrare, dar downtime-ul nu contează | `INSTALEAZA.cmd migrare ` + 3 pași manuali | ore | Dacă eziți: **A**. E fluxul complet și cel mai bine acoperit de verificări. --- ## A. Migrarea în două faze ### De ce merge așa Pe `CONTAFIN_ORACLE` nu se lucrează activ — e schema comună, cu drepturi, nomenclatoare, `NOM_FIRME` și tabela de actualizări. Se schimbă rar. Schemele de **firmă** sunt cele în care se scrie tot timpul. Deci contafin-ul poate fi exportat de pe serverul vechi în timpul programului, iar tot ce depinde de el — obiecte SYS, sinonime, granturi, `SERVER_INFO`, directoare, joburi, IIS, licențe — se poate face ziua, cu utilizatorii pe serverul vechi. Seara rămâne doar importul firmelor. ### Faza 1 — în timpul programului ```bat REM 1. Exporta DOAR contafin_oracle de pe serverul vechi expdp system/parola@XE SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR ^ DUMPFILE=contafin_oracle.dmp LOGFILE=exp_contafin.log REM 2. Pune-l in DMPDIR\ din kit, peste sablon. Lasa FIRMANOUA.dmp pe loc. REM 3. Ruleaza faza 1 FAZA1.cmd 138 /vechi:10.0.0.5 /parolavechi:parola-SYS-veche /serviciuvechi:XE ``` Ce se întâmplă, în ordine: | Pas | Script | Ce face | |---|---|---| | 1 | — | copiază DMP-urile în `C:\DMPDIR` + drepturi pentru serviciul Oracle | | 2 | `01-setup-database.ps1` | tablespace `ROA`, profil, user `CONTAFIN_ORACLE`, `sqlnet.ora` + `tnsnames.ora` în `TNS_ADMIN`, `LOCAL_LISTENER` literal | | 3 | `02-create-sys-objects.ps1` | obiectele SYS: `AUTH_PACK`, `NEWSCHEMA`, `INFO`, `AUTH_SERII`… | | 4 | `03-import-contafin.ps1` | importă `CONTAFIN_ORACLE` **al clientului** | | 5 | `04-create-synonyms-grants.ps1` | sinonime publice, granturi, `sys-grants.sql` | | 6 | `09-copy-licenses.ps1` | **licențele** de pe serverul vechi | | 7 | `08-post-install-config.ps1` | `ROAUPDATE`, `SERVER_INFO`, joburi, SMTP, Id client | | 8 | `10` + `11` | publicarea în IIS, exportul zilnic | | 9 | `07-verify-installation.ps1` | verificare | La final, verificarea va spune **„N company schemas are missing"**. E normal — firmele vin abia în faza 2. **Opțiuni `FAZA1.cmd`:** | Opțiune | Efect | |---|---| | `/smtp:` | server SMTP (implicit `mail.romfast.ro`) | | `/vechi:` | serverul vechi, pentru licențe | | `/serviciuvechi:` | serviciul de pe serverul vechi (implicit `XE`) | | `/parolavechi:` | parola SYS de pe serverul vechi | | `/licente:` | licențe dintr-un fișier, în loc de rețea | | `/roaupdate:` | rădăcina oglinzii (implicit `D:\ROAUPDATE`) | | `/export:` | director export (implicit `D:\ROA\EXPORT_ORADMP`) | | `/faralicente` `/faraiis` `/farabackup` | sar peste pasul 09 / 10 / 11 | ### Între faze - Utilizatorii lucrează mai departe pe serverul **vechi**. - Nu porni joburile de actualizare pe serverul nou. - Poți testa aplicația pe serverul nou — merge, doar că fără date de firmă. - **Dacă se adaugă o firmă nouă sau se modifică nomenclatoare pe serverul vechi**, faza 2 trebuie rulată cu `/reimportcontafin`, altfel `NOM_FIRME` rămâne în urmă și firma nouă nu se importă. ### Faza 2 — după program ```bat REM 1. Exporta schemele de firma de pe serverul vechi expdp system/parola@XE SCHEMAS=FIRMA1,FIRMA2,FIRMA3 DIRECTORY=DMPDIR ^ DUMPFILE=%U_firme.dmp LOGFILE=exp_firme.log REM Lista schemelor: REM SELECT schema FROM CONTAFIN_ORACLE.NOM_FIRME WHERE sters = 0; REM 2. Pune DMP-urile in C:\DMPDIR (sau da /dmp:) REM 3. Ruleaza faza 2 FAZA2.cmd 138 ``` | Pas | Ce face | |---|---| | 1 | copiază DMP-urile firmelor în `C:\DMPDIR` | | 2 | *opțional* `/reimportcontafin`: `drop-contafin.ps1` → `01` → `03` → `04` | | 3 | `05-import-companies.ps1` — schemele de firmă | | 4 | `08-post-install-config.ps1` **din nou** | | 5 | `11-setup-backup-export.ps1 -SchemaOnly` — regenerează `schema.txt` | | 6 | `07-verify-installation.ps1` | **De ce se reia pasul 08:** `SERVER_INFO` este o **tabelă în `CONTAFIN_ORACLE`**, nu în `SYS`. Când vine contafin-ul clientului peste, aduce cu el `SERVER_INFO` de pe serverul vechi — căi vechi, parole vechi, SMTP vechi. Fără reluare, actualizările ar căuta fișiere pe calea serverului vechi. Din același motiv se pierd joburile `UPDATEROA_ZILNIC` / `UPDATERTVAI_ZILNIC` la `/reimportcontafin` — sunt owned de `CONTAFIN_ORACLE`. Pasul 08 le recreează, **dezactivate**. Dacă trebuie să meargă, activează-le manual la final. Licențele **nu** se pierd: `SYS.AUTH_SERII` și `SYS.AUTH_DETALII` trăiesc în `SYS`. --- ## B. Client nou ```bat FAZA1.cmd 138 /faralicente ``` DMPDIR conține doar șabloanele: `contafin_oracle.dmp` (cu `NOM_FIRME` goală) și `FIRMANOUA.dmp`. Nu există fază 2. **Prima firmă se creează DIN APLICAȚIA ROA, nu din scripturi.** Aplicația scrie firma în `CONTAFIN_ORACLE.NOM_FIRME` și apelează `SYS.NEWSCHEMA`, care îi importă structura din `C:\DMPDIR\FIRMANOUA.dmp`. Echivalentul mai vechi, fără IIS și fără export zilnic: `INSTALEAZA.cmd curat 138` --- ## C. Migrare într-o singură rulare ```bat INSTALEAZA.cmd migrare 138 mail.romfast.ro ``` Toate DMP-urile (contafin-ul clientului + firmele + `FIRMANOUA.dmp`) trebuie să fie în `DMPDIR\` înainte. `INSTALEAZA.cmd` **nu** copiază licențele, **nu** publică în IIS și **nu** configurează exportul zilnic. După el, manual: ```powershell Run.cmd 09-copy-licenses.ps1 -OldHost 10.0.0.5 -OldSysPassword parola -Replace Run.cmd 10-setup-roaupdate-iis.ps1 Run.cmd 11-setup-backup-export.ps1 ``` --- ## Scripturile | Script | Ce face | Când | |---|---|---| | `01-setup-database.ps1` | tablespace `ROA`, profil, user `CONTAFIN_ORACLE`, configurarea de rețea pentru clienți vechi | mereu | | `02-create-sys-objects.ps1` | `AUTH_PACK`, `NEWSCHEMA`, `EXECUTESCRIPTOS`, `INFO`, `UTL_MAIL` | mereu | | `03-import-contafin.ps1` | import `CONTAFIN_ORACLE` din DMP | mereu | | `04-create-synonyms-grants.ps1` | sinonime publice, granturi, `sys-grants.sql` | mereu | | `05-import-companies.ps1` | schemele de firmă, citind parolele din `NOM_FIRME` | migrare | | `06-add-company.ps1` | adaugă o firmă pe un server deja instalat | ocazional | | `07-verify-installation.ps1` | verificare completă, inclusiv **probă de conectare cu Instant Client-ul vechi**; cod 0 = instalare bună | mereu | | `08-post-install-config.ps1` | `ROAUPDATE`, `SERVER_INFO`, joburi, SMTP, Id client | mereu | | `09-copy-licenses.ps1` | `AUTH_SERII` + `AUTH_DETALII` de pe serverul vechi | migrare | | `10-setup-roaupdate-iis.ps1` | directoare de modul + publicare `/roaupdate` în IIS | mereu | | `11-setup-backup-export.ps1` | `EXPORT_ORADMP`, `backupora.exe`, task zilnic | mereu | | `drop-contafin.ps1` | șterge `CONTAFIN_ORACLE` (doar pentru `/reimportcontafin`) | faza 2 | | `99-uninstall-roa.ps1` | curăță tot, pentru re-testare | testare | `Run.cmd