diff --git a/proxmox/lxc108-oracle/migration/00-MASTER-MIGRATION.sh b/proxmox/lxc108-oracle/migration/00-MASTER-MIGRATION.sh index 47c9e33..dbcaeaa 100644 --- a/proxmox/lxc108-oracle/migration/00-MASTER-MIGRATION.sh +++ b/proxmox/lxc108-oracle/migration/00-MASTER-MIGRATION.sh @@ -1,634 +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 "" +#!/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 "" diff --git a/proxmox/lxc108-oracle/migration/00-install-oracle21c-xe.sh b/proxmox/lxc108-oracle/migration/00-install-oracle21c-xe.sh index 9e560b8..79859da 100644 --- a/proxmox/lxc108-oracle/migration/00-install-oracle21c-xe.sh +++ b/proxmox/lxc108-oracle/migration/00-install-oracle21c-xe.sh @@ -1,315 +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 </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 < /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 "" +#!/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 "" diff --git a/proxmox/lxc108-oracle/migration/03-transfer-to-oracle21c.sh b/proxmox/lxc108-oracle/migration/03-transfer-to-oracle21c.sh index bf632a1..df55298 100644 --- a/proxmox/lxc108-oracle/migration/03-transfer-to-oracle21c.sh +++ b/proxmox/lxc108-oracle/migration/03-transfer-to-oracle21c.sh @@ -1,74 +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 "" +#!/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 "" diff --git a/proxmox/lxc108-oracle/migration/04-import-to-oracle21c.sh b/proxmox/lxc108-oracle/migration/04-import-to-oracle21c.sh index 7ee580b..b99c483 100644 --- a/proxmox/lxc108-oracle/migration/04-import-to-oracle21c.sh +++ b/proxmox/lxc108-oracle/migration/04-import-to-oracle21c.sh @@ -1,173 +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 < /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 "" +#!/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 "" diff --git a/proxmox/lxc108-oracle/migration/06-finalize-migration.sh b/proxmox/lxc108-oracle/migration/06-finalize-migration.sh index fafbf95..aac4f0f 100644 --- a/proxmox/lxc108-oracle/migration/06-finalize-migration.sh +++ b/proxmox/lxc108-oracle/migration/06-finalize-migration.sh @@ -1,162 +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}" < 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}" < 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 "" +#!/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}" < 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}" < 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 "" diff --git a/proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh b/proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh index a6a0e5d..34aa52c 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh +++ b/proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh @@ -1,212 +1,212 @@ -#!/bin/bash -# ============================================================================= -# Clone VM 300 (Windows 11 Template) for Oracle Testing -# ============================================================================= -# -# Purpose: Create a test VM for Oracle installation testing -# -# Usage: -# ./clone-vm300.sh [TARGET_VMID] [TARGET_NAME] -# -# Examples: -# ./clone-vm300.sh # Creates VM 301 named oracle-test-301 -# ./clone-vm300.sh 305 # Creates VM 305 named oracle-test-305 -# ./clone-vm300.sh 310 roa-prod # Creates VM 310 named roa-prod -# -# Prerequisites: -# - Run on Proxmox host (pvemini, pve1, or pveelite) -# - VM 300 exists as Windows 11 template -# - Sufficient storage space (~50GB per clone) -# -# ============================================================================= - -set -e - -# ----------------------------------------------------------------------------- -# Configuration -# ----------------------------------------------------------------------------- - -SOURCE_VMID=300 -TARGET_VMID=${1:-301} -TARGET_NAME=${2:-"oracle-test-${TARGET_VMID}"} - -# Storage for new VM (change if needed) -TARGET_STORAGE="local-zfs" - -# Node where to create the VM (empty = same as source) -TARGET_NODE="" - -# Full clone (true) or linked clone (false) -FULL_CLONE=true - -# Start VM after creation -AUTO_START=true - -# Description for the new VM -DESCRIPTION="Oracle 21c Test VM - Created $(date '+%Y-%m-%d %H:%M')" - -# ----------------------------------------------------------------------------- -# Validation -# ----------------------------------------------------------------------------- - -echo "==============================================" -echo "Proxmox VM Clone Script" -echo "==============================================" -echo "" -echo "Source VM: $SOURCE_VMID" -echo "Target VM: $TARGET_VMID" -echo "Target Name: $TARGET_NAME" -echo "Full Clone: $FULL_CLONE" -echo "Auto Start: $AUTO_START" -echo "" - -# Check if running on Proxmox -if ! command -v qm &> /dev/null; then - echo "ERROR: This script must be run on a Proxmox host" - echo " (qm command not found)" - exit 1 -fi - -# Check if source VM exists -if ! qm status $SOURCE_VMID &> /dev/null; then - echo "ERROR: Source VM $SOURCE_VMID does not exist" - exit 1 -fi - -# Check if target VMID is already in use -if qm status $TARGET_VMID &> /dev/null 2>&1; then - echo "ERROR: Target VMID $TARGET_VMID already exists" - echo " Choose a different VMID or remove existing VM:" - echo " qm destroy $TARGET_VMID" - exit 1 -fi - -# Confirm before proceeding -read -p "Proceed with cloning? [y/N] " -n 1 -r -echo -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "Aborted." - exit 0 -fi - -# ----------------------------------------------------------------------------- -# Clone VM -# ----------------------------------------------------------------------------- - -echo "" -echo "Creating clone..." - -CLONE_CMD="qm clone $SOURCE_VMID $TARGET_VMID --name $TARGET_NAME" - -if [ "$FULL_CLONE" = true ]; then - CLONE_CMD="$CLONE_CMD --full" -fi - -if [ -n "$TARGET_STORAGE" ]; then - CLONE_CMD="$CLONE_CMD --storage $TARGET_STORAGE" -fi - -if [ -n "$TARGET_NODE" ]; then - CLONE_CMD="$CLONE_CMD --target $TARGET_NODE" -fi - -echo "Running: $CLONE_CMD" -eval $CLONE_CMD - -echo "Clone created successfully" - -# ----------------------------------------------------------------------------- -# Configure VM -# ----------------------------------------------------------------------------- - -echo "" -echo "Configuring VM..." - -# Set description -qm set $TARGET_VMID --description "$DESCRIPTION" - -# Optionally increase resources for Oracle -# qm set $TARGET_VMID --memory 8192 --cores 4 - -echo "VM configured" - -# ----------------------------------------------------------------------------- -# Start VM -# ----------------------------------------------------------------------------- - -if [ "$AUTO_START" = true ]; then - echo "" - echo "Starting VM..." - qm start $TARGET_VMID - - # Wait for VM to start - sleep 5 - - # Check status - STATUS=$(qm status $TARGET_VMID | awk '{print $2}') - echo "VM Status: $STATUS" -fi - -# ----------------------------------------------------------------------------- -# Output Summary -# ----------------------------------------------------------------------------- - -echo "" -echo "==============================================" -echo "VM Clone Complete" -echo "==============================================" -echo "" -echo "VMID: $TARGET_VMID" -echo "Name: $TARGET_NAME" -echo "Status: $(qm status $TARGET_VMID | awk '{print $2}')" -echo "" -echo "Console URL: https://$(hostname -I | awk '{print $1}'):8006/#v1:0:=qemu%2F${TARGET_VMID}:4::::::" -echo "" -echo "Next steps:" -echo " 1. Connect to VM console" -echo " 2. Complete Windows OOBE if needed" -echo " 3. Install Oracle 21c XE or SE" -echo " 4. Run ROA setup scripts" -echo "" -echo "To delete this VM when done:" -echo " qm stop $TARGET_VMID" -echo " qm destroy $TARGET_VMID" -echo "" - -# ----------------------------------------------------------------------------- -# Helper Commands -# ----------------------------------------------------------------------------- - -# Print helpful commands -cat << 'COMMANDS' -# Useful Proxmox commands: - -# List all VMs -qm list - -# VM status -qm status TARGET_VMID - -# Start/Stop/Restart VM -qm start TARGET_VMID -qm stop TARGET_VMID -qm restart TARGET_VMID - -# Access VM console -qm terminal TARGET_VMID - -# Clone with different storage -qm clone 300 TARGET_VMID --name NAME --full --storage local-lvm - -# Snapshot before testing -qm snapshot TARGET_VMID snap-before-oracle --description "Before Oracle install" - -# Rollback to snapshot -qm rollback TARGET_VMID snap-before-oracle - -# Delete VM -qm stop TARGET_VMID && qm destroy TARGET_VMID - -COMMANDS - -exit 0 +#!/bin/bash +# ============================================================================= +# Clone VM 300 (Windows 11 Template) for Oracle Testing +# ============================================================================= +# +# Purpose: Create a test VM for Oracle installation testing +# +# Usage: +# ./clone-vm300.sh [TARGET_VMID] [TARGET_NAME] +# +# Examples: +# ./clone-vm300.sh # Creates VM 301 named oracle-test-301 +# ./clone-vm300.sh 305 # Creates VM 305 named oracle-test-305 +# ./clone-vm300.sh 310 roa-prod # Creates VM 310 named roa-prod +# +# Prerequisites: +# - Run on Proxmox host (pvemini, pve1, or pveelite) +# - VM 300 exists as Windows 11 template +# - Sufficient storage space (~50GB per clone) +# +# ============================================================================= + +set -e + +# ----------------------------------------------------------------------------- +# Configuration +# ----------------------------------------------------------------------------- + +SOURCE_VMID=300 +TARGET_VMID=${1:-301} +TARGET_NAME=${2:-"oracle-test-${TARGET_VMID}"} + +# Storage for new VM (change if needed) +TARGET_STORAGE="local-zfs" + +# Node where to create the VM (empty = same as source) +TARGET_NODE="" + +# Full clone (true) or linked clone (false) +FULL_CLONE=true + +# Start VM after creation +AUTO_START=true + +# Description for the new VM +DESCRIPTION="Oracle 21c Test VM - Created $(date '+%Y-%m-%d %H:%M')" + +# ----------------------------------------------------------------------------- +# Validation +# ----------------------------------------------------------------------------- + +echo "==============================================" +echo "Proxmox VM Clone Script" +echo "==============================================" +echo "" +echo "Source VM: $SOURCE_VMID" +echo "Target VM: $TARGET_VMID" +echo "Target Name: $TARGET_NAME" +echo "Full Clone: $FULL_CLONE" +echo "Auto Start: $AUTO_START" +echo "" + +# Check if running on Proxmox +if ! command -v qm &> /dev/null; then + echo "ERROR: This script must be run on a Proxmox host" + echo " (qm command not found)" + exit 1 +fi + +# Check if source VM exists +if ! qm status $SOURCE_VMID &> /dev/null; then + echo "ERROR: Source VM $SOURCE_VMID does not exist" + exit 1 +fi + +# Check if target VMID is already in use +if qm status $TARGET_VMID &> /dev/null 2>&1; then + echo "ERROR: Target VMID $TARGET_VMID already exists" + echo " Choose a different VMID or remove existing VM:" + echo " qm destroy $TARGET_VMID" + exit 1 +fi + +# Confirm before proceeding +read -p "Proceed with cloning? [y/N] " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Aborted." + exit 0 +fi + +# ----------------------------------------------------------------------------- +# Clone VM +# ----------------------------------------------------------------------------- + +echo "" +echo "Creating clone..." + +CLONE_CMD="qm clone $SOURCE_VMID $TARGET_VMID --name $TARGET_NAME" + +if [ "$FULL_CLONE" = true ]; then + CLONE_CMD="$CLONE_CMD --full" +fi + +if [ -n "$TARGET_STORAGE" ]; then + CLONE_CMD="$CLONE_CMD --storage $TARGET_STORAGE" +fi + +if [ -n "$TARGET_NODE" ]; then + CLONE_CMD="$CLONE_CMD --target $TARGET_NODE" +fi + +echo "Running: $CLONE_CMD" +eval $CLONE_CMD + +echo "Clone created successfully" + +# ----------------------------------------------------------------------------- +# Configure VM +# ----------------------------------------------------------------------------- + +echo "" +echo "Configuring VM..." + +# Set description +qm set $TARGET_VMID --description "$DESCRIPTION" + +# Optionally increase resources for Oracle +# qm set $TARGET_VMID --memory 8192 --cores 4 + +echo "VM configured" + +# ----------------------------------------------------------------------------- +# Start VM +# ----------------------------------------------------------------------------- + +if [ "$AUTO_START" = true ]; then + echo "" + echo "Starting VM..." + qm start $TARGET_VMID + + # Wait for VM to start + sleep 5 + + # Check status + STATUS=$(qm status $TARGET_VMID | awk '{print $2}') + echo "VM Status: $STATUS" +fi + +# ----------------------------------------------------------------------------- +# Output Summary +# ----------------------------------------------------------------------------- + +echo "" +echo "==============================================" +echo "VM Clone Complete" +echo "==============================================" +echo "" +echo "VMID: $TARGET_VMID" +echo "Name: $TARGET_NAME" +echo "Status: $(qm status $TARGET_VMID | awk '{print $2}')" +echo "" +echo "Console URL: https://$(hostname -I | awk '{print $1}'):8006/#v1:0:=qemu%2F${TARGET_VMID}:4::::::" +echo "" +echo "Next steps:" +echo " 1. Connect to VM console" +echo " 2. Complete Windows OOBE if needed" +echo " 3. Install Oracle 21c XE or SE" +echo " 4. Run ROA setup scripts" +echo "" +echo "To delete this VM when done:" +echo " qm stop $TARGET_VMID" +echo " qm destroy $TARGET_VMID" +echo "" + +# ----------------------------------------------------------------------------- +# Helper Commands +# ----------------------------------------------------------------------------- + +# Print helpful commands +cat << 'COMMANDS' +# Useful Proxmox commands: + +# List all VMs +qm list + +# VM status +qm status TARGET_VMID + +# Start/Stop/Restart VM +qm start TARGET_VMID +qm stop TARGET_VMID +qm restart TARGET_VMID + +# Access VM console +qm terminal TARGET_VMID + +# Clone with different storage +qm clone 300 TARGET_VMID --name NAME --full --storage local-lvm + +# Snapshot before testing +qm snapshot TARGET_VMID snap-before-oracle --description "Before Oracle install" + +# Rollback to snapshot +qm rollback TARGET_VMID snap-before-oracle + +# Delete VM +qm stop TARGET_VMID && qm destroy TARGET_VMID + +COMMANDS + +exit 0 diff --git a/proxmox/lxc108-oracle/scripts/export-roa2.sh b/proxmox/lxc108-oracle/scripts/export-roa2.sh index 4ca90f8..34beb37 100644 --- a/proxmox/lxc108-oracle/scripts/export-roa2.sh +++ b/proxmox/lxc108-oracle/scripts/export-roa2.sh @@ -1,79 +1,79 @@ -#!/bin/bash -# Export CONTAFIN_ORACLE și FIRMANOUA, arhive separate tar.gz -# Rulează din LXC 108: ./export-roa2.sh [18|21] -# 18 = Oracle 18c (compatibil 11g/18c/19c) | 21 = Oracle 21c (default) -# -# Exemple: -# ./export-roa2.sh 18 # Export din Oracle 18c pe port 1522 -# ./export-roa2.sh 21 # Export din Oracle 21c PDB roa2 pe port 1521 -# ./export-roa2.sh # Default: Oracle 21c - -DATE=$(date +%Y%m%d_%H%M%S) -SCHEMAS="CONTAFIN_ORACLE FIRMANOUA" -ORACLE_VER=${1:-21} - -if [ "$ORACLE_VER" == "18" ]; then - CONTAINER="oracle18-xe" - PORT="1521" # Port intern container (extern e 1522) - SERVICE="XEPDB1" # Oracle 18c PDB (nu CDB!) - DMPDIR="/opt/oracle18/oradata/dmpdir" # Volum separat pentru 18c - SUFFIX="_v11.2" - VERSION="11.2" - echo "=== Export Oracle 18c PDB XEPDB1 (compatibil 11g/18c/19c) - $DATE ===" -else - CONTAINER="oracle-xe" - PORT="1521" - SERVICE="roa2" # Oracle 21c PDB roa2 - DMPDIR="/opt/oracle/oradata/dmpdir" # Volum pentru 21c - SUFFIX="_v19" - VERSION="19" - echo "=== Export Oracle 21c PDB roa2 - $DATE ===" -fi - -# Verifică că containerul Docker rulează -if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then - echo "EROARE: Containerul $CONTAINER nu rulează!" - echo "" - echo "Pornește-l cu: docker start $CONTAINER" - echo "Apoi așteaptă ~60s pentru startup Oracle." - exit 1 -fi - -# Verifică că baza de date Oracle e OPEN -DB_STATUS=$(docker exec $CONTAINER bash -c "echo 'SELECT status FROM v\$instance;' | sqlplus -s / as sysdba" 2>/dev/null | grep -E "OPEN|MOUNTED") -if [ -z "$DB_STATUS" ]; then - echo "EROARE: Baza de date Oracle nu e disponibilă!" - echo "Containerul rulează dar Oracle nu e OPEN." - echo "Verifică: docker logs $CONTAINER --tail 20" - exit 1 -fi -echo "Oracle status: $DB_STATUS" - -# Verifică că DMPDIR există -if [ ! -d "$DMPDIR" ]; then - echo "EROARE: Director $DMPDIR nu există!" - echo "Creează-l cu: mkdir -p $DMPDIR && chmod 777 $DMPDIR" - exit 1 -fi - -cd $DMPDIR - -for SCHEMA in $SCHEMAS; do - echo "Exporting $SCHEMA from $CONTAINER..." - docker exec $CONTAINER expdp system/romfastsoft@localhost:$PORT/$SERVICE \ - SCHEMAS=$SCHEMA \ - DIRECTORY=DMPDIR \ - DUMPFILE=${SCHEMA}_${DATE}.dmp \ - LOGFILE=${SCHEMA}_${DATE}.log \ - VERSION=$VERSION \ - EXCLUDE=STATISTICS - - # Arhivare individuală - ARCHIVE="${SCHEMA}${SUFFIX}_${DATE}.tar.gz" - echo "Creating archive: $ARCHIVE" - tar -czvf "$ARCHIVE" ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log - rm -f ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log -done - -echo "=== Done! ===" -ls -lh $DMPDIR/*_${DATE}.tar.gz +#!/bin/bash +# Export CONTAFIN_ORACLE și FIRMANOUA, arhive separate tar.gz +# Rulează din LXC 108: ./export-roa2.sh [18|21] +# 18 = Oracle 18c (compatibil 11g/18c/19c) | 21 = Oracle 21c (default) +# +# Exemple: +# ./export-roa2.sh 18 # Export din Oracle 18c pe port 1522 +# ./export-roa2.sh 21 # Export din Oracle 21c PDB roa2 pe port 1521 +# ./export-roa2.sh # Default: Oracle 21c + +DATE=$(date +%Y%m%d_%H%M%S) +SCHEMAS="CONTAFIN_ORACLE FIRMANOUA" +ORACLE_VER=${1:-21} + +if [ "$ORACLE_VER" == "18" ]; then + CONTAINER="oracle18-xe" + PORT="1521" # Port intern container (extern e 1522) + SERVICE="XEPDB1" # Oracle 18c PDB (nu CDB!) + DMPDIR="/opt/oracle18/oradata/dmpdir" # Volum separat pentru 18c + SUFFIX="_v11.2" + VERSION="11.2" + echo "=== Export Oracle 18c PDB XEPDB1 (compatibil 11g/18c/19c) - $DATE ===" +else + CONTAINER="oracle-xe" + PORT="1521" + SERVICE="roa2" # Oracle 21c PDB roa2 + DMPDIR="/opt/oracle/oradata/dmpdir" # Volum pentru 21c + SUFFIX="_v19" + VERSION="19" + echo "=== Export Oracle 21c PDB roa2 - $DATE ===" +fi + +# Verifică că containerul Docker rulează +if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then + echo "EROARE: Containerul $CONTAINER nu rulează!" + echo "" + echo "Pornește-l cu: docker start $CONTAINER" + echo "Apoi așteaptă ~60s pentru startup Oracle." + exit 1 +fi + +# Verifică că baza de date Oracle e OPEN +DB_STATUS=$(docker exec $CONTAINER bash -c "echo 'SELECT status FROM v\$instance;' | sqlplus -s / as sysdba" 2>/dev/null | grep -E "OPEN|MOUNTED") +if [ -z "$DB_STATUS" ]; then + echo "EROARE: Baza de date Oracle nu e disponibilă!" + echo "Containerul rulează dar Oracle nu e OPEN." + echo "Verifică: docker logs $CONTAINER --tail 20" + exit 1 +fi +echo "Oracle status: $DB_STATUS" + +# Verifică că DMPDIR există +if [ ! -d "$DMPDIR" ]; then + echo "EROARE: Director $DMPDIR nu există!" + echo "Creează-l cu: mkdir -p $DMPDIR && chmod 777 $DMPDIR" + exit 1 +fi + +cd $DMPDIR + +for SCHEMA in $SCHEMAS; do + echo "Exporting $SCHEMA from $CONTAINER..." + docker exec $CONTAINER expdp system/romfastsoft@localhost:$PORT/$SERVICE \ + SCHEMAS=$SCHEMA \ + DIRECTORY=DMPDIR \ + DUMPFILE=${SCHEMA}_${DATE}.dmp \ + LOGFILE=${SCHEMA}_${DATE}.log \ + VERSION=$VERSION \ + EXCLUDE=STATISTICS + + # Arhivare individuală + ARCHIVE="${SCHEMA}${SUFFIX}_${DATE}.tar.gz" + echo "Creating archive: $ARCHIVE" + tar -czvf "$ARCHIVE" ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log + rm -f ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log +done + +echo "=== Done! ===" +ls -lh $DMPDIR/*_${DATE}.tar.gz diff --git a/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh b/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh index 75b84ba..7db3fa4 100644 --- a/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh +++ b/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh @@ -1,23 +1,23 @@ -#!/bin/bash -# ============================================================================= -# fix-sqlnet.sh - Startup script pentru Oracle 18c XE -# ============================================================================= -# Scop: Restaurează sqlnet.ora cu suport pentru clienți vechi (Instant Client 11g) -# la fiecare pornire a containerului Docker. -# -# Locație în container: /opt/oracle/scripts/startup/fix-sqlnet.sh -# Executat automat de: gvenzl/oracle-xe la pornirea containerului -# -# Problema rezolvată: ORA-28040: No matching authentication protocol -# Cauză: Oracle 18c implicit nu acceptă autentificare de la clienți 11g -# ============================================================================= - -CONFIG_SOURCE="/opt/oracle/oradata/dbconfig/sqlnet.ora" -CONFIG_DEST="/opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora" - -if [ -f "$CONFIG_SOURCE" ]; then - cp "$CONFIG_SOURCE" "$CONFIG_DEST" - echo "[fix-sqlnet.sh] Copied custom sqlnet.ora with old auth protocol support" -else - echo "[fix-sqlnet.sh] WARNING: $CONFIG_SOURCE not found, using default sqlnet.ora" -fi +#!/bin/bash +# ============================================================================= +# fix-sqlnet.sh - Startup script pentru Oracle 18c XE +# ============================================================================= +# Scop: Restaurează sqlnet.ora cu suport pentru clienți vechi (Instant Client 11g) +# la fiecare pornire a containerului Docker. +# +# Locație în container: /opt/oracle/scripts/startup/fix-sqlnet.sh +# Executat automat de: gvenzl/oracle-xe la pornirea containerului +# +# Problema rezolvată: ORA-28040: No matching authentication protocol +# Cauză: Oracle 18c implicit nu acceptă autentificare de la clienți 11g +# ============================================================================= + +CONFIG_SOURCE="/opt/oracle/oradata/dbconfig/sqlnet.ora" +CONFIG_DEST="/opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora" + +if [ -f "$CONFIG_SOURCE" ]; then + cp "$CONFIG_SOURCE" "$CONFIG_DEST" + echo "[fix-sqlnet.sh] Copied custom sqlnet.ora with old auth protocol support" +else + echo "[fix-sqlnet.sh] WARNING: $CONFIG_SOURCE not found, using default sqlnet.ora" +fi diff --git a/proxmox/lxc171-claude-agent/scripts/finish-task.sh b/proxmox/lxc171-claude-agent/scripts/finish-task.sh index 91df8bf..382e567 100644 --- a/proxmox/lxc171-claude-agent/scripts/finish-task.sh +++ b/proxmox/lxc171-claude-agent/scripts/finish-task.sh @@ -1,31 +1,31 @@ -#!/bin/bash -# Script pentru a finaliza un task (commit + push) - -PROJECT_DIR="/workspace/romfastsql" -cd "$PROJECT_DIR" || exit 1 - -BRANCH=$(git branch --show-current) - -if [ "$BRANCH" = "main" ]; then - echo "❌ Ești pe main! Nu face commit direct pe main." - exit 1 -fi - -echo "📋 Status curent:" -git status --short - -echo "" -read -p "Mesaj commit: " COMMIT_MSG - -if [ -z "$COMMIT_MSG" ]; then - echo "❌ Trebuie să dai un mesaj pentru commit" - exit 1 -fi - -git add . -git commit -m "$COMMIT_MSG" -git push -u origin "$BRANCH" - -echo "" -echo "✅ Done! Branch-ul $BRANCH a fost push-uit." -echo "🔗 Creează Pull Request în Gitea: https://gitea.romfast.ro/romfast/romfastsql/compare/main...$BRANCH" +#!/bin/bash +# Script pentru a finaliza un task (commit + push) + +PROJECT_DIR="/workspace/romfastsql" +cd "$PROJECT_DIR" || exit 1 + +BRANCH=$(git branch --show-current) + +if [ "$BRANCH" = "main" ]; then + echo "❌ Ești pe main! Nu face commit direct pe main." + exit 1 +fi + +echo "📋 Status curent:" +git status --short + +echo "" +read -p "Mesaj commit: " COMMIT_MSG + +if [ -z "$COMMIT_MSG" ]; then + echo "❌ Trebuie să dai un mesaj pentru commit" + exit 1 +fi + +git add . +git commit -m "$COMMIT_MSG" +git push -u origin "$BRANCH" + +echo "" +echo "✅ Done! Branch-ul $BRANCH a fost push-uit." +echo "🔗 Creează Pull Request în Gitea: https://gitea.romfast.ro/romfast/romfastsql/compare/main...$BRANCH" diff --git a/proxmox/lxc171-claude-agent/scripts/new-task.sh b/proxmox/lxc171-claude-agent/scripts/new-task.sh index 4e7f444..0106f8f 100644 --- a/proxmox/lxc171-claude-agent/scripts/new-task.sh +++ b/proxmox/lxc171-claude-agent/scripts/new-task.sh @@ -1,26 +1,26 @@ -#!/bin/bash -# Script pentru a începe un task nou cu branch - -if [ -z "$1" ]; then - echo "Utilizare: ~/new-task.sh " - echo "Exemplu: ~/new-task.sh fix/rezolva-bug" - exit 1 -fi - -BRANCH_NAME="$1" -PROJECT_DIR="/workspace/romfastsql" - -cd "$PROJECT_DIR" || exit 1 - -# Actualizează main -echo "📥 Actualizez main..." -git checkout main -git pull origin main - -# Creează branch nou -echo "🌿 Creez branch: $BRANCH_NAME" -git checkout -b "$BRANCH_NAME" - -echo "✅ Gata! Ești pe branch-ul: $BRANCH_NAME" -echo "" -echo "Pornește Claude cu: source ~/.nvm/nvm.sh && claude" +#!/bin/bash +# Script pentru a începe un task nou cu branch + +if [ -z "$1" ]; then + echo "Utilizare: ~/new-task.sh " + echo "Exemplu: ~/new-task.sh fix/rezolva-bug" + exit 1 +fi + +BRANCH_NAME="$1" +PROJECT_DIR="/workspace/romfastsql" + +cd "$PROJECT_DIR" || exit 1 + +# Actualizează main +echo "📥 Actualizez main..." +git checkout main +git pull origin main + +# Creează branch nou +echo "🌿 Creez branch: $BRANCH_NAME" +git checkout -b "$BRANCH_NAME" + +echo "✅ Gata! Ești pe branch-ul: $BRANCH_NAME" +echo "" +echo "Pornește Claude cu: source ~/.nvm/nvm.sh && claude" diff --git a/proxmox/lxc171-claude-agent/scripts/start-agent.sh b/proxmox/lxc171-claude-agent/scripts/start-agent.sh index dd596a9..4854253 100644 --- a/proxmox/lxc171-claude-agent/scripts/start-agent.sh +++ b/proxmox/lxc171-claude-agent/scripts/start-agent.sh @@ -1,17 +1,17 @@ -#!/bin/bash -# Start or attach to Claude agent tmux session - -SESSION_NAME="agent" - -# Load nvm -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" - -# Check if session exists -if tmux has-session -t $SESSION_NAME 2>/dev/null; then - echo "Attaching to existing session: $SESSION_NAME" - tmux attach-session -t $SESSION_NAME -else - echo "Creating new session: $SESSION_NAME" - tmux new-session -s $SESSION_NAME -c /workspace -fi +#!/bin/bash +# Start or attach to Claude agent tmux session + +SESSION_NAME="agent" + +# Load nvm +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + +# Check if session exists +if tmux has-session -t $SESSION_NAME 2>/dev/null; then + echo "Attaching to existing session: $SESSION_NAME" + tmux attach-session -t $SESSION_NAME +else + echo "Creating new session: $SESSION_NAME" + tmux new-session -s $SESSION_NAME -c /workspace +fi diff --git a/proxmox/lxc171-claude-agent/scripts/work.sh b/proxmox/lxc171-claude-agent/scripts/work.sh index 355f89d..a221aef 100644 --- a/proxmox/lxc171-claude-agent/scripts/work.sh +++ b/proxmox/lxc171-claude-agent/scripts/work.sh @@ -1,104 +1,104 @@ -#!/bin/bash -# Script all-in-one pentru workflow cu selecție proiect - -WORKSPACE="/workspace" -source ~/.nvm/nvm.sh - -echo "🚀 Claude Workflow" -echo "==================" -echo "" - -# Listează proiectele (directoare cu .git) -echo "📁 Proiecte disponibile:" -echo "" -projects=() -i=1 -for dir in "$WORKSPACE"/*/; do - if [ -d "$dir/.git" ]; then - name=$(basename "$dir") - projects+=("$dir") - echo " $i) $name" - ((i++)) - fi -done - -if [ ${#projects[@]} -eq 0 ]; then - echo "❌ Nu am găsit proiecte Git în $WORKSPACE" - exit 1 -fi - -echo "" -read -p "Alege proiect [1-$((i-1))]: " proj_choice - -if [ -z "$proj_choice" ] || [ "$proj_choice" -lt 1 ] || [ "$proj_choice" -gt ${#projects[@]} ]; then - echo "❌ Selecție invalidă" - exit 1 -fi - -PROJECT_DIR="${projects[$((proj_choice-1))]}" -PROJECT_NAME=$(basename "$PROJECT_DIR") - -cd "$PROJECT_DIR" || exit 1 - -echo "" -echo "📂 Proiect: $PROJECT_NAME" -echo "🌿 Branch curent: $(git branch --show-current)" -echo "" -echo "Ce vrei să faci?" -echo " 1) Începe task nou (branch nou)" -echo " 2) Continuă task existent" -echo " 3) Finalizează task (commit + push)" -echo " 4) Vezi branch-uri" -echo " 5) Pornește Claude pe branch-ul curent" -echo "" -read -p "Alege [1-5]: " choice - -case $choice in - 1) - read -p "Nume branch (ex: fix/bug-login): " BRANCH_NAME - git checkout main 2>/dev/null || git checkout master - git pull - git checkout -b "$BRANCH_NAME" - echo "✅ Branch creat: $BRANCH_NAME" - echo "Pornesc Claude..." - claude - ;; - 2) - echo "Branch-uri locale:" - git branch - echo "" - read -p "Nume branch: " BRANCH_NAME - git checkout "$BRANCH_NAME" - echo "Pornesc Claude..." - claude - ;; - 3) - BRANCH=$(git branch --show-current) - if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then - echo "❌ Ești pe $BRANCH! Nu face commit direct aici." - exit 1 - fi - echo "📋 Status:" - git status --short - echo "" - read -p "Mesaj commit: " COMMIT_MSG - if [ -n "$COMMIT_MSG" ]; then - git add . - git commit -m "$COMMIT_MSG" - git push -u origin "$BRANCH" - echo "✅ Push făcut pe $BRANCH" - fi - ;; - 4) - echo "Branch curent: $(git branch --show-current)" - echo "" - git branch -a - ;; - 5) - echo "Pornesc Claude pe $(git branch --show-current)..." - claude - ;; - *) - echo "Opțiune invalidă" - ;; -esac +#!/bin/bash +# Script all-in-one pentru workflow cu selecție proiect + +WORKSPACE="/workspace" +source ~/.nvm/nvm.sh + +echo "🚀 Claude Workflow" +echo "==================" +echo "" + +# Listează proiectele (directoare cu .git) +echo "📁 Proiecte disponibile:" +echo "" +projects=() +i=1 +for dir in "$WORKSPACE"/*/; do + if [ -d "$dir/.git" ]; then + name=$(basename "$dir") + projects+=("$dir") + echo " $i) $name" + ((i++)) + fi +done + +if [ ${#projects[@]} -eq 0 ]; then + echo "❌ Nu am găsit proiecte Git în $WORKSPACE" + exit 1 +fi + +echo "" +read -p "Alege proiect [1-$((i-1))]: " proj_choice + +if [ -z "$proj_choice" ] || [ "$proj_choice" -lt 1 ] || [ "$proj_choice" -gt ${#projects[@]} ]; then + echo "❌ Selecție invalidă" + exit 1 +fi + +PROJECT_DIR="${projects[$((proj_choice-1))]}" +PROJECT_NAME=$(basename "$PROJECT_DIR") + +cd "$PROJECT_DIR" || exit 1 + +echo "" +echo "📂 Proiect: $PROJECT_NAME" +echo "🌿 Branch curent: $(git branch --show-current)" +echo "" +echo "Ce vrei să faci?" +echo " 1) Începe task nou (branch nou)" +echo " 2) Continuă task existent" +echo " 3) Finalizează task (commit + push)" +echo " 4) Vezi branch-uri" +echo " 5) Pornește Claude pe branch-ul curent" +echo "" +read -p "Alege [1-5]: " choice + +case $choice in + 1) + read -p "Nume branch (ex: fix/bug-login): " BRANCH_NAME + git checkout main 2>/dev/null || git checkout master + git pull + git checkout -b "$BRANCH_NAME" + echo "✅ Branch creat: $BRANCH_NAME" + echo "Pornesc Claude..." + claude + ;; + 2) + echo "Branch-uri locale:" + git branch + echo "" + read -p "Nume branch: " BRANCH_NAME + git checkout "$BRANCH_NAME" + echo "Pornesc Claude..." + claude + ;; + 3) + BRANCH=$(git branch --show-current) + if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then + echo "❌ Ești pe $BRANCH! Nu face commit direct aici." + exit 1 + fi + echo "📋 Status:" + git status --short + echo "" + read -p "Mesaj commit: " COMMIT_MSG + if [ -n "$COMMIT_MSG" ]; then + git add . + git commit -m "$COMMIT_MSG" + git push -u origin "$BRANCH" + echo "✅ Push făcut pe $BRANCH" + fi + ;; + 4) + echo "Branch curent: $(git branch --show-current)" + echo "" + git branch -a + ;; + 5) + echo "Pornesc Claude pe $(git branch --show-current)..." + claude + ;; + *) + echo "Opțiune invalidă" + ;; +esac