#Requires -Version 5.1 <# .SYNOPSIS Sterge schema CONTAFIN_ORACLE, pentru reimportul din faza 2. .DESCRIPTION DROP USER CONTAFIN_ORACLE CASCADE. Se foloseste doar in FAZA2.cmd cu /reimportcontafin, inainte de a recrea userul (01) si a importa contafin-ul real al clientului (03). Nu e un pas numerotat pentru ca nu face parte din instalare - e o operatie distructiva, apelata explicit. Ce se pierde odata cu schema, si trebuie refacut dupa: - tabela SERVER_INFO -> se reface la reluarea pasului 08; - joburile UPDATEROA_ZILNIC / UPDATERTVAI_ZILNIC -> tot pasul 08; - sinonimele publice catre obiectele ei -> pasul 04. FAZA2.cmd le ruleaza pe toate in ordinea corecta. Ce NU se pierde: licentele (SYS.AUTH_SERII, SYS.AUTH_DETALII) si restul obiectelor SYS traiesc in alta schema. Inainte de drop, raporteaza sesiunile deschise ale userului. Daca exista, dropul esueaza cu ORA-01940 si scriptul spune exact ce sa faci. .PARAMETER OracleHome Oracle home. Autodetectat daca lipseste. .PARAMETER ServiceName Serviciul bazei. Implicit XEPDB1. .PARAMETER SystemPassword Parola SYS. Implicit romfastsoft. .PARAMETER KillSessions Inchide fortat sesiunile CONTAFIN_ORACLE inainte de drop. .PARAMETER Force Nu cere confirmare. Obligatoriu cand rulezi neinteractiv (FAZA2.cmd il da). .EXAMPLE .\drop-contafin.ps1 -Force .EXAMPLE .\drop-contafin.ps1 -Force -KillSessions Cand mai sunt utilizatori conectati si nu ai timp sa ii cauti. .NOTES File Name : drop-contafin.ps1 Copyright 2026 : ROMFAST #> [CmdletBinding()] param( [Parameter(Mandatory = $false)] [string]$OracleHome, [Parameter(Mandatory = $false)] [string]$ServiceName = "XEPDB1", [Parameter(Mandatory = $false)] [string]$SystemPassword = "romfastsoft", [Parameter(Mandatory = $false)] [switch]$KillSessions, [Parameter(Mandatory = $false)] [switch]$Force ) $ErrorActionPreference = "Stop" . (Join-Path $PSScriptRoot "lib\logging-functions.ps1") . (Join-Path $PSScriptRoot "lib\oracle-functions.ps1") $configFile = Join-Path $PSScriptRoot "..\config.ps1" if (Test-Path $configFile) { . $configFile if (-not $PSBoundParameters.ContainsKey('OracleHome') -and $Config.OracleHome) { $OracleHome = $Config.OracleHome } if (-not $PSBoundParameters.ContainsKey('ServiceName') -and $Config.ServiceName) { $ServiceName = $Config.ServiceName } if (-not $PSBoundParameters.ContainsKey('SystemPassword') -and $Config.SystemPassword) { $SystemPassword = $Config.SystemPassword } } $stamp = Get-Date -Format 'yyyyMMdd_HHmmss' $logDir = Join-Path $PSScriptRoot "..\logs" if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } Initialize-LogFile -LogPath (Join-Path $logDir "drop-contafin_$stamp.log") -ScriptName "drop-contafin.ps1" try { Write-LogSection "Stergere CONTAFIN_ORACLE" $oraHome = Get-OracleHome -OracleHome $OracleHome Write-LogSuccess "Oracle Home: $oraHome" if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword)) { throw "Nu ma pot conecta la baza ($ServiceName)." } if (-not (Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword -SchemaName "CONTAFIN_ORACLE")) { Write-LogSuccess "CONTAFIN_ORACLE nu exista. Nimic de sters." Close-LogFile exit 0 } # Cate obiecte pierdem - util in log, daca ceva merge prost. $stare = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` -Username "sys" -Password $SystemPassword -AsSysdba -Silent -SqlCommand @" SET PAGESIZE 0 FEEDBACK OFF HEADING OFF VERIFY OFF SELECT 'OBIECTE=' || COUNT(*) FROM dba_objects WHERE owner = 'CONTAFIN_ORACLE'; SELECT 'SESIUNI=' || COUNT(*) FROM v`$session WHERE username = 'CONTAFIN_ORACLE'; EXIT "@ $obiecte = 0 $sesiuni = 0 if ($stare -match 'OBIECTE=(\d+)') { $obiecte = [int]$Matches[1] } if ($stare -match 'SESIUNI=(\d+)') { $sesiuni = [int]$Matches[1] } Write-Log "Obiecte in schema: $obiecte" Write-Log "Sesiuni deschise: $sesiuni" if ($sesiuni -gt 0) { if ($KillSessions) { Write-LogWarning "Inchid fortat cele $sesiuni sesiuni..." $kill = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` -Username "sys" -Password $SystemPassword -AsSysdba -SqlCommand @" SET SERVEROUTPUT ON FEEDBACK OFF VERIFY OFF BEGIN FOR s IN (SELECT sid, serial# FROM v`$session WHERE username = 'CONTAFIN_ORACLE') LOOP BEGIN EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''' IMMEDIATE'; DBMS_OUTPUT.PUT_LINE(' Sesiune inchisa: ' || s.sid); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(' Nu am putut inchide ' || s.sid || ': ' || SQLERRM); END; END LOOP; END; / EXIT "@ Write-LogDebug $kill } else { Write-LogWarning "CONTAFIN_ORACLE are $sesiuni sesiuni deschise. Dropul va esua cu ORA-01940." Write-LogWarning "Ori opresti aplicatiile, ori reiei cu -KillSessions." } } if (-not $Force) { Write-Host "" Write-Host " Se sterge schema CONTAFIN_ORACLE cu tot cu cele $obiecte obiecte." -ForegroundColor Yellow $raspuns = Read-Host " Scrie DA ca sa continui" if ($raspuns -ne "DA") { Write-Log "Anulat de utilizator." Close-LogFile exit 2 } } Write-Log "DROP USER CONTAFIN_ORACLE CASCADE ..." $rez = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` -Username "sys" -Password $SystemPassword -AsSysdba -SqlCommand @" SET FEEDBACK ON VERIFY OFF DROP USER CONTAFIN_ORACLE CASCADE; EXIT "@ if ($rez -match 'ORA-01918') { Write-LogSuccess "Userul nu exista (ORA-01918). Nimic de facut." Close-LogFile exit 0 } if ($rez -match 'ORA-01940') { Write-LogError "ORA-01940: userul are sesiuni conectate. Reia cu -KillSessions." throw "Drop esuat: sesiuni active." } if ($rez -match 'ORA-(\d{5})') { Write-LogError "Drop esuat cu ORA-$($Matches[1])." Write-LogDebug $rez throw "Drop esuat." } if (Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword -SchemaName "CONTAFIN_ORACLE") { throw "Comanda a trecut, dar userul CONTAFIN_ORACLE inca exista." } Write-LogSuccess "CONTAFIN_ORACLE sters ($obiecte obiecte)" Write-Log "" Write-Log "Urmeaza, in ordine: 01 (recreare user) -> 03 (import) -> 04 (sinonime) -> 08 (SERVER_INFO, joburi)." Close-LogFile exit 0 } catch { Write-LogError $_.Exception.Message Write-LogDebug $_.ScriptStackTrace Close-LogFile exit 1 }