feat(oracle): instalare ROA in doua faze, licente, IIS si export zilnic

Adauga FAZA1.cmd/FAZA2.cmd, care despart migrarea in partea care se poate
face in timpul programului (contafin, obiecte SYS, sinonime, licente, IIS)
si partea de seara (schemele de firma). Scripturi noi: 09 pentru licentele
din SYS.AUTH_SERII/AUTH_DETALII, 10 pentru publicarea D:\ROAUPDATE in IIS,
11 pentru exportul zilnic cu backupora.exe, drop-contafin pentru reimport.

backupora.exe si sabloanele sale intra in repo ca sa fie kitul autonom.
Pasul 07 primeste verificarile corespunzatoare pentru licente, IIS si task.

Nerulat inca pe o baza reala - vezi docs/handoff_instalare-doua-faze.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzF1hf4aFS1tmJWpPMiwGp
This commit is contained in:
Marius
2026-08-25 20:57:23 +03:00
parent 7fce925349
commit 5a746990ce
18 changed files with 3446 additions and 854 deletions

View File

@@ -59,7 +59,15 @@ param(
[switch]$Detailed,
[Parameter(Mandatory = $false)]
[string]$OutputFile
[string]$OutputFile,
# Folosite doar ca valoare de rezerva: caile reale se citesc din
# SERVER_INFO.ROAUPDATEPATH si din obiectul DIRECTORY BACKUP_ORACLE.
[Parameter(Mandatory = $false)]
[string]$RoaUpdatePath = "D:\ROAUPDATE",
[Parameter(Mandatory = $false)]
[string]$ExportPath = "D:\ROA\EXPORT_ORADMP"
)
$ErrorActionPreference = 'Stop'
@@ -569,6 +577,264 @@ EXIT;
Add-ReportLine $ctxResult
}
# ------------------------------------------------------------------------
# Licente
# ------------------------------------------------------------------------
# AUTH_DETALII tine Id-ul de client, AUTH_SERII seriile propriu-zise pe
# care AUTH_PACK le decripteaza. Pasul 08 scrie doar Id-ul; seriile vin
# de pe serverul vechi prin 09-copy-licenses.ps1. O baza cu Id de client
# dar fara serii e cazul tipic de migrare facuta pe jumatate: aplicatia
# porneste si apoi refuza fiecare modul.
Add-ReportSection "Licente"
$licSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 300
SELECT 'SERII:' || COUNT(*) FROM sys.auth_serii;
SELECT 'SERII_ACTIVE:' || COUNT(*) FROM sys.auth_serii WHERE sters = 0;
SELECT 'IDCLIENT:' || NVL(MAX(detalii), '<nesetat>') FROM sys.auth_detalii;
SELECT 'EXPIRA:' || nume || '|' || TO_CHAR(data_val, 'YYYY-MM-DD')
FROM sys.vauth_serii
WHERE data_val IS NOT NULL AND data_val < SYSDATE + 60
ORDER BY data_val;
EXIT;
"@
$licResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $licSql -AsSysdba -Silent
$nrSerii = 0
$nrSeriiActive = 0
$idClient = '<nesetat>'
$expiraCurand = @()
foreach ($line in $licResult -split "`n") {
$line = $line.Trim()
if ($line -match "^SERII:(\d+)$") { $nrSerii = [int]$Matches[1] }
if ($line -match "^SERII_ACTIVE:(\d+)$") { $nrSeriiActive = [int]$Matches[1] }
if ($line -match "^IDCLIENT:(.+)$") { $idClient = $Matches[1].Trim() }
if ($line -match "^EXPIRA:(.+)\|(.+)$") { $expiraCurand += "$($Matches[1].Trim()) expira la $($Matches[2].Trim())" }
}
Add-ReportLine "Id client (AUTH_DETALII): $idClient"
Add-ReportLine "Serii de licenta: $nrSerii ($nrSeriiActive active)"
if ($nrSeriiActive -eq 0) {
Add-ReportLine ""
Add-ReportLine "[WARNING] Nicio serie activa in SYS.AUTH_SERII."
Add-ReportLine " La un client NOU e normal - licentele se adauga ulterior."
Add-ReportLine " La o MIGRARE inseamna ca pasul 09 nu a rulat sau a esuat:"
Add-ReportLine " Run.cmd 09-copy-licenses.ps1 -OldHost <gazda> -OldSysPassword <parola> -Replace"
$extraIssues += "No active license series in SYS.AUTH_SERII"
}
if ($expiraCurand.Count -gt 0) {
Add-ReportLine ""
Add-ReportLine "[NOTA] Licente care expira in urmatoarele 60 de zile:"
foreach ($e in $expiraCurand) { Add-ReportLine " - $e" }
}
# ------------------------------------------------------------------------
# Oglinda de update + IIS
# ------------------------------------------------------------------------
# Doua etaje: serverul trage modulele de la ROMFAST in ROAUPDATE (jobul
# UPDATEROA_ZILNIC), statiile le iau de la serverul clientului prin IIS.
# Daca al doilea etaj lipseste, primul merge si nu se vede nimic - statiile
# raman pe versiunile vechi la nesfarsit.
Add-ReportSection "Actualizarea aplicatiilor"
$caleRoaUpdate = $RoaUpdatePath
$siSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 300
SELECT 'ROAUPDATEPATH:' || value FROM contafin_oracle.server_info WHERE name = 'ROAUPDATEPATH';
SELECT 'UPD_URL_APP:' || value FROM contafin_oracle.server_info WHERE name = 'UPD_URL_APP';
EXIT;
"@
$siResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $siSql -Silent
$urlApp = $null
foreach ($line in $siResult -split "`n") {
$line = $line.Trim()
if ($line -match "^ROAUPDATEPATH:(.+)$") { $caleRoaUpdate = $Matches[1].Trim() }
if ($line -match "^UPD_URL_APP:(.+)$") { $urlApp = $Matches[1].Trim() }
}
Add-ReportLine "SERVER_INFO.ROAUPDATEPATH: $caleRoaUpdate"
Add-ReportLine "SERVER_INFO.UPD_URL_APP: $(if ($urlApp) { $urlApp } else { '<nesetat>' })"
if (-not $urlApp) {
$extraIssues += "SERVER_INFO.UPD_URL_APP not set (server cannot pull updates)"
}
if (-not (Test-Path $caleRoaUpdate)) {
Add-ReportLine "Directorul fizic: LIPSA"
Add-ReportLine "[WARNING] $caleRoaUpdate nu exista. Ruleaza 10-setup-roaupdate-iis.ps1."
$extraIssues += "ROAUPDATE directory missing: $caleRoaUpdate"
}
else {
$caleArhiva = Join-Path $caleRoaUpdate "_ARHIVE"
$dirModule = @(Get-ChildItem -Path $caleRoaUpdate -Directory -ErrorAction SilentlyContinue |
Where-Object { $_.Name -notlike "_*" })
$dirArhiva = @(Get-ChildItem -Path $caleArhiva -Directory -ErrorAction SilentlyContinue)
Add-ReportLine "Directorul fizic: OK"
Add-ReportLine "Directoare de modul: $($dirModule.Count)"
Add-ReportLine "Directoare _ARHIVE: $($dirArhiva.Count)"
if ($dirModule.Count -eq 0) {
Add-ReportLine "[WARNING] Nu exista directoare de modul in $caleRoaUpdate."
Add-ReportLine " Ruleaza 10-setup-roaupdate-iis.ps1."
$extraIssues += "No module directories under $caleRoaUpdate"
}
# Cate module au macar un ZIP si cat de proaspata e oglinda. Asta e
# masura practica a "aplicatiile sunt actualizate": daca nu s-a
# descarcat nimic, sau ce e acolo e vechi de luni, actualizarea nu
# merge indiferent ce spune jobul.
$moduleCuZip = 0
$celMaiNou = $null
foreach ($d in $dirArhiva) {
$zips = @(Get-ChildItem -Path $d.FullName -Filter "*.zip" -File -ErrorAction SilentlyContinue)
if ($zips.Count -gt 0) {
$moduleCuZip++
$max = ($zips | Sort-Object LastWriteTime -Descending | Select-Object -First 1).LastWriteTime
if (-not $celMaiNou -or $max -gt $celMaiNou) { $celMaiNou = $max }
}
}
Add-ReportLine "Module cu ZIP-uri in arhiva: $moduleCuZip"
if ($celMaiNou) {
$zile = [math]::Round(((Get-Date) - $celMaiNou).TotalDays)
Add-ReportLine "Cel mai recent ZIP: $($celMaiNou.ToString('yyyy-MM-dd')) (acum $zile zile)"
if ($zile -gt 30) {
Add-ReportLine "[NOTA] Oglinda nu s-a mai improspatat de peste 30 de zile."
Add-ReportLine " Verifica jobul UPDATEROA_ZILNIC si accesul la $urlApp."
}
}
else {
Add-ReportLine "Cel mai recent ZIP: niciunul"
Add-ReportLine "[NOTA] Oglinda e goala. La o instalare noua e normal - se umple"
Add-ReportLine " la prima rulare a jobului UPDATEROA_ZILNIC."
}
}
# Publicarea in IIS
$urlLocal = "http://localhost/roaupdate/"
try {
$respIis = Invoke-WebRequest -Uri $urlLocal -UseBasicParsing -TimeoutSec 10
Add-ReportLine "IIS $($urlLocal): OK ($($respIis.StatusCode))"
}
catch {
Add-ReportLine "IIS $($urlLocal): NU RASPUNDE"
Add-ReportLine "[WARNING] Statiile de lucru nu pot lua actualizari de la serverul asta."
Add-ReportLine " Ruleaza 10-setup-roaupdate-iis.ps1."
$extraIssues += "IIS mirror at $urlLocal not responding"
}
# Joburile de actualizare
$jobSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 300
SELECT 'JOB:' || job_name || '|' || enabled || '|' || state ||
'|' || NVL(TO_CHAR(last_start_date, 'YYYY-MM-DD HH24:MI'), 'niciodata')
FROM dba_scheduler_jobs
WHERE owner = 'CONTAFIN_ORACLE'
AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC')
ORDER BY job_name;
EXIT;
"@
$jobResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $jobSql -AsSysdba -Silent
Add-ReportLine ""
$joburiGasite = 0
foreach ($line in $jobResult -split "`n") {
if ($line.Trim() -match "^JOB:([^|]+)\|([^|]+)\|([^|]+)\|(.+)$") {
$joburiGasite++
Add-ReportLine ("{0,-20} activat={1,-6} stare={2,-10} ultima rulare: {3}" -f `
$Matches[1].Trim(), $Matches[2].Trim(), $Matches[3].Trim(), $Matches[4].Trim())
}
}
if ($joburiGasite -eq 0) {
Add-ReportLine "Joburile de actualizare: LIPSA"
Add-ReportLine "[WARNING] Ruleaza 08-post-install-config.ps1."
$extraIssues += "Update scheduler jobs missing"
}
# ------------------------------------------------------------------------
# Exportul zilnic
# ------------------------------------------------------------------------
Add-ReportSection "Export zilnic (EXPORT_ORADMP)"
$expSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 300
SELECT 'BACKUPDIR:' || directory_path FROM dba_directories WHERE directory_name = 'BACKUP_ORACLE';
EXIT;
"@
$expResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $expSql -AsSysdba -Silent
$caleExport = $ExportPath
if ($expResult -match "BACKUPDIR:(.+)") { $caleExport = $Matches[1].Trim() }
Add-ReportLine "DIRECTORY BACKUP_ORACLE: $(if ($expResult -match 'BACKUPDIR:') { $caleExport } else { 'LIPSA' })"
if ($expResult -notmatch "BACKUPDIR:") {
$extraIssues += "Oracle directory BACKUP_ORACLE missing"
}
if (-not (Test-Path $caleExport)) {
Add-ReportLine "Directorul fizic: LIPSA ($caleExport)"
Add-ReportLine "[WARNING] Ruleaza 11-setup-backup-export.ps1."
$extraIssues += "Export directory missing: $caleExport"
}
else {
Add-ReportLine "Directorul fizic: OK"
foreach ($f in @('backupora.exe', 'setari.ini', 'schema.txt')) {
$cale = Join-Path $caleExport $f
if (Test-Path $cale) {
if ($f -eq 'schema.txt') {
$nrScheme = @(Get-Content $cale | Where-Object { $_.Trim() -ne '' }).Count
Add-ReportLine ("{0,-28} OK ({1} scheme)" -f "${f}:", $nrScheme)
} else {
Add-ReportLine ("{0,-28} OK" -f "${f}:")
}
}
else {
Add-ReportLine ("{0,-28} LIPSA" -f "${f}:")
$extraIssues += "$f missing from $caleExport"
}
}
$dumpuri = @(Get-ChildItem -Path $caleExport -Filter "*.dmp" -File -ErrorAction SilentlyContinue)
if ($dumpuri.Count -gt 0) {
$celMaiNouDmp = ($dumpuri | Sort-Object LastWriteTime -Descending | Select-Object -First 1)
$zileDmp = [math]::Round(((Get-Date) - $celMaiNouDmp.LastWriteTime).TotalDays)
Add-ReportLine "Dump-uri prezente: $($dumpuri.Count), cel mai recent acum $zileDmp zile"
if ($zileDmp -gt 2) {
Add-ReportLine "[NOTA] Ultimul export e vechi de $zileDmp zile. Verifica task-ul."
}
}
else {
Add-ReportLine "Dump-uri prezente: niciunul (exportul nu a rulat inca)"
}
}
# Task-ul din Windows
$task = $null
try { $task = Get-ScheduledTask -TaskName "ROA Export Oracle" -ErrorAction Stop } catch { }
if ($task) {
$info = Get-ScheduledTaskInfo -TaskName "ROA Export Oracle"
$ultima = if ($info.LastRunTime -and $info.LastRunTime.Year -gt 1999) {
$info.LastRunTime.ToString('yyyy-MM-dd HH:mm')
} else { 'niciodata' }
Add-ReportLine "Task 'ROA Export Oracle': $($task.State), ultima rulare: $ultima (cod $($info.LastTaskResult))"
}
else {
Add-ReportLine "Task 'ROA Export Oracle': LIPSA"
Add-ReportLine "[WARNING] Nu exista task zilnic de export. Ruleaza 11-setup-backup-export.ps1."
$extraIssues += "Scheduled task 'ROA Export Oracle' missing"
}
# Final Summary
Add-ReportSection "Verification Summary"