#!/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 ""