Oracle DBA Daily Health Check & Pre-Clone Information Script
As an Oracle DBA, one of our routine responsibilities is to collect critical database information for various operational and strategic activities such as:
- Pre-clone activities
- Disaster Recovery (DR) readiness
- Audits and compliance
- Migration planning
- Environment documentation
Running multiple SQL queries manually every time is time-consuming, error-prone, and may result in missed configuration details.
To address this, I use a single consolidated SQL script that safely gathers all essential Oracle database information in one execution.
What Information Does This Script Collect?
Database & Environment
- SPFILE / PFILE details
- Archive log mode
- Controlfile locations
Storage Details
- Datafiles and tempfiles
- Tablespace sizes
- Autoextend and maxsize settings
- Physical file paths
Redo & Recovery
- Redo log groups and members
- Redo log status
Security & Objects
- Database links (with recreate statements)
- Directory objects (with recreate statements)
- SYS, SYSTEM, and application users
- Password hashes (useful during migration activities)
Oracle E-Business Suite (If Applicable)
- Application node names (apps.fnd_nodes)
How to Use This Script
1. Connect to the database as a privileged user (SYS or SYSTEM).
2. Ensure write permission for the spool directory.
3. Execute the script using SQL*Plus.
4. The output will be saved in a log file for reference and documentation.
Consolidated Oracle DBA Information Collection Script
#!/bin/bash # ----------------------------------------------------------------------------- # Script Name : oracle_db_inventory_collection.sh # Purpose : Collect Oracle database configuration and inventory details # ----------------------------------------------------------------------------- sqlplus / as sysdba <<EOF spool info_\$ORACLE_SID.log PROMPT ========================================== PROMPT Backup Control File PROMPT ========================================== ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '\$HOME/phani/ctrl_\$ORACLE_SID.sql'; PROMPT ========================================== PROMPT Check SPFILE PROMPT ========================================== SHOW PARAMETER spfile; SET LINES 900 SET PAGES 900 COL owner FOR A11 COL db_link FOR A50 COL username FOR A20 COL host FOR A50 PROMPT ========================================== PROMPT Database Links PROMPT ========================================== SELECT * FROM dba_db_links; PROMPT ========================================== PROMPT Generate DB Link Recreate Statements PROMPT ========================================== SELECT 'CREATE ' || DECODE(u.name, 'PUBLIC', 'PUBLIC ') || 'DATABASE LINK ' || CHR(10) || DECODE(u.name, 'PUBLIC', NULL, u.name || '.') || l.name || CHR(10) || 'CONNECT TO ' || l.userid || ' IDENTIFIED BY ' || l.password || ' USING ''' || l.host || ''';' || CHR(10) AS text FROM sys.link$ l, sys.user$ u WHERE l.owner# = u.user#; SET LINES 200 COL directory_name FOR A40 COL directory_path FOR A90 PROMPT ========================================== PROMPT Oracle Directories PROMPT ========================================== SELECT * FROM dba_directories; PROMPT ========================================== PROMPT Generate Directory Recreate Statements PROMPT ========================================== SELECT 'CREATE OR REPLACE DIRECTORY ' || directory_name || ' AS ''' || directory_path || ''';' FROM dba_directories; PROMPT ========================================== PROMPT SYS / SYSTEM / Application Users PROMPT ========================================== SELECT username, password, account_status FROM dba_users WHERE username IN ('SYS', 'SYSTEM', 'ITCNIMBUS'); SELECT name, password FROM sys.user$ WHERE name IN ('SYS', 'SYSTEM', 'ITCNIMBUS'); PROMPT ========================================== PROMPT Archive Log Mode PROMPT ========================================== ARCHIVE LOG LIST; SET LINES 200 COL file_name FOR A80 PROMPT ========================================== PROMPT Temporary Files PROMPT ========================================== SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, status FROM dba_temp_files; PROMPT ========================================== PROMPT Data Files PROMPT ========================================== SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, status FROM dba_data_files; PROMPT ========================================== PROMPT Control Files PROMPT ========================================== SELECT name FROM v\$controlfile; PROMPT ========================================== PROMPT Redo Log Files PROMPT ========================================== SELECT * FROM v\$logfile; PROMPT ========================================== PROMPT Redo Log Status PROMPT ========================================== SELECT * FROM v\$log; PROMPT ========================================== PROMPT File Location Paths PROMPT ========================================== SELECT SUBSTR(name, 1, INSTR(name, '/', -1)) FROM v\$datafile UNION SELECT SUBSTR(name, 1, INSTR(name, '/', -1)) FROM v\$tempfile UNION SELECT SUBSTR(member, 1, INSTR(member, '/', -1)) FROM v\$logfile UNION SELECT SUBSTR(name, 1, INSTR(name, '/', -1)) FROM v\$controlfile; PROMPT ========================================== PROMPT File Status Check PROMPT ========================================== SELECT DISTINCT status FROM v\$datafile UNION SELECT DISTINCT status FROM v\$tempfile UNION SELECT DISTINCT status FROM v\$logfile UNION SELECT DISTINCT status FROM v\$controlfile; PROMPT ========================================== PROMPT Oracle EBS Nodes PROMPT ========================================== SELECT node_name FROM apps.fnd_nodes; PROMPT ========================================== PROMPT Parameters PROMPT ========================================== SHOW PARAMETER pfile; SHOW PARAMETER utl; PROMPT ========================================== PROMPT Generate User Recreation Statements PROMPT ========================================== SELECT 'ALTER USER ' || name || ' IDENTIFIED BY VALUES ''' || password || ''';' FROM sys.user$ WHERE name IN ( SELECT username FROM dba_users WHERE username NOT LIKE 'SYS%' ); SET LINES 300 COL creation_time FOR A15 COL status FOR A10 COL enabled FOR A15 COL bytes FOR 9999999999 COL blocks FOR 99999999 COL create_bytes FOR 9999999999 COL block_size FOR 9999999999 COL name FOR A70 PROMPT ========================================== PROMPT Detailed Tempfile Information PROMPT ========================================== SELECT file#, creation_time, status, enabled, bytes, blocks, create_bytes, block_size, name FROM v\$tempfile; SET PAGES 50000 SET LINES 32767 COL tablespace_name FOR A18 COL creation_time FOR A15 COL file_name FOR A55 COL file# FOR 9999 COL autoextensible FOR A15 PROMPT ========================================== PROMPT Detailed Datafile Information PROMPT ========================================== SELECT dd.tablespace_name, df.file#, dd.file_name, dd.bytes/1024/1024 AS size_mb, dd.autoextensible, dd.maxbytes/1024/1024 AS maxsize_mb, df.creation_time FROM dba_data_files dd, v\$datafile df WHERE dd.file_name = df.name ORDER BY 2; SPOOL OFF; EXIT; EOF |
Comments
Post a Comment