# 🔄 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 ; ``` **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! 🚀**