Sql
get_pdb_details() {
echo "Fetching PDB Details..." | tee -a $LOGFILE
# Iterate over each CDB
for ENV_FILE in /home/oracle/*.env; do
echo "Sourcing environment file: $ENV_FILE" | tee -a $LOGFILE
source "${ENV_FILE}"
# Validate environment variables
if [[ -z "$ORACLE_SID" || -z "$ORACLE_HOME" ]]; then
echo "Environment variables not set in $ENV_FILE. Skipping..." | tee -a $LOGFILE
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
echo "CDB $ORACLE_SID is not running. Skipping..." | tee -a $LOGFILE
continue
fi
echo -e "\nProcessing CDB: $ORACLE_SID" | tee -a $LOGFILE
# Fetch PDB names
PDBS=$(timeout 5 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
for PDB_NAME in $PDBS; do
echo -e "\n--- PDB: $PDB_NAME ---" | tee -a $LOGFILE
sqlplus -s / as sysdba <<EOF
SET LINESIZE 150
SET PAGESIZE 100
COLUMN PARAMETER FORMAT A25
COLUMN VALUE FORMAT A40
COLUMN SIZE_IN_GB FORMAT 999.99
ALTER SESSION SET CONTAINER = $PDB_NAME;
PROMPT Parameter Details for PDB: $PDB_NAME
SELECT 'unique_name' AS PARAMETER, VALUE FROM v\$parameter WHERE name = 'db_unique_name';
SELECT 'Container Name' AS PARAMETER, SYS_CONTEXT('USERENV', 'CON_NAME') AS VALUE FROM dual;
SELECT 'CPU Count' AS PARAMETER, VALUE FROM v\$parameter WHERE name = 'cpu_count';
SELECT 'SGA Max Size' AS PARAMETER, VALUE FROM v\$parameter WHERE name = 'sga_max_size';
SELECT 'SGA Target' AS PARAMETER, VALUE FROM v\$parameter WHERE name = 'sga_target';
SELECT 'PGA Target' AS PARAMETER, VALUE FROM v\$parameter WHERE name = 'pga_aggregate_target';
PROMPT Data File Size (in GB) for PDB: $PDB_NAME
SELECT SUM(bytes) / 1024 / 1024 / 1024 AS size_in_gb FROM dba_data_files;
EXIT;
EOF
done
done
}
Comments
Post a Comment