oracle migrare

This commit is contained in:
Marius
2025-10-01 16:08:13 +03:00
parent b414b3c338
commit 02ef8775ab
19 changed files with 4832 additions and 1864 deletions

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 ""