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
335 lines
13 KiB
Batchfile
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
|