Sql1

#!/bin/bash


LOGFILE="/home/oracle/pdb_output.log"

: > $LOGFILE # Clear the log file


get_pdb_details() {

  echo "CDB_UNIQUE_NAME|PDB_NAME|CPU|SGA_MAX_SIZE_GB|SGA_TARGET_GB|PGA_GB|DB_SIZE_GB" > $LOGFILE


  # Iterate over each CDB

  for ENV_FILE in /home/oracle/*.env; do

    source "${ENV_FILE}"


    # Validate environment variables

    if [[ -z "$ORACLE_SID" || -z "$ORACLE_HOME" ]]; then

      continue

    fi


    # Check if CDB is running

    INSTANCE_STATUS=$(timeout 5 sqlplus -s / as sysdba <<EOF

SET HEAD OFF FEEDBACK OFF

SELECT instance_name FROM v\$instance WHERE status = 'OPEN';

EXIT;

EOF

)


    if [[ -z "$INSTANCE_STATUS" ]]; then

      continue

    fi


    # Fetch CDB unique name

    CDB_UNIQUE_NAME=$(sqlplus -s / as sysdba <<EOF

SET HEAD OFF FEEDBACK OFF

SELECT value FROM v\$parameter WHERE name = 'db_unique_name';

EXIT;

EOF

 | tr -d "\n")


    # Fetch PDB names

    PDBS=$(sqlplus -s / as sysdba <<EOF

SET HEAD OFF FEED OFF

SELECT pdb_name FROM cdb_pdbs WHERE pdb_name != 'PDB\$SEED';

EXIT;

EOF

)


    # Fetch and display PDB details in a single line

    for PDB_NAME in $PDBS; do

      DETAILS=$(sqlplus -s / as sysdba <<EOF

SET HEAD OFF FEEDBACK OFF

ALTER SESSION SET CONTAINER = $PDB_NAME;

SELECT

  (SELECT value FROM v\$parameter WHERE name = 'cpu_count') || '|' ||

  TO_CHAR(ROUND((SELECT value FROM v\$parameter WHERE name = 'sga_max_size') / 1024 / 1024 / 1024, 2)) || '|' ||

  TO_CHAR(ROUND((SELECT value FROM v\$parameter WHERE name = 'sga_target') / 1024 / 1024 / 1024, 2)) || '|' ||

  TO_CHAR(ROUND((SELECT value FROM v\$parameter WHERE name = 'pga_aggregate_target') / 1024 / 1024 / 1024, 2)) || '|' ||

  TO_CHAR(ROUND(SUM(bytes) / 1024 / 1024 / 1024, 2))

FROM dba_data_files;

EXIT;

EOF

 | tr -d "\n")


      # If DETAILS is empty or contains multiple lines, handle it appropriately

      if [[ -n "$DETAILS" && "$DETAILS" != *"|"* ]]; then

        echo "$CDB_UNIQUE_NAME|$PDB_NAME|Error in fetching details" >> $LOGFILE

      else

        echo "$CDB_UNIQUE_NAME|$PDB_NAME|$DETAILS" >> $LOGFILE

      fi

    done

  done

}


get_pdb_details



The script has been updated to ensure that the entire output is captured in a single line without line breaks.


Run it a

gain and verify the output. Let me know if further adjustments are needed.


Comments

Popular posts from this blog

Database growth

DBA Day-2 ve

Asm