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
Post a Comment