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:
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user