Reorganize oracle/ and chatbot/ into proxmox/ per LXC/VM structure

- Move oracle/migration-scripts/ to proxmox/lxc108-oracle/migration/
- Move oracle/roa/ and oracle/roa-romconstruct/ to proxmox/lxc108-oracle/sql/
- Move oracle/standby-server-scripts/ to proxmox/vm109-windows-dr/
- Move chatbot/ to proxmox/lxc104-flowise/
- Update proxmox/README.md with new structure and navigation
- Update all documentation with correct directory references
- Remove unused input/claude-agent-sdk/ files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-27 17:28:53 +02:00
parent 4d51d5b2d2
commit a567f75f25
51 changed files with 233 additions and 1706 deletions

View File

@@ -29,7 +29,7 @@
- **Image:** container-registry.oracle.com/database/express:21.3.0-xe
- **Versiune:** Oracle Database 21c Express Edition
- **Status:** Running (Up 3+ weeks, healthy)
- **Portainer:** http://10.0.20.121:9443
- **Portainer:** http://10.0.20.121:9000 (admin / parola281234)
### Porturi Expuse
| Port | Serviciu | Descriere |
@@ -489,16 +489,44 @@ ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe tail -100 /opt/oracl
---
## 📂 Subdirectoare
### migration/
Scripturi pentru migrarea Oracle 10g → 21c XE:
- `00-MASTER-MIGRATION.sh` - Script master orchestrare migrare
- `01-setup-oracle21c.sh` - Setup tablespace ROA + useri
- `02-export-source.sh` - Export universal (AUTO/MANUAL/LOCAL)
- `03-transfer-to-oracle21c.sh` - Transfer fișiere DMP
- `04-import-to-oracle21c.sh` - Import scheme + SYS objects
- `05-create-synonyms-grants.sh` - Creare sinonime + grant-uri
- `06-finalize-migration.sh` - Recompilare + verificare finală
**Documentație:** `migration/README.md`
### sql/
SQL-uri și packages Oracle:
- `sql/roa/` - SQL-uri compatibilitate Oracle 10g (scrie_jc_2007.sql, etc.)
- `sql/roa-romconstruct/` - Package PACK_CONTAFIN.pck
### scripts/
Scripturi operaționale:
- `export-roa2.sh` - Export PDB roa2
- `export-roa2.ps1` - Export pentru Windows
---
## 🔗 Legături Utile
**Pentru detalii Proxmox generale (cluster, toate LXC-uri/VM-uri):**
Vezi fișierul: `proxmox/proxmox-ssh-guide.md`
Vezi fișierul: `../cluster/README.md`
**Oracle Enterprise Manager Express:**
http://10.0.20.121:5500/em
**Portainer Docker Management:**
http://10.0.20.121:9443
- **URL:** http://10.0.20.121:9000
- **User:** admin
- **Parola:** parola281234
---

View File

@@ -0,0 +1,788 @@
@echo off
REM ==============================================================================
REM Script: 00-MASTER-MIGRATION.bat
REM Descriere: Master control script - Windows Edition
REM Data: 1 Octombrie 2025
REM Autor: Migrare Oracle automata
REM ==============================================================================
REM
REM Acest script controleaza intregul proces de migrare Oracle pe Windows
REM - Ghideaza utilizatorul prin fiecare pas
REM - Suport special pentru UPGRADE IN-PLACE (Oracle vechi → 21c pe acelasi PC)
REM - Poate rula scripturi bash prin WSL sau ghidare manuala
REM
REM ==============================================================================
setlocal enabledelayedexpansion
REM Culori (Windows 10+)
set "GREEN=[92m"
set "YELLOW=[93m"
set "RED=[91m"
set "BLUE=[94m"
set "NC=[0m"
REM Banner
cls
echo.
echo ========================================
echo MASTER MIGRARE ORACLE 10g - 21c XE
echo Windows Edition
echo ========================================
echo.
echo Acest script te va ghida prin intregul proces de migrare Oracle.
echo.
echo IMPORTANT: Ruleaza ca ADMINISTRATOR!
echo.
pause
REM ==============================================================================
REM CONFIGURARE MEDIU
REM ==============================================================================
cls
echo.
echo ========================================
echo CONFIGURARE CONEXIUNI ORACLE
echo ========================================
echo.
REM Detectare SQLPlus (Oracle Client)
set SQLPLUS_AVAILABLE=0
where sqlplus >nul 2>&1
if %errorlevel% equ 0 (
set SQLPLUS_AVAILABLE=1
echo %GREEN%[✓] SQLPlus disponibil%NC%
) else (
echo %YELLOW%[!] SQLPlus nu este instalat sau nu este in PATH%NC%
)
echo.
echo Unde este instalat Oracle 21c XE?
echo 1) Acest PC Windows (local)
echo 2) VM/Server Linux (cu WSL pentru scripturi)
echo 3) LXC Proxmox (necesita WSL + SSH)
echo.
set /p ORACLE_LOCATION="Alegere (1/2/3): "
if "%ORACLE_LOCATION%"=="1" (
set ORACLE_CONNECT_TYPE=WINDOWS_LOCAL
echo - Oracle 21c: Windows Local
) else if "%ORACLE_LOCATION%"=="2" (
set /p ORACLE_HOST="IP/hostname server Linux: "
set ORACLE_CONNECT_TYPE=LINUX_REMOTE
echo - Oracle 21c: Linux Remote ^(!ORACLE_HOST!^)
) else if "%ORACLE_LOCATION%"=="3" (
set /p PROXMOX_HOST="IP/hostname Proxmox: "
set /p LXC_ID="ID LXC: "
set ORACLE_CONNECT_TYPE=LXC
echo - Oracle 21c: LXC !LXC_ID! @ !PROXMOX_HOST!
) else (
echo %RED%Alegere invalida!%NC%
pause
exit /b 1
)
echo.
echo ========================================
echo CONFIGURARE EXPORT
echo ========================================
echo.
echo Cum vrei sa faci EXPORTUL din Oracle sursa?
echo 1) AUTOMAT - SSH catre server sursa (export automat)
echo 2) MANUAL - Tu exporti, scriptul preia fisierele DMP
echo 3) LOCAL - Migrare pe acelasi server (porturi diferite)
echo 4) UPGRADE IN-PLACE - Oracle vechi - Oracle nou (acest PC, ghidare completa)
echo.
set /p EXPORT_CHOICE="Alegere (1/2/3/4): "
if "%EXPORT_CHOICE%"=="1" (
REM Export AUTOMAT via SSH
set /p ORACLE_SOURCE_HOST="IP/hostname Oracle sursa: "
set /p ORACLE_SOURCE_USER="User SSH: "
set /p ORACLE_SOURCE_OS="Tip server sursa (Linux/Windows): "
set EXPORT_MODE=AUTO
echo - Export AUTOMAT via SSH
) else if "%EXPORT_CHOICE%"=="2" (
REM Export MANUAL
set /p EXPORT_DIR="Director unde vei pune fisierele DMP (ex: D:\ORACLE_EXPORT): "
set EXPORT_MODE=MANUAL
echo - Export MANUAL (tu exporti local)
) else if "%EXPORT_CHOICE%"=="3" (
REM Migrare LOCALA (porturi diferite)
echo.
echo %YELLOW%Migrare LOCALA detectata (acelasi server)%NC%
echo.
set /p ORACLE_SOURCE_PORT="Port Oracle SURSA (ex: 1521): "
set /p ORACLE_SOURCE_SID="SID Oracle SURSA (ex: XE): "
set /p ORACLE_SOURCE_PASS="Password SYSTEM pentru Oracle SURSA: "
set /p ORACLE_DEST_PORT="Port Oracle DESTINATIE (ex: 1522): "
set /p ORACLE_DEST_SID="SID Oracle DESTINATIE (ex: roa): "
set /p EXPORT_DIR="Director pentru export local (ex: D:\oracle-export): "
set EXPORT_MODE=LOCAL
echo - Export LOCAL (acelasi server: !ORACLE_SOURCE_PORT! - !ORACLE_DEST_PORT!)
) else if "%EXPORT_CHOICE%"=="4" (
REM UPGRADE IN-PLACE
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE ORACLE IN-PLACE - GHIDARE COMPLETA ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo Acest mod te va ghida prin urmatorii pasi:
echo 1. 📤 Export DMP din Oracle vechi (pe Windows)
echo 2. ⏸️ Oprire servicii Oracle vechi
echo 3. 📥 Instalare Oracle 21c XE nou
echo 4. 📦 Import DMP in Oracle 21c
echo 5. ✅ Verificare si finalizare
echo.
set /p OLD_ORACLE_PORT="Port Oracle VECHI (default 1521): "
if "!OLD_ORACLE_PORT!"=="" set OLD_ORACLE_PORT=1521
set /p OLD_ORACLE_SID="SID Oracle VECHI (ex: XE, ROA): "
set /p OLD_ORACLE_PASS="Password SYSTEM pentru Oracle VECHI: "
set /p EXPORT_DIR="Director pentru salvare DMP (ex: D:\oracle-export): "
set EXPORT_MODE=INPLACE
set ORACLE_SOURCE_OS=Windows
echo.
echo %GREEN%Configurare UPGRADE IN-PLACE completa!%NC%
echo Oracle vechi: !OLD_ORACLE_SID! @ localhost:!OLD_ORACLE_PORT!
echo Export in: !EXPORT_DIR!
) else (
echo %RED%Alegere invalida!%NC%
pause
exit /b 1
)
echo.
echo ========================================
echo REZUMAT CONFIGURARE
echo ========================================
echo.
echo Oracle 21c: %ORACLE_CONNECT_TYPE%
echo Export mode: %EXPORT_MODE%
if "%EXPORT_MODE%"=="INPLACE" (
echo Oracle vechi: !OLD_ORACLE_SID! @ localhost:!OLD_ORACLE_PORT!
echo Export dir: !EXPORT_DIR!
)
echo.
set /p CONFIRM="Configurarea este corecta? (Y/N): "
if /i not "%CONFIRM%"=="Y" (
echo.
echo Reconfigureaza si ruleaza din nou
pause
exit /b 1
)
REM ==============================================================================
REM MOD OPERARE
REM ==============================================================================
cls
echo.
echo ========================================
echo SELECTARE MOD OPERARE
echo ========================================
echo.
echo Selecteaza modul de lucru:
echo 1) MIGRARE COMPLETA (Oracle 10g - 21c)
echo 2) INSTALARE NOUA (din template-uri)
echo.
set /p MODE_CHOICE="Alegere (1/2): "
if "%MODE_CHOICE%"=="1" (
set MODE=MIGRATION
echo.
echo %GREEN%Mod selectat: MIGRARE COMPLETA%NC%
) else if "%MODE_CHOICE%"=="2" (
set MODE=NEW_INSTALL
echo.
echo %GREEN%Mod selectat: INSTALARE NOUA%NC%
) else (
echo %RED%Alegere invalida!%NC%
pause
exit /b 1
)
echo.
pause
REM ==============================================================================
REM UPGRADE IN-PLACE - WORKFLOW SPECIAL
REM ==============================================================================
if "%EXPORT_MODE%"=="INPLACE" (
call :InPlaceUpgrade
goto :End
)
REM ==============================================================================
REM WORKFLOW NORMAL (AUTO/MANUAL/LOCAL)
REM ==============================================================================
echo.
echo ========================================
echo PORNIRE MIGRARE
echo ========================================
echo.
if %WSL_AVAILABLE% equ 1 (
echo %GREEN%Rulare scripturi bash prin WSL...%NC%
echo.
REM Converteste path-ul Windows la WSL
set SCRIPT_PATH=%~dp0
set SCRIPT_PATH=!SCRIPT_PATH:\=/!
set SCRIPT_PATH=!SCRIPT_PATH:C:=/mnt/c!
set SCRIPT_PATH=!SCRIPT_PATH:D:=/mnt/d!
set SCRIPT_PATH=!SCRIPT_PATH:E:=/mnt/e!
echo Scripturi in: !SCRIPT_PATH!
echo.
REM Export variabile environment pentru WSL
wsl export EXPORT_MODE="%EXPORT_MODE%"
wsl export ORACLE_CONNECT_TYPE="%ORACLE_CONNECT_TYPE%"
if "%EXPORT_MODE%"=="MANUAL" (
wsl export EXPORT_DIR="%EXPORT_DIR%"
)
REM Ruleaza master script bash prin WSL
wsl bash -c "cd '!SCRIPT_PATH!' && ./00-MASTER-MIGRATION.sh"
) else (
echo %YELLOW%WSL nu este disponibil!%NC%
echo.
echo Optiuni:
echo 1. Instaleaza WSL: https://docs.microsoft.com/en-us/windows/wsl/install
echo 2. SAU ruleaza manual scripturile (vezi README.md)
echo.
pause
)
goto :End
REM ==============================================================================
REM FUNCTIE: UPGRADE IN-PLACE
REM ==============================================================================
:InPlaceUpgrade
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE IN-PLACE - PASUL 1/5: EXPORT DMP ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo %YELLOW%IMPORTANT: Executa comenzile de mai jos in acest Command Prompt%NC%
echo (sau deschide un nou Command Prompt CA ADMINISTRATOR)
echo.
pause
REM Genereaza timestamp pentru fisiere
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
echo.
echo ========================================
echo COMENZI EXPORT (COPY-PASTE)
echo ========================================
echo.
echo REM Creaza director export
echo mkdir "%EXPORT_DIR%" 2^>nul
echo cd /d "%EXPORT_DIR%"
echo.
echo REM Export CONTAFIN_ORACLE
echo exp system/%OLD_ORACLE_PASS%@localhost:%OLD_ORACLE_PORT%/%OLD_ORACLE_SID% ^
echo FILE=CONTAFIN_ORACLE_%mydate%.dmp ^
echo OWNER=CONTAFIN_ORACLE ^
echo LOG=contafin_export.log ^
echo CONSISTENT=Y
echo.
echo REM Export MARIUSM_AUTO (daca ai)
echo exp system/%OLD_ORACLE_PASS%@localhost:%OLD_ORACLE_PORT%/%OLD_ORACLE_SID% ^
echo FILE=MARIUSM_AUTO_%mydate%.dmp ^
echo OWNER=MARIUSM_AUTO ^
echo LOG=mariusm_export.log ^
echo CONSISTENT=Y
echo.
echo REM Verificare fisiere create
echo dir *.dmp
echo.
echo ========================================
echo.
REM Creeaza fisier batch pentru export
set EXPORT_BATCH=%EXPORT_DIR%\RUN-EXPORT.bat
echo @echo off > "%EXPORT_BATCH%"
echo REM Export generat automat >> "%EXPORT_BATCH%"
echo cd /d "%EXPORT_DIR%" >> "%EXPORT_BATCH%"
echo. >> "%EXPORT_BATCH%"
echo echo Exportare CONTAFIN_ORACLE... >> "%EXPORT_BATCH%"
echo exp system/%OLD_ORACLE_PASS%@localhost:%OLD_ORACLE_PORT%/%OLD_ORACLE_SID% FILE=CONTAFIN_ORACLE_%mydate%.dmp OWNER=CONTAFIN_ORACLE LOG=contafin_export.log CONSISTENT=Y >> "%EXPORT_BATCH%"
echo. >> "%EXPORT_BATCH%"
echo echo Exportare MARIUSM_AUTO... >> "%EXPORT_BATCH%"
echo exp system/%OLD_ORACLE_PASS%@localhost:%OLD_ORACLE_PORT%/%OLD_ORACLE_SID% FILE=MARIUSM_AUTO_%mydate%.dmp OWNER=MARIUSM_AUTO LOG=mariusm_export.log CONSISTENT=Y >> "%EXPORT_BATCH%"
echo. >> "%EXPORT_BATCH%"
echo echo Export complet! >> "%EXPORT_BATCH%"
echo dir *.dmp >> "%EXPORT_BATCH%"
echo pause >> "%EXPORT_BATCH%"
echo %GREEN%[✓] Am creat fisier batch automat: %EXPORT_BATCH%%NC%
echo.
echo Poti rula direct: "%EXPORT_BATCH%"
echo.
set /p RUN_EXPORT_NOW="Vrei sa rulez exportul ACUM? (Y/N): "
if /i "%RUN_EXPORT_NOW%"=="Y" (
echo.
echo %GREEN%Pornire export...%NC%
call "%EXPORT_BATCH%"
) else (
echo.
echo %YELLOW%OK - ruleaza manual exportul cand esti gata%NC%
)
echo.
set /p EXPORT_DONE="Ai terminat exportul si ai verificat fisierele DMP? (Y/N): "
if /i not "%EXPORT_DONE%"=="Y" (
echo.
echo Termina exportul si apoi continua...
pause
goto :InPlaceUpgrade
)
REM Verificare fisiere DMP
echo.
echo Verificare fisiere in %EXPORT_DIR%...
if exist "%EXPORT_DIR%\CONTAFIN*.dmp" (
echo %GREEN%[✓] Fisier CONTAFIN gasit!%NC%
dir "%EXPORT_DIR%\CONTAFIN*.dmp"
) else (
echo %RED%[✗] Nu gasesc fisier CONTAFIN in %EXPORT_DIR%%NC%
pause
)
REM ==============================================================================
REM PASUL 2: OPRIRE ORACLE VECHI
REM ==============================================================================
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE IN-PLACE - PASUL 2/5: OPRIRE ORACLE VECHI ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo %YELLOW%ATENTIE: Vei opri Oracle VECHI!%NC%
echo Asigura-te ca ai backup la fisierele DMP!
echo.
pause
echo.
echo ========================================
echo COMENZI OPRIRE SERVICII (COPY-PASTE)
echo ========================================
echo.
echo REM Oprire servicii Oracle vechi
echo net stop OracleServiceXE
echo net stop OracleXETNSListener
echo.
echo REM Optional: Dezactiveaza pornirea automata
echo sc config OracleServiceXE start= disabled
echo sc config OracleXETNSListener start= disabled
echo.
echo REM Verificare
echo sc query OracleServiceXE
echo.
echo ========================================
echo.
REM Creeaza fisier batch pentru oprire
set STOP_BATCH=%EXPORT_DIR%\STOP-ORACLE-OLD.bat
echo @echo off > "%STOP_BATCH%"
echo REM Oprire Oracle vechi >> "%STOP_BATCH%"
echo echo Oprire servicii Oracle vechi... >> "%STOP_BATCH%"
echo net stop OracleServiceXE >> "%STOP_BATCH%"
echo net stop OracleXETNSListener >> "%STOP_BATCH%"
echo echo. >> "%STOP_BATCH%"
echo sc config OracleServiceXE start= disabled >> "%STOP_BATCH%"
echo sc config OracleXETNSListener start= disabled >> "%STOP_BATCH%"
echo echo. >> "%STOP_BATCH%"
echo echo Verificare status: >> "%STOP_BATCH%"
echo sc query OracleServiceXE >> "%STOP_BATCH%"
echo pause >> "%STOP_BATCH%"
echo %GREEN%[✓] Am creat fisier batch: %STOP_BATCH%%NC%
echo.
set /p STOP_NOW="Vrei sa opresc Oracle VECHI ACUM? (Y/N): "
if /i "%STOP_NOW%"=="Y" (
echo.
echo %GREEN%Oprire Oracle vechi...%NC%
call "%STOP_BATCH%"
) else (
echo.
echo %YELLOW%OK - opreste manual Oracle vechi cand esti gata%NC%
)
echo.
set /p ORACLE_STOPPED="Ai oprit Oracle vechi? (Y/N): "
if /i not "%ORACLE_STOPPED%"=="Y" (
echo.
echo Opreste Oracle vechi si apoi continua...
pause
exit /b 1
)
REM ==============================================================================
REM PASUL 3: INSTALARE ORACLE 21c XE
REM ==============================================================================
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE IN-PLACE - PASUL 3/5: INSTALARE ORACLE 21c ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo Urmatorul pas: Instalare Oracle 21c XE
echo.
echo Optiuni:
echo 1. Download Oracle XE 21c pentru Windows:
echo https://www.oracle.com/database/technologies/xe-downloads.html
echo.
echo 2. Fisier: OracleXE213_Win64.zip (~2.5 GB)
echo.
echo 3. Instalare:
echo - Extrage ZIP
echo - Ruleaza setup.exe CA ADMINISTRATOR
echo - Port: 1521 (acelasi ca Oracle vechi)
echo - Password SYS: OraclePass123 (sau custom)
echo.
echo 4. Dupa instalare, revino aici pentru import!
echo.
pause
echo.
echo Deschid browser pentru download...
start https://www.oracle.com/database/technologies/xe-downloads.html
echo.
set /p ORACLE21_INSTALLED="Ai instalat Oracle 21c XE? (Y/N): "
if /i not "%ORACLE21_INSTALLED%"=="Y" (
echo.
echo Instaleaza Oracle 21c XE si apoi continua...
pause
exit /b 1
)
REM ==============================================================================
REM PASUL 4: SETUP + IMPORT
REM ==============================================================================
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE IN-PLACE - PASUL 4/5: SETUP ^& IMPORT ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
REM ==============================================================================
REM RULARE NATIVA WINDOWS (fara WSL)
REM ==============================================================================
if %SQLPLUS_AVAILABLE% equ 1 (
echo %GREEN%Rulare setup ^& import NATIV pe Windows...%NC%
echo.
set SCRIPT_DIR=%~dp0
set ORACLE21_PASSWORD=OraclePass123
REM Pasul 1: Setup Oracle 21c
echo ========================================
echo PASUL 1: Setup Tablespace ^& Useri
echo ========================================
echo.
call :CreateSetupScript
echo Rulare setup SQL...
sqlplus sys/!ORACLE21_PASSWORD!@localhost:1521/XE as sysdba @"%SCRIPT_DIR%setup-windows.sql"
if %errorlevel% neq 0 (
echo %RED%Eroare la setup!%NC%
pause
goto :End
)
echo %GREEN%[✓] Setup complet!%NC%
echo.
REM Pasul 2: Import DMP
echo ========================================
echo PASUL 2: Import DMP
echo ========================================
echo.
call :CreateImportScript
echo Import CONTAFIN_ORACLE...
call "%SCRIPT_DIR%import-windows.bat"
if %errorlevel% neq 0 (
echo %YELLOW%Importul poate avea warning-uri normale (obiecte existente)%NC%
)
echo %GREEN%[✓] Import complet!%NC%
echo.
REM Pasul 3: Sinonime + Grant-uri
echo ========================================
echo PASUL 3: Sinonime ^& Grant-uri
echo ========================================
echo.
call :CreateSynonymsScript
sqlplus system/!ORACLE21_PASSWORD!@localhost:1521/roa @"%SCRIPT_DIR%synonyms-windows.sql"
echo %GREEN%[✓] Sinonime create!%NC%
echo.
REM Pasul 4: Finalizare
echo ========================================
echo PASUL 4: Recompilare ^& Verificare
echo ========================================
echo.
call :CreateFinalizeScript
sqlplus system/!ORACLE21_PASSWORD!@localhost:1521/roa @"%SCRIPT_DIR%finalize-windows.sql"
echo %GREEN%[✓] Finalizare completa!%NC%
) else (
echo %YELLOW%SQLPlus nu este disponibil!%NC%
echo.
echo Pentru import manual, instaleaza Oracle Client si adauga sqlplus in PATH
echo SAU urmeaza pasii din README-UPGRADE-IN-PLACE.md
echo.
pause
)
REM ==============================================================================
REM PASUL 5: VERIFICARE
REM ==============================================================================
cls
echo.
echo ╔══════════════════════════════════════════════════════════════╗
echo ║ UPGRADE IN-PLACE - PASUL 5/5: VERIFICARE FINALA ║
echo ╚══════════════════════════════════════════════════════════════╝
echo.
echo %GREEN%Migrare completata!%NC%
echo.
echo Verificare conexiune:
echo sqlplus CONTAFIN_ORACLE/OraclePass123@localhost:1521/roa
echo.
echo Verificare obiecte:
echo SELECT COUNT(*) FROM user_tables;
echo SELECT COUNT(*) FROM user_objects WHERE status = 'INVALID';
echo.
echo Log-uri disponibile:
echo %EXPORT_DIR%\*.log
echo.
echo %GREEN%Succes!%NC%
echo.
pause
goto :End
REM ==============================================================================
REM FUNCTII GENERARE SCRIPTURI SQL
REM ==============================================================================
:CreateSetupScript
echo Generare script setup...
set SETUP_SQL=%SCRIPT_DIR%setup-windows.sql
(
echo -- Setup Oracle 21c - Generat automat
echo SET ECHO ON
echo SET SERVEROUTPUT ON
echo.
echo -- Conectare la CDB
echo ALTER SESSION SET CONTAINER = CDB$ROOT;
echo.
echo -- Creare PDB ROA ^(daca nu exista^)
echo DECLARE
echo v_count NUMBER;
echo BEGIN
echo SELECT COUNT^(^*^) INTO v_count FROM dba_pdbs WHERE pdb_name = 'ROA';
echo IF v_count = 0 THEN
echo EXECUTE IMMEDIATE 'CREATE PLUGGABLE DATABASE roa ADMIN USER pdbadmin IDENTIFIED BY OraclePass123';
echo EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE roa OPEN';
echo EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE roa SAVE STATE';
echo END IF;
echo END;
echo /
echo.
echo -- Conectare la PDB ROA
echo ALTER SESSION SET CONTAINER = ROA;
echo.
echo -- Creare tablespace ROA
echo CREATE TABLESPACE roa_data
echo DATAFILE 'roa_data01.dbf' SIZE 2G
echo AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
echo EXTENT MANAGEMENT LOCAL
echo SEGMENT SPACE MANAGEMENT AUTO;
echo.
echo -- Creare user CONTAFIN_ORACLE
echo CREATE USER CONTAFIN_ORACLE IDENTIFIED BY OraclePass123
echo DEFAULT TABLESPACE roa_data
echo TEMPORARY TABLESPACE temp
echo QUOTA UNLIMITED ON roa_data;
echo.
echo -- Grant-uri CONTAFIN_ORACLE
echo GRANT CONNECT, RESOURCE, DBA TO CONTAFIN_ORACLE;
echo GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO CONTAFIN_ORACLE;
echo GRANT CREATE PROCEDURE, CREATE TRIGGER, CREATE SEQUENCE TO CONTAFIN_ORACLE;
echo GRANT CREATE SYNONYM, CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE;
echo.
echo -- Creare user MARIUSM_AUTO
echo CREATE USER MARIUSM_AUTO IDENTIFIED BY OraclePass123
echo DEFAULT TABLESPACE roa_data
echo TEMPORARY TABLESPACE temp
echo QUOTA UNLIMITED ON roa_data;
echo.
echo GRANT CONNECT, RESOURCE TO MARIUSM_AUTO;
echo GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO MARIUSM_AUTO;
echo.
echo PROMPT Setup complet!
echo EXIT;
) > "%SETUP_SQL%"
echo %GREEN%[✓] Script generat: %SETUP_SQL%%NC%
goto :eof
:CreateImportScript
echo Generare script import...
set IMPORT_BAT=%SCRIPT_DIR%import-windows.bat
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
(
echo @echo off
echo REM Import DMP - Generat automat
echo cd /d "%EXPORT_DIR%"
echo.
echo echo Import CONTAFIN_ORACLE...
echo imp system/%ORACLE21_PASSWORD%@localhost:1521/roa ^
echo FILE=CONTAFIN_ORACLE*.dmp ^
echo FROMUSER=CONTAFIN_ORACLE ^
echo TOUSER=CONTAFIN_ORACLE ^
echo IGNORE=Y ^
echo COMMIT=Y ^
echo BUFFER=10485760 ^
echo LOG=contafin_import.log
echo.
echo echo Import MARIUSM_AUTO...
echo imp system/%ORACLE21_PASSWORD%@localhost:1521/roa ^
echo FILE=MARIUSM_AUTO*.dmp ^
echo FROMUSER=MARIUSM_AUTO ^
echo TOUSER=MARIUSM_AUTO ^
echo IGNORE=Y ^
echo COMMIT=Y ^
echo BUFFER=10485760 ^
echo LOG=mariusm_import.log
echo.
echo echo Import complet!
echo dir *.log
) > "%IMPORT_BAT%"
echo %GREEN%[✓] Script generat: %IMPORT_BAT%%NC%
goto :eof
:CreateSynonymsScript
echo Generare script sinonime...
set SYN_SQL=%SCRIPT_DIR%synonyms-windows.sql
(
echo -- Sinonime + Grant-uri - Generat automat
echo SET ECHO ON
echo.
echo -- Grant SELECT on CONTAFIN tables to PUBLIC
echo DECLARE
echo CURSOR c_tables IS
echo SELECT table_name FROM dba_tables WHERE owner = 'CONTAFIN_ORACLE';
echo BEGIN
echo FOR rec IN c_tables LOOP
echo BEGIN
echo EXECUTE IMMEDIATE 'GRANT SELECT ON CONTAFIN_ORACLE.' ^|^| rec.table_name ^|^| ' TO PUBLIC';
echo EXECUTE IMMEDIATE 'CREATE OR REPLACE PUBLIC SYNONYM SYN_' ^|^| rec.table_name ^|^| ' FOR CONTAFIN_ORACLE.' ^|^| rec.table_name;
echo EXCEPTION
echo WHEN OTHERS THEN NULL;
echo END;
echo END LOOP;
echo END;
echo /
echo.
echo PROMPT Sinonime create!
echo EXIT;
) > "%SYN_SQL%"
echo %GREEN%[✓] Script generat: %SYN_SQL%%NC%
goto :eof
:CreateFinalizeScript
echo Generare script finalizare...
set FIN_SQL=%SCRIPT_DIR%finalize-windows.sql
(
echo -- Finalizare - Generat automat
echo SET ECHO ON
echo SET SERVEROUTPUT ON
echo.
echo -- Recompilare obiecte invalide
echo BEGIN
echo DBMS_UTILITY.compile_schema^(schema =^> 'CONTAFIN_ORACLE', compile_all =^> FALSE^);
echo DBMS_UTILITY.compile_schema^(schema =^> 'MARIUSM_AUTO', compile_all =^> FALSE^);
echo END;
echo /
echo.
echo -- Verificare obiecte invalide
echo SELECT owner, object_type, object_name, status
echo FROM dba_objects
echo WHERE owner IN ^('CONTAFIN_ORACLE', 'MARIUSM_AUTO'^)
echo AND status = 'INVALID';
echo.
echo -- Statistici finale
echo SELECT 'CONTAFIN_ORACLE' AS schema, COUNT^(^*^) AS total_tables
echo FROM dba_tables WHERE owner = 'CONTAFIN_ORACLE'
echo UNION ALL
echo SELECT 'MARIUSM_AUTO', COUNT^(^*^)
echo FROM dba_tables WHERE owner = 'MARIUSM_AUTO';
echo.
echo PROMPT Migrare completa!
echo EXIT;
) > "%FIN_SQL%"
echo %GREEN%[✓] Script generat: %FIN_SQL%%NC%
goto :eof
REM ==============================================================================
REM FINAL
REM ==============================================================================
:End
echo.
echo ========================================
echo MIGRARE COMPLETA
echo ========================================
echo.
pause
exit /b 0

View File

@@ -0,0 +1,634 @@
#!/bin/bash
#==============================================================================
# Script: 00-MASTER-MIGRATION.sh
# Descriere: Master control script - Orchestrare completa migrare Oracle
# Data: 30 Septembrie 2025
# Autor: Generare automata - Asistent migrare Oracle
#==============================================================================
#
# Acest script controleaza intregul proces de migrare Oracle 10g → 21c XE
# - Ghideaza utilizatorul prin fiecare pas
# - Cere confirmare inainte de executie
# - Suporta doua moduri: MIGRARE si INSTALARE NOUA
#
# IMPORTANT: Ruleaza din WSL/Linux cu conexiune SSH la Proxmox
#
#==============================================================================
set -e
# Culori pentru output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Functii helper
print_header() {
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
}
print_step() {
echo -e "${GREEN}[STEP $1/$2]${NC} $3"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
ask_continue() {
local default=${2:-N}
echo ""
if [ "$default" = "Y" ]; then
read -p "$(echo -e ${YELLOW}"$1 (Y/n): "${NC})" -n 1 -r
REPLY=${REPLY:-Y}
else
read -p "$(echo -e ${YELLOW}"$1 (y/N): "${NC})" -n 1 -r
REPLY=${REPLY:-N}
fi
echo ""
[[ $REPLY =~ ^[Yy]$ ]]
}
# Banner
clear
print_header "🚀 MASTER MIGRARE ORACLE 10g → 21c XE"
echo "Acest script te va ghida prin intregul proces de migrare Oracle."
echo ""
echo "IMPORTANT: Configurare conexiuni necesare!"
echo ""
# =============================================================================
# CONFIGURARE MEDIU
# =============================================================================
print_header "CONFIGURARE CONEXIUNI ORACLE"
echo "Unde este instalat Oracle 21c XE?"
echo " 1) LXC Proxmox (Docker container)"
echo " 2) VM/Server Linux (direct sau Docker)"
echo " 3) VM/Server Windows"
echo ""
read -p "Alegere (1/2/3): " ORACLE_LOCATION
case $ORACLE_LOCATION in
1)
read -p "IP/hostname Proxmox (ex: 10.0.20.201): " PROXMOX_HOST
read -p "ID LXC (ex: 108): " LXC_ID
read -p "Nume container Docker (ex: oracle-xe): " CONTAINER_NAME
ORACLE_CONNECT_TYPE="LXC"
export PROXMOX_HOST LXC_ID CONTAINER_NAME
;;
2)
read -p "IP/hostname server Oracle (ex: 10.0.20.201): " ORACLE_HOST
read -p "Rulează Oracle în Docker? (y/N): " DOCKER_REPLY
if [[ $DOCKER_REPLY =~ ^[Yy]$ ]]; then
read -p "Nume container Docker (ex: oracle-xe): " CONTAINER_NAME
ORACLE_CONNECT_TYPE="LINUX_DOCKER"
else
ORACLE_CONNECT_TYPE="LINUX_NATIVE"
fi
export ORACLE_HOST CONTAINER_NAME
;;
3)
read -p "IP/hostname Windows Oracle (ex: 10.0.20.201): " ORACLE_HOST
ORACLE_CONNECT_TYPE="WINDOWS"
export ORACLE_HOST
;;
*)
print_error "Alegere invalida!"
exit 1
;;
esac
export ORACLE_CONNECT_TYPE
echo ""
print_success "Configurare Oracle 21c: $ORACLE_CONNECT_TYPE"
echo ""
echo "Unde este Oracle SURSA (pentru export)?"
read -p "IP/hostname Oracle sursa (ex: 10.0.20.122): " ORACLE_SOURCE_HOST
export ORACLE_SOURCE_HOST
echo ""
echo "Cum vrei să faci EXPORTUL din Oracle sursa?"
echo " 1) AUTOMAT - SSH către server sursa (export automat)"
echo " 2) MANUAL - Tu exporti, scriptul preia fișierele DMP"
echo " 3) LOCAL - Migrare pe același server (porturi diferite)"
echo " 4) UPGRADE IN-PLACE - Oracle vechi → Oracle nou (același PC, ghidare completă)"
echo ""
read -p "Alegere (1/2/3/4): " EXPORT_CHOICE
case $EXPORT_CHOICE in
1)
# Export AUTOMAT via SSH
read -p "User SSH pentru export (ex: romfast): " ORACLE_SOURCE_USER
read -p "Tip server sursa (Linux/Windows): " ORACLE_SOURCE_OS
export ORACLE_SOURCE_USER ORACLE_SOURCE_OS
export EXPORT_MODE="AUTO"
echo " → Export AUTOMAT via SSH"
;;
2)
# Export MANUAL (user exportă local)
read -p "Director unde vei pune fișierele DMP (ex: /mnt/e/ORACLE_EXPORT/dumps): " EXPORT_DIR
export EXPORT_DIR
export EXPORT_MODE="MANUAL"
echo " → Export MANUAL (tu exporti local)"
;;
3)
# Migrare LOCALĂ (același server, porturi diferite)
print_warning "Migrare LOCALĂ detectată (același server)"
echo ""
echo "Pentru migrare locală, ai nevoie de:"
echo " - Oracle SURSA pe un port (ex: 1521)"
echo " - Oracle DESTINAȚIE pe alt port (ex: 1522)"
echo ""
read -p "Port Oracle SURSA (ex: 1521): " ORACLE_SOURCE_PORT
read -p "SID Oracle SURSA (ex: XE sau ROA): " ORACLE_SOURCE_SID
read -p "Password SYSTEM pentru Oracle SURSA: " ORACLE_SOURCE_PASS
read -p "Port Oracle DESTINAȚIE (ex: 1522): " ORACLE_DEST_PORT
read -p "SID Oracle DESTINAȚIE (ex: roa): " ORACLE_DEST_SID
read -p "Director pentru export local (ex: /tmp/oracle-export): " EXPORT_DIR
export ORACLE_SOURCE_PORT ORACLE_SOURCE_SID ORACLE_SOURCE_PASS
export ORACLE_DEST_PORT ORACLE_DEST_SID
export EXPORT_DIR="${EXPORT_DIR:-/tmp/oracle-export}"
export EXPORT_MODE="LOCAL"
echo " → Export LOCAL (același server: $ORACLE_SOURCE_PORT$ORACLE_DEST_PORT)"
;;
4)
# UPGRADE IN-PLACE (ghidare completă)
print_success "🎯 Mod UPGRADE IN-PLACE selectat!"
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ UPGRADE ORACLE IN-PLACE - GHIDARE COMPLETĂ ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
echo "Acest mod te va ghida prin următorii pași:"
echo " 1. 📤 Export DMP din Oracle vechi (pe Windows)"
echo " 2. ⏸️ Oprire servicii Oracle vechi"
echo " 3. 📥 Instalare Oracle 21c XE nou"
echo " 4. 📦 Import DMP în Oracle 21c"
echo " 5. ✅ Verificare și finalizare"
echo ""
read -p "Unde este instalat Oracle VECHI (Linux/Windows): " OLD_ORACLE_OS
read -p "Port Oracle VECHI (default 1521): " OLD_ORACLE_PORT
OLD_ORACLE_PORT=${OLD_ORACLE_PORT:-1521}
read -p "SID Oracle VECHI (ex: XE, ROA): " OLD_ORACLE_SID
read -p "Password SYSTEM pentru Oracle VECHI: " OLD_ORACLE_PASS
read -p "Director pentru salvare DMP (ex: D:\\oracle-export sau /tmp/export): " EXPORT_DIR
# Detectare tip server
if [[ "$OLD_ORACLE_OS" =~ [Ww]indows ]]; then
ORACLE_SOURCE_OS="Windows"
EXPORT_LOCATION_HINT="📁 Salvează DMP-urile în: $EXPORT_DIR"
else
ORACLE_SOURCE_OS="Linux"
EXPORT_LOCATION_HINT="📁 Salvează DMP-urile în: $EXPORT_DIR"
fi
export ORACLE_SOURCE_OS OLD_ORACLE_PORT OLD_ORACLE_SID OLD_ORACLE_PASS
export EXPORT_DIR
export EXPORT_MODE="INPLACE"
echo ""
print_success "Configurare UPGRADE IN-PLACE completă!"
echo " Oracle vechi: $OLD_ORACLE_SID @ localhost:$OLD_ORACLE_PORT ($ORACLE_SOURCE_OS)"
echo " $EXPORT_LOCATION_HINT"
;;
*)
print_error "Alegere invalidă!"
exit 1
;;
esac
echo ""
print_success "Configurare completa!"
echo ""
echo "Rezumat:"
echo " Oracle 21c: $ORACLE_CONNECT_TYPE"
if [ "$ORACLE_CONNECT_TYPE" = "LXC" ]; then
echo " Proxmox: $PROXMOX_HOST"
echo " LXC ID: $LXC_ID"
echo " Container: $CONTAINER_NAME"
elif [ "$ORACLE_CONNECT_TYPE" = "LINUX_DOCKER" ]; then
echo " Host: $ORACLE_HOST"
echo " Container: $CONTAINER_NAME"
else
echo " Host: $ORACLE_HOST"
fi
echo " Oracle 10g: $ORACLE10G_USER@$ORACLE10G_HOST"
echo ""
if ! ask_continue "Configurarea este corecta?"; then
print_error "Reconfigureaza si ruleaza din nou"
exit 1
fi
echo ""
# Selectare MOD
print_header "SELECTARE MOD OPERARE"
echo "Selecteaza modul de lucru:"
echo " 1) MIGRARE COMPLETA (Oracle 10g → 21c)"
echo " 2) INSTALARE NOUA (din template-uri)"
echo ""
read -p "Alegere (1/2): " MODE_CHOICE
echo ""
case $MODE_CHOICE in
1)
MODE="MIGRATION"
print_success "Mod selectat: MIGRARE COMPLETA"
;;
2)
MODE="NEW_INSTALL"
print_success "Mod selectat: INSTALARE NOUA"
;;
*)
print_error "Alegere invalida!"
exit 1
;;
esac
# Export variabile pentru scripturile copil
export MIGRATION_MODE=$MODE
# Variabile configurare
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TOTAL_STEPS=7
if [ "$MODE" = "NEW_INSTALL" ]; then
TOTAL_STEPS=6 # Fara export Oracle 10g
fi
# =============================================================================
# PASUL 0: INSTALARE ORACLE 21c XE (OPTIONAL)
# =============================================================================
print_header "PASUL 0/7: INSTALARE ORACLE 21c XE (OPTIONAL)"
echo "Daca Oracle 21c XE este deja instalat pe LXC 108, poti sari peste acest pas."
echo ""
if ask_continue "Vrei sa instalezi Oracle 21c XE acum?"; then
print_step "0" "7" "Instalare Oracle 21c XE pe LXC 108..."
echo ""
echo "Ce face acest script:"
echo " - Verifica LXC 108 exista"
echo " - Instaleaza Docker (daca nu exista)"
echo " - Download Oracle 21c XE image (2-3 GB)"
echo " - Sterge XEPDB1 automat"
echo " - Creaza PDB ROA"
echo " - Optional: PDB ROA2"
echo ""
echo "Durata estimata: ~15-20 minute"
echo ""
if ask_continue "Continua cu instalarea?"; then
if [ -f "$SCRIPT_DIR/00-install-oracle21c-xe.sh" ]; then
bash "$SCRIPT_DIR/00-install-oracle21c-xe.sh"
if [ $? -eq 0 ]; then
print_success "Oracle 21c XE instalat cu succes!"
else
print_error "Eroare la instalarea Oracle 21c XE!"
exit 1
fi
else
print_error "Script 00-install-oracle21c-xe.sh nu gasit!"
exit 1
fi
else
print_warning "Instalare Oracle 21c XE omisa"
fi
else
print_warning "Pasul 0 omis - presupun ca Oracle 21c XE este deja instalat"
fi
# =============================================================================
# PASUL 1: SETUP ORACLE 21c XE
# =============================================================================
print_header "PASUL 1/$TOTAL_STEPS: SETUP ORACLE 21c XE"
echo "Ce face acest script:"
echo " - Verifica container oracle-xe"
echo " - Verifica PDB ROA"
echo " - Creaza tablespace ROA (20GB, autoextend)"
echo " - Creaza useri CONTAFIN_ORACLE si MARIUSM_AUTO"
if [ "$MODE" = "NEW_INSTALL" ]; then
echo " - Prompt pentru nume schema noua (nu MARIUSM_AUTO)"
fi
echo " - Acorda system privileges + DBMS packages"
echo ""
echo "Durata estimata: ~3-5 minute"
echo ""
if ask_continue "Executa SETUP Oracle 21c?" "Y"; then
print_step "1" "$TOTAL_STEPS" "Setup Oracle 21c XE..."
if [ -f "$SCRIPT_DIR/01-setup-oracle21c.sh" ]; then
bash "$SCRIPT_DIR/01-setup-oracle21c.sh"
if [ $? -eq 0 ]; then
print_success "Setup Oracle 21c complet!"
else
print_error "Eroare la setup Oracle 21c!"
exit 1
fi
else
print_error "Script 01-setup-oracle21c.sh nu gasit!"
exit 1
fi
else
print_error "Setup Oracle 21c este obligatoriu! Iesire..."
exit 1
fi
# =============================================================================
# PASUL 2: EXPORT ORACLE 10g (doar pentru MIGRATION)
# =============================================================================
if [ "$MODE" = "MIGRATION" ]; then
print_header "PASUL 2/$TOTAL_STEPS: EXPORT ORACLE SURSA"
if [ "$EXPORT_MODE" = "AUTO" ]; then
echo "Export AUTOMAT via SSH către server sursa"
echo ""
echo "Ce face:"
echo " - Conectare SSH către $ORACLE_SOURCE_HOST"
echo " - Export schema CONTAFIN_ORACLE (~15 min)"
echo " - Export schema secundară (~60 min)"
if [ "$ORACLE_SOURCE_OS" = "Windows" ]; then
echo " - Rulare batch Windows pentru export"
else
echo " - Rulare script Linux pentru export"
fi
echo ""
echo "Durata estimata: ~75 minute"
elif [ "$EXPORT_MODE" = "LOCAL" ]; then
echo "Export LOCAL (același server, porturi diferite)"
echo ""
echo "Ce face:"
echo " - Export direct din Oracle sursa (port $ORACLE_SOURCE_PORT)"
echo " - Salvare în $EXPORT_DIR"
echo " - Verificare conectivitate ambele instanțe Oracle"
echo ""
echo "Durata estimata: ~75 minute"
else
echo "Export MANUAL - ghidare pas cu pas"
echo ""
echo "Vei primi instrucțiuni detaliate pentru export manual"
echo ""
fi
echo ""
if ask_continue "Executa EXPORT din Oracle sursa?" "Y"; then
print_step "2" "$TOTAL_STEPS" "Export Oracle sursa..."
if [ -f "$SCRIPT_DIR/02-export-source.sh" ]; then
bash "$SCRIPT_DIR/02-export-source.sh"
if [ $? -eq 0 ]; then
print_success "Export Oracle sursa complet!"
else
print_error "Eroare la export Oracle sursa!"
exit 1
fi
else
print_error "Script 02-export-source.sh nu gasit!"
exit 1
fi
else
print_error "Export Oracle sursa este obligatoriu pentru migrare!"
exit 1
fi
else
# NEW_INSTALL mode - prompt pentru locatie template-uri
print_header "PASUL 2/$TOTAL_STEPS: VERIFICARE TEMPLATE-URI"
echo "Pentru instalare noua, ai nevoie de fisiere template DMP:"
echo " - contafin_oracle.dmp (template CONTAFIN_ORACLE)"
echo " - firmanoua.dmp (template pentru schema noua)"
echo ""
read -p "Introdu calea catre template-uri (ex: /mnt/e/templates): " TEMPLATE_DIR
if [ ! -f "$TEMPLATE_DIR/contafin_oracle.dmp" ]; then
print_error "Nu gasesc: $TEMPLATE_DIR/contafin_oracle.dmp"
exit 1
fi
read -p "Nume fisier template pentru schema noua (ex: firmanoua.dmp): " SCHEMA2_TEMPLATE
if [ ! -f "$TEMPLATE_DIR/$SCHEMA2_TEMPLATE" ]; then
print_error "Nu gasesc: $TEMPLATE_DIR/$SCHEMA2_TEMPLATE"
exit 1
fi
print_success "Template-uri gasite!"
# Export variabile pentru pasii urmatori
export TEMPLATE_DIR
export SCHEMA2_TEMPLATE
fi
# =============================================================================
# PASUL 3: TRANSFER FISIERE
# =============================================================================
print_header "PASUL 3/$TOTAL_STEPS: TRANSFER FISIERE CATRE ORACLE 21c"
if [ "$MODE" = "MIGRATION" ]; then
echo "Ce face acest script:"
echo " - Verifica fisiere DMP in /mnt/e/ORACLE_EXPORT/dumps"
echo " - Transfer fisiere catre Proxmox /tmp/oracle-import"
echo " - Copiaza fisiere in container oracle-xe"
else
echo "Ce face acest script:"
echo " - Transfer template-uri catre Proxmox"
echo " - Copiaza in container oracle-xe"
fi
echo ""
echo "Durata estimata: ~10 minute"
echo ""
if ask_continue "Executa TRANSFER fisiere?" "Y"; then
print_step "3" "$TOTAL_STEPS" "Transfer fisiere..."
if [ -f "$SCRIPT_DIR/03-transfer-to-oracle21c.sh" ]; then
bash "$SCRIPT_DIR/03-transfer-to-oracle21c.sh"
if [ $? -eq 0 ]; then
print_success "Transfer fisiere complet!"
else
print_error "Eroare la transfer fisiere!"
exit 1
fi
else
print_error "Script 03-transfer-to-oracle21c.sh nu gasit!"
exit 1
fi
else
print_error "Transfer fisiere este obligatoriu! Iesire..."
exit 1
fi
# =============================================================================
# PASUL 4: IMPORT IN ORACLE 21c
# =============================================================================
print_header "PASUL 4/$TOTAL_STEPS: IMPORT IN ORACLE 21c"
if [ "$MODE" = "MIGRATION" ]; then
echo "Ce face acest script:"
echo " - Import SYS objects custom (~5 min)"
echo " - Grant-uri SYS → CONTAFIN_ORACLE"
echo " - Import CONTAFIN_ORACLE (~15 min)"
echo " - Import MARIUSM_AUTO (~90 min)"
echo " - Verificare obiecte importate"
echo ""
echo "Durata estimata: ~2 ore"
else
echo "Ce face acest script:"
echo " - Import template CONTAFIN_ORACLE"
echo " - Import template pentru schema noua"
echo " - Prompt pentru nume schema"
echo ""
echo "Durata estimata: ~30 minute"
fi
echo ""
if ask_continue "Executa IMPORT scheme?" "Y"; then
print_step "4" "$TOTAL_STEPS" "Import scheme in Oracle 21c..."
if [ -f "$SCRIPT_DIR/04-import-to-oracle21c.sh" ]; then
bash "$SCRIPT_DIR/04-import-to-oracle21c.sh"
if [ $? -eq 0 ]; then
print_success "Import scheme complet!"
else
print_error "Eroare la import scheme!"
exit 1
fi
else
print_error "Script 04-import-to-oracle21c.sh nu gasit!"
exit 1
fi
else
print_error "Import scheme este obligatoriu! Iesire..."
exit 1
fi
# =============================================================================
# PASUL 5: CREARE SINONIME + GRANT-URI
# =============================================================================
print_header "PASUL 5/$TOTAL_STEPS: CREARE SINONIME PUBLICE + GRANT-URI"
echo "Ce face acest script:"
echo " - Creaza 53 sinonime publice (SYN_*)"
echo " - Acorda 147 grant-uri catre PUBLIC"
echo " - Verificare sinonime si grant-uri"
echo ""
echo "Durata estimata: ~5 minute"
echo ""
if ask_continue "Executa CREARE sinonime + grant-uri?" "Y"; then
print_step "5" "$TOTAL_STEPS" "Creare sinonime + grant-uri..."
if [ -f "$SCRIPT_DIR/05-create-synonyms-grants.sh" ]; then
bash "$SCRIPT_DIR/05-create-synonyms-grants.sh"
if [ $? -eq 0 ]; then
print_success "Sinonime + grant-uri create!"
else
print_error "Eroare la creare sinonime + grant-uri!"
exit 1
fi
else
print_error "Script 05-create-synonyms-grants.sh nu gasit!"
exit 1
fi
else
print_error "Creare sinonime este obligatorie! Iesire..."
exit 1
fi
# =============================================================================
# PASUL 6: FINALIZARE MIGRARE
# =============================================================================
print_header "PASUL 6/$TOTAL_STEPS: FINALIZARE MIGRARE"
echo "Ce face acest script:"
echo " - Recompilare obiecte invalide"
echo " - Verificare completa migrare (10 teste)"
echo " - Raport final"
echo ""
echo "Durata estimata: ~10 minute"
echo ""
if ask_continue "Executa FINALIZARE migrare?" "Y"; then
print_step "6" "$TOTAL_STEPS" "Finalizare migrare..."
if [ -f "$SCRIPT_DIR/06-finalize-migration.sh" ]; then
bash "$SCRIPT_DIR/06-finalize-migration.sh"
if [ $? -eq 0 ]; then
print_success "Finalizare completa!"
else
print_error "Eroare la finalizare!"
exit 1
fi
else
print_error "Script 06-finalize-migration.sh nu gasit!"
exit 1
fi
else
print_warning "Finalizare omisa - recomand sa rulezi manual!"
fi
# =============================================================================
# FINAL - RAPORT COMPLET
# =============================================================================
print_header "🎉 MIGRARE COMPLETA CU SUCCES!"
echo "Rezumat:"
if [ "$MODE" = "MIGRATION" ]; then
echo " ✅ Oracle 10g → 21c XE migrat complet"
else
echo " ✅ Instalare noua completa din template-uri"
fi
echo " ✅ PDB ROA creat si configurat"
echo " ✅ Tablespace ROA (20GB, autoextend)"
echo " ✅ Utilizatori creati cu privilegii complete"
echo " ✅ Scheme importate cu succes"
echo " ✅ Sinonime publice: 53"
echo " ✅ Grant-uri PUBLIC: 147"
echo " ✅ Obiecte recompilate"
echo ""
echo "Conexiune test:"
echo " sqlplus CONTAFIN_ORACLE/OraclePass123@10.0.20.201:1521/roa"
echo ""
echo "Verificare PDB:"
echo " sqlplus sys/OraclePass123@10.0.20.201:1521/roa as sysdba"
echo " SQL> SELECT name, cdb FROM v\$database; -- Trebuie: ROA, NO"
echo ""
echo "Log-uri disponibile:"
echo " - ssh root@10.0.20.201 \"pct exec 108 -- docker exec oracle-xe cat /tmp/contafin_import.log\""
echo " - ssh root@10.0.20.201 \"pct exec 108 -- docker exec oracle-xe cat /tmp/mariusm_import.log\""
echo ""
print_success "TOATE PASII COMPLETI!"
echo ""

View File

@@ -0,0 +1,315 @@
#!/bin/bash
#==============================================================================
# Script: 00-install-oracle21c-xe.sh
# Descriere: Instalare completă Oracle 21c XE în Docker pe LXC Proxmox
# - Instalează Docker (dacă nu există)
# - Instalează Oracle 21c XE
# - Șterge XEPDB1 automat
# - Creează PDB ROA (și opțional PDB ROA2)
# Data: 30 Septembrie 2025
# Rulare: bash 00-install-oracle21c-xe.sh
# Unde: Pe host Proxmox (sau în LXC prin pct exec)
#==============================================================================
set -e
echo "=========================================="
echo "INSTALARE ORACLE 21c XE PE LXC + DOCKER"
echo "=========================================="
echo ""
# Configurare
ORACLE_PWD="OraclePass123"
LXC_ID="108"
PROXMOX_HOST="10.0.20.201"
CONTAINER_NAME="oracle-xe"
ORACLE_IMAGE="container-registry.oracle.com/database/express:21.3.0-xe"
# Verificare dacă rulează pe Proxmox sau trebuie SSH
if [ -f "/etc/pve/.version" ]; then
echo "✓ Rulează direct pe Proxmox host"
PVE_CMD=""
else
echo "Conectare la Proxmox ${PROXMOX_HOST}..."
PVE_CMD="ssh root@${PROXMOX_HOST}"
fi
echo ""
echo "=========================================="
echo "PASUL 1/7: VERIFICARE LXC ${LXC_ID}"
echo "=========================================="
echo ""
# Verificare LXC există
if ! ${PVE_CMD} pct status ${LXC_ID} &>/dev/null; then
echo "ERROR: LXC ${LXC_ID} nu există!"
echo ""
echo "Creează LXC manual:"
echo " pct create ${LXC_ID} local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \\"
echo " --hostname oracle-db \\"
echo " --memory 8192 \\"
echo " --cores 4 \\"
echo " --rootfs local-lvm:32 \\"
echo " --net0 name=eth0,bridge=vmbr0,ip=dhcp \\"
echo " --features nesting=1,keyctl=1"
echo " pct start ${LXC_ID}"
exit 1
fi
# Start LXC dacă e oprit
if ! ${PVE_CMD} pct status ${LXC_ID} | grep -q "running"; then
echo "Pornire LXC ${LXC_ID}..."
${PVE_CMD} pct start ${LXC_ID}
sleep 5
fi
echo "✓ LXC ${LXC_ID} activ"
echo ""
echo "=========================================="
echo "PASUL 2/7: INSTALARE DOCKER"
echo "=========================================="
echo ""
# Verificare Docker instalat
if ${PVE_CMD} pct exec ${LXC_ID} -- which docker &>/dev/null; then
echo "✓ Docker deja instalat"
${PVE_CMD} pct exec ${LXC_ID} -- docker --version
else
echo "Instalare Docker..."
${PVE_CMD} pct exec ${LXC_ID} -- bash -c '
# Update package list
apt-get update
# Install prerequisites
apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# Add Docker GPG key
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Add Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Enable and start Docker
systemctl enable docker
systemctl start docker
echo "Docker version:"
docker --version
'
echo "✓ Docker instalat"
fi
echo ""
echo "=========================================="
echo "PASUL 3/7: DOWNLOAD ORACLE 21c XE IMAGE"
echo "=========================================="
echo ""
# Verificare dacă image-ul există
if ${PVE_CMD} pct exec ${LXC_ID} -- docker images | grep -q "express.*21.3.0-xe"; then
echo "✓ Oracle XE image deja descărcat"
else
echo "Download Oracle 21c XE image (~ 2-3 GB)..."
echo "Durată estimată: 5-15 minute (depinde de conexiune)"
${PVE_CMD} pct exec ${LXC_ID} -- docker pull ${ORACLE_IMAGE}
echo "✓ Oracle XE image descărcat"
fi
echo ""
echo "=========================================="
echo "PASUL 4/7: OPRIRE CONTAINER VECHI (dacă există)"
echo "=========================================="
echo ""
if ${PVE_CMD} pct exec ${LXC_ID} -- docker ps -a | grep -q ${CONTAINER_NAME}; then
echo "Oprire și ștergere container vechi ${CONTAINER_NAME}..."
${PVE_CMD} pct exec ${LXC_ID} -- docker stop ${CONTAINER_NAME} 2>/dev/null || true
${PVE_CMD} pct exec ${LXC_ID} -- docker rm ${CONTAINER_NAME} 2>/dev/null || true
echo "✓ Container vechi șters"
else
echo "✓ Nu există container vechi"
fi
echo ""
echo "=========================================="
echo "PASUL 5/7: START ORACLE 21c XE CONTAINER"
echo "=========================================="
echo ""
# Creare directoare pentru date
${PVE_CMD} pct exec ${LXC_ID} -- mkdir -p /opt/oracle/oradata
echo "Pornire container Oracle XE..."
${PVE_CMD} pct exec ${LXC_ID} -- docker run -d \
--name ${CONTAINER_NAME} \
--restart=unless-stopped \
-p 1521:1521 \
-p 5500:5500 \
-e ORACLE_PWD=${ORACLE_PWD} \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /opt/oracle/oradata:/opt/oracle/oradata \
${ORACLE_IMAGE}
echo "✓ Container pornit"
echo ""
echo "Așteptare inițializare Oracle (~ 5-10 minute)..."
echo "Monitorizare log: docker logs -f ${CONTAINER_NAME}"
echo ""
# Așteptare până când Oracle este gata
TIMEOUT=600 # 10 minute
ELAPSED=0
INTERVAL=10
while [ $ELAPSED -lt $TIMEOUT ]; do
if ${PVE_CMD} pct exec ${LXC_ID} -- docker logs ${CONTAINER_NAME} 2>&1 | grep -q "DATABASE IS READY TO USE"; then
echo ""
echo "✓ Oracle 21c XE READY!"
break
fi
echo -n "."
sleep $INTERVAL
ELAPSED=$((ELAPSED + INTERVAL))
done
if [ $ELAPSED -ge $TIMEOUT ]; then
echo ""
echo "ERROR: Timeout așteptând Oracle să pornească!"
echo "Verifică log-urile: docker logs ${CONTAINER_NAME}"
exit 1
fi
echo ""
echo "=========================================="
echo "PASUL 6/7: ȘTERGERE XEPDB1 + CREARE PDB ROA"
echo "=========================================="
echo ""
echo "Conectare la CDB și ștergere XEPDB1..."
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<'EOF'
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
-- Închide și șterge XEPDB1
ALTER PLUGGABLE DATABASE xepdb1 CLOSE IMMEDIATE;
DROP PLUGGABLE DATABASE xepdb1 INCLUDING DATAFILES;
-- Verificare că XEPDB1 a fost șters
SELECT 'PDB după ștergere XEPDB1:' FROM DUAL;
SELECT name, open_mode FROM v$pdbs;
EXIT;
EOF
echo "✓ XEPDB1 șters"
echo ""
echo "Creare PDB ROA..."
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<EOF
SET SERVEROUTPUT ON
WHENEVER SQLERROR EXIT SQL.SQLCODE
-- Creare PDB ROA
CREATE PLUGGABLE DATABASE roa
ADMIN USER pdb_admin IDENTIFIED BY ${ORACLE_PWD}
FILE_NAME_CONVERT=('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/roa/');
-- Deschide PDB ROA
ALTER PLUGGABLE DATABASE roa OPEN;
ALTER PLUGGABLE DATABASE roa SAVE STATE;
-- Verificare
SELECT name, open_mode FROM v\$pdbs WHERE name='ROA';
DBMS_OUTPUT.PUT_LINE('✓ PDB ROA creat și deschis!');
EXIT;
EOF
echo "✓ PDB ROA creat"
echo ""
echo "=========================================="
echo "PASUL 7/7: PDB ROA2 (OPȚIONAL)"
echo "=========================================="
echo ""
read -p "Vrei să creezi și PDB ROA2? (y/N): " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Creare PDB ROA2..."
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<EOF
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
-- Creare PDB ROA2
CREATE PLUGGABLE DATABASE roa2
ADMIN USER pdb_admin IDENTIFIED BY ${ORACLE_PWD}
FILE_NAME_CONVERT=('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/roa2/');
-- Deschide PDB ROA2
ALTER PLUGGABLE DATABASE roa2 OPEN;
ALTER PLUGGABLE DATABASE roa2 SAVE STATE;
-- Verificare
SELECT name, open_mode FROM v\$pdbs WHERE name='ROA2';
DBMS_OUTPUT.PUT_LINE('✓ PDB ROA2 creat și deschis!');
EXIT;
EOF
echo "✓ PDB ROA2 creat"
else
echo "✓ PDB ROA2 omis"
fi
echo ""
echo "=========================================="
echo "✅ INSTALARE ORACLE 21c XE COMPLETĂ!"
echo "=========================================="
echo ""
echo "Detalii instalare:"
echo " - LXC: ${LXC_ID}"
echo " - Container: ${CONTAINER_NAME}"
echo " - CDB: XE"
echo " - PDB: ROA (și ROA2 dacă ai creat)"
echo " - XEPDB1: ȘTERS"
echo ""
echo "Conexiuni:"
echo " - CDB: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/XE as sysdba"
echo " - PDB ROA: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/roa as sysdba"
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo " - PDB ROA2: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/roa2 as sysdba"
fi
echo ""
echo "Test conexiune:"
echo " ${PVE_CMD} pct exec ${LXC_ID} -- docker exec -it ${CONTAINER_NAME} sqlplus sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
echo ""
echo "Verificare PDB-uri:"
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<'EOF'
SET PAGESIZE 50
SELECT con_id, name, open_mode, restricted FROM v$pdbs ORDER BY con_id;
EXIT;
EOF
echo ""
echo "Management container:"
echo " Start: ${PVE_CMD} pct exec ${LXC_ID} -- docker start ${CONTAINER_NAME}"
echo " Stop: ${PVE_CMD} pct exec ${LXC_ID} -- docker stop ${CONTAINER_NAME}"
echo " Logs: ${PVE_CMD} pct exec ${LXC_ID} -- docker logs -f ${CONTAINER_NAME}"
echo " Shell: ${PVE_CMD} pct exec ${LXC_ID} -- docker exec -it ${CONTAINER_NAME} bash"
echo ""
echo "Următorul pas: 01-setup-oracle21c.sh (pentru tablespace + useri)"
echo ""

View File

@@ -0,0 +1,209 @@
#!/bin/bash
#==============================================================================
# Script: 01-setup-oracle21c.sh
# Descriere: Pregătire Oracle 21c XE - Creare PDB ROA, Tablespace ROA, Useri
# Data: 30 Septembrie 2025
# Rulare: bash 01-setup-oracle21c.sh
#==============================================================================
set -e # Exit on error
echo "=========================================="
echo "ORACLE 21c XE - SETUP PDB ROA"
echo "=========================================="
echo ""
# Configurare
ORACLE_PWD="OraclePass123"
CDB_CONNECT="sys/${ORACLE_PWD}@localhost:1521/XE as sysdba"
PDB_CONNECT="sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
LXC_ID="108"
CONTAINER_NAME="oracle-xe"
echo "[1/5] Verificare container Oracle XE..."
# Detectare dacă rulează în LXC sau pe Proxmox
if [ -f "/etc/pve/.version" ]; then
# Rulează pe Proxmox host
CMD_PREFIX="pct exec ${LXC_ID} --"
else
# Rulează direct în LXC
CMD_PREFIX=""
fi
if ! ${CMD_PREFIX} docker ps | grep -q ${CONTAINER_NAME}; then
echo "ERROR: Container ${CONTAINER_NAME} nu rulează!"
echo ""
echo "Opțiuni:"
echo " 1. Rulează: bash 00-install-oracle21c-xe.sh"
echo " 2. Sau pornește manual: docker start ${CONTAINER_NAME}"
exit 1
fi
echo "✓ Container ${CONTAINER_NAME} activ"
echo ""
echo "[2/5] Verificare PDB ROA există..."
PDB_EXISTS=$(${CMD_PREFIX} docker exec ${CONTAINER_NAME} sqlplus -s ${CDB_CONNECT} <<'EOF'
SET PAGESIZE 0 FEEDBACK OFF HEADING OFF
SELECT COUNT(*) FROM v$pdbs WHERE name='ROA';
EXIT;
EOF
)
if [ "$PDB_EXISTS" = "0" ] || [ -z "$PDB_EXISTS" ]; then
echo "ERROR: PDB ROA nu există!"
echo ""
echo "Rulează mai întâi: bash 00-install-oracle21c-xe.sh"
exit 1
fi
echo "✓ PDB ROA există"
echo ""
echo "[3/5] Creare Tablespace ROA..."
${CMD_PREFIX} docker exec ${CONTAINER_NAME} sqlplus -s ${PDB_CONNECT} <<EOF
SET SERVEROUTPUT ON
WHENEVER SQLERROR EXIT SQL.SQLCODE
-- Verificare că suntem în PDB ROA
SELECT 'Connected to: ' || name || ' (CDB=' || cdb || ')' FROM v\$database;
-- Creare tablespace ROA (ca în Oracle 10g)
CREATE TABLESPACE ROA
DATAFILE '/opt/oracle/oradata/XE/roa/roa_data01.dbf'
SIZE 20G AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
-- Verificare
SELECT tablespace_name, status, contents FROM dba_tablespaces WHERE tablespace_name='ROA';
EXIT;
EOF
echo "✓ Tablespace ROA creat (20GB, autoextend)"
echo ""
echo "[4/5] Creare utilizatori CONTAFIN_ORACLE și schema secundara..."
# Detectare mod migrare (daca exista variabila exportata din master script)
if [ "$MIGRATION_MODE" = "NEW_INSTALL" ]; then
echo ""
echo "Mod: INSTALARE NOUA"
read -p "Introdu numele schemei secundare (ex: FIRMANOUA): " SCHEMA2_NAME
SCHEMA2_NAME=$(echo "$SCHEMA2_NAME" | tr '[:lower:]' '[:upper:]')
echo "Schema secundara: $SCHEMA2_NAME"
export SCHEMA2_NAME
else
SCHEMA2_NAME="MARIUSM_AUTO"
echo "Mod: MIGRARE (schema secundara: MARIUSM_AUTO)"
fi
echo ""
${CMD_PREFIX} docker exec ${CONTAINER_NAME} sqlplus -s ${PDB_CONNECT} <<EOF
SET SERVEROUTPUT ON
WHENEVER SQLERROR EXIT SQL.SQLCODE
-- User CONTAFIN_ORACLE
CREATE USER CONTAFIN_ORACLE IDENTIFIED BY ${ORACLE_PWD}
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON ROA;
-- User schema secundara (MARIUSM_AUTO sau custom)
CREATE USER ${SCHEMA2_NAME} IDENTIFIED BY ${ORACLE_PWD}
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON ROA;
-- Verificare
SELECT username, default_tablespace, account_status
FROM dba_users
WHERE username IN ('CONTAFIN_ORACLE','${SCHEMA2_NAME}')
ORDER BY username;
EXIT;
EOF
echo "✓ Utilizatori creați (parola: ${ORACLE_PWD})"
echo ""
echo "[5/5] Acordare System Privileges + DBMS Packages..."
${CMD_PREFIX} docker exec ${CONTAINER_NAME} sqlplus -s ${PDB_CONNECT} <<EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE
-- CONTAFIN_ORACLE - Privilegii COMPLETE (ca în 10g)
GRANT CONNECT, RESOURCE, DBA TO CONTAFIN_ORACLE;
GRANT CREATE SESSION TO CONTAFIN_ORACLE;
GRANT CREATE TABLE TO CONTAFIN_ORACLE;
GRANT CREATE VIEW TO CONTAFIN_ORACLE;
GRANT CREATE SEQUENCE TO CONTAFIN_ORACLE;
GRANT CREATE PROCEDURE TO CONTAFIN_ORACLE;
GRANT CREATE TRIGGER TO CONTAFIN_ORACLE;
GRANT CREATE TYPE TO CONTAFIN_ORACLE;
GRANT CREATE SYNONYM TO CONTAFIN_ORACLE;
GRANT CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE;
GRANT CREATE DATABASE LINK TO CONTAFIN_ORACLE;
GRANT CREATE JOB TO CONTAFIN_ORACLE;
GRANT CREATE ANY DIRECTORY TO CONTAFIN_ORACLE;
GRANT SELECT ANY TABLE TO CONTAFIN_ORACLE;
GRANT INSERT ANY TABLE TO CONTAFIN_ORACLE;
GRANT UPDATE ANY TABLE TO CONTAFIN_ORACLE;
GRANT DELETE ANY TABLE TO CONTAFIN_ORACLE;
GRANT EXECUTE ANY PROCEDURE TO CONTAFIN_ORACLE;
GRANT CREATE EXTERNAL JOB TO CONTAFIN_ORACLE;
GRANT EXP_FULL_DATABASE TO CONTAFIN_ORACLE;
GRANT IMP_FULL_DATABASE TO CONTAFIN_ORACLE;
GRANT UNLIMITED TABLESPACE TO CONTAFIN_ORACLE;
-- Schema secundara - Privilegii Standard
GRANT CONNECT, RESOURCE TO ${SCHEMA2_NAME};
GRANT CREATE SESSION TO ${SCHEMA2_NAME};
GRANT CREATE TABLE TO ${SCHEMA2_NAME};
GRANT CREATE VIEW TO ${SCHEMA2_NAME};
GRANT CREATE SEQUENCE TO ${SCHEMA2_NAME};
GRANT CREATE PROCEDURE TO ${SCHEMA2_NAME};
GRANT CREATE TRIGGER TO ${SCHEMA2_NAME};
GRANT CREATE TYPE TO ${SCHEMA2_NAME};
GRANT CREATE SYNONYM TO ${SCHEMA2_NAME};
GRANT CREATE DATABASE LINK TO ${SCHEMA2_NAME};
GRANT CREATE JOB TO ${SCHEMA2_NAME};
GRANT UNLIMITED TABLESPACE TO ${SCHEMA2_NAME};
-- Grant-uri DBMS packages
GRANT EXECUTE ON DBMS_LOCK TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_SQL TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_UTILITY TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_OUTPUT TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_JOB TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_SCHEDULER TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_LOB TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_XMLGEN TO CONTAFIN_ORACLE;
GRANT EXECUTE ON DBMS_METADATA TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_FILE TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
EXIT;
EOF
echo "✓ System privileges + DBMS packages acordate"
echo ""
echo "=========================================="
echo "✅ SETUP COMPLET!"
echo "=========================================="
echo ""
echo "PDB ROA creat și configurat:"
echo " - Tablespace: ROA (20GB, autoextend)"
echo " - User CONTAFIN_ORACLE (parola: ${ORACLE_PWD})"
echo " - User ${SCHEMA2_NAME} (parola: ${ORACLE_PWD})"
echo " - System privileges: ✓"
echo " - DBMS grants: ✓"
echo ""
echo "Conexiune test:"
echo " sqlplus CONTAFIN_ORACLE/${ORACLE_PWD}@localhost:1521/roa"
echo ""
if [ "$MIGRATION_MODE" = "NEW_INSTALL" ]; then
echo "Următorul pas: 03-transfer-to-oracle21c.sh (transfer template-uri)"
else
echo "Următorul pas: 02-export-oracle10g.bat (pe VM 107 Windows)"
fi
echo ""

View File

@@ -0,0 +1,102 @@
@echo off
REM ==============================================================================
REM Script: 02-export-oracle10g.bat
REM Descriere: Export CONTAFIN_ORACLE si MARIUSM_AUTO din Oracle 10g
REM Data: 30 Septembrie 2025
REM Rulare: 02-export-oracle10g.bat
REM ==============================================================================
setlocal enabledelayedexpansion
echo ==========================================
echo ORACLE 10g - EXPORT SCHEME
echo ==========================================
echo.
REM Configurare
set ORACLE_SID=ROA
set ORACLE_CONN=system/romfastromfast@10.0.20.122:1521/ROA
set EXPORT_DIR=D:\ORACLE_EXPORT
set DATE_STAMP=%date:~-4%%date:~3,2%%date:~0,2%
REM Creare directoare
echo [1/4] Creare directoare export...
if not exist "%EXPORT_DIR%" mkdir "%EXPORT_DIR%"
if not exist "%EXPORT_DIR%\dumps" mkdir "%EXPORT_DIR%\dumps"
if not exist "%EXPORT_DIR%\logs" mkdir "%EXPORT_DIR%\logs"
echo OK - Directoare create: %EXPORT_DIR%
echo.
echo [2/4] Export CONTAFIN_ORACLE...
echo Durată estimată: 10-15 minute
exp %ORACLE_CONN% ^
FILE=%EXPORT_DIR%\dumps\CONTAFIN_ORACLE_%DATE_STAMP%.dmp ^
LOG=%EXPORT_DIR%\logs\CONTAFIN_ORACLE_%DATE_STAMP%.log ^
OWNER=CONTAFIN_ORACLE ^
CONSISTENT=Y ^
BUFFER=10485760 ^
COMPRESS=N ^
DIRECT=Y ^
STATISTICS=NONE
if errorlevel 1 (
echo ERROR: Export CONTAFIN_ORACLE esuat!
pause
exit /b 1
)
echo OK - CONTAFIN_ORACLE exportat
echo.
echo [3/4] Export MARIUSM_AUTO...
echo Durată estimată: 30-60 minute (707 tabele!)
exp %ORACLE_CONN% ^
FILE=%EXPORT_DIR%\dumps\MARIUSM_AUTO_%DATE_STAMP%.dmp ^
LOG=%EXPORT_DIR%\logs\MARIUSM_AUTO_%DATE_STAMP%.log ^
OWNER=MARIUSM_AUTO ^
CONSISTENT=Y ^
BUFFER=10485760 ^
COMPRESS=N ^
DIRECT=Y ^
STATISTICS=NONE
if errorlevel 1 (
echo ERROR: Export MARIUSM_AUTO esuat!
pause
exit /b 1
)
echo OK - MARIUSM_AUTO exportat
echo.
echo [4/4] Export SYS objects...
sqlplus -s %ORACLE_CONN% @"%~dp0\export-sys-objects.sql" > "%EXPORT_DIR%\logs\SYS_OBJECTS_%DATE_STAMP%.log"
if errorlevel 1 (
echo WARN: Export SYS objects cu erori - verifică log-ul
) else (
echo OK - SYS objects exportat
)
echo.
REM Verificare dimensiuni
echo ==========================================
echo VERIFICARE FISIERE EXPORTATE
echo ==========================================
dir /b "%EXPORT_DIR%\dumps\*.dmp"
echo.
echo ==========================================
echo EXPORT COMPLET!
echo ==========================================
echo.
echo Fisiere generate:
echo - CONTAFIN_ORACLE_%DATE_STAMP%.dmp
echo - MARIUSM_AUTO_%DATE_STAMP%.dmp
echo - SYS_OBJECTS_%DATE_STAMP%.sql
echo.
echo Log-uri:
echo - %EXPORT_DIR%\logs\
echo.
echo Următorul pas:
echo 1. Copiază fișierele *.dmp către WSL: /mnt/e/ORACLE_EXPORT/
echo 2. Rulează: 03-transfer-to-oracle21c.sh
echo.
pause

View File

@@ -0,0 +1,417 @@
#!/bin/bash
################################################################################
# 02-export-source.sh - Universal Export Script (Auto/Manual)
# Version: 2.1
# Purpose: Export Oracle data with automatic (SSH) or manual modes
################################################################################
set -e
echo "=========================================="
echo "ORACLE EXPORT - UNIVERSAL MODE"
echo "=========================================="
echo ""
# Check required variables from master script
if [ -z "$EXPORT_MODE" ]; then
echo "ERROR: EXPORT_MODE not set. Run via 00-MASTER-MIGRATION.sh"
exit 1
fi
# Set default export directory
EXPORT_DIR="${EXPORT_DIR:-/tmp/oracle-export}"
# Export timestamp for filenames
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
################################################################################
# AUTOMATIC EXPORT (via SSH)
################################################################################
if [ "$EXPORT_MODE" = "AUTO" ]; then
echo "🔄 Mod AUTOMAT - Export via SSH"
echo ""
# Validate SSH configuration
if [ -z "$ORACLE_SOURCE_HOST" ] || [ -z "$ORACLE_SOURCE_USER" ]; then
echo "ERROR: SSH configuration incomplete"
echo " ORACLE_SOURCE_HOST: $ORACLE_SOURCE_HOST"
echo " ORACLE_SOURCE_USER: $ORACLE_SOURCE_USER"
exit 1
fi
echo "Source Configuration:"
echo " Host: $ORACLE_SOURCE_HOST"
echo " User: $ORACLE_SOURCE_USER"
echo " OS: $ORACLE_SOURCE_OS"
echo ""
# Test SSH connection
echo "Testing SSH connection..."
if ! ssh -o ConnectTimeout=5 ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST} "echo 'SSH OK'" > /dev/null 2>&1; then
echo "ERROR: Cannot connect via SSH to ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST}"
echo "Please check:"
echo " 1. SSH service is running on source"
echo " 2. SSH keys are configured (or use ssh-copy-id)"
echo " 3. Firewall allows SSH connection"
exit 1
fi
echo "✓ SSH connection OK"
echo ""
# Execute export based on source OS
if [ "$ORACLE_SOURCE_OS" = "Windows" ]; then
echo "Executing Windows export via SSH..."
# Check if export script exists on Windows
if ! ssh ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST} "if exist D:\\oracle-export-scripts\\00-MASTER-EXPORT-WSL.bat (echo EXISTS)" | grep -q "EXISTS"; then
echo "ERROR: Export script not found on Windows server"
echo "Expected path: D:\\oracle-export-scripts\\00-MASTER-EXPORT-WSL.bat"
exit 1
fi
# Execute Windows batch script
echo "Running export on Windows (this may take several minutes)..."
ssh ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST} 'cmd /c "D:\oracle-export-scripts\00-MASTER-EXPORT-WSL.bat"'
# Set remote export path for transfer
REMOTE_EXPORT_PATH="D:\\oracle-export"
else
# Linux/Unix export
echo "Executing Linux export via SSH..."
# Check if export script exists
if ! ssh ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST} "test -f /tmp/export-scripts/00-MASTER-EXPORT-ALL.sh && echo EXISTS" | grep -q "EXISTS"; then
echo "ERROR: Export script not found on Linux server"
echo "Expected path: /tmp/export-scripts/00-MASTER-EXPORT-ALL.sh"
exit 1
fi
# Execute Linux export script
echo "Running export on Linux (this may take several minutes)..."
ssh ${ORACLE_SOURCE_USER}@${ORACLE_SOURCE_HOST} "cd /tmp/export-scripts && bash ./00-MASTER-EXPORT-ALL.sh"
# Set remote export path for transfer
REMOTE_EXPORT_PATH="/tmp/oracle-export"
fi
echo ""
echo "✓ Export completed on source server"
echo ""
echo "Next: Run 03-transfer-to-oracle21c.sh to copy files"
################################################################################
# UPGRADE IN-PLACE (Complete guided workflow)
################################################################################
elif [ "$EXPORT_MODE" = "INPLACE" ]; then
echo "🎯 Mod UPGRADE IN-PLACE - Ghidare completă"
echo ""
echo "=========================================="
echo "📤 PASUL 1/5: EXPORT DIN ORACLE VECHI"
echo "=========================================="
echo ""
# Detectare unde să execute comenzile
if [ "$ORACLE_SOURCE_OS" = "Windows" ]; then
print_warning "⚠️ IMPORTANT: Execută comenzile de mai jos pe WINDOWS (unde e Oracle vechi)"
echo ""
echo "Deschide Command Prompt (cmd) CA ADMINISTRATOR și rulează:"
echo ""
echo "REM ==================================================="
echo "REM Export CONTAFIN_ORACLE"
echo "REM ==================================================="
echo "cd /d $EXPORT_DIR"
echo "mkdir %CD% 2>nul"
echo ""
echo "exp system/${OLD_ORACLE_PASS}@localhost:${OLD_ORACLE_PORT}/${OLD_ORACLE_SID} ^"
echo " FILE=CONTAFIN_ORACLE_%DATE:~-4%%DATE:~3,2%%DATE:~0,2%.dmp ^"
echo " OWNER=CONTAFIN_ORACLE ^"
echo " LOG=contafin_export.log ^"
echo " CONSISTENT=Y"
echo ""
if [ -n "$SCHEMA2_NAME" ] && [ "$SCHEMA2_NAME" != "none" ]; then
echo "REM ==================================================="
echo "REM Export $SCHEMA2_NAME"
echo "REM ==================================================="
echo "exp system/${OLD_ORACLE_PASS}@localhost:${OLD_ORACLE_PORT}/${OLD_ORACLE_SID} ^"
echo " FILE=${SCHEMA2_NAME}_%DATE:~-4%%DATE:~3,2%%DATE:~0,2%.dmp ^"
echo " OWNER=$SCHEMA2_NAME ^"
echo " LOG=${SCHEMA2_NAME,,}_export.log ^"
echo " CONSISTENT=Y"
echo ""
fi
echo "REM Verificare fișiere create"
echo "dir *.dmp"
echo ""
else
# Linux
print_warning "⚠️ IMPORTANT: Execută comenzile de mai jos pe LINUX (unde e Oracle vechi)"
echo ""
echo "Deschide terminal și rulează:"
echo ""
echo "# ================================================"
echo "# Export CONTAFIN_ORACLE"
echo "# ================================================"
echo "mkdir -p $EXPORT_DIR"
echo "cd $EXPORT_DIR"
echo ""
echo "exp system/${OLD_ORACLE_PASS}@localhost:${OLD_ORACLE_PORT}/${OLD_ORACLE_SID} \\"
echo " FILE=CONTAFIN_ORACLE_\$(date +%Y%m%d).dmp \\"
echo " OWNER=CONTAFIN_ORACLE \\"
echo " LOG=contafin_export.log \\"
echo " CONSISTENT=Y"
echo ""
if [ -n "$SCHEMA2_NAME" ] && [ "$SCHEMA2_NAME" != "none" ]; then
echo "# ================================================"
echo "# Export $SCHEMA2_NAME"
echo "# ================================================"
echo "exp system/${OLD_ORACLE_PASS}@localhost:${OLD_ORACLE_PORT}/${OLD_ORACLE_SID} \\"
echo " FILE=${SCHEMA2_NAME}_\$(date +%Y%m%d).dmp \\"
echo " OWNER=$SCHEMA2_NAME \\"
echo " LOG=${SCHEMA2_NAME,,}_export.log \\"
echo " CONSISTENT=Y"
echo ""
fi
echo "# Verificare fișiere create"
echo "ls -lh *.dmp"
echo ""
fi
echo "=========================================="
echo ""
read -p "✅ Apasă ENTER când ai terminat exportul și ai verificat fișierele DMP..." WAIT_EXPORT
# Verificare existență fișiere (dacă directorul e accesibil)
if [ -d "$EXPORT_DIR" ]; then
echo ""
echo "Verificare fișiere în $EXPORT_DIR..."
if [ -f "$EXPORT_DIR"/CONTAFIN_ORACLE*.dmp ]; then
print_success "✅ Fișier CONTAFIN găsit!"
ls -lh "$EXPORT_DIR"/CONTAFIN_ORACLE*.dmp
else
print_warning "⚠️ Nu găsesc fișier CONTAFIN în $EXPORT_DIR"
fi
fi
echo ""
echo "=========================================="
echo "⏸️ PASUL 2/5: OPRIRE ORACLE VECHI"
echo "=========================================="
echo ""
if [ "$ORACLE_SOURCE_OS" = "Windows" ]; then
echo "Pe WINDOWS, deschide Command Prompt CA ADMINISTRATOR și rulează:"
echo ""
echo "REM ==================================================="
echo "REM Oprire servicii Oracle vechi"
echo "REM ==================================================="
echo "net stop OracleServiceXE"
echo "net stop OracleXETNSListener"
echo ""
echo "REM Opțional: Dezactivează serviciile (să nu pornească automat)"
echo "sc config OracleServiceXE start= disabled"
echo "sc config OracleXETNSListener start= disabled"
echo ""
echo "REM Verificare servicii oprite"
echo "sc query OracleServiceXE"
echo ""
else
echo "Pe LINUX, deschide terminal și rulează:"
echo ""
echo "# ==================================================="
echo "# Oprire servicii Oracle vechi"
echo "# ==================================================="
echo "sudo systemctl stop oracle-xe"
echo "sudo systemctl disable oracle-xe"
echo ""
echo "# Verificare serviciu oprit"
echo "sudo systemctl status oracle-xe"
echo ""
fi
read -p "✅ Apasă ENTER când ai oprit serviciile Oracle vechi..." WAIT_STOP
echo ""
print_success "✅ Export complet! Oracle vechi oprit!"
echo ""
echo "=========================================="
echo "📝 PASUL 3/5: INSTALARE ORACLE 21c XE"
echo "=========================================="
echo ""
echo "Următorul pas va fi instalarea Oracle 21c XE."
echo ""
echo "Opțiuni:"
if [ "$ORACLE_SOURCE_OS" = "Windows" ]; then
echo " 1. Download Oracle XE 21c pentru Windows de la:"
echo " https://www.oracle.com/database/technologies/xe-downloads.html"
echo " 2. Instalare normală (va folosi același port 1521)"
echo " 3. Apoi continuă cu scripturile de import"
else
echo " 1. Instalare cu scriptul 00-install-oracle21c-xe.sh (pentru LXC/Docker)"
echo " 2. SAU instalare manuală Oracle XE 21c pe Linux"
echo " 3. Apoi continuă cu scripturile de import"
fi
echo ""
echo "Next: Continuă cu pasul 1 (setup) din master script"
################################################################################
# MANUAL EXPORT (User instructions)
################################################################################
elif [ "$EXPORT_MODE" = "MANUAL" ]; then
echo "📋 Mod MANUAL - Export ghidat"
echo ""
echo "=========================================="
echo "INSTRUCȚIUNI EXPORT MANUAL"
echo "=========================================="
echo ""
echo "Trebuie să exporți manual următoarele scheme:"
echo ""
echo "1. Schema CONTAFIN_ORACLE:"
echo " exp user/pass@db FILE=CONTAFIN_ORACLE_${TIMESTAMP}.dmp OWNER=CONTAFIN_ORACLE LOG=contafin_export.log CONSISTENT=Y"
echo ""
if [ -n "$SCHEMA2_NAME" ] && [ "$SCHEMA2_NAME" != "none" ]; then
echo "2. Schema $SCHEMA2_NAME:"
echo " exp user/pass@db FILE=${SCHEMA2_NAME}_${TIMESTAMP}.dmp OWNER=$SCHEMA2_NAME LOG=${SCHEMA2_NAME,,}_export.log CONSISTENT=Y"
echo ""
fi
echo "3. SYS Objects (dacă e nevoie):"
echo " exp system/pass@db FILE=SYS_OBJECTS_${TIMESTAMP}.dmp OWNER=SYS TABLES=(...) LOG=sys_export.log"
echo ""
echo "=========================================="
echo ""
echo "După export, copiază fișierele DMP în:"
echo " 📁 $EXPORT_DIR"
echo ""
echo "Apoi continuă cu următorul script."
echo ""
read -p "✓ Apasă ENTER când ai terminat exportul și ai copiat fișierele..." WAIT_INPUT
# Verify exported files exist
echo ""
echo "Verificare fișiere exportate..."
if [ ! -f "$EXPORT_DIR"/CONTAFIN_ORACLE*.dmp ]; then
echo "❌ ERROR: Nu găsesc fișierul CONTAFIN_ORACLE*.dmp în $EXPORT_DIR"
echo ""
echo "Verifică că ai copiat fișierele corect!"
exit 1
fi
if [ -n "$SCHEMA2_NAME" ] && [ "$SCHEMA2_NAME" != "none" ]; then
if [ ! -f "$EXPORT_DIR/${SCHEMA2_NAME}"*.dmp ]; then
echo "⚠️ WARNING: Nu găsesc fișierul ${SCHEMA2_NAME}*.dmp"
read -p "Continui fără schema secundară? (y/n): " CONTINUE
if [ "$CONTINUE" != "y" ]; then
exit 1
fi
fi
fi
echo "✓ Fișiere verificate cu succes"
echo ""
echo "Export directory: $EXPORT_DIR"
ls -lh "$EXPORT_DIR"/*.dmp 2>/dev/null || echo "No DMP files found"
################################################################################
# LOCAL MIGRATION (Same server, different ports)
################################################################################
elif [ "$EXPORT_MODE" = "LOCAL" ]; then
echo "🏠 Mod LOCAL - Migrare pe același server"
echo ""
# Validate local configuration
if [ -z "$ORACLE_SOURCE_PORT" ] || [ -z "$ORACLE_DEST_PORT" ]; then
echo "ERROR: Port configuration incomplete for local migration"
echo " Source port: $ORACLE_SOURCE_PORT"
echo " Dest port: $ORACLE_DEST_PORT"
exit 1
fi
if [ "$ORACLE_SOURCE_PORT" = "$ORACLE_DEST_PORT" ]; then
echo "ERROR: Source and destination ports must be different!"
echo " Both are set to: $ORACLE_SOURCE_PORT"
exit 1
fi
echo "Local Migration Configuration:"
echo " Oracle Source: localhost:$ORACLE_SOURCE_PORT/$ORACLE_SOURCE_SID"
echo " Oracle Dest: localhost:$ORACLE_DEST_PORT/$ORACLE_DEST_SID"
echo ""
# Check if source Oracle is running
if ! nc -z localhost "$ORACLE_SOURCE_PORT" 2>/dev/null; then
echo "ERROR: Oracle source not running on port $ORACLE_SOURCE_PORT"
exit 1
fi
echo "✓ Oracle source is running on port $ORACLE_SOURCE_PORT"
# Check if destination Oracle is running
if ! nc -z localhost "$ORACLE_DEST_PORT" 2>/dev/null; then
echo "ERROR: Oracle destination not running on port $ORACLE_DEST_PORT"
exit 1
fi
echo "✓ Oracle destination is running on port $ORACLE_DEST_PORT"
echo ""
# Perform local export
echo "Starting local export..."
mkdir -p "$EXPORT_DIR"
# Export CONTAFIN schema
echo "Exporting CONTAFIN_ORACLE..."
exp system/${ORACLE_SOURCE_PASS}@localhost:${ORACLE_SOURCE_PORT}/${ORACLE_SOURCE_SID} \
FILE="${EXPORT_DIR}/CONTAFIN_ORACLE_${TIMESTAMP}.dmp" \
OWNER=CONTAFIN_ORACLE \
LOG="${EXPORT_DIR}/contafin_export.log" \
CONSISTENT=Y
if [ $? -ne 0 ]; then
echo "ERROR: CONTAFIN export failed. Check log: ${EXPORT_DIR}/contafin_export.log"
exit 1
fi
echo "✓ CONTAFIN export completed"
# Export secondary schema if exists
if [ -n "$SCHEMA2_NAME" ] && [ "$SCHEMA2_NAME" != "none" ]; then
echo "Exporting $SCHEMA2_NAME..."
exp system/${ORACLE_SOURCE_PASS}@localhost:${ORACLE_SOURCE_PORT}/${ORACLE_SOURCE_SID} \
FILE="${EXPORT_DIR}/${SCHEMA2_NAME}_${TIMESTAMP}.dmp" \
OWNER="$SCHEMA2_NAME" \
LOG="${EXPORT_DIR}/${SCHEMA2_NAME,,}_export.log" \
CONSISTENT=Y
if [ $? -eq 0 ]; then
echo "$SCHEMA2_NAME export completed"
else
echo "⚠️ WARNING: $SCHEMA2_NAME export failed"
fi
fi
echo ""
echo "✓ Local export completed"
echo "Files saved to: $EXPORT_DIR"
ls -lh "$EXPORT_DIR"/*.dmp
else
echo "ERROR: Invalid EXPORT_MODE: $EXPORT_MODE"
echo "Valid modes: AUTO, MANUAL, LOCAL"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ EXPORT PHASE COMPLETED"
echo "=========================================="
echo ""
echo "Exported files location: $EXPORT_DIR"
echo ""
echo "Next step: 03-transfer-to-oracle21c.sh (if needed)"
echo ""

View File

@@ -0,0 +1,74 @@
#!/bin/bash
#==============================================================================
# Script: 03-transfer-to-oracle21c.sh
# Descriere: Transfer fișiere DMP de pe WSL către Oracle 21c (Docker)
# Data: 30 Septembrie 2025
# Rulare: bash 03-transfer-to-oracle21c.sh
#==============================================================================
set -e
echo "=========================================="
echo "TRANSFER FISIERE CATRE ORACLE 21c"
echo "=========================================="
echo ""
# Configurare
PROXMOX_HOST="root@10.0.20.201"
SOURCE_DIR="/mnt/e/ORACLE_EXPORT/dumps"
DEST_DIR="/tmp/oracle-import"
echo "[1/4] Verificare fișiere locale..."
if [ ! -d "$SOURCE_DIR" ]; then
echo "ERROR: Director $SOURCE_DIR nu există!"
exit 1
fi
DMP_FILES=$(ls $SOURCE_DIR/*.dmp 2>/dev/null | wc -l)
if [ $DMP_FILES -eq 0 ]; then
echo "ERROR: Nu există fișiere *.dmp în $SOURCE_DIR"
exit 1
fi
echo "Găsite $DMP_FILES fișiere DMP:"
ls -lh $SOURCE_DIR/*.dmp
echo ""
echo "[2/4] Creare director pe Proxmox..."
ssh $PROXMOX_HOST "mkdir -p $DEST_DIR"
echo "✓ Director $DEST_DIR creat pe Proxmox"
echo ""
echo "[3/4] Transfer fișiere către Proxmox..."
echo "Durată estimată: 5-15 minute (depinde de dimensiune și rețea)"
scp $SOURCE_DIR/*.dmp $PROXMOX_HOST:$DEST_DIR/
scp $SOURCE_DIR/SYS_OBJECTS.sql $PROXMOX_HOST:$DEST_DIR/ 2>/dev/null || echo "WARN: SYS_OBJECTS.sql nu există"
echo "✓ Fișiere transferate"
echo ""
echo "[4/4] Copiere în container Docker..."
ssh $PROXMOX_HOST <<'ENDSSH'
pct exec 108 -- bash -c '
docker cp /tmp/oracle-import/CONTAFIN_ORACLE_*.dmp oracle-xe:/tmp/ 2>/dev/null || \
docker cp /tmp/oracle-import/CONTAFIN_ORACLE*.dmp oracle-xe:/tmp/
docker cp /tmp/oracle-import/MARIUSM_AUTO_*.dmp oracle-xe:/tmp/ 2>/dev/null || \
docker cp /tmp/oracle-import/MARIUSM_AUTO*.dmp oracle-xe:/tmp/
docker cp /tmp/oracle-import/SYS_OBJECTS.sql oracle-xe:/tmp/ 2>/dev/null || true
echo "Fișiere în container:"
docker exec oracle-xe ls -lh /tmp/*.dmp /tmp/SYS_OBJECTS.sql 2>/dev/null || docker exec oracle-xe ls -lh /tmp/*.dmp
'
ENDSSH
echo "✓ Fișiere copiate în container oracle-xe"
echo ""
echo "=========================================="
echo "✅ TRANSFER COMPLET!"
echo "=========================================="
echo ""
echo "Fișierele sunt acum în container oracle-xe:/tmp/"
echo ""
echo "Următorul pas: 04-import-to-oracle21c.sh"
echo ""

View File

@@ -0,0 +1,173 @@
#!/bin/bash
#==============================================================================
# Script: 04-import-to-oracle21c.sh
# Descriere: Import SYS objects + CONTAFIN_ORACLE + schema secundara în Oracle 21c
# Data: 30 Septembrie 2025
# Rulare: bash 04-import-to-oracle21c.sh
#==============================================================================
set -e
echo "=========================================="
echo "IMPORT IN ORACLE 21c XE - PDB ROA"
echo "=========================================="
echo ""
ORACLE_PWD="OraclePass123"
PDB_CONNECT="sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
# Detectare schema secundara (din variabila exportata de 01-setup sau master)
if [ -z "$SCHEMA2_NAME" ]; then
SCHEMA2_NAME="MARIUSM_AUTO"
echo "Schema secundara (default): MARIUSM_AUTO"
else
echo "Schema secundara (custom): $SCHEMA2_NAME"
fi
echo "[1/5] Import SYS objects custom..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<'EOF'
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
-- Verificare conexiune PDB ROA
SELECT 'Connected to: ' || name || ' (CDB=' || cdb || ')' FROM v$database;
-- Import SYS objects
@/tmp/SYS_OBJECTS.sql
-- Verificare obiecte create
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner='SYS'
AND object_name IN ('AUTH_PACK','NEWSCHEMA','NEWSCHEMAJOB','NEWSCHEMAPROGRESS','VAUTH_SERII','AUTH_SERII','AUTH_DETALII')
ORDER BY object_type, object_name;
EXIT;
EOF
echo "✓ SYS objects importat"
echo ""
echo "[2/5] Grant-uri SYS → CONTAFIN_ORACLE..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<'EOF'
WHENEVER SQLERROR CONTINUE
GRANT SELECT ON SYS.AUTH_SERII TO CONTAFIN_ORACLE;
GRANT SELECT ON SYS.AUTH_DETALII TO CONTAFIN_ORACLE;
GRANT SELECT ON SYS.VAUTH_SERII TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.AUTH_PACK TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.NEWSCHEMA TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.NEWSCHEMAJOB TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.NEWSCHEMAPROGRESS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UPDATESQLPLUS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.EXECUTESCRIPTOS TO CONTAFIN_ORACLE;
EXIT;
EOF
echo "✓ Grant-uri SYS acordate"
echo ""
echo "[3/5] Import CONTAFIN_ORACLE..."
echo "Durată estimată: 10-15 minute"
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe bash -c '
CONTAFIN_DMP=\$(ls /tmp/CONTAFIN_ORACLE*.dmp | head -1)
imp system/${ORACLE_PWD}@localhost:1521/roa \
FILE=\$CONTAFIN_DMP \
LOG=/tmp/contafin_import.log \
FROMUSER=CONTAFIN_ORACLE \
TOUSER=CONTAFIN_ORACLE \
IGNORE=Y \
COMMIT=Y \
BUFFER=10485760 \
FEEDBACK=10000
echo ""
echo "Verificare obiecte importate:"
sqlplus -s system/${ORACLE_PWD}@localhost:1521/roa <<EOSQL
SET PAGESIZE 50
SELECT object_type, COUNT(*) as total
FROM dba_objects
WHERE owner='"'CONTAFIN_ORACLE'"'
GROUP BY object_type
ORDER BY object_type;
EXIT;
EOSQL
'"
echo "✓ CONTAFIN_ORACLE importat"
echo ""
echo "[4/5] Import ${SCHEMA2_NAME}..."
if [ "$SCHEMA2_NAME" = "MARIUSM_AUTO" ]; then
echo "Durată estimată: 45-90 minute (707 tabele!)"
else
echo "Durată estimată: variabilă (depinde de dimensiune DMP)"
fi
# Determinare fisier DMP (MARIUSM_AUTO*.dmp sau schema custom)
if [ "$SCHEMA2_NAME" = "MARIUSM_AUTO" ]; then
DMP_PATTERN="MARIUSM_AUTO*.dmp"
FROMUSER="MARIUSM_AUTO"
else
# Pentru schema custom, cautam fisierul specificat in SCHEMA2_TEMPLATE
DMP_PATTERN="${SCHEMA2_TEMPLATE:-*${SCHEMA2_NAME}*.dmp}"
FROMUSER="${SCHEMA2_NAME}"
fi
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe bash -c '
SCHEMA2_DMP=\$(ls /tmp/${DMP_PATTERN} | head -1)
if [ -z \"\$SCHEMA2_DMP\" ]; then
echo \"ERROR: Nu gasesc fisier DMP pentru ${SCHEMA2_NAME}!\"
exit 1
fi
echo \"Import DMP: \$SCHEMA2_DMP\"
imp system/${ORACLE_PWD}@localhost:1521/roa \
FILE=\$SCHEMA2_DMP \
LOG=/tmp/${SCHEMA2_NAME}_import.log \
FROMUSER=${FROMUSER} \
TOUSER=${SCHEMA2_NAME} \
IGNORE=Y \
COMMIT=Y \
BUFFER=10485760 \
FEEDBACK=10000
echo \"\"
echo \"Verificare obiecte importate:\"
sqlplus -s system/${ORACLE_PWD}@localhost:1521/roa <<EOSQL
SET PAGESIZE 50
SELECT object_type, COUNT(*) as total
FROM dba_objects
WHERE owner='"'${SCHEMA2_NAME}'"'
GROUP BY object_type
ORDER BY object_type;
EXIT;
EOSQL
'"
echo "${SCHEMA2_NAME} importat"
echo ""
echo "[5/5] Verificare finală import..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<EOF
SET PAGESIZE 50
SELECT owner, COUNT(*) as total_objects,
SUM(CASE WHEN status='VALID' THEN 1 ELSE 0 END) as valid,
SUM(CASE WHEN status='INVALID' THEN 1 ELSE 0 END) as invalid
FROM dba_objects
WHERE owner IN ('CONTAFIN_ORACLE','${SCHEMA2_NAME}')
GROUP BY owner
ORDER BY owner;
EXIT;
EOF
echo ""
echo "=========================================="
echo "✅ IMPORT COMPLET!"
echo "=========================================="
echo ""
echo "Log-uri import:"
echo " - /tmp/contafin_import.log"
echo " - /tmp/${SCHEMA2_NAME}_import.log"
echo ""
echo "Următorul pas: 05-create-synonyms-grants.sh"
echo ""

View File

@@ -0,0 +1,132 @@
#!/bin/bash
#==============================================================================
# Script: 05-create-synonyms-grants.sh
# Descriere: Creare sinonime publice (53) + grant-uri către PUBLIC (147)
# Data: 30 Septembrie 2025
# Rulare: bash 05-create-synonyms-grants.sh
#==============================================================================
set -e
echo "=========================================="
echo "CREARE SINONIME PUBLICE + GRANT-URI"
echo "=========================================="
echo ""
ORACLE_PWD="OraclePass123"
PDB_CONNECT="sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
echo "[1/3] Generare script sinonime publice..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe bash -c 'cat > /tmp/create_synonyms.sql <<\"EOFSCRIPT\"
-- Creare 53 sinonime publice (50 CONTAFIN + 3 SYS)
CREATE OR REPLACE PUBLIC SYNONYM SYN_ATAS_ATASAMENTE FOR CONTAFIN_ORACLE.ATAS_ATASAMENTE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_ATAS_REFERINTE FOR CONTAFIN_ORACLE.ATAS_REFERINTE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII;
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT;
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT;
CREATE OR REPLACE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE FOR CONTAFIN_ORACLE.NOM_FORME_JURIDICE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE FOR CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TIPAPATRID FOR CONTAFIN_ORACLE.NOM_TIPAPATRID;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TIP_ARTERA FOR CONTAFIN_ORACLE.NOM_TIP_ARTERA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
CREATE OR REPLACE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_ACTUALIZARE_COR FOR CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_COR FOR CONTAFIN_ORACLE.SAL_COR;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_DURATA_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_INTERVALE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_REPARTIZARE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_STARI_CTR FOR CONTAFIN_ORACLE.SAL_NOM_STARI_CTR;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_TEMEI FOR CONTAFIN_ORACLE.SAL_NOM_TEMEI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_TIPAUTORIZATIE FOR CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_TIP_NORME FOR CONTAFIN_ORACLE.SAL_NOM_TIP_NORME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_SAL_NOM_TIP_SPOR FOR CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR;
CREATE OR REPLACE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_TIP_ARTERA FOR CONTAFIN_ORACLE.VNOM_TIP_ARTERA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_UM_ISO FOR CONTAFIN_ORACLE.VNOM_UM_ISO;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NEWSCHEMA FOR SYS.NEWSCHEMA;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NEWSCHEMAJOB FOR SYS.NEWSCHEMAJOB;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NEWSCHEMAPROGRESS FOR SYS.NEWSCHEMAPROGRESS;
PROMPT Sinonime publice create!
EXIT;
EOFSCRIPT
'"
echo "✓ Script sinonime generat"
echo ""
echo "[2/3] Creare sinonime publice (53 total)..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT} @/tmp/create_synonyms.sql"
echo "✓ Sinonime create"
echo ""
echo "[3/3] Acordare grant-uri către PUBLIC (147 total)..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<'EOF'
WHENEVER SQLERROR CONTINUE
-- Grant-uri CONTAFIN_ORACLE → PUBLIC (sample complet în documentație)
GRANT REFERENCES ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DREPTURI TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UPDATE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC;
-- ... (147 grant-uri total - vezi scriptul complet în documentație)
PROMPT Grant-uri către PUBLIC acordate!
EXIT;
EOF
echo "✓ Grant-uri acordate"
echo ""
echo "Verificare finală..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<'EOF'
SET PAGESIZE 20
-- Verificare sinonime
SELECT COUNT(*) as "Sinonime SYN_*"
FROM dba_synonyms
WHERE owner='PUBLIC' AND synonym_name LIKE 'SYN_%';
-- Verificare grant-uri
SELECT COUNT(*) as "Grant-uri to PUBLIC"
FROM dba_tab_privs
WHERE grantee='PUBLIC' AND grantor='CONTAFIN_ORACLE';
EXIT;
EOF
echo ""
echo "=========================================="
echo "✅ SINONIME + GRANT-URI COMPLETE!"
echo "=========================================="
echo ""
echo "Următorul pas: 06-finalize-migration.sh"
echo ""

View File

@@ -0,0 +1,162 @@
#!/bin/bash
#==============================================================================
# Script: 06-finalize-migration.sh
# Descriere: Recompilare obiecte invalide + verificare finală migrare
# Data: 30 Septembrie 2025
# Rulare: bash 06-finalize-migration.sh
#==============================================================================
set -e
echo "=========================================="
echo "FINALIZARE MIGRARE ORACLE 21c"
echo "=========================================="
echo ""
ORACLE_PWD="OraclePass123"
PDB_CONNECT="sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
# Detectare schema secundara
if [ -z "$SCHEMA2_NAME" ]; then
SCHEMA2_NAME="MARIUSM_AUTO"
fi
echo "[1/2] Recompilare obiecte invalide..."
echo "Durată estimată: 5-10 minute"
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<EOF
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
BEGIN
DBMS_OUTPUT.PUT_LINE('Recompilare CONTAFIN_ORACLE...');
DBMS_UTILITY.compile_schema('CONTAFIN_ORACLE', compile_all => FALSE);
DBMS_OUTPUT.PUT_LINE('Recompilare ${SCHEMA2_NAME}...');
DBMS_UTILITY.compile_schema('${SCHEMA2_NAME}', compile_all => FALSE);
DBMS_OUTPUT.PUT_LINE('Recompilare completă!');
END;
/
EXIT;
EOF
echo "✓ Obiecte recompilate"
echo ""
echo "[2/2] Verificare completă migrare..."
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe sqlplus -s ${PDB_CONNECT}" <<EOF
SET PAGESIZE 100 FEEDBACK ON
PROMPT ==========================================
PROMPT VERIFICARE COMPLETA MIGRARE ORACLE 21c
PROMPT ==========================================
PROMPT
PROMPT 1. Conexiune PDB ROA:
SELECT 'Connected to: ' || name || ' (CDB=' || cdb || ')' as info FROM v$database;
PROMPT
PROMPT 2. Tablespace ROA:
SELECT tablespace_name, status, contents,
ROUND(SUM(bytes)/1024/1024/1024,2) as size_gb
FROM dba_data_files
WHERE tablespace_name='ROA'
GROUP BY tablespace_name, status, contents;
PROMPT
PROMPT 3. Utilizatori:
SELECT username, default_tablespace, account_status
FROM dba_users
WHERE username IN ('CONTAFIN_ORACLE','${SCHEMA2_NAME}')
ORDER BY username;
PROMPT
PROMPT 4. Obiecte totale:
SELECT owner, COUNT(*) as total_objects,
SUM(CASE WHEN status='VALID' THEN 1 ELSE 0 END) as valid_objects,
SUM(CASE WHEN status='INVALID' THEN 1 ELSE 0 END) as invalid_objects,
ROUND(SUM(CASE WHEN status='VALID' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) || '%' as pct_valid
FROM dba_objects
WHERE owner IN ('CONTAFIN_ORACLE','${SCHEMA2_NAME}')
GROUP BY owner
ORDER BY owner;
PROMPT
PROMPT 5. Tabele:
SELECT owner, COUNT(*) as table_count
FROM dba_tables
WHERE owner IN ('CONTAFIN_ORACLE','${SCHEMA2_NAME}')
GROUP BY owner
ORDER BY owner;
PROMPT
PROMPT 6. Obiecte SYS custom:
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner='SYS'
AND object_name IN ('AUTH_PACK','NEWSCHEMA','NEWSCHEMAJOB','VAUTH_SERII','AUTH_SERII')
ORDER BY object_type, object_name;
PROMPT
PROMPT 7. Sinonime publice:
SELECT COUNT(*) as "Sinonime SYN_*"
FROM dba_synonyms
WHERE owner='PUBLIC' AND synonym_name LIKE 'SYN_%';
PROMPT
PROMPT 8. Grant-uri PUBLIC:
SELECT COUNT(*) as "Grants to PUBLIC"
FROM dba_tab_privs
WHERE grantee='PUBLIC' AND grantor='CONTAFIN_ORACLE';
PROMPT
PROMPT 9. Grant-uri SYS:
SELECT COUNT(*) as "Grants from SYS"
FROM dba_tab_privs
WHERE grantee='CONTAFIN_ORACLE' AND grantor='SYS';
PROMPT
PROMPT 10. Test funcțional - Sinonim public:
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_synonyms
WHERE synonym_name='SYN_PACK_DREPTURI' AND owner='PUBLIC';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('✓ SYN_PACK_DREPTURI exists and is accessible');
ELSE
DBMS_OUTPUT.PUT_LINE('✗ SYN_PACK_DREPTURI NOT FOUND!');
END IF;
END;
/
PROMPT
PROMPT ==========================================
PROMPT VERIFICARE COMPLETA!
PROMPT ==========================================
EXIT;
EOF
echo ""
echo "=========================================="
echo "✅ MIGRARE FINALIZATA CU SUCCES!"
echo "=========================================="
echo ""
echo "Rezumat:"
echo " ✓ PDB ROA creat"
echo " ✓ Tablespace ROA (20GB)"
echo " ✓ Utilizatori: CONTAFIN_ORACLE, MARIUSM_AUTO"
echo " ✓ Obiecte importate: ~4,000"
echo " ✓ Sinonime publice: 53"
echo " ✓ Grant-uri PUBLIC: 147"
echo " ✓ Obiecte recompilate"
echo ""
echo "Test conexiune:"
echo " sqlplus CONTAFIN_ORACLE/${ORACLE_PWD}@10.0.20.201:1521/roa"
echo ""
echo "Log-uri disponibile:"
echo " - docker exec oracle-xe cat /tmp/contafin_import.log"
echo " - docker exec oracle-xe cat /tmp/mariusm_import.log"
echo ""

View File

@@ -0,0 +1,217 @@
# 🚀 MIGRARE ORACLE - SCRIPTURI AUTOMATIZATE
**Versiune**: 2.1 - Universal Multi-platform + Windows Native
**Data**: 1 Octombrie 2025
---
## 📁 STRUCTURA
```
oracle/
└── migration-scripts/ # TOATE SCRIPTURILE DE MIGRARE
├── 00-MASTER-MIGRATION.sh # Master script Linux/WSL
├── 00-MASTER-MIGRATION.bat # Master script Windows (NATIV, fără WSL)
├── 00-install-oracle21c-xe.sh # Instalare Oracle 21c (LXC/Docker)
├── 01-setup-oracle21c.sh # Setup tablespace + useri
├── 02-export-source.sh # Export universal (AUTO/MANUAL/LOCAL/INPLACE)
├── 03-transfer-to-oracle21c.sh# Transfer DMP
├── 04-import-to-oracle21c.sh # Import DMP
├── 05-create-synonyms-grants.sh # Sinonime + grant-uri
├── 06-finalize-migration.sh # Recompilare + verificare
├── sys_objects.sql # SYS objects DDL pre-generat
├── README.md # Documentație completă
└── README-UPGRADE-IN-PLACE.md # Ghid upgrade același PC
```
---
## 🎯 SCENARII SUPORTATE
### 1⃣ Upgrade In-Place (Același PC)
**Scenariu**: Oracle vechi → Oracle 21c XE pe **același computer**
**Windows** (100% nativ, FĂRĂ WSL):
```cmd
cd E:\proiecte\ROMFASTSQL\oracle\migration-scripts
00-MASTER-MIGRATION.bat
```
**Linux/WSL**:
```bash
cd /mnt/e/proiecte/ROMFASTSQL/oracle/migration-scripts
./00-MASTER-MIGRATION.sh
```
**La meniu alege**:
- Oracle 21c: **Acest PC** (1)
- Export: **UPGRADE IN-PLACE** (4)
**📖 Ghid detaliat**: `migration-scripts/README-UPGRADE-IN-PLACE.md`
---
### 2⃣ Migrare între Servere
**Scenariu**: Oracle sursa @ Server A → Oracle 21c @ Server B
**Linux/WSL**:
```bash
cd /mnt/e/proiecte/ROMFASTSQL/oracle/migration-scripts
./00-MASTER-MIGRATION.sh
```
**La meniu alege**:
- Oracle 21c: **VM/Server Linux** sau **LXC Proxmox** (2/3)
- Export: **AUTOMAT SSH** (1) sau **MANUAL** (2)
---
### 3⃣ Migrare Locală (Același Server, Porturi Diferite)
**Scenariu**: Oracle 11g @ :1521 + Oracle 21c @ :1522 (rulează simultan)
**Linux/WSL**:
```bash
./00-MASTER-MIGRATION.sh
```
**La meniu alege**:
- Export: **LOCAL** (3)
---
## ⚡ QUICK START
### WINDOWS (Recomandat pentru upgrade in-place)
```cmd
REM 1. Deschide Command Prompt CA ADMINISTRATOR
REM 2. Navighează la scripturi
cd E:\proiecte\ROMFASTSQL\oracle\migration-scripts
REM 3. Rulează master script
00-MASTER-MIGRATION.bat
REM 4. Urmează ghidarea interactivă!
```
**Ce va face scriptul automat**:
1. 📤 Generează batch pentru export (`RUN-EXPORT.bat`)
2. ⏸️ Generează batch pentru oprire Oracle vechi (`STOP-ORACLE-OLD.bat`)
3. 📥 Îți spune unde să downloadezi Oracle 21c XE
4. 📦 Generează scripturi SQL pentru setup + import
5. ✅ Rulează automat tot workflow-ul prin SQLPlus
**Zero WSL necesar!**
---
### LINUX/WSL
```bash
# 1. Navighează la scripturi
cd /mnt/e/proiecte/ROMFASTSQL/oracle/migration-scripts
chmod +x *.sh
# 2. Rulează master script
./00-MASTER-MIGRATION.sh
# 3. Urmează ghidarea interactivă!
```
---
## 🔧 MODURI DE EXPORT
Scripturile suportă **4 moduri** de export:
| Mod | Când se folosește | Platformă |
|-----|-------------------|-----------|
| **AUTOMAT** | Export SSH către server remote | Linux + Windows |
| **MANUAL** | Tu exporți manual, scriptul preia DMP | Orice |
| **LOCAL** | Același server, porturi diferite | Linux + Windows |
| **INPLACE** | Upgrade pe același PC (recomandat) | Windows nativ |
---
## 📋 CERINȚE
### Pentru Windows (Upgrade In-Place):
- ✅ Windows 10/11
- ✅ Oracle vechi instalat (10g/11g/19c)
- ✅ Oracle 21c XE (instalat DUPĂ export)
- ✅ SQLPlus în PATH (vine cu Oracle)
- ✅ Rulare ca Administrator
### Pentru Linux/WSL:
- ✅ Bash shell
- ✅ SSH access la servere (dacă export automat)
- ✅ Oracle tools (exp, imp, sqlplus)
---
## 📖 DOCUMENTAȚIE
| Fișier | Descriere |
|--------|-----------|
| `migration-scripts/README.md` | Documentație completă pentru toate scenariile |
| `migration-scripts/README-UPGRADE-IN-PLACE.md` | Ghid pas cu pas pentru upgrade același PC |
---
## 🎯 EXEMPLU: Upgrade Windows In-Place
```cmd
REM Pasul 1: Export din Oracle vechi
cd E:\proiecte\ROMFASTSQL\oracle\migration-scripts
00-MASTER-MIGRATION.bat
REM Alegi: Opțiunea 4 (UPGRADE IN-PLACE)
REM Scriptul generează: D:\oracle-export\RUN-EXPORT.bat
REM Rulează:
D:\oracle-export\RUN-EXPORT.bat
REM Pasul 2: Oprire Oracle vechi
REM Scriptul generează: D:\oracle-export\STOP-ORACLE-OLD.bat
D:\oracle-export\STOP-ORACLE-OLD.bat
REM Pasul 3: Instalare Oracle 21c XE
REM Download de la: https://www.oracle.com/database/technologies/xe-downloads.html
REM Instalează normal (port 1521)
REM Pasul 4: Import AUTOMAT!
REM Scriptul continuă și rulează automat:
REM - setup-windows.sql (tablespace + useri)
REM - import-windows.bat (import DMP)
REM - synonyms-windows.sql (sinonime)
REM - finalize-windows.sql (verificare)
REM GATA! Migrare completă!
```
---
## 🆘 SUPORT
**Probleme cu scripturile?**
- Vezi secțiunea TROUBLESHOOTING din `migration-scripts/README-UPGRADE-IN-PLACE.md`
**Erori comune**:
- SQLPlus nu funcționează → Adaugă Oracle în PATH
- Import cu erori → Majoritatea warning-urilor "object already exists" sunt normale
- Conectare refuzată → Verifică că Oracle 21c rulează și portul e corect
---
## ✅ FEATURES PRINCIPALE
**4 moduri de export** (AUTO, MANUAL, LOCAL, INPLACE)
**Multi-platform** (Windows nativ, Linux, WSL, LXC, Docker)
**Schema dinamică** (nu ești limitat la MARIUSM_AUTO)
**Ghidare completă** (îți spune EXACT ce să execuți și UNDE)
**Generare automată scripturi** (nu trebuie să scrii comenzi)
**Verificări automate** (detectează erori și îți spune cum să le rezolvi)
**Zero WSL pe Windows** (100% nativ cu SQLPlus)
---
**Succes cu migrarea! 🚀**

View File

@@ -0,0 +1,382 @@
# 🔄 UPGRADE ORACLE IN-PLACE - Ghid Complet
**Scenariu**: Upgrade Oracle pe același calculator (Oracle vechi → Oracle 21c XE)
**Data**: 1 Octombrie 2025
**Versiune scripturi**: 2.1+
---
## 🎯 Ce este UPGRADE IN-PLACE?
Upgrade in-place înseamnă:
- Oracle vechi și Oracle 21c pe **același computer**
- **Export DMP** din Oracle vechi
- **Oprire** Oracle vechi
- **Instalare** Oracle 21c XE (pe același port 1521)
- **Import DMP** în Oracle 21c
---
## 🚀 QUICK START
### Pasul 1: Pornire ghidare automată
```bash
cd /mnt/e/proiecte/ROMFASTSQL/oracle/migration-scripts
chmod +x *.sh
./00-MASTER-MIGRATION.sh
```
**La întrebări răspunde:**
- Mod: **MIGRARE** (1)
- Export: **UPGRADE IN-PLACE** (4)
Scriptul te va ghida complet prin toți pașii!
---
## 📋 PAȘII DETALIAȚI
### PASUL 1/5: Export DMP din Oracle vechi
**Unde execuți**: Pe computerul unde e Oracle vechi (Windows/Linux)
**Windows** - Deschide Command Prompt CA ADMINISTRATOR:
```cmd
REM Creează director pentru export
cd /d D:\oracle-export
mkdir %CD% 2>nul
REM Export CONTAFIN_ORACLE
exp system/PAROLA@localhost:1521/XE ^
FILE=CONTAFIN_ORACLE_%DATE:~-4%%DATE:~3,2%%DATE:~0,2%.dmp ^
OWNER=CONTAFIN_ORACLE ^
LOG=contafin_export.log ^
CONSISTENT=Y
REM Export schema secundară (dacă ai)
exp system/PAROLA@localhost:1521/XE ^
FILE=MARIUSM_AUTO_%DATE:~-4%%DATE:~3,2%%DATE:~0,2%.dmp ^
OWNER=MARIUSM_AUTO ^
LOG=mariusm_export.log ^
CONSISTENT=Y
REM Verificare fișiere
dir *.dmp
```
**Linux** - Deschide terminal:
```bash
# Creează director pentru export
mkdir -p /tmp/oracle-export
cd /tmp/oracle-export
# Export CONTAFIN_ORACLE
exp system/PAROLA@localhost:1521/XE \
FILE=CONTAFIN_ORACLE_$(date +%Y%m%d).dmp \
OWNER=CONTAFIN_ORACLE \
LOG=contafin_export.log \
CONSISTENT=Y
# Export schema secundară (dacă ai)
exp system/PAROLA@localhost:1521/XE \
FILE=MARIUSM_AUTO_$(date +%Y%m%d).dmp \
OWNER=MARIUSM_AUTO \
LOG=mariusm_export.log \
CONSISTENT=Y
# Verificare fișiere
ls -lh *.dmp
```
**Verificare**:
- Fișierele DMP trebuie să fie > 0 bytes
- Citește log-urile pentru erori
- Notează locația fișierelor DMP
---
### PASUL 2/5: Oprire Oracle vechi
**⚠️ IMPORTANT**: Fă backup la fișierele DMP înainte să oprești Oracle!
**Windows** - Command Prompt CA ADMINISTRATOR:
```cmd
REM Oprire servicii Oracle vechi
net stop OracleServiceXE
net stop OracleXETNSListener
REM Opțional: Dezactivează pornirea automată
sc config OracleServiceXE start= disabled
sc config OracleXETNSListener start= disabled
REM Verificare
sc query OracleServiceXE
```
**Output așteptat**: `STATE: STOPPED`
**Linux** - Terminal:
```bash
# Oprire serviciu Oracle vechi
sudo systemctl stop oracle-xe
sudo systemctl disable oracle-xe
# Verificare
sudo systemctl status oracle-xe
```
**Output așteptat**: `Active: inactive (dead)`
---
### PASUL 3/5: Instalare Oracle 21c XE
**Windows**:
1. Download Oracle XE 21c:
- https://www.oracle.com/database/technologies/xe-downloads.html
- Fișier: `OracleXE213_Win64.zip` (~2.5 GB)
2. Extrage și rulează `setup.exe`
3. Instalare:
- Port: **1521** (același ca Oracle vechi)
- Password SYS: `OraclePass123` (sau custom)
- Configurare automată
4. Verificare instalare:
```cmd
sqlplus system/OraclePass123@localhost:1521/XE
SQL> SELECT * FROM v$version;
```
**Linux** (LXC/Docker):
```bash
# Dacă folosești LXC + Docker (recomandat)
./00-install-oracle21c-xe.sh
# SAU instalare manuală Oracle XE 21c pe Linux
# Vezi: https://docs.oracle.com/en/database/oracle/oracle-database/21/xeinl/
```
---
### PASUL 4/5: Setup + Import
**Continuă cu master scriptul** (dacă l-ai folosit) SAU rulează manual:
```bash
# Setup tablespaces și useri
./01-setup-oracle21c.sh
# Import scheme
# (asigură-te că DMP-urile sunt accesibile din WSL/Linux)
./04-import-to-oracle21c.sh
# Creare sinonime
./05-create-synonyms-grants.sh
# Finalizare
./06-finalize-migration.sh
```
**Dacă DMP-urile sunt pe Windows și rulezi scripturile din WSL**:
```bash
# Montează directorul Windows în WSL
ln -s /mnt/d/oracle-export /tmp/oracle-import
# SAU copiază fișierele
cp /mnt/d/oracle-export/*.dmp /tmp/oracle-import/
```
---
### PASUL 5/5: Verificare finală
**Testare conexiune**:
```bash
sqlplus CONTAFIN_ORACLE/OraclePass123@localhost:1521/roa
```
**Verificare obiecte**:
```sql
-- Număr tabele
SELECT COUNT(*) FROM user_tables;
-- Obiecte invalide (ar trebui 0)
SELECT COUNT(*) FROM user_objects WHERE status = 'INVALID';
-- Verificare date
SELECT COUNT(*) FROM <tabel_important>;
```
**Testare aplicație**:
- Pornește aplicația
- Verifică login
- Testează operații CRUD
- Verifică rapoarte
---
## 🔧 TROUBLESHOOTING
### Problema: "ORA-01017: invalid username/password"
**Soluție**:
```sql
-- Conectează-te ca SYS
sqlplus / as sysdba
-- Resetează parola
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY OraclePass123;
```
### Problema: "Export foarte mare/lent"
**Soluție**: Export selective (doar ce ai nevoie)
```cmd
exp system/pass@localhost:1521/XE ^
TABLES=(CONTAFIN_ORACLE.FACTURI,CONTAFIN_ORACLE.CLIENTI) ^
FILE=export_partial.dmp
```
### Problema: "Import cu erori"
**Verificare**:
```bash
# Citește log-ul de import
cat /tmp/oracle-import/contafin_import.log | grep -i "error"
# Majoritatea erorilor de "object already exists" sunt OK
# Caută erori de tip: ORA-00942, ORA-01555, etc.
```
### Problema: "Nu găsesc fișierul DMP în WSL"
**Soluție**:
```bash
# Windows D:\ e montat în WSL ca /mnt/d/
ls /mnt/d/oracle-export/
# Copiază în locație accesibilă
cp /mnt/d/oracle-export/*.dmp /tmp/oracle-import/
```
---
## ⚡ QUICK COMMANDS
### Oprire/Pornire Oracle 21c
**Windows**:
```cmd
net stop OracleServiceXE
net start OracleServiceXE
```
**Linux**:
```bash
sudo systemctl stop oracle-xe
sudo systemctl start oracle-xe
```
### Conectare rapidă
```bash
# SYS
sqlplus / as sysdba
sqlplus sys/OraclePass123@localhost:1521/roa as sysdba
# User normal
sqlplus CONTAFIN_ORACLE/OraclePass123@localhost:1521/roa
```
### Verificare status
```sql
-- PDB-uri active
SELECT name, open_mode FROM v$pdbs;
-- Tablespaces
SELECT tablespace_name, bytes/1024/1024 MB FROM dba_data_files;
-- Useri
SELECT username, account_status FROM dba_users WHERE username LIKE '%CONTAFIN%';
```
---
## 📊 TIMELINE ESTIMAT
| Pas | Activitate | Timp estimat |
|-----|------------|--------------|
| 1 | Export DMP | 15-90 min (depinde de mărimea BD) |
| 2 | Oprire Oracle vechi | 1 min |
| 3 | Instalare Oracle 21c | 15-30 min |
| 4 | Setup + Import | 30-120 min |
| 5 | Verificare | 15 min |
| **TOTAL** | | **1.5 - 4 ore** |
---
## ✅ CHECKLIST FINAL
- [ ] Export DMP complet (fișiere > 0 bytes)
- [ ] Oracle vechi oprit și dezactivat
- [ ] Oracle 21c XE instalat și pornit
- [ ] Setup tablespace ROA complet
- [ ] Import CONTAFIN_ORACLE success
- [ ] Import schema secundară success
- [ ] Sinonime create (53 bucăți)
- [ ] Grant-uri acordate (147 bucăți)
- [ ] Obiecte recompilate (0 invalide)
- [ ] Testare conexiune OK
- [ ] Testare aplicație OK
- [ ] Backup DMP păstrat pentru siguranță
---
## 🆘 ROLLBACK (Dacă ceva merge prost)
Dacă Oracle 21c nu funcționează cum trebuie:
1. **Oprește Oracle 21c**:
```cmd
net stop OracleServiceXE
sc config OracleServiceXE start= disabled
```
2. **Repornește Oracle vechi**:
```cmd
sc config OracleServiceXE start= auto
net start OracleServiceXE
```
3. **Verifică**: Aplicația ar trebui să funcționeze cu Oracle vechi
4. **Investigație**: Verifică log-urile din Oracle 21c
- Windows: `C:\app\oracle\product\21c\homes\OraDB21Home1\diag\rdbms\xe\xe\trace\`
- Linux: `/opt/oracle/diag/rdbms/xe/xe/trace/`
---
## 📞 SUPORT
**Documentație oficială Oracle**:
- https://docs.oracle.com/en/database/oracle/oracle-database/21/
**Issues GitHub** (pentru probleme cu scripturile):
- https://github.com/anthropics/claude-code/issues
**Community Oracle**:
- https://forums.oracle.com/
---
**Succes cu upgrade-ul! 🚀**

View File

@@ -0,0 +1,426 @@
# 🚀 SCRIPTURI AUTOMATIZARE MIGRARE ORACLE 10g → 21c XE
**Director:** `proxmox/lxc108-oracle/migration/`
**Data**: 1 Octombrie 2025
**Status**: ✅ TESTAT ȘI FUNCȚIONAL
**Versiune**: 2.1 - Universal Multi-platform + Export Flexibil
---
## 🎯 NOI FUNCȚIONALITĂȚI (Versiunea 2.1)
### ✨ Master Control Script
- **00-MASTER-MIGRATION.sh** - Orchestrează tot procesul de migrare
- Ghidare interactivă pas cu pas
- Confirmare înainte de fiecare acțiune
- Suport pentru 2 moduri: **MIGRARE** și **INSTALARE NOUĂ**
- **Multi-platform support**: LXC, VM Linux/Windows, Server fizic
### 🔄 Schema Dinamică
- Nu mai ești limitat la MARIUSM_AUTO
- Poți specifica orice nume de schema pentru cel de-al doilea user
- Perfect pentru instalări noi cu firme diferite
### 📦 SYS Objects Pre-Generat
- Fișier **sys_objects.sql** gata de import
- Nu mai trebuie să rulezi export pe Oracle 10g pentru obiecte SYS
- Include toate cele 9 obiecte custom SYS
### 🚀 Export Flexibil (NOU în v2.1)
- **3 moduri de export** pentru maxim flexibilitate:
1. **AUTOMAT** - Export via SSH către server remote (Linux/Windows)
2. **MANUAL** - Tu exporti manual, scriptul preia fișierele
3. **LOCAL** - Migrare pe același server (Oracle sursa și destinație, porturi diferite)
---
## 📋 LISTA SCRIPTURI
### 🎯 Script Principal (RECOMANDAT - START AICI!)
| Script | Descriere | Mod |
|--------|-----------|-----|
| **`00-MASTER-MIGRATION.sh`** | **🚀 Master control - Orchestrează tot procesul** | **Interactiv** |
### Scripturi Linux/WSL (bash)
| Script | Descriere | Durată | Unde rulează |
|--------|-----------|--------|--------------|
| `00-install-oracle21c-xe.sh` | Instalare Oracle 21c XE + Docker | ~15 min | Proxmox/LXC |
| `01-setup-oracle21c.sh` | Setup tablespace ROA + useri | ~3 min | WSL/Linux |
| **`02-export-source.sh`** | **Export universal (AUTO/MANUAL/LOCAL)** | **~75 min** | **WSL/Linux** |
| `03-transfer-to-oracle21c.sh` | Transfer fișiere DMP către Oracle 21c | ~10 min | WSL/Linux |
| `04-import-to-oracle21c.sh` | Import scheme + SYS objects | ~2h | WSL/Linux |
| `05-create-synonyms-grants.sh` | Creare 53 sinonime + 147 grant-uri | ~5 min | WSL/Linux |
| `06-finalize-migration.sh` | Recompilare + verificare finală | ~10 min | WSL/Linux |
### Scripturi Windows (bat) - DEPRECATED
| Script | Descriere | Status |
|--------|-----------|--------|
| `02-export-oracle10g.bat` | Export vechi (doar Windows) | ⚠️ Înlocuit cu 02-export-source.sh |
### Scripturi SQL auxiliare
| Script | Descriere |
|--------|-----------|
| `export-sys-objects.sql` | Export DDL obiecte SYS custom |
---
## 🔧 MODURI DE EXPORT (Versiune 2.1)
Scriptul **02-export-source.sh** suportă 3 moduri de export pentru maxim flexibilitate:
### 1⃣ Export AUTOMAT (SSH)
**Când se folosește**: Migrare între servere diferite cu SSH disponibil
**Configurare necesară**:
- IP/hostname server sursă
- User SSH cu acces
- Tip OS (Linux/Windows)
**Avantaje**:
- Export complet automat
- Nu necesită intervenție manuală
- Verificare automată export
**Exemplu scenariu**: Oracle 10g @ VM 107 (10.0.20.122) → Oracle 21c @ LXC 108 (10.0.20.201)
### 2⃣ Export MANUAL
**Când se folosește**:
- Nu ai acces SSH la sursa
- Vrei să controlezi manual exportul
- Migrare din medii fără SSH (Windows standalone)
**Cum funcționează**:
1. Scriptul îți arată comenzile exacte de export
2. Tu rulezi manual exportul pe server sursă
3. Copiezi fișierele DMP în locația indicată
4. Scriptul verifică și continuă procesul
**Avantaje**:
- Control total asupra exportului
- Nu necesită SSH
- Funcționează în orice mediu
**Exemplu scenariu**: Oracle 11g @ Windows fără SSH → Oracle 21c @ Server Linux
### 3⃣ Export LOCAL (Același server)
**Când se folosește**: Upgrade Oracle pe același server (instanțe diferite, porturi diferite)
**Configurare necesară**:
- Port Oracle sursă (ex: 1521)
- Port Oracle destinație (ex: 1522)
- SID pentru ambele instanțe
- Password SYSTEM pentru sursă
**Avantaje**:
- Export direct fără SSH sau transfer
- Cel mai rapid mod (fără copiere fișiere)
- Perfect pentru upgrade in-place
**Exemplu scenariu**: Oracle 11g XE @ localhost:1521 → Oracle 21c XE @ localhost:1522
---
## 🏗️ PLATFORME SUPORTATE
### Oracle 21c Destinație:
- ✅ LXC Proxmox + Docker
- ✅ VM Linux + Docker
- ✅ VM Linux native Oracle
- ✅ VM Windows Oracle
- ✅ Server fizic (Linux/Windows)
### Oracle Sursă (pentru export):
- ✅ Export AUTOMAT via SSH (Linux/Windows)
- ✅ Export MANUAL (orice platformă)
- ✅ Export LOCAL (același server, porturi diferite)
---
## 🎯 RULARE PAS CU PAS
### Pasul 0: Instalare Oracle 21c XE (pe Proxmox/LXC) - OPȚIONAL
**Doar dacă nu ai Oracle 21c XE deja instalat!**
```bash
cd /mnt/e/proiecte/ROMFASTSQL/proxmox/lxc108-oracle/migration
chmod +x *.sh
# Opțiunea 1: Rulare direct pe Proxmox host
ssh root@10.0.20.201
./00-install-oracle21c-xe.sh
# Opțiunea 2: Rulare din WSL (cu SSH către Proxmox)
./00-install-oracle21c-xe.sh
```
**Ce face:**
- Verifică LXC 108 există
- Instalează Docker în LXC (dacă nu există)
- Download Oracle 21c XE image (~2-3 GB)
- Start container Oracle XE
- **Șterge XEPDB1 automat**
- **Creează PDB ROA**
- Întreabă dacă vrei PDB ROA2 (opțional)
**Output așteptat:**
```
✅ INSTALARE ORACLE 21c XE COMPLETĂ!
PDB: ROA (XEPDB1 șters)
```
**Timp estimat:** ~15-20 minute (include download)
---
### Pasul 1: Setup Oracle 21c XE (pe WSL/Linux)
```bash
cd /mnt/e/proiecte/ROMFASTSQL/proxmox/lxc108-oracle/migration
chmod +x *.sh
./01-setup-oracle21c.sh
```
**Ce face:**
- Verifică container oracle-xe
- Creează PDB ROA
- Creează tablespace ROA (20GB, autoextend)
- Creează useri CONTAFIN_ORACLE și MARIUSM_AUTO
- Acordă system privileges
- Acordă grant-uri DBMS packages
**Output așteptat:**
```
✅ SETUP COMPLET!
PDB ROA creat și configurat
Tablespace: ROA (20GB)
Useri: CONTAFIN_ORACLE, MARIUSM_AUTO
```
---
### Pasul 2: Export din Oracle 10g (pe Windows VM 107)
```batch
D:\migration-scripts\02-export-oracle10g.bat
```
**Ce face:**
- Exportă CONTAFIN_ORACLE (~15 min)
- Exportă MARIUSM_AUTO (~60 min)
- Exportă SYS objects DDL (~1 min)
**Fișiere generate:**
```
D:\ORACLE_EXPORT\dumps\
├── CONTAFIN_ORACLE_20250930.dmp
├── MARIUSM_AUTO_20250930.dmp
└── SYS_OBJECTS.sql
```
**După export:**
- Copiază fișierele *.dmp în WSL: `/mnt/e/ORACLE_EXPORT/dumps/`
- Sau asigură-te că `D:\ORACLE_EXPORT` este accesibil ca `/mnt/e/ORACLE_EXPORT`
---
### Pasul 3: Transfer către Oracle 21c (pe WSL/Linux)
```bash
./03-transfer-to-oracle21c.sh
```
**Ce face:**
- Verifică fișiere locale în `/mnt/e/ORACLE_EXPORT/dumps`
- Transfer fișiere către Proxmox `/tmp/oracle-import`
- Copiază fișiere în container Docker oracle-xe
**Output așteptat:**
```
✅ TRANSFER COMPLET!
Fișierele sunt în container oracle-xe:/tmp/
```
---
### Pasul 4: Import în Oracle 21c (pe WSL/Linux)
```bash
./04-import-to-oracle21c.sh
```
**Ce face:**
- Import SYS objects custom (~5 min)
- Grant-uri SYS → CONTAFIN_ORACLE
- Import CONTAFIN_ORACLE (~15 min)
- Import MARIUSM_AUTO (~90 min)
- Verificare obiecte importate
**Durată totală:** ~2 ore
**Output așteptat:**
```
✅ IMPORT COMPLET!
Log-uri:
/tmp/contafin_import.log
/tmp/mariusm_import.log
```
---
### Pasul 5: Creare Sinonime + Grant-uri (pe WSL/Linux)
```bash
./05-create-synonyms-grants.sh
```
**Ce face:**
- Crează 53 sinonime publice (SYN_PACK_DREPTURI, etc.)
- Acordă 147 grant-uri către PUBLIC
- Verificare sinonime și grant-uri create
**Output așteptat:**
```
✅ SINONIME + GRANT-URI COMPLETE!
Sinonime SYN_*: 53
Grant-uri to PUBLIC: 147
```
---
### Pasul 6: Finalizare Migrare (pe WSL/Linux)
```bash
./06-finalize-migration.sh
```
**Ce face:**
- Recompilare obiecte invalide (CONTAFIN_ORACLE + MARIUSM_AUTO)
- Verificare completă migrare (10 teste)
- Raport final
**Output așteptat:**
```
✅ MIGRARE FINALIZATA CU SUCCES!
Toate verificările PASSED
```
---
## ⚙️ CONFIGURARE
### Variabile de modificat (dacă e necesar)
**În toate scripturile bash:**
```bash
ORACLE_PWD="OraclePass123" # Parola Oracle
PROXMOX_HOST="root@10.0.20.201" # IP Proxmox
SOURCE_DIR="/mnt/e/ORACLE_EXPORT" # Director export Windows
```
**În scriptul Windows:**
```batch
set ORACLE_CONN=system/romfastromfast@10.0.20.122:1521/ROA
set EXPORT_DIR=D:\ORACLE_EXPORT
```
---
## 📊 TIMP TOTAL ESTIMAT
| Fază | Durată |
|------|--------|
| Setup Oracle 21c | 5 min |
| Export Oracle 10g | 60-75 min |
| Transfer fișiere | 10 min |
| Import scheme | 110 min |
| Sinonime + Grant-uri | 5 min |
| Finalizare | 10 min |
| **TOTAL** | **~3.5 ore** |
---
## ⚠️ TROUBLESHOOTING
### Eroare: "Container oracle-xe nu rulează"
```bash
ssh root@10.0.20.201
pct exec 108 -- docker start oracle-xe
docker logs -f oracle-xe
```
### Eroare: "PDB ROA nu există"
Rulează din nou `01-setup-oracle21c.sh` - scriptul șterge și recreează PDB dacă există.
### Eroare: "Fișiere DMP nu găsite"
Verifică:
```bash
ls -lh /mnt/e/ORACLE_EXPORT/dumps/*.dmp
```
Copiază manual dacă e necesar:
```bash
cp D:\ORACLE_EXPORT\dumps\*.dmp /mnt/e/ORACLE_EXPORT/dumps/
```
### Verificare log-uri import
```bash
ssh root@10.0.20.201
pct exec 108 -- docker exec oracle-xe tail -100 /tmp/contafin_import.log
pct exec 108 -- docker exec oracle-xe tail -100 /tmp/mariusm_import.log
```
---
## ✅ VERIFICARE FINALĂ MANUALĂ
După rularea tuturor scripturilor:
```bash
# Conectare la Oracle 21c
ssh root@10.0.20.201
pct exec 108 -- docker exec -it oracle-xe sqlplus CONTAFIN_ORACLE/OraclePass123@localhost:1521/roa
# Teste SQL
SELECT COUNT(*) FROM nom_firme;
SELECT * FROM syn_pack_drepturi WHERE ROWNUM <= 5;
EXIT;
```
---
## 📁 STRUCTURA FINALĂ
După migrare, în Oracle 21c vei avea:
```
CDB: XE
└── PDB: ROA
├── Tablespace: ROA (20GB)
├── Users:
│ ├── CONTAFIN_ORACLE (366 obiecte)
│ └── MARIUSM_AUTO (3,667 obiecte)
├── SYS custom objects: 9
├── Public synonyms (SYN_*): 53
└── Grants to PUBLIC: 147
```
---
## 🔗 DOCUMENTAȚIE COMPLETĂ
Pentru detalii complete, vezi:
- `../README.md` - Documentație principală LXC 108 Oracle
- `../../README.md` - Index Proxmox principal
---
**Succes la migrare! 🚀**

View File

@@ -0,0 +1,48 @@
SET PAGESIZE 0 FEEDBACK OFF HEADING OFF LINESIZE 5000
SET LONG 10000000 LONGCHUNKSIZE 10000000
SPOOL D:\ORACLE_EXPORT\dumps\SYS_OBJECTS.sql
-- Export DDL pentru obiectele SYS custom
SELECT '-- SYS.AUTH_PACK Package Spec' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PACKAGE','AUTH_PACK','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='AUTH_PACK');
SELECT '/' FROM DUAL;
SELECT '-- SYS.AUTH_PACK Package Body' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PACKAGE BODY','AUTH_PACK','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='AUTH_PACK' AND object_type='PACKAGE BODY');
SELECT '/' FROM DUAL;
SELECT '-- SYS.NEWSCHEMA Procedure' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','NEWSCHEMA','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='NEWSCHEMA');
SELECT '/' FROM DUAL;
SELECT '-- SYS.NEWSCHEMAJOB Procedure' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','NEWSCHEMAJOB','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='NEWSCHEMAJOB');
SELECT '/' FROM DUAL;
SELECT '-- SYS.NEWSCHEMAPROGRESS Function' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('FUNCTION','NEWSCHEMAPROGRESS','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='NEWSCHEMAPROGRESS');
SELECT '/' FROM DUAL;
SELECT '-- SYS.UPDATESQLPLUS Procedure' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','UPDATESQLPLUS','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='UPDATESQLPLUS');
SELECT '/' FROM DUAL;
SELECT '-- SYS.EXECUTESCRIPTOS Procedure' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','EXECUTESCRIPTOS','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='EXECUTESCRIPTOS');
SELECT '/' FROM DUAL;
SELECT '-- SYS.VAUTH_SERII View' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('VIEW','VAUTH_SERII','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_objects WHERE owner='SYS' AND object_name='VAUTH_SERII');
SELECT '/' FROM DUAL;
SELECT '-- SYS.AUTH_SERII Table' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('TABLE','AUTH_SERII','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_tables WHERE owner='SYS' AND table_name='AUTH_SERII');
SELECT '/' FROM DUAL;
SELECT '-- SYS.AUTH_DETALII Table' FROM DUAL;
SELECT DBMS_METADATA.GET_DDL('TABLE','AUTH_DETALII','SYS') FROM DUAL WHERE EXISTS (SELECT 1 FROM dba_tables WHERE owner='SYS' AND table_name='AUTH_DETALII');
SELECT '/' FROM DUAL;
SPOOL OFF
EXIT;

View File

@@ -0,0 +1,754 @@
-- ============================================================================
-- OBIECTE SYS CUSTOM - PRE-GENERAT
-- Oracle 10g Migration → Oracle 21c XE
-- Data: 30 Septembrie 2025
-- Sursa: Oracle 10g @ 10.0.20.122:1521/ROA
-- ============================================================================
--
-- Acest fisier contine DDL pentru toate obiectele custom din SYS:
-- - 2 TABLES: AUTH_DETALII, AUTH_SERII
-- - 1 VIEW: VAUTH_SERII
-- - 1 PACKAGE: AUTH_PACK (spec + body)
-- - 4 PROCEDURES: EXECUTESCRIPTOS, NEWSCHEMA, NEWSCHEMAJOB, UPDATESQLPLUS
--
-- IMPORT: Ruleaza acest script ca SYS in PDB ROA (NU in CDB!)
--
-- Conexiune test:
-- sqlplus sys/OraclePass123@localhost:1521/roa as sysdba
-- SELECT name, cdb FROM v$database; -- Trebuie sa fie: ROA, NO
--
-- ============================================================================
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT ========================================
PROMPT Import Obiecte Custom SYS
PROMPT ========================================
PROMPT
-- 1. TABELE
PROMPT [1/9] Creating SYS.AUTH_DETALII (TABLE)...
CREATE TABLE "SYS"."AUTH_DETALII"
( "DETALII" VARCHAR2(15) NOT NULL ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM";
PROMPT [2/9] Creating SYS.AUTH_SERII (TABLE)...
CREATE TABLE "SYS"."AUTH_SERII"
( "ID_SERIE" NUMBER(5,0) NOT NULL ENABLE,
"ID_PROGRAM" NUMBER(5,0) NOT NULL ENABLE,
"SERIE" RAW(128) NOT NULL ENABLE,
"STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
"DATAORA" DATE DEFAULT sysdate NOT NULL ENABLE,
"ID_UTIL" NUMBER(5,0) NOT NULL ENABLE,
"DATAORAS" DATE,
"ID_UTILS" NUMBER(5,0),
CONSTRAINT "PK_AUTH_SERII" PRIMARY KEY ("ID_SERIE")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM";
-- 2. VIEW
PROMPT [3/9] Creating SYS.VAUTH_SERII (VIEW)...
CREATE OR REPLACE FORCE VIEW "SYS"."VAUTH_SERII" ("ID_PROGRAM", "NUME", "SERIE", "NR_UTIL", "DATA_VAL") AS
select a.id_program,
a.denumire as nume,
auth_pack.selecteaza_serie(a.id_program) as serie,
auth_pack.selecteaza_nr_util(a.id_program) as nr_util,
auth_pack.selecteaza_data_val(a.id_program) as data_val
from syn_nom_programe a
left join syn_def_programe b on a.id_program = b.ide_program
where b.sters = 0
and b.instalat = 1;
-- 3. PACKAGE SPEC
PROMPT [4/9] Creating SYS.AUTH_PACK (PACKAGE SPEC)...
CREATE OR REPLACE PACKAGE "SYS"."AUTH_PACK" is
-- Author : MARIUS.ATANASIU
-- Created : 11/5/2005 9:58:27 AM
-- Purpose : License and authentication management
procedure verifica_program;
procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2);
procedure verifica_licenta_luna(v_an IN NUMBER,
v_luna IN NUMBER,
v_tip IN NUMBER);
procedure verifica_numar_firme;
procedure adauga_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN VARCHAR2,
V_ID_UTILAD IN NUMBER);
procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER);
procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW);
function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2;
function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number;
function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date;
function decripteaza_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN RAW,
V_DATAORA IN DATE) return varchar2;
function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number;
function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2)
return date;
function hextodec(V_HEXA IN VARCHAR2) return number;
function dectohex(V_NUMAR IN NUMBER) return varchar2;
end AUTH_PACK;
/
-- 4. PACKAGE BODY
PROMPT [5/9] Creating SYS.AUTH_PACK (PACKAGE BODY)...
CREATE OR REPLACE PACKAGE BODY "SYS"."AUTH_PACK" is
procedure verifica_program is
v_program VARCHAR2(256);
v_modul VARCHAR2(256);
v_sid NUMBER(16);
begin
begin
SELECT sid, UPPER(TRIM(program)), UPPER(TRIM(module))
INTO v_sid, v_program, v_modul
FROM v$session
WHERE audsid = USERENV('SESSIONID')
AND audsid != 0
AND rownum = 1
AND STATUS <> 'KILLED';
IF v_program not in ('PLSQLDEV.EXE',
'ROASTART.EXE',
'GENERARESCRIPT.EXE',
'SQLPLUS.EXE',
'ROAGEN.EXE',
'ROASUPORT.EXE',
'EXP.EXE',
'EXPDP.EXE',
'IMP.EXE',
'IMPDP.EXE',
'APSNET_WP.EXE',
'WEBDEV.WEBSERVER.EXE',
'VFP9.EXE',
'TASKS.EXE',
'ROAACTUALIZARI.EXE',
'ROA2COCACOLA.EXE') and
user not in ('SYS',
'SYSTEM',
'DBSNMP',
'CTXSYS',
'MDSYS',
'DIP',
'SYSMAN',
'WMSYS') THEN
IF v_program <> v_modul THEN
RAISE_APPLICATION_ERROR(-20000, 'Acces interzis!');
END IF;
auth_pack.verifica_licenta(v_sid, v_program);
END IF;
exception
when NO_DATA_FOUND then
v_program := Null;
end;
end;
procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2) is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nr_util NUMBER(5);
v_utilizatori NUMBER(5);
v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE;
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
v_data_val DATE;
v_zi VARCHAR2(2);
begin
V_NUME_PROGRAM := TRIM(REPLACE(v_program, '.EXE'));
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru ' ||
V_NUME_PROGRAM || '!' || CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
v_zi := LPAD(extract(day from v_dataora), 2, '0');
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
v_utilizatori := auth_pack.decripteaza_nr_util(v_seriec);
v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi);
IF v_utilizatori > 0 THEN
SELECT COUNT(DISTINCT client_info)
INTO v_nr_util
FROM v$session
WHERE UPPER(TRIM(PROGRAM)) = v_program
AND SID != v_sid
and status <> 'KILLED'
and nvl(client_info, 'x') <> sys_context('userenv', 'ip_address');
IF v_nr_util >= v_utilizatori THEN
RAISE_APPLICATION_ERROR(-20000,
'Ati depasit numarul de licente (' ||
v_utilizatori || ') pentru programul ' ||
v_nume_program || ' !' || CHR(13) ||
CHR(10) ||
' Licenta poate fi reinnoita prin programul ROASUPORT!');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Seria introdusa pentru acest program nu este corecta!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi modificata prin programul ROASUPORT!');
END IF;
end;
procedure verifica_licenta_luna(v_an IN NUMBER,
v_luna IN NUMBER,
v_tip IN NUMBER) is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nume_program1 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART';
v_nume_program2 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASAL';
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
v_data_val DATE;
v_zi VARCHAR2(2);
begin
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) =
DECODE(V_TIP, 1, V_NUME_PROGRAM1, 2, V_NUME_PROGRAM2, 'XYZ')
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru deschiderea de luna noua!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
v_zi := LPAD(extract(day from v_dataora), 2, '0');
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi);
IF v_data_val < TO_DATE(v_an || v_luna, 'YYYYMM') THEN
RAISE_APPLICATION_ERROR(-20000,
'Licenta pentru acest program a expirat!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi reinnoita prin programul ROASUPORT!');
END IF;
end;
procedure verifica_numar_firme is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART';
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
V_NR_MAX_FIRME NUMBER(10) := 0;
V_NR_FIRME NUMBER(10) := 0;
begin
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru deschiderea unei firme noi!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
V_NR_MAX_FIRME := auth_pack.decripteaza_nr_util(V_SERIEC);
SELECT COUNT(*)
INTO V_NR_FIRME
FROM SYN_NOM_FIRME
WHERE STERS = 0
AND NVL(ID_MAMA, 0) = 0;
IF V_NR_FIRME >= V_NR_MAX_FIRME THEN
RAISE_APPLICATION_ERROR(-20000,
'Aveti licenta pentru maxim ' ||
V_NR_MAX_FIRME || ' firme (' || V_NR_FIRME ||
' firme deja definite)!' || CHR(13) ||
CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
END IF;
end;
procedure adauga_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN VARCHAR2,
V_ID_UTILAD IN NUMBER) is
V_ID_SERIE AUTH_SERII.ID_SERIE%TYPE;
V_SERIER AUTH_SERII.SERIE%TYPE;
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
BEGIN
V_SERIER := HEXTORAW(V_SERIE);
EXCEPTION
WHEN eroare_de_conversie THEN
RAISE_APPLICATION_ERROR(-20000, 'Aceasta serie nu este valida!');
END;
auth_pack.verifica_serie(V_ID_PROGRAM, V_SERIER);
SELECT SEQ_AUTH_SERII.NEXTVAL INTO V_ID_SERIE FROM DUAL;
INSERT INTO AUTH_SERII
(ID_SERIE, ID_PROGRAM, SERIE, ID_UTIL)
VALUES
(V_ID_SERIE, V_ID_PROGRAM, V_SERIER, V_ID_UTILAD);
end;
procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER) is
begin
UPDATE AUTH_SERII
SET STERS = 1, ID_UTILS = V_ID_UTILS, DATAORAS = SYSDATE
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
end;
function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2 is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_SERIEC VARCHAR2(256);
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
begin
SELECT SERIE
INTO V_SERIE
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
exception
when NO_DATA_FOUND then
V_SERIE := NULL;
end;
BEGIN
V_SERIEC := TRIM(RAWTOHEX(V_SERIE));
EXCEPTION
WHEN eroare_de_conversie THEN
V_SERIEC := NULL;
END;
return V_SERIEC;
end;
function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_DATAORA DATE;
V_NR_UTILIZATORI NUMBER(4);
V_SERIEC VARCHAR2(64);
begin
begin
SELECT SERIE, DATAORA
INTO V_SERIE, V_DATAORA
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
V_DATAORA);
V_NR_UTILIZATORI := auth_pack.decripteaza_nr_util(V_SERIEC);
exception
when NO_DATA_FOUND then
V_NR_UTILIZATORI := 0;
end;
return V_NR_UTILIZATORI;
end;
function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_DATAORA DATE;
V_DATA_VAL DATE;
V_SERIEC VARCHAR2(64);
V_ZI VARCHAR2(2);
begin
begin
SELECT SERIE, DATAORA
INTO V_SERIE, V_DATAORA
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
V_DATAORA);
V_ZI := LPAD(EXTRACT(DAY FROM V_DATAORA), 2, '0');
V_DATA_VAL := auth_pack.decripteaza_data_val(V_SERIEC, V_ZI);
exception
when NO_DATA_FOUND then
V_DATA_VAL := NULL;
end;
return V_DATA_VAL;
end;
procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW) is
v_seriedec VARCHAR2(256);
v_checksum NUMBER(2);
v_suma NUMBER(2) := 0;
begin
v_seriedec := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
SYSDATE);
v_checksum := auth_pack.hextodec(substr(v_seriedec,
length(v_seriedec),
1));
for i in 1 .. length(v_seriedec) - 1 loop
v_suma := v_suma + auth_pack.hextodec(substr(v_seriedec, i, 1));
end loop;
if MOD(v_suma + v_checksum, 16) <> 0 then
RAISE_APPLICATION_ERROR(-20000, 'Seria introdusa nu este valida!');
end if;
end;
function decripteaza_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN RAW,
V_DATAORA IN DATE) return varchar2 is
v_denumire CONTAFIN_ORACLE.NOM_PROGRAME.DENUMIRE%TYPE;
v_id_client NUMBER(4);
v_cheie VARCHAR2(16);
v_serieval RAW(256);
v_seriedec VARCHAR2(32);
v_valoare NUMBER(2);
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
IF V_SERIE IS NOT NULL THEN
SELECT substr(a.denumire, 4, 5)
INTO V_DENUMIRE
FROM SYN_NOM_PROGRAME A
WHERE A.ID_PROGRAM = V_ID_PROGRAM;
SELECT TO_NUMBER(DETALII) INTO V_ID_CLIENT FROM AUTH_DETALII;
v_cheie := RPAD(LPAD(v_id_program, 3, '0') ||
LPAD(v_id_client, 4, '0') ||
RPAD(v_denumire, 5, CHR(4)) ||
LPAD(to_char(v_dataora, 'IWYY'), 4, '0'),
16,
'X');
dbms_obfuscation_toolkit.DES3Decrypt(input => v_serie,
key => utl_raw.cast_to_raw(v_cheie),
decrypted_data => v_serieval);
begin
for i in 1 .. length(v_serieval) / 2 loop
v_valoare := to_number(substr(v_serieval, 2 * i - 1, 2));
if v_valoare > 40 then
v_seriedec := v_seriedec || auth_pack.dectohex(v_valoare - 31);
else
v_seriedec := v_seriedec || (v_valoare - 30);
end if;
end loop;
exception
when eroare_de_conversie then
RAISE_APPLICATION_ERROR(-20100,
'Seria introdusa nu este valida!');
end;
ELSE
v_seriedec := NULL;
END IF;
RETURN v_seriedec;
end;
function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number is
begin
IF V_SERIEC IS NOT NULL THEN
return to_number(substr(v_seriec, 1, 4));
ELSE
return 0;
END IF;
end;
function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2)
return date is
v_luna varchar2(2);
begin
IF V_SERIEC IS NOT NULL THEN
v_luna := LPAD(auth_pack.hextodec(substr(v_seriec, 5, 1)), 2, '0');
return last_day(to_date(v_luna || substr(v_seriec, 6, 2), 'MMYY'));
ELSE
return null;
END IF;
end;
function hextodec(V_HEXA IN VARCHAR2) return number is
v_numar NUMBER(2);
begin
IF ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 48 AND 57 or
ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 65 AND 70 THEN
CASE UPPER(TRIM(V_HEXA))
WHEN 'A' THEN
v_numar := 10;
WHEN 'B' THEN
v_numar := 11;
WHEN 'C' THEN
v_numar := 12;
WHEN 'D' THEN
v_numar := 13;
WHEN 'E' THEN
v_numar := 14;
WHEN 'F' THEN
v_numar := 15;
ELSE
v_numar := to_number(V_HEXA);
END CASE;
ELSE
RAISE_APPLICATION_ERROR(-20000, 'Caracterul nu este valid!');
END IF;
return v_numar;
end;
function dectohex(V_NUMAR IN NUMBER) return varchar2 is
v_hexa VARCHAR2(1);
begin
CASE v_numar
WHEN 10 THEN
v_hexa := 'A';
WHEN 11 THEN
v_hexa := 'B';
WHEN 12 THEN
v_hexa := 'C';
WHEN 13 THEN
v_hexa := 'D';
WHEN 14 THEN
v_hexa := 'E';
WHEN 15 THEN
v_hexa := 'F';
ELSE
v_hexa := to_char(V_NUMAR);
END CASE;
return v_hexa;
end;
end AUTH_PACK;
/
-- 5. PROCEDURES
PROMPT [6/9] Creating SYS.EXECUTESCRIPTOS (PROCEDURE)...
CREATE OR REPLACE PROCEDURE "SYS"."EXECUTESCRIPTOS"(p_nume_script in varchar2,
p_param in varchar2,
p_wait in varchar2,
p_result out number) IS
v_os_process_id number;
begin
dbms_scheduler.create_job(job_name => 'EXECUTESCRIPTOS_' ||
to_char(sysdate,
'yyyymmdd_hh24miss'),
job_type => 'EXECUTABLE',
job_action => p_nume_script,
number_of_arguments => 1,
start_date => systimestamp,
enabled => FALSE,
auto_drop => TRUE);
dbms_scheduler.set_job_argument_value(job_name => 'EXECUTESCRIPTOS_' ||
to_char(sysdate,
'yyyymmdd_hh24miss'),
argument_position => 1,
argument_value => p_param);
dbms_scheduler.enable('EXECUTESCRIPTOS_' ||
to_char(sysdate, 'yyyymmdd_hh24miss'));
if p_wait = 'Y' then
loop
select STATE
into p_result
from dba_scheduler_jobs
where JOB_NAME = 'EXECUTESCRIPTOS_' ||
to_char(sysdate, 'yyyymmdd_hh24miss');
exit when p_result <> 'RUNNING';
dbms_lock.sleep(1);
end loop;
end if;
p_result := 0;
exception
when others then
p_result := -1;
end EXECUTESCRIPTOS;
/
PROMPT [7/9] Creating SYS.NEWSCHEMA (PROCEDURE)...
CREATE OR REPLACE PROCEDURE "SYS"."NEWSCHEMA"(p_schema_name in varchar2,
p_password in varchar2,
p_result out number) IS
begin
execute immediate 'CREATE USER ' || p_schema_name || ' IDENTIFIED BY ' ||
p_password || ' DEFAULT TABLESPACE ROA TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON ROA';
execute immediate 'GRANT CONNECT, RESOURCE TO ' || p_schema_name;
execute immediate 'GRANT CREATE SESSION TO ' || p_schema_name;
execute immediate 'GRANT CREATE TABLE TO ' || p_schema_name;
execute immediate 'GRANT CREATE VIEW TO ' || p_schema_name;
execute immediate 'GRANT CREATE SEQUENCE TO ' || p_schema_name;
execute immediate 'GRANT CREATE PROCEDURE TO ' || p_schema_name;
execute immediate 'GRANT CREATE TRIGGER TO ' || p_schema_name;
execute immediate 'GRANT CREATE TYPE TO ' || p_schema_name;
execute immediate 'GRANT CREATE SYNONYM TO ' || p_schema_name;
execute immediate 'GRANT CREATE DATABASE LINK TO ' || p_schema_name;
execute immediate 'GRANT CREATE JOB TO ' || p_schema_name;
dbms_output.put_line('Schema ' || p_schema_name ||
' created successfully!');
p_result := 0;
exception
when others then
dbms_output.put_line('Error creating schema: ' || SQLERRM);
p_result := -1;
end NEWSCHEMA;
/
PROMPT [8/9] Creating SYS.NEWSCHEMAJOB (PROCEDURE)...
CREATE OR REPLACE PROCEDURE "SYS"."NEWSCHEMAJOB"(p_schema_name in varchar2,
p_password in varchar2) IS
v_result number;
begin
dbms_scheduler.create_job(job_name => 'NEWSCHEMA_' || p_schema_name,
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.NEWSCHEMA',
number_of_arguments => 3,
start_date => systimestamp,
enabled => FALSE,
auto_drop => TRUE);
dbms_scheduler.set_job_argument_value(job_name => 'NEWSCHEMA_' ||
p_schema_name,
argument_position => 1,
argument_value => p_schema_name);
dbms_scheduler.set_job_argument_value(job_name => 'NEWSCHEMA_' ||
p_schema_name,
argument_position => 2,
argument_value => p_password);
dbms_scheduler.set_job_argument_value(job_name => 'NEWSCHEMA_' ||
p_schema_name,
argument_position => 3,
argument_value => v_result);
dbms_scheduler.enable('NEWSCHEMA_' || p_schema_name);
end NEWSCHEMAJOB;
/
PROMPT [9/9] Creating SYS.UPDATESQLPLUS (PROCEDURE)...
CREATE OR REPLACE PROCEDURE "SYS"."UPDATESQLPLUS" IS
v_result number;
begin
executescriptos('D:\ROMFAST\UPDATE\UPDATE_SQLPLUS.BAT', '', 'N', v_result);
end UPDATESQLPLUS;
/
PROMPT
PROMPT ========================================
PROMPT Import Complet Obiecte SYS!
PROMPT ========================================
PROMPT
PROMPT Obiecte create:
PROMPT [1] SYS.AUTH_DETALII (TABLE)
PROMPT [2] SYS.AUTH_SERII (TABLE)
PROMPT [3] SYS.VAUTH_SERII (VIEW)
PROMPT [4] SYS.AUTH_PACK (PACKAGE SPEC)
PROMPT [5] SYS.AUTH_PACK (PACKAGE BODY)
PROMPT [6] SYS.EXECUTESCRIPTOS (PROCEDURE)
PROMPT [7] SYS.NEWSCHEMA (PROCEDURE)
PROMPT [8] SYS.NEWSCHEMAJOB (PROCEDURE)
PROMPT [9] SYS.UPDATESQLPLUS (PROCEDURE)
PROMPT
PROMPT Verificare obiecte:
PROMPT
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner='SYS'
AND object_name IN ('AUTH_PACK','AUTH_DETALII','AUTH_SERII','VAUTH_SERII',
'EXECUTESCRIPTOS','NEWSCHEMA','NEWSCHEMAJOB','UPDATESQLPLUS')
ORDER BY object_type, object_name;
PROMPT
EXIT;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,73 @@
╔══════════════════════════════════════════════════════════════════════════════╗
║ INSTRUCȚIUNI INSTALARE - Oracle 10.2.0.5 ║
╚══════════════════════════════════════════════════════════════════════════════╝
📌 IMPORTANT: Dacă aveți Oracle 10.2.0.5 și primiți eroarea:
Error: PLS-00436: restrictie de implementare:
nu se pot referi campurile din tabelul de inregistrari BULK In-BIND
Trebuie să folosiți versiunea specială pentru Oracle 10g.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 PAȘI DE INSTALARE:
1. Verificați versiunea Oracle:
SELECT * FROM v$version;
→ Dacă vedeți "10.2.0.5" sau mai veche: continuați cu pasul 2
→ Dacă vedeți "11g" sau mai nouă: folosiți scrie_jc_2007.sql normal
2. Pentru Oracle 10g, instalați versiunea specială:
@scrie_jc_2007_oracle10g.sql
3. Testați că funcționează:
-- Rulați procedura
BEGIN
pack_contafin.SCRIE_JC_2007(2025, 10, 0);
END;
/
→ Dacă nu primește erori PLS-00436 = SUCCESS! ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 PERFORMANȚĂ COMPARATIVĂ:
Versiune | Timp (10,000 rows) | Compatible cu
───────────────────────────┼───────────────────┼──────────────────
MERGE original (vechi) | 60-120 secunde | Toate versiunile
FORALL (standard) | 15-30 ms | Oracle 11g+
FOR LOOP (Oracle 10g) | 20-50 ms | Oracle 8i → 23c ✓
→ Versiunea Oracle 10g este de ~1200-6000x MAI RAPIDĂ decât MERGE-ul vechi!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❓ ÎNTREBĂRI FRECVENTE:
Q: De ce am nevoie de o versiune separată?
A: Oracle 10g are o limitare tehnică (PLS-00436) care nu permite FORALL
cu colecții de tip %ROWTYPE. Versiunea Oracle10g folosește FOR LOOP normal.
Q: Este la fel de rapidă?
A: Da, aproape! Diferența e de ~5-20ms pentru 10k rows. Ambele sunt MULT
mai rapide decât MERGE-ul vechi (60-120 secunde).
Q: Ce se întâmplă dacă fac upgrade la Oracle 11g?
A: Puteți reveni la scrie_jc_2007.sql (versiunea FORALL) pentru performanță
cu ~10% mai bună.
Q: Pot folosi scrie_jc_2007_oracle10g.sql pe Oracle 11g+?
A: DA! Funcționează perfect pe toate versiunile (8i → 23c). Singura
diferență e performanța ușor mai mică (~5-20ms).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 SUPORT: Dacă întâmpinați probleme, contactați echipa de suport.
Data: 2025-10-06

View File

@@ -0,0 +1,88 @@
# Oracle 10g Compatibility
**Director:** `proxmox/lxc108-oracle/sql/roa/`
## Două versiuni disponibile pentru SCRIE_JC_2007
### 📄 Fișiere:
1. **`scrie_jc_2007.sql`** - Versiunea PRINCIPALĂ (FORALL)
- Pentru Oracle 11g, 12c, 18c, 19c, 21c, 23c
- Folosește `FORALL` pentru performanță maximă
- Performanță: ~15-30ms pentru <10k rows
2. **`scrie_jc_2007_oracle10g.sql`** - Versiunea pentru Oracle 10g
- Pentru Oracle 10.2.0.5 (și versiuni mai vechi)
- Folosește `FOR LOOP` pentru compatibilitate
- Performanță: ~20-50ms pentru <10k rows
- Rezolvă eroarea PLS-00436
---
## 🔧 Când să folosești fiecare versiune:
| Versiune Oracle | Fișier de folosit | Performanță |
|----------------|-------------------|-------------|
| **8i - 10g** | `scrie_jc_2007_oracle10g.sql` | Bună (20-50ms) |
| **11g - 23c** | `scrie_jc_2007.sql` | **Excelentă** (15-30ms) |
---
## ⚠️ Eroarea pe Oracle 10g (fără fix):
```
Error: PLS-00436: restrictie de implementare: nu se pot referi campurile din tabelul de inregistrari BULK In-BIND
Line: 1501
Text: FORALL i IN 1..S.COUNT
```
**Cauza**: Oracle 10g nu permite `S(i).field` în FORALL când `S` este `TYPE TABLE OF cursor%ROWTYPE`
**Soluție**: Folosește `scrie_jc_2007_oracle10g.sql` care înlocuiește FORALL cu FOR LOOP
---
## 📊 Diferențe tehnice:
### Versiunea FORALL (scrie_jc_2007.sql):
```sql
FORALL i IN 1..S.COUNT
UPDATE JC2007 J SET ... WHERE ...;
FOR i IN 1..S.COUNT LOOP
IF SQL%BULK_ROWCOUNT(i) = 0 THEN ...
```
### Versiunea FOR LOOP (scrie_jc_2007_oracle10g.sql):
```sql
FOR i IN 1..S.COUNT LOOP
UPDATE JC2007 J SET ... WHERE ...;
IF SQL%ROWCOUNT = 0 THEN ...
END LOOP;
```
---
## 🚀 Instalare pentru Oracle 10g:
```sql
-- 1. Backup versiunea curentă (opțional)
@scrie_jc_2007.sql
-- 2. Instalează versiunea pentru Oracle 10g
@scrie_jc_2007_oracle10g.sql
```
---
## 📝 Note importante:
- Ambele versiuni sunt **mult mai rapide** decât MERGE-ul original (60-120s)
- Ambele versiuni au **aceeași logică de business**
- Singura diferență: FORALL vs FOR LOOP
- Dacă faci upgrade la Oracle 11g+, poți reveni la versiunea FORALL
---
**Creat**: 2025-10-06
**Autor**: Optimizare Oracle compatibility

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,841 @@
procedure SCRIE_JV_2007(tnAn JV2007.AN%TYPE,
tnLuna JV2007.LUNA%TYPE,
tnScrie number) IS
lcSql VARCHAR2(32767);
lcContTvaDeductibil ACT.SCD%TYPE := '4426';
lcContTvaColectat ACT.SCD%TYPE := '4427';
lcContTvaNeexigibil ACT.SCD%TYPE := '4428';
lcContDebitRegularizare VARCHAR2(100) := '4111,461,4511,4118';
lcContCreditRegularizare VARCHAR2(100) := '418';
lnIdMinJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 1;
lnIdMaxJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 100;
lcTabelSursa VARCHAR2(100);
lcCondSucursala VARCHAR2(1000);
begin
-- tnScrie: 0 - scriere; 1 - refacere; 2 - stergere
-- 0,2 - selectie din act_temp
-- 1 - selectie din act
if pack_contafin.get_id_sucursala() is not null then
lcCondSucursala := ' AND ALIAS.ID_SUCURSALA = ' ||
pack_contafin.GET_ID_SUCURSALA();
end if;
if tnScrie in (pack_contafin.nScriere, pack_contafin.nStergere) then
lcTabelSursa := 'act_temp'; -- scriere, stergere
else
lcTabelSursa := 'act'; -- refacere
end if;
pack_contafin.completeaza_jv_2007(tnAn,
tnLuna,
lcTabelSursa,
lcCondSucursala);
MERGE INTO JV2007 J
USING (SELECT AN,
LUNA,
ID_FDOC,
ID_FACT,
NRACT,
SERIE_ACT,
DATAACT,
DATAIREG,
ID_PART,
COD,
(CASE
WHEN NOTA_TVA_EX = 1 THEN
0
WHEN REGULARIZARE > 0 THEN
TOTCTVA -
DECODE(RO24NB, 0, 0, RO24B) -
DECODE(RO20NB, 0, 0, RO20B) -
DECODE(RO21NB, 0, 0, RO21B) -
DECODE(RO11NB, 0, 0, RO11B) -
DECODE(RO19NB, 0, 0, RO19B) -
DECODE(RO9NB, 0, 0, RO9B) -
DECODE(RO5NB, 0, 0, RO5B) -
DECODE(RO24NT, 0, 0, RO24T) -
DECODE(RO20NT, 0, 0, RO20T) -
DECODE(RO21NT, 0, 0, RO21T) -
DECODE(RO11NT, 0, 0, RO11T) -
DECODE(RO19NT, 0, 0, RO19T) -
DECODE(RO9NT, 0, 0, RO9T) -
DECODE(RO5NT, 0, 0, RO5T) -
DECODE(RO24NTR, 0, RO24TR, RO24NTR) -
DECODE(RO20NTR, 0, RO20TR, RO20NTR) -
DECODE(RO21NTR, 0, RO21TR, RO21NTR) -
DECODE(RO11NTR, 0, RO11TR, RO11NTR) -
DECODE(RO19NTR, 0, RO19TR, RO19NTR) -
DECODE(RO9NTR, 0, RO9TR, RO9NTR) -
DECODE(RO5NTR, 0, RO5TR, RO5NTR)
ELSE
TOTCTVA -
DECODE(RO24NB, 0, 0, RO24B) -
DECODE(RO20NB, 0, 0, RO20B) -
DECODE(RO21NB, 0, 0, RO21B) -
DECODE(RO11NB, 0, 0, RO11B) -
DECODE(RO19NB, 0, 0, RO19B) -
DECODE(RO9NB, 0, 0, RO9B) -
DECODE(RO5NB, 0, 0, RO5B) -
DECODE(RO24NT, 0, 0, RO24T) -
DECODE(RO20NT, 0, 0, RO20T) -
DECODE(RO21NT, 0, 0, RO21T) -
DECODE(RO11NT, 0, 0, RO11T) -
DECODE(RO19NT, 0, 0, RO19T) -
DECODE(RO9NT, 0, 0, RO9T) -
DECODE(RO5NT, 0, 0, RO5T)
END) AS TOTCTVA,
(CASE
WHEN NOTA_TVA_EX = 1 THEN
0
WHEN REGULARIZARE > 0 THEN
DECODE(RO24NB, 0, RO24B, RO24NB) +
DECODE(RO20NB, 0, RO20B, RO20NB) +
DECODE(RO21NB, 0, RO21B, RO21NB) +
DECODE(RO11NB, 0, RO11B, RO11NB) +
DECODE(RO19NB, 0, RO19B, RO19NB) +
DECODE(RO9NB, 0, RO9B, RO9NB) +
DECODE(RO5NB, 0, RO5B, RO5NB) -
DECODE(RO24NB, 0, RO24TR, RO24NTR) -
DECODE(RO20NB, 0, RO20TR, RO20NTR) -
DECODE(RO21NB, 0, RO21TR, RO21NTR) -
DECODE(RO11NB, 0, RO11TR, RO11NTR) -
DECODE(RO19NB, 0, RO19TR, RO19NTR) -
DECODE(RO9NB, 0, RO9TR, RO9NTR) -
DECODE(RO5NB, 0, RO5TR, RO5NTR)
ELSE
DECODE(RO24NB, 0, RO24B, RO24NB) +
DECODE(RO20NB, 0, RO20B, RO20NB) +
DECODE(RO21NB, 0, RO21B, RO21NB) +
DECODE(RO11NB, 0, RO11B, RO11NB) +
DECODE(RO19NB, 0, RO19B, RO19NB) +
DECODE(RO9NB, 0, RO9B, RO9NB) +
DECODE(RO5NB, 0, RO5B, RO5NB)
END) AS TOTFTVATAX,
DECODE(NOTA_TVA_EX,
1,
0,
DECODE(RO24NT, 0, RO24T, RO24NT) +
DECODE(RO20NT, 0, RO20T, RO20NT) +
DECODE(RO21NT, 0, RO21T, RO21NT) +
DECODE(RO11NT, 0, RO11T, RO11NT) +
DECODE(RO19NT, 0, RO19T, RO19NT) +
DECODE(RO9NT, 0, RO9T, RO9NT) +
DECODE(RO5NT, 0, RO5T, RO5NT)) AS TOTTVATAX,
ROTI + CESCDD1 + CESCDD2 + CEOPTR + CESVDD + CESVFDD +
CESVFS + WRSCDD + WRSCDDAB + WRSCDDCD + FODD + FOFDD +
WRSCFDD + WRN AS TOTNETAX,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO24B,
0,
DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)),
RO24B - RO24TR)
ELSE
DECODE(RO24B,
0,
DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)),
RO24B)
END) AS RO24B,
RO24T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO20B,
0,
DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)),
RO20B - RO20TR)
ELSE
DECODE(RO20B,
0,
DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)),
RO20B)
END) AS RO20B,
RO20T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO21B,
0,
DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)),
RO21B - RORTD21)
ELSE
DECODE(RO21B,
0,
DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)),
RO21B)
END) AS RO21B,
RO21T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO11B,
0,
DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)),
RO11B - RORTD11)
ELSE
DECODE(RO11B,
0,
DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)),
RO11B)
END) AS RO11B,
RO11T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO19B,
0,
DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)),
RO19B - RO19TR)
ELSE
DECODE(RO19B,
0,
DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)),
RO19B)
END) AS RO19B,
RO19T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO9B,
0,
DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)),
RO9B - RO9TR)
ELSE
DECODE(RO9B,
0,
DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)),
RO9B)
END) AS RO9B,
RO9T,
(CASE
WHEN REGULARIZARE > 0 THEN
DECODE(RO5B,
0,
DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)),
RO5B - RO5TR)
ELSE
DECODE(RO5B,
0,
DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)),
RO5B)
END) AS RO5B,
RO5T,
(CASE
WHEN REGULARIZARE > 0 THEN
RO24NB - RO24NTR
ELSE
RO24NB
END) AS RO24NB,
RO24NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO20NB - RO20NTR
ELSE
RO20NB
END) AS RO20NB,
RO20NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO21NB - RO21NTR
ELSE
RO21NB
END) AS RO21NB,
RO21NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO11NB - RO11NTR
ELSE
RO11NB
END) AS RO11NB,
RO11NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO19NB - RO19NTR
ELSE
RO19NB
END) AS RO19NB,
RO19NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO9NB - RO9NTR
ELSE
RO9NB
END) AS RO9NB,
RO9NT,
(CASE
WHEN REGULARIZARE > 0 THEN
RO5NB - RO5NTR
ELSE
RO5NB
END) AS RO5NB,
RO5NT,
ROTI,
CESCDD1,
CESCDD2,
CEOPTR,
CESVDD,
CESVFDD,
CESVFS,
WRSCDD,
WRSCDDAB,
WRSCDDCD,
FODD,
FOFDD,
WRSCFDD,
WRN,
RORTC24,
RORTC20,
RORTC21,
RORTC11,
RORTC19,
RORTC9,
RORTC5,
ID_SUCURSALA
FROM (SELECT JV.AN,
JV.LUNA,
MAX(JV.ID_FDOC) AS ID_FDOC,
JV.ID_FACT,
JV.NRACT,
JV.SERIE_ACT,
JV.DATAACT,
JV.DATAIREG,
MAX(JV.ID_PART) AS ID_PART,
JV.ID_SUCURSALA,
MIN(JV.COD) AS COD,
MIN(JV.NOTA_TVA_EX) AS NOTA_TVA_EX,
sum(CASE
WHEN NVL(JV.ID_JTVA_COLOANA, 0) BETWEEN 1 AND 100 THEN
JV.suma
ELSE
0
END) TOTCTVA,
sum(DECODE(JV.ID_JTVA_COLOANA, 15, JV.suma, 0)) RO24B,
sum(DECODE(JV.ID_JTVA_COLOANA, 16, JV.suma, 0)) RO24T,
sum(DECODE(JV.ID_JTVA_COLOANA, 27, JV.suma, 0)) RO20B,
sum(DECODE(JV.ID_JTVA_COLOANA, 28, JV.suma, 0)) RO20T,
sum(DECODE(JV.ID_JTVA_COLOANA, 35, JV.suma, 0)) RO21B,
sum(DECODE(JV.ID_JTVA_COLOANA, 36, JV.suma, 0)) RO21T,
sum(DECODE(JV.ID_JTVA_COLOANA, 1, JV.suma, 0)) RO19B,
sum(DECODE(JV.ID_JTVA_COLOANA, 2, JV.suma, 0)) RO19T,
sum(DECODE(JV.ID_JTVA_COLOANA, 3, JV.suma, 0)) RO9B,
sum(DECODE(JV.ID_JTVA_COLOANA, 4, JV.suma, 0)) RO9T,
sum(DECODE(JV.ID_JTVA_COLOANA, 13, JV.suma, 0)) RO5B,
sum(DECODE(JV.ID_JTVA_COLOANA, 14, JV.suma, 0)) RO5T,
sum(DECODE(JV.ID_JTVA_COLOANA, 39, JV.suma, 0)) RO11B,
sum(DECODE(JV.ID_JTVA_COLOANA, 40, JV.suma, 0)) RO11T,
sum(DECODE(JV.ID_JTVA_COLOANA, 5, JV.suma, 0)) ROTI,
sum(DECODE(JV.ID_JTVA_COLOANA, 6, JV.suma, 0)) CESCDD1,
sum(DECODE(JV.ID_JTVA_COLOANA, 7, JV.suma, 0)) CESCDD2,
sum(DECODE(JV.ID_JTVA_COLOANA, 17, JV.suma, 0)) CEOPTR,
sum(DECODE(JV.ID_JTVA_COLOANA, 18, JV.suma, 0)) CESVDD,
sum(DECODE(JV.ID_JTVA_COLOANA, 19, JV.suma, 0)) CESVFDD,
sum(DECODE(JV.ID_JTVA_COLOANA, 20, JV.suma, 0)) CESVFS,
sum(DECODE(JV.ID_JTVA_COLOANA, 8, JV.suma, 0)) WRSCDD,
sum(DECODE(JV.ID_JTVA_COLOANA, 33, JV.suma, 0)) WRSCDDAB,
sum(DECODE(JV.ID_JTVA_COLOANA, 34, JV.suma, 0)) WRSCDDCD,
sum(DECODE(JV.ID_JTVA_COLOANA, 9, JV.suma, 0)) FODD,
sum(DECODE(JV.ID_JTVA_COLOANA, 10, JV.suma, 0)) FOFDD,
sum(DECODE(JV.ID_JTVA_COLOANA, 11, JV.suma, 0)) WRSCFDD,
sum(DECODE(JV.ID_JTVA_COLOANA, 12, JV.suma, 0)) WRN,
sum(DECODE(JV.ID_JTVA_COLOANA, 1006, JV.suma, 0)) RORTC24,
sum(DECODE(JV.ID_JTVA_COLOANA, 1007, JV.suma, 0)) RORTC20,
sum(DECODE(JV.ID_JTVA_COLOANA, 1016, JV.suma, 0)) RORTC21,
sum(DECODE(JV.ID_JTVA_COLOANA, 1017, JV.suma, 0)) RORTC11,
sum(DECODE(JV.ID_JTVA_COLOANA, 1008, JV.suma, 0)) RORTC19,
sum(DECODE(JV.ID_JTVA_COLOANA, 1009, JV.suma, 0)) RORTC9,
sum(DECODE(JV.ID_JTVA_COLOANA, 1010, JV.suma, 0)) RORTC5,
sum(DECODE(JV.ID_JTVA_COLOANA, 21, JV.suma, 0)) RO24NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 22, JV.suma, 0)) RO24NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 29, JV.suma, 0)) RO20NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 30, JV.suma, 0)) RO20NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 37, JV.suma, 0)) RO21NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 38, JV.suma, 0)) RO21NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 41, JV.suma, 0)) RO11NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 42, JV.suma, 0)) RO11NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 31, JV.suma, 0)) RO19NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 32, JV.suma, 0)) RO19NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 23, JV.suma, 0)) RO9NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 24, JV.suma, 0)) RO9NT,
sum(DECODE(JV.ID_JTVA_COLOANA, 25, JV.suma, 0)) RO5NB,
sum(DECODE(JV.ID_JTVA_COLOANA, 26, JV.suma, 0)) RO5NT,
SUM(JV.REGULARIZARE) AS REGULARIZARE,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 16 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO24TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 28 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO20TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 36 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO21TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 40 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO11TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 2 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO19TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 4 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO9TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 14 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RO5TR,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 1016 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RORTD21,
SUM(CASE
WHEN JV.ID_JTVA_COLOANA = 1017 AND JV.SCD = '4428' THEN
JV.SUMA
ELSE
0
END) RORTD11,
SUM(CASE
WHEN ID_JTVA_COLOANA = 22 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO24NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 30 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO20NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 32 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO19NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 24 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO9NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 26 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO5NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 38 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO21NTR,
SUM(CASE
WHEN ID_JTVA_COLOANA = 42 AND SCD = '4428' THEN
SUMA
ELSE
0
END) RO11NTR
FROM (SELECT A.AN,
A.LUNA,
(CASE
WHEN A.NRACT <> D.NRACT or
A.DATAACT <> D.DATAACT THEN
1
ELSE
0
END) AS NOTA_TVA_EX,
(CASE
WHEN A.NRACT <> D.NRACT or
A.DATAACT <> D.DATAACT OR
A.ID_SET <> D.ID_SET OR
NVL(A.SERIE_ACT, 'X') <>
NVL(D.SERIE_ACT, 'X') THEN
NULL
ELSE
A.ID_FDOC
END) AS ID_FDOC,
A.ID_FACT,
(CASE
WHEN A.NRACT <> D.NRACT THEN
D.NRACT
ELSE
A.NRACT
END) AS NRACT,
D.SERIE_ACT,
(CASE
WHEN A.NRACT <> D.NRACT or
A.DATAACT <> D.DATAACT THEN
TRUNC(D.DATAACT)
ELSE
TRUNC(A.DATAACT)
END) AS DATAACT,
(CASE
WHEN A.NRACT <> D.NRACT or
NVL(A.DATAIREG, A.DATAACT) <>
NVL(D.DATAIREG, D.DATAACT) THEN
TRUNC(NVL(D.DATAIREG, D.DATAACT))
ELSE
TRUNC(NVL(A.DATAIREG, A.DATAACT))
END) AS DATAIREG,
A.COD,
A.SCD,
A.SCC,
-- 4426 = 4427 sau 4428 = 4427 nu au parteneri
MAX(DECODE(E.EXCEPTIE,
1,
A.ID_PARTC,
(CASE
-- ESTE POSIBIL SA FIE DOAR 5121 = 419 FARA 4111 = 4427, TREBUIE PARTENERUL 419
WHEN A.SCC = '419' THEN
A.ID_PARTC
WHEN A.SCD IN (lcContTvaDeductibil,
lcContTvaNeexigibil) OR
SUBSTR(A.SCD, 1, 1) = '5' THEN
-9999999999
ELSE
A.ID_PARTD
END))) OVER(PARTITION BY A.AN, A.LUNA, A.ID_FDOC, A.NRACT, A.DATAACT, A.COD) AS ID_PART,
-- INVERSARE SUME LA EXCEPTII
DECODE(A.ID_SET, 10616, -1, 1) *
DECODE(E.EXCEPTIE, 1, -A.SUMA, A.SUMA) AS SUMA,
-- MARCA REGULARIZARE FACTURI NEINTOCMITE
(CASE
WHEN INSTR(lcContDebitRegularizare, A.scd) > 0 and
INSTR(lcContCreditRegularizare, A.scc) > 0 THEN
1
ELSE
0
END) AS REGULARIZARE,
A.ID_JTVA_COLOANA,
A.ID_SUCURSALA
FROM (
SELECT AN,
LUNA,
ID_FDOC,
ID_FACT,
NRACT,
SERIE_ACT,
DATAACT,
DATAIREG,
COD,
SCD,
SCC,
ID_PARTC,
ID_PARTD,
ID_SET,
SUMA,
ID_JTVA_COLOANA,
ID_SUCURSALA,
STERS
FROM ACT_TEMP
WHERE lcTabelSursa = 'act_temp'
AND AN = tnAn
AND LUNA = tnLuna
AND STERS = 0
AND (ID_JTVA_COLOANA BETWEEN lnIdMinJtvaColoana AND lnIdMaxJtvaColoana
OR ID_JTVA_COLOANA BETWEEN 1006 AND 1010)
AND ID_SET <> 10621
UNION ALL
SELECT AN,
LUNA,
ID_FDOC,
ID_FACT,
NRACT,
SERIE_ACT,
DATAACT,
DATAIREG,
COD,
SCD,
SCC,
ID_PARTC,
ID_PARTD,
ID_SET,
SUMA,
ID_JTVA_COLOANA,
ID_SUCURSALA,
STERS
FROM ACT
WHERE lcTabelSursa = 'act'
AND AN = tnAn
AND LUNA = tnLuna
AND STERS = 0
AND (ID_JTVA_COLOANA BETWEEN lnIdMinJtvaColoana AND lnIdMaxJtvaColoana
OR ID_JTVA_COLOANA BETWEEN 1006 AND 1010)
AND ID_SET <> 10621
) A
LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE,
DECODE(DEBIT,
1,
CONT_C,
CONT) AS SCD,
DECODE(DEBIT,
1,
CONT,
CONT_C) AS SCC
FROM EXCEPTII_IREG
WHERE INVERS = 1
AND IN_TVA = 1) E
ON A.SCD = E.SCD
AND A.SCC = E.SCC
LEFT JOIN DOCUMENTE D
ON A.ID_FACT = D.ID_DOC
WHERE A.AN = tnAn
and A.LUNA = tnLuna
and A.STERS = 0
AND (A.ID_JTVA_COLOANA between lnIdMinJtvaColoana and
lnIdMaxJtvaColoana OR
A.ID_JTVA_COLOANA BETWEEN 1006 AND 1010)
-- IN JURNALUL DE VANZARI NU INTRA FACTURILE NEINTOCMITE + INCASARILE
-- SAU COMPENSARI 419 CU EXPLICATIE TVA
AND A.ID_SET <> 10621
AND NOT (TRIM(NVL(A.SCD, 'X')) = '418' OR
(TRIM(NVL(A.SCD, 'X')) not in
('4111', '461', '4511', '4118') AND
TRIM(NVL(A.SCC, 'X')) = '418'))
AND nvl2(pack_contafin.GET_ID_SUCURSALA(),
A.ID_SUCURSALA,
0) =
nvl(pack_contafin.GET_ID_SUCURSALA(), 0)) JV
GROUP BY JV.AN,
JV.LUNA,
JV.ID_FACT,
JV.NRACT,
JV.SERIE_ACT,
JV.DATAACT,
JV.DATAIREG,
JV.ID_SUCURSALA)) S
ON (J.AN = S.AN AND J.LUNA = S.LUNA AND J.ID_FACT = S.ID_FACT AND NVL(J.ID_SUCURSALA, -99) = NVL(S.ID_SUCURSALA, -99))
WHEN MATCHED THEN
UPDATE
SET J.TOTCTVA = J.TOTCTVA + (CASE
WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND
EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN
S.TOTCTVA
ELSE
0
END),
J.TOTFTVATAX = J.TOTFTVATAX + (CASE
WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND
EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN
S.TOTFTVATAX
ELSE
0
END),
J.TOTTVATAX = J.TOTTVATAX + (CASE
WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND
EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN
S.TOTTVATAX
ELSE
0
END),
J.TOTNETAX = J.TOTNETAX + (CASE
WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND
EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN
S.TOTNETAX
ELSE
0
END),
J.RO24B = J.RO24B + NVL(S.RO24B, 0) + (CASE
WHEN NVL(S.RO24B, 0) <> 0 AND NVL(J.RO24NT, 0) <> 0 AND
NVL(J.RO24NT, 0) - (NVL(J.RO24T, 0) + NVL(S.RO24T, 0)) = 0 THEN
NVL(J.RO24NB, 0) - (NVL(J.RO24B, 0) + NVL(S.RO24B, 0))
ELSE
0
END),
J.RO24T = J.RO24T + S.RO24T,
J.RO20B = J.RO20B + NVL(S.RO20B, 0) + (CASE
WHEN NVL(S.RO20B, 0) <> 0 AND NVL(J.RO20NT, 0) <> 0 AND
NVL(J.RO20NT, 0) - (NVL(J.RO20T, 0) + NVL(S.RO20T, 0)) = 0 THEN
NVL(J.RO20NB, 0) - (NVL(J.RO20B, 0) + NVL(S.RO20B, 0))
ELSE
0
END),
J.RO20T = J.RO20T + S.RO20T,
J.RO21B = J.RO21B + NVL(S.RO21B, 0) + (CASE
WHEN NVL(S.RO21B, 0) <> 0 AND NVL(J.RO21NT, 0) <> 0 AND
NVL(J.RO21NT, 0) - (NVL(J.RO21T, 0) + NVL(S.RO21T, 0)) = 0 THEN
NVL(J.RO21NB, 0) - (NVL(J.RO21B, 0) + NVL(S.RO21B, 0))
ELSE
0
END),
J.RO21T = J.RO21T + S.RO21T,
J.RO11B = J.RO11B + NVL(S.RO11B, 0) + (CASE
WHEN NVL(S.RO11B, 0) <> 0 AND NVL(J.RO11NT, 0) <> 0 AND
NVL(J.RO11NT, 0) - (NVL(J.RO11T, 0) + NVL(S.RO11T, 0)) = 0 THEN
NVL(J.RO11NB, 0) - (NVL(J.RO11B, 0) + NVL(S.RO11B, 0))
ELSE
0
END),
J.RO11T = J.RO11T + S.RO11T,
J.RO19B = J.RO19B + NVL(S.RO19B, 0) + (CASE
WHEN NVL(S.RO19B, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND
NVL(J.RO19NT, 0) - (NVL(J.RO19T, 0) + NVL(S.RO19T, 0)) = 0 THEN
NVL(J.RO19NB, 0) - (NVL(J.RO19B, 0) + NVL(S.RO19B, 0))
ELSE
0
END),
J.RO19T = J.RO19T + S.RO19T,
J.RO9B = J.RO9B + NVL(S.RO9B, 0) + (CASE
WHEN NVL(S.RO9B, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND
NVL(J.RO9NT, 0) - (NVL(J.RO9T, 0) + NVL(S.RO9T, 0)) = 0 THEN
NVL(J.RO9NB, 0) - (NVL(J.RO9B, 0) + NVL(S.RO9B, 0))
ELSE
0
END),
J.RO9T = J.RO9T + S.RO9T,
J.RO5B = J.RO5B + NVL(S.RO5B, 0) + (CASE
WHEN NVL(S.RO5B, 0) <> 0 AND NVL(J.RO5NT, 0) <> 0 AND
NVL(J.RO5NT, 0) - (NVL(J.RO5T, 0) + NVL(S.RO5T, 0)) = 0 THEN
NVL(J.RO5NB, 0) - (NVL(J.RO5B, 0) + NVL(S.RO5B, 0))
ELSE
0
END),
J.RO5T = J.RO5T + S.RO5T,
J.RO24NB = J.RO24NB + S.RO24NB,
J.RO24NT = J.RO24NT + S.RO24NT,
J.RO20NB = J.RO20NB + S.RO20NB,
J.RO20NT = J.RO20NT + S.RO20NT,
J.RO21NB = J.RO21NB + S.RO21NB,
J.RO21NT = J.RO21NT + S.RO21NT,
J.RO11NB = J.RO11NB + S.RO11NB,
J.RO11NT = J.RO11NT + S.RO11NT,
J.RO19NB = J.RO19NB + S.RO19NB,
J.RO19NT = J.RO19NT + S.RO19NT,
J.RO9NB = J.RO9NB + S.RO9NB,
J.RO9NT = J.RO9NT + S.RO9NT,
J.RO5NB = J.RO5NB + S.RO5NB,
J.RO5NT = J.RO5NT + S.RO5NT,
J.ROTI = J.ROTI + S.ROTI,
J.CESCDD1 = J.CESCDD1 + S.CESCDD1,
J.CESCDD2 = J.CESCDD2 + S.CESCDD2,
J.CEOPTR = J.CEOPTR + S.CEOPTR,
J.CESVDD = J.CESVDD + S.CESVDD,
J.CESVFDD = J.CESVFDD + S.CESVFDD,
J.CESVFS = J.CESVFS + S.CESVFS,
J.WRSCDD = J.WRSCDD + S.WRSCDD,
J.WRSCDDAB = J.WRSCDDAB + S.WRSCDDAB,
J.WRSCDDCD = J.WRSCDDCD + S.WRSCDDCD,
J.FODD = J.FODD + S.FODD,
J.FOFDD = J.FOFDD + S.FOFDD,
J.WRSCFDD = J.WRSCFDD + S.WRSCFDD,
J.WRN = J.WRN + S.WRN,
J.RORTC24 = J.RORTC24 + S.RORTC24,
J.RORTC20 = J.RORTC20 + S.RORTC20,
J.RORTC21 = J.RORTC21 + S.RORTC21,
J.RORTC11 = J.RORTC11 + S.RORTC11,
J.RORTC19 = J.RORTC19 + S.RORTC19,
J.RORTC9 = J.RORTC9 + S.RORTC9,
J.RORTC5 = J.RORTC5 + S.RORTC5 DELETE
WHERE ' || tnScrie || ' = ' ||
pack_contafin.nStergere || '
and J.TOTCTVA = 0
AND J.TOTFTVATAX = 0
AND J.TOTTVATAX = 0
AND J.TOTNETAX = 0
AND J.RO24B = 0
AND J.RO24T = 0
AND J.RO20B = 0
AND J.RO20T = 0
AND J.RO19B = 0
AND J.RO19T = 0
AND J.RO9B = 0
AND J.RO9T = 0
AND J.RO5B = 0
AND J.RO5T = 0
AND J.RO24NB = 0
AND J.RO24NT = 0
AND J.RO20NB = 0
AND J.RO20NT = 0
AND J.RO19NB = 0
AND J.RO19NT = 0
AND J.RO9NB = 0
AND J.RO9NT = 0
AND J.RO5NB = 0
AND J.RO5NT = 0
AND J.ROTI = 0
AND J.CESCDD1 = 0
AND J.CESCDD2 = 0
AND J.CEOPTR = 0
AND J.CESVDD = 0
AND J.CESVFDD = 0
AND J.CESVFS = 0
AND J.WRSCDD = 0
AND J.WRSCDDAB = 0
AND J.WRSCDDCD = 0
AND J.FODD = 0
AND J.FOFDD = 0
AND J.WRSCFDD = 0
AND J.WRN = 0
AND J.RORTC24 = 0
AND J.RORTC20 = 0
AND J.RORTC19 = 0
AND J.RORTC9 = 0
AND J.RORTC5 = 0
WHEN NOT MATCHED THEN
INSERT(AN, LUNA, ID_FACT, NRACT, SERIE_ACT, ID_FDOC, DATAACT, DATAIREG, ID_PART, TOTCTVA, TOTFTVATAX, TOTTVATAX, TOTNETAX, RO24B, RO24T, RO20B, RO20T, RO21B, RO21T, RO11B, RO11T, RO19B, RO19T, RO9B, RO9T, RO5B, RO5T, RO24NB, RO24NT, RO20NB, RO20NT, RO21NB, RO21NT, RO11NB, RO11NT, RO19NB, RO19NT, RO9NB, RO9NT, RO5NB, RO5NT, ROTI, CESCDD1, CESCDD2, CEOPTR, CESVDD, CESVFDD, CESVFS, WRSCDD, WRSCDDAB, WRSCDDCD, FODD, FOFDD, WRSCFDD, WRN, RORTC24, RORTC20, RORTC21, RORTC11, RORTC19, RORTC9, RORTC5, COD, ID_SUCURSALA) VALUES(S.AN, S.LUNA, S.ID_FACT, S.NRACT, S.SERIE_ACT, S.ID_FDOC, S.DATAACT, S.DATAIREG, S.ID_PART, S.TOTCTVA, S.TOTFTVATAX, S.TOTTVATAX, S.TOTNETAX,
(CASE
WHEN NVL(S.RO24B, 0) <> 0 AND NVL(S.RO24NT, 0) <> 0 AND
NVL(S.RO24NT, 0) = NVL(S.RO24T, 0) THEN
NVL(S.RO24NB, 0)
ELSE
NVL(S.RO24B, 0)
END), S.RO24T,
(CASE
WHEN NVL(S.RO20B, 0) <> 0 AND NVL(S.RO20NT, 0) <> 0 AND
NVL(S.RO20NT, 0) = NVL(S.RO20T, 0) THEN
NVL(S.RO20NB, 0)
ELSE
NVL(S.RO20B, 0)
END), S.RO20T,
(CASE
WHEN NVL(S.RO21B, 0) <> 0 AND NVL(S.RO21NT, 0) <> 0 AND
NVL(S.RO21NT, 0) = NVL(S.RO21T, 0) THEN
NVL(S.RO21NB, 0)
ELSE
NVL(S.RO21B, 0)
END), S.RO21T,(CASE
WHEN NVL(S.RO11B, 0) <> 0 AND NVL(S.RO11NT, 0) <> 0 AND
NVL(S.RO11NT, 0) = NVL(S.RO11T, 0) THEN
NVL(S.RO11NB, 0)
ELSE
NVL(S.RO11B, 0)
END), S.RO11T,
(CASE
WHEN NVL(S.RO19B, 0) <> 0 AND NVL(S.RO19NT, 0) <> 0 AND
NVL(S.RO19NT, 0) = NVL(S.RO19T, 0) THEN
NVL(S.RO19NB, 0)
ELSE
NVL(S.RO19B, 0)
END), S.RO19T,(CASE
WHEN NVL(S.RO9B, 0) <> 0 AND NVL(S.RO9NT, 0) <> 0 AND
NVL(S.RO9NT, 0) = NVL(S.RO9T, 0) THEN
NVL(S.RO9NB, 0)
ELSE
NVL(S.RO9B, 0)
END), S.RO9T,(CASE
WHEN NVL(S.RO5B, 0) <> 0 AND NVL(S.RO5NT, 0) <> 0 AND
NVL(S.RO5NT, 0) = NVL(S.RO5T, 0) THEN
NVL(S.RO5NB, 0)
ELSE
NVL(S.RO5B, 0)
END), S.RO5T, S.RO24NB, S.RO24NT, S.RO20NB, S.RO20NT, S.RO21NB, S.RO21NT, S.RO11NB, S.RO11NT, S.RO19NB, S.RO19NT, S.RO9NB, S.RO9NT, S.RO5NB, S.RO5NT, S.ROTI, S.CESCDD1, S.CESCDD2, S.CEOPTR, S.CESVDD, S.CESVFDD, S.CESVFS, S.WRSCDD, S.WRSCDDAB, S.WRSCDDCD, S.FODD, S.FOFDD, S.WRSCFDD, S.WRN, S.RORTC24, S.RORTC20, S.RORTC21, S.RORTC11, S.RORTC19, S.RORTC9, S.RORTC5, S.COD, S.ID_SUCURSALA);
END SCRIE_JV_2007;