383 lines
8.3 KiB
Markdown
383 lines
8.3 KiB
Markdown
# 🔄 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! 🚀**
|