Monday, 27 January 2025

Script to take backup of schemas and objects

#!/bin/bash

# Ask for Oracle environment variables
read -p "Enter your ORACLE_HOME path: " ORACLE_HOME
read -p "Enter your ORACLE_SID: " ORACLE_SID

# Set Oracle environment variables
export ORACLE_HOME
export ORACLE_SID
export PATH=$ORACLE_HOME/bin:$PATH

# Get the current date format for naming backups
DATEFORMAT=$(date +"%Y%m%d_%H%M%S")

# Show menu options
echo "Select the type of backup:"
echo "1) Single schema backup"
echo "2) Multiple schema backup (comma separated)"
echo "3) Single table backup"
echo "4) Multiple table backup (comma separated)"

# Read user input
read -p "Enter your choice (1/2/3/4): " choice

case $choice in
  1)
    # Single schema backup
    read -p "Enter the schema name: " schema_name
    echo "Starting backup for schema $schema_name at $(date)" >> nohup.out

    # Run expdp command for single schema
    expdp \"/ as sysdba\" directory=OBACKUP dumpfile=expdp_${schema_name}_$DATEFORMAT_%U.dmp logfile=expdp_${schema_name}_$DATEFORMAT.log schemas=$schema_name parallel=4 cluster=n >> nohup.out 2>&1
    ;;
  
  2)
    # Multiple schema backup
    read -p "Enter the schema names (comma separated): " schema_names
    IFS=',' read -r -a SCHEMA_ARRAY <<< "$schema_names"

    for schema in "${SCHEMA_ARRAY[@]}"; do
      echo "Starting backup for schema $schema at $(date)" >> nohup.out

      # Run expdp command for each schema
      expdp \"/ as sysdba\" directory=OBACKUP dumpfile=expdp_${schema}_$DATEFORMAT_%U.dmp logfile=expdp_${schema}_$DATEFORMAT.log schemas=$schema parallel=4 cluster=n >> nohup.out 2>&1
    done
    ;;
  
  3)
    # Single table backup
    read -p "Enter the table name (schema.tablename): " table_name
    echo "Starting backup for table $table_name at $(date)" >> nohup.out

    # Run expdp command for single table
    expdp \"/ as sysdba\" directory=OBACKUP dumpfile=expdp_${table_name}_$DATEFORMAT_%U.dmp logfile=expdp_${table_name}_$DATEFORMAT.log tables=$table_name parallel=4 cluster=n >> nohup.out 2>&1
    ;;
  
  4)
    # Multiple table backup
    read -p "Enter the table names (schema.tablename1,schema.tablename2,...): " table_names
    IFS=',' read -r -a TABLE_ARRAY <<< "$table_names"

    for table in "${TABLE_ARRAY[@]}"; do
      echo "Starting backup for table $table at $(date)" >> nohup.out

      # Run expdp command for each table
      expdp \"/ as sysdba\" directory=OBACKUP dumpfile=expdp_${table}_$DATEFORMAT_%U.dmp logfile=expdp_${table}_$DATEFORMAT.log tables=$table parallel=4 cluster=n >> nohup.out 2>&1
    done
    ;;
  
  *)
    echo "Invalid choice. Please run the script again and select a valid option."
    exit 1
    ;;
esac

echo "Backup process completed at $(date)." >> nohup.out

No comments:

Post a Comment