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

Popular posts from this blog

How to troubleshoot long running concurrent request in R12.2

JSP Compilation in R12.2

How to find EBS URL in R12.2