oracle migrare
This commit is contained in:
417
oracle/migration-scripts/02-export-source.sh
Normal file
417
oracle/migration-scripts/02-export-source.sh
Normal file
@@ -0,0 +1,417 @@
|
||||
#!/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 ""
|
||||
Reference in New Issue
Block a user