Files
ROMFASTSQL/proxmox/lxc108-oracle/roa-windows-setup/scripts/drop-contafin.ps1
Marius 5a746990ce 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
2026-08-25 20:57:23 +03:00

204 lines
6.8 KiB
PowerShell

#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
}