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