Files
ROMFASTSQL/proxmox/lxc108-oracle/roa-windows-setup/FAZA1.cmd
Marius ec66377e0f fix(oracle): calea DMPDIR devine parametru; sqlnet.ora ajunge unde e citit
Gasite la instalarea de productie VADECO (Oracle 21c XE, Windows Server 2019).

1. Pe serverul VADECO procesul Oracle nu poate atinge nicio cale de pe C:,
   nici macar C:\Windows\Temp, desi ACL-urile sunt corecte si serviciul ruleaza
   ca NT SERVICE\OracleServiceXE. D: merge cu exact acelasi grant. Calea DMP
   era insa hardcodata "C:\DMPDIR" in 01, 02, 05, 06 si in biblioteca, deci
   instalarea nu se putea muta. Acum e parametrul -DmpDir, expus ca /dmpdest:
   in FAZA1.cmd si FAZA2.cmd si transmis tuturor pasilor.

   Cel mai perfid era pasul 02: recrea DIRECTORY DMPDIR pe 'C:\DMPDIR' peste
   valoarea pusa de 01. Chiar cu restul instalarii mutata, SYS.NEWSCHEMA ar fi
   cautat FIRMANOUA.dmp in alta parte, iar adaugarea unei firme noi ar fi picat
   peste luni, fara legatura vizibila cu instalarea.

2. New-OracleDirectory compara doar siruri de caractere: verifica ce scrie in
   dba_directories, nu daca baza chiar poate scrie acolo. Acum face un
   UTL_FILE round-trip si esueaza pe loc, cu explicatia cauzei. Inainte,
   directorul inutilizabil trecea drept bun si importul cadea abia in impdp cu
   ORA-29283, la zeci de linii distanta. Valoarea de retur nici nu era
   verificata in 01/03/06 - de aici si "True" ratacit in log.

3. Instalarea ROAClient seteaza TNS_ADMIN de masina spre instantclient-ul ei.
   Serviciul Oracle mosteneste variabilele de masina, deci citea sqlnet.ora de
   acolo - unde nu exista niciunul - si nu din Oracle Home, unde il scria pasul
   01. Compatibilitatea pentru clienti vechi nu se aplica, iar statiile ar fi
   primit ORA-28040 cu fisierul scris corect, in locul gresit. Pasul 01 scrie
   acum sqlnet.ora si in TNS_ADMIN cand difera.

4. Pasul 05 lega schemele de DMP-uri cu "^$schema[_\.]", deci schema DANUBE
   putea primi DANUBE_20200914.dmp - datele altei firme, fara avertisment.
   Numele exact are acum intaietate, prefixul se accepta doar daca e unic, iar
   ambiguitatea se raporteaza.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzF1hf4aFS1tmJWpPMiwGp
2026-08-25 21:18:43 +03:00

335 lines
13 KiB
Batchfile

@echo off
REM =============================================================================
REM ROA Oracle - FAZA 1: tot ce se poate face IN TIMPUL PROGRAMULUI
REM =============================================================================
REM Instaleaza si configureaza sistemul ROA complet, fara schemele de firma.
REM Utilizatorii lucreaza mai departe pe serverul vechi cat ruleaza asta.
REM
REM Ce intra in faza 1:
REM - baza, tablespace, user CONTAFIN_ORACLE, profil (01)
REM - obiectele SYS: AUTH_PACK, NEWSCHEMA, INFO... (02)
REM - CONTAFIN_ORACLE: al clientului daca e in DMPDIR, (03)
REM altfel sablonul din kit
REM - sinonime publice, granturi, sys-grants (04)
REM - licentele de pe serverul vechi (09, optional)
REM - directoare ROAUPDATE, SERVER_INFO, joburi, SMTP (08)
REM - oglinda de update publicata in IIS (10)
REM - exportul zilnic in D:\ROA\EXPORT_ORADMP (11)
REM - verificare (07)
REM
REM Ce NU intra: schemele de firma. Alea vin in FAZA2.cmd, dupa program.
REM
REM De ce merge asa: pe CONTAFIN_ORACLE nu se lucreaza activ, deci el poate
REM fi exportat de pe serverul vechi inca din timpul programului. Doar
REM firmele se schimba sub picioare.
REM
REM Utilizare:
REM FAZA1.cmd <IdClient> [optiuni]
REM
REM Optiuni:
REM /smtp:<server> server SMTP (implicit mail.romfast.ro)
REM /vechi:<gazda> serverul vechi, pentru licente
REM /serviciuvechi:<nume> serviciul de pe serverul vechi (implicit XE)
REM /parolavechi:<parola> parola SYS de pe serverul vechi
REM /licente:<fisier.sql> licente dintr-un fisier, in loc de retea
REM /roaupdate:<cale> radacina oglinzii (implicit D:\ROAUPDATE)
REM /export:<cale> director export (implicit D:\ROA\EXPORT_ORADMP)
REM /dmpdest:<cale> de unde citeste baza DMP-urile (implicit C:\DMPDIR)
REM Pe unele masini procesul Oracle nu ajunge la C:\ deloc
REM (ORA-29283 la orice cale de pe C:, inclusiv C:\Windows\Temp,
REM desi ACL-urile sunt corecte). Atunci pune-l pe discul unde
REM e Oracle Home: /dmpdest:D:\DMPDIR
REM /faralicente sari peste pasul 09
REM /faraiis sari peste pasul 10
REM /farabackup sari peste pasul 11
REM
REM Exemple:
REM FAZA1.cmd 138
REM FAZA1.cmd 138 /vechi:10.0.0.5 /parolavechi:oracle /serviciuvechi:XE
REM FAZA1.cmd 214 /licente:C:\kit\licente.sql /faraiis
REM =============================================================================
setlocal enabledelayedexpansion
set "KIT=%~dp0"
set "IDCLIENT=%~1"
set "DMPDEST=C:\DMPDIR"
REM Valori implicite
set "SMTP=mail.romfast.ro"
set "VECHI="
set "SERVICIUVECHI=XE"
set "PAROLAVECHI="
set "LICENTEFIS="
set "ROAUPDATE=D:\ROAUPDATE"
set "EXPORTDIR=D:\ROA\EXPORT_ORADMP"
set "FARALICENTE=0"
set "FARAIIS=0"
set "FARABACKUP=0"
if "%IDCLIENT%"=="" goto :utilizare
if /i "%IDCLIENT%"=="/?" goto :utilizare
REM ---------------------------------------------------------------------------
REM Parsarea optiunilor
REM ---------------------------------------------------------------------------
shift
:parsare
if "%~1"=="" goto :parsare_gata
set "ARG=%~1"
if /i "!ARG!"=="/faralicente" ( set "FARALICENTE=1" & shift & goto :parsare )
if /i "!ARG!"=="/faraiis" ( set "FARAIIS=1" & shift & goto :parsare )
if /i "!ARG!"=="/farabackup" ( set "FARABACKUP=1" & shift & goto :parsare )
for /f "tokens=1,* delims=:" %%A in ("!ARG!") do (
set "OPT=%%A"
set "VAL=%%B"
)
if /i "!OPT!"=="/smtp" set "SMTP=!VAL!"
if /i "!OPT!"=="/vechi" set "VECHI=!VAL!"
if /i "!OPT!"=="/serviciuvechi" set "SERVICIUVECHI=!VAL!"
if /i "!OPT!"=="/parolavechi" set "PAROLAVECHI=!VAL!"
if /i "!OPT!"=="/licente" set "LICENTEFIS=!VAL!"
if /i "!OPT!"=="/roaupdate" set "ROAUPDATE=!VAL!"
if /i "!OPT!"=="/export" set "EXPORTDIR=!VAL!"
if /i "!OPT!"=="/dmpdest" set "DMPDEST=!VAL!"
shift
goto :parsare
:parsare_gata
echo.
echo ============================================================
echo ROA Oracle - FAZA 1 (in timpul programului)
echo ============================================================
echo.
echo Kit: %KIT%
echo Id client: %IDCLIENT%
echo SMTP: %SMTP%
echo DMP: %DMPDEST%
echo ROAUPDATE: %ROAUPDATE%
echo Export: %EXPORTDIR%
if not "%VECHI%"=="" echo Server vechi: %VECHI% / %SERVICIUVECHI%
if not "%LICENTEFIS%"=="" echo Licente din: %LICENTEFIS%
echo.
REM ---------------------------------------------------------------------------
REM [1/9] DMPDIR
REM ---------------------------------------------------------------------------
if not exist "%KIT%DMPDIR\FIRMANOUA.dmp" (
echo [EROARE] Lipseste "%KIT%DMPDIR\FIRMANOUA.dmp".
echo Fara sablonul de firma noua, clientul nu va putea adauga firme.
exit /b 1
)
dir /b "%KIT%DMPDIR\*contafin*.dmp" >nul 2>&1
if errorlevel 1 (
echo [EROARE] Lipseste un fisier *contafin*.dmp din "%KIT%DMPDIR".
exit /b 1
)
if not exist "%DMPDEST%" mkdir "%DMPDEST%"
echo [1/9] Copiez DMP-urile in %DMPDEST% ...
copy /Y "%KIT%DMPDIR\*.dmp" "%DMPDEST%\" >nul
if errorlevel 1 (
echo [EROARE] Copierea DMP-urilor a esuat.
exit /b 1
)
REM Serviciul Oracle citeste fisierele cu contul lui, nu cu al tau.
icacls "%DMPDEST%" /grant "NT SERVICE\OracleServiceXE:(OI)(CI)F" /T >nul 2>&1
echo Gata.
REM ---------------------------------------------------------------------------
REM [2/9] 01 - baza si userul
REM ---------------------------------------------------------------------------
echo.
echo [2/9] 01-setup-database.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\01-setup-database.ps1" -DmpDir "%DMPDEST%"
if errorlevel 1 goto :esec_01
REM ---------------------------------------------------------------------------
REM [3/9] 02 - obiectele SYS
REM ---------------------------------------------------------------------------
echo.
echo [3/9] 02-create-sys-objects.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\02-create-sys-objects.ps1" -DmpDir "%DMPDEST%"
if errorlevel 1 goto :esec_02
REM ---------------------------------------------------------------------------
REM [4/9] 03 - CONTAFIN_ORACLE
REM ---------------------------------------------------------------------------
echo.
echo [4/9] 03-import-contafin.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\03-import-contafin.ps1" -DmpDir "%DMPDEST%"
set RC=!ERRORLEVEL!
REM Codul 5 e normal: Data Pump raporteaza "completed with errors" pentru
REM ORA-31684 (userul e creat deja de pasul 01) si ORA-39082 (warning-uri de
REM compilare, rezolvate la pasul 04). Orice alt cod nenul e esec real.
if "!RC!"=="0" goto :pas_04
if "!RC!"=="5" (
echo [INFO] Cod de iesire 5 - normal pentru Data Pump, se continua.
goto :pas_04
)
echo [EROARE] 03-import-contafin.ps1 a iesit cu codul !RC!.
exit /b !RC!
:pas_04
REM ---------------------------------------------------------------------------
REM [5/9] 04 - sinonime si granturi
REM ---------------------------------------------------------------------------
echo.
echo [5/9] 04-create-synonyms-grants.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\04-create-synonyms-grants.ps1"
if errorlevel 1 goto :esec_04
REM ---------------------------------------------------------------------------
REM [6/9] 09 - licentele de pe serverul vechi
REM ---------------------------------------------------------------------------
echo.
if "%FARALICENTE%"=="1" (
echo [6/9] 09-copy-licenses.ps1 - sarit ^(/faralicente^)
goto :pas_08
)
if not "%LICENTEFIS%"=="" (
echo [6/9] 09-copy-licenses.ps1 ^(din fisier^)
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\09-copy-licenses.ps1" -FromFile "%LICENTEFIS%" -Replace
if errorlevel 1 goto :avert_09
goto :pas_08
)
if not "%VECHI%"=="" (
if "%PAROLAVECHI%"=="" (
echo [6/9] 09-copy-licenses.ps1 - sarit: ai dat /vechi dar nu si /parolavechi.
goto :pas_08
)
echo [6/9] 09-copy-licenses.ps1 ^(prin retea de la %VECHI%^)
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\09-copy-licenses.ps1" -OldHost "%VECHI%" -OldService "%SERVICIUVECHI%" -OldSysPassword "%PAROLAVECHI%" -Replace
if errorlevel 1 goto :avert_09
goto :pas_08
)
echo [6/9] 09-copy-licenses.ps1 - sarit: nu ai dat nici /vechi, nici /licente.
echo ATENTIE: la o migrare, fara pasul asta clientul ramane fara licente.
goto :pas_08
:avert_09
echo.
echo [ATENTIE] Copierea licentelor a esuat. Instalarea CONTINUA - restul
echo pasilor nu depind de ea - dar clientul nu va avea licente
echo pana nu reiei:
echo Run.cmd 09-copy-licenses.ps1 -FromFile ^<fisier^> -Replace
echo.
:pas_08
REM ---------------------------------------------------------------------------
REM [7/9] 08 - configurare post-instalare
REM ---------------------------------------------------------------------------
echo.
echo [7/9] 08-post-install-config.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\08-post-install-config.ps1" -CustomerId "%IDCLIENT%" -EmailSmtp "%SMTP%" -RoaUpdatePath "%ROAUPDATE%"
if errorlevel 1 goto :esec_08
REM ---------------------------------------------------------------------------
REM [8/9] 10 si 11 - IIS si exportul zilnic
REM ---------------------------------------------------------------------------
echo.
if "%FARAIIS%"=="1" (
echo [8/9] 10-setup-roaupdate-iis.ps1 - sarit ^(/faraiis^)
) else (
echo [8/9] 10-setup-roaupdate-iis.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\10-setup-roaupdate-iis.ps1" -RoaUpdatePath "%ROAUPDATE%"
if errorlevel 1 (
echo [ATENTIE] Publicarea in IIS a esuat. Instalarea continua.
echo Statiile nu vor lua actualizari pana nu reiei pasul 10.
)
)
echo.
if "%FARABACKUP%"=="1" (
echo 11-setup-backup-export.ps1 - sarit ^(/farabackup^)
) else (
echo 11-setup-backup-export.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\11-setup-backup-export.ps1" -ExportPath "%EXPORTDIR%"
if errorlevel 1 (
echo [ATENTIE] Configurarea exportului zilnic a esuat. Instalarea continua.
echo Reia cu: Run.cmd 11-setup-backup-export.ps1
)
)
REM ---------------------------------------------------------------------------
REM [9/9] 07 - verificare
REM ---------------------------------------------------------------------------
echo.
echo [9/9] 07-verify-installation.ps1
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%KIT%scripts\07-verify-installation.ps1"
set RCVERIF=!ERRORLEVEL!
echo.
echo ============================================================
if "!RCVERIF!"=="0" (
echo FAZA 1 COMPLETA - verificarea a trecut integral.
) else (
echo FAZA 1 TERMINATA, CU OBSERVATII.
echo.
echo "N company schemas are missing" e NORMAL la faza 1: firmele
echo se importa abia in faza 2. Orice altceva citeste cu atentie.
)
echo ============================================================
echo.
echo PANA LA FAZA 2:
echo - utilizatorii lucreaza mai departe pe serverul VECHI;
echo - nu porni joburile de actualizare pe serverul nou;
echo - daca in intervalul asta se adauga o firma noua pe serverul vechi,
echo spune-i lui FAZA2.cmd sa reimporte si CONTAFIN_ORACLE
echo ^(/reimportcontafin^), altfel NOM_FIRME ramane in urma.
echo.
echo FAZA 2, dupa ce utilizatorii termina:
echo 1. exporta schemele de firma de pe serverul vechi;
echo 2. pune DMP-urile in %DMPDEST%;
echo 3. FAZA2.cmd %IDCLIENT%
echo.
endlocal & exit /b %RCVERIF%
REM ---------------------------------------------------------------------------
:esec_01
echo [EROARE] 01-setup-database.ps1 a esuat. Faza 1 se opreste.
exit /b 1
:esec_02
echo [EROARE] 02-create-sys-objects.ps1 a esuat. Faza 1 se opreste.
exit /b 1
:esec_04
echo [EROARE] 04-create-synonyms-grants.ps1 a esuat. Faza 1 se opreste.
exit /b 1
:esec_08
echo [EROARE] 08-post-install-config.ps1 a esuat. Faza 1 se opreste.
exit /b 1
:utilizare
echo.
echo Utilizare:
echo FAZA1.cmd ^<IdClient^> [optiuni]
echo.
echo Optiuni:
echo /smtp:^<server^> server SMTP ^(implicit mail.romfast.ro^)
echo /vechi:^<gazda^> serverul vechi, pentru licente
echo /serviciuvechi:^<nume^> serviciul de pe serverul vechi ^(implicit XE^)
echo /parolavechi:^<parola^> parola SYS de pe serverul vechi
echo /licente:^<fisier.sql^> licente dintr-un fisier, in loc de retea
echo /roaupdate:^<cale^> radacina oglinzii ^(implicit D:\ROAUPDATE^)
echo /export:^<cale^> director export ^(implicit D:\ROA\EXPORT_ORADMP^)
echo /faralicente sari peste pasul 09
echo /faraiis sari peste pasul 10
echo /farabackup sari peste pasul 11
echo.
echo Exemple:
echo FAZA1.cmd 138
echo FAZA1.cmd 138 /vechi:10.0.0.5 /parolavechi:oracle /serviciuvechi:XE
echo FAZA1.cmd 214 /licente:C:\kit\licente.sql /faraiis
echo.
echo In DMPDIR trebuie sa fie:
echo - FIRMANOUA.dmp ^(sablon, mereu^)
echo - *contafin*.dmp ^(al clientului la migrare, sablonul la client nou^)
echo.
exit /b 2