Friday, July 26, 2024
Purge ADR Contents
RAC Health Checks
CRSCTL Commands
CRSCTL utility allows you to administer cluster resources. Here are few quick commands to help you administer Oracle RAC cluster!
Check Cluster Status
Check Cluster Nodes
Stop Grid Cluster
Start Grid Cluster
Check Cluster Status
Status of upper & lower stack
./crsctl check crs
Status of upper stack
./crsctl check cluster
Cluster status on all nodes
./crsctl check cluster -all
Cluster status on specific node
./crsctl check cluster -n rac2
Check Cluster Nodes
Check cluster services in table format
./crsctl status resource -t
Checking status of clusterware nodes / services
./crsctl status server -f
Check cluster nodes
olsnodes -n
oraracn1 1
oraracn2 2
Stop Grid Cluster
Stop HAS on current node
./crsctl stop has
Stop HAS on remote node
./crsctl stop has –n rac2
Stop entire cluster on all nodes
./crsctl stop cluster -all
Stop cluster ( CRS + HAS ) on remote node
./crsctl stop cluster –n rac2
Start Grid Cluster
Start HAS on current node
./crsctl start has
Start HAS on remote node
./crsctl start has –n rac2
Start entire cluster on all nodes
./crsctl start cluster –all
Start cluster(CRS + HAS) on remote node
./crsctl start cluster –n rac2
ENABLE – DISABLE CLUSTER AUTO START
crsctl enable has
crsctl disable has
Thursday, July 25, 2024
RMAN Backup Script
## Mohamed Fowjil
## RMAN Database backup
# Configuration
ORACLE_HOME=/u01/app/oracle/product/19c/db_1
ORACLE_SID=DBSPRD
RMAN_LOG_DIR=/home/oracle/logs
RMAN_BACKUP_BASE_DIR=/BACKUP/DBSPRD/
##EMAIL_RECIPIENT="fowjil@abc.ae"
BACKUP_TYPE=$1
DATE_FORMAT=$(date +%Y%m%d)
CURRENT_BACKUP_DIR="$RMAN_BACKUP_BASE_DIR/$DATE_FORMAT"
##LOG_FILE="$RMAN_LOG_DIR/rman_backup_${DATE_FORMAT}.log"
LOG_FILE="$RMAN_LOG_DIR/rman_backup_${BACKUP_TYPE}_${DATE_FORMAT}.log"
PARALLELISM=6
MAXPIECESIZE=25G
# Export Oracle environment variables
export ORACLE_HOME ORACLE_SID
# Validate backup type
if [[ "$BACKUP_TYPE" != "full" && "$BACKUP_TYPE" != "INC0" && "$BACKUP_TYPE" != "INC1" && "$BACKUP_TYPE" != "archivelog" ]]; then
echo "Invalid backup type specified. Use 'full', 'incremental', or 'archivelog'."
exit 1
fi
# Create necessary directories if they don't exist
mkdir -p $RMAN_LOG_DIR $CURRENT_BACKUP_DIR
# Function to send email
send_email() {
SUBJECT=$1
BODY=$2
echo -e "$BODY" | mailx -s "$SUBJECT" $EMAIL_RECIPIENT
}
# Function to perform RMAN backup based on type
perform_rman_backup() {
case $BACKUP_TYPE in
full)
BACKUP_CMD="BACKUP DATABASE TAG 'FULL BACKUP'; BACKUP ARCHIVELOG ALL FORMAT '${CURRENT_BACKUP_DIR}/ARC_%d_%Y%M%D_%U.bkp' DELETE ALL INPUT;"
;;
INC0)
BACKUP_CMD="BACKUP INCREMENTAL LEVEL 0 DATABASE TAG 'INC0 BACKUP'; BACKUP ARCHIVELOG ALL FORMAT '${CURRENT_BACKUP_DIR}/ARC_%d_%Y%M%D_%U.bkp' DELETE ALL INPUT; "
;;
INC1)
BACKUP_CMD="BACKUP INCREMENTAL LEVEL 1 DATABASE TAG 'INC1 BACKUP'; BACKUP ARCHIVELOG ALL FORMAT '${CURRENT_BACKUP_DIR}/ARC_%d_%Y%M%D_%U.bkp' DELETE ALL INPUT; "
;;
archivelog)
BACKUP_CMD="BACKUP ARCHIVELOG ALL FORMAT '${CURRENT_BACKUP_DIR}/ARC_%d_%Y%M%D_%U.bkp' DELETE ALL INPUT;"
;;
esac
$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE DEVICE TYPE DISK PARALLELISM $PARALLELISM;
RUN {
ALLOCATE CHANNEL C1 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
ALLOCATE CHANNEL C2 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
ALLOCATE CHANNEL C3 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
ALLOCATE CHANNEL C4 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
ALLOCATE CHANNEL C5 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
ALLOCATE CHANNEL C6 TYPE DISK FORMAT '${CURRENT_BACKUP_DIR}/%d_%Y%M%D_%U.bkp' MAXPIECESIZE ${MAXPIECESIZE};
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
$BACKUP_CMD
BACKUP FORMAT '${CURRENT_BACKUP_DIR}/ctrlfile_%d_%Y%M%D_%U.bkp' CURRENT CONTROLFILE;
BACKUP SPFILE FORMAT '${CURRENT_BACKUP_DIR}/spfile_%d_%Y%M%D_%U.bkp' ;
REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL C1 ;
RELEASE CHANNEL C2 ;
RELEASE CHANNEL C3 ;
RELEASE CHANNEL C4 ;
RELEASE CHANNEL C5 ;
RELEASE CHANNEL C6 ;
}
EOF
}
# Perform the backup
perform_rman_backup
# Function to delete old backups
cleanup_old_empty_dir() {
find $RMAN_BACKUP_BASE_DIR -maxdepth 1 -type d -empty -delete;
}
# Check RMAN backup status
if grep -q "ORA-" $LOG_FILE; then
## send_email "RMAN Backup Failed" "RMAN $BACKUP_TYPE backup failed. Check the log file for details: $LOG_FILE"
exit 1
else
## send_email "RMAN Backup Successful" "RMAN $BACKUP_TYPE backup completed successfully. Check the log file for details: $LOG_FILE"
# Delete old backups empty directories if current backup is successful
cleanup_old_empty_dir
fi