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:
@@ -0,0 +1,203 @@
|
||||
#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
|
||||
}
|
||||
Reference in New Issue
Block a user