Saturday, February 15, 2014

Oracle Database Administration Scripts | DBA Bundle


In this post, I'll share with you one of the most helpful tools I ever created, to make the day to day database administration tasks more faster, safer and easier for the DBA.

This tool I call it DBA Bundle , it's a tar file contains a group of shell scripts, you can DOWNLOAD the latest version from this link: [V. 2.1 19-Oct-2015]

I've designed the scripts to be able to run on complicated environments, where there is one or more Oracle version installed, or there is more than one ORACLE_HOME on the same machine.

All scripts in this bundle can easily understand the environment whatever it's Linux or UNIX, most scripts can work fine on different Oracle versions and different oracle homes and different oracle users owners on the same server, all scripts have been designed to smartly handle wrong user inputs.

Now let's get started with the main functions in this bundle ...

How to use the bundle:

First, download the bundle tar file and extract it under Oracle owner home directory, e.g. /home/oracle, please note that each script inside this bundle is independent, in other words, the absence of any script will not affect the execution of other scripts.

Second, Run a script called "", it will add an alias for each script inside the bundle to the user's profile to make it easy for you to call any script using one command "alias" without the need to step under the bundle location. It also creates aliases that help you easily access the database configuration files and logs
alert     command alias will tail -f the ALERTLOG of the selected database|instance.
vialert  command alias will vi the ALERTLOG of the selected database|instance.
tns        command alias will open the tnsnames.ora file using vi editor
lis         command alias will open the listener.ora file using vi editor
There is still more of nice and easy shortcuts will be listed along with the description after you execute ""script .
In order to get this post abbreviated, I'll let you discover the rest of aliases yourself !

To call script "" use "." command: e.g.
#  .

What if I've more than one database on the server, how can I use  "" to point to the logfiles for the database I want?

Simple, let's say you've two databases running on the same server 
(SALESDB & ORCL), if you want to use the shortcuts (alert,tns,bdump,..) for SALESDB just while running the script select SALESDB, later if you want to use the shortcuts (aliases) for ORCL DB re-execute"aliases_DBA_BUNDLE.shagain and select ORCL this time, and so on.

Note: Executing "" more than once will not harm.

If you didn't manage to run "" 
script , each time you want to call a script you have to step under the bundle location and then execute the script you want.

Now let me give you a brief description of each script in the bundle:

Script Name        |  Description
-------------------|--------------------------------------------| Rebuild a table and its related indexes (New in V. 1.5)
-------------------|--------------------------------------------  | Export Full DB|SCHEMA|TABLE data 
                             (gives your the option of using exp or expdp utility for the export).
-------------------|-------------------------------------------- | Take an online RMAN full backup for the database 
                           (gives you the option of compressed backup).
-------------------|--------------------------------------------   | List All TABLESPACES and it's size on a database.
-------------------|---------------------------------------------        | List All DATAFILES and it's size on a database.
-------------------|--------------------------------------------- | Retrieve AUDIT data for a DB user in a specific date or number of days back.
-------------------|--------------------------------------------- | Retrieve the AUDIT data for a DB user in a specific date
                                or number of days back. 
                                (this is the one linked to the alias if used "" script).
-------------------|--------------------------------------------   | Gather STATISTICS on a SCHEMA or TABLE using DBMS_STATS    
-------------------|-------------------------------------------- | List All Invalid Objects on the DB + it's compile statements.
-------------------|--------------------------------------------- | List the Biggest 50 Objects on a database. 
-------------------|---------------------------------------------| List the Details of a user session. 
                               (if no input, will list all sessions on the instance).
-------------------|---------------------------------------------| List All current sessions on all running instances [RAC DB].
-------------------|---------------------------------------------      | List the Blocking LOCKS on a database.
-------------------|--------------------------------------------- | Unlock a specific DB User Account + the option of reset the user's password.
-------------------|--------------------------------------------- | Show the details of a specific SQL STATEMENT by providing it's SQL_ID.
-------------------|--------------------------------------------- |  Show the value of a Visible or Hidden initialization Parameter.
-------------------|---------------------------------------------        | List All database Jobs (dba_jobs + dba_scheduler_jobs).
-------------------|---------------------------------------------| Show the DB Session details when providing it's Unix PID.
-------------------|---------------------------------------------| Backup & Clean up All DB & it's Listener LOGs.
-------------------|---------------------------------------------| Show the last login date of ALL users in the database.
-------------------|--------------------------------------------- | Show the failed login attempts in the last provided n of days.
-------------------|---------------------------------------------  | Start TRACING an Oracle Session activities in a logfile.  
-------------------|---------------------------------------------  | Stop TRACING an already traced Oracle Session 
                            + provide the logfile and it's TKPROFED log.  
-------------------|---------------------------------------------  | Generate the Full SQL Creation script for a DB user + important info.
-------------------|---------------------------------------------    | Generate Full SQL Creation script for a database Object.
-------------------|--------------------------------------------| Delete all Archive logs older than (provided) number of days.
-------------------|--------------------------------------------| Analyze All tables under a specific SCHEMA (using ANALYZE command).
-------------------|--------------------------------------------      | Show all important info about specific table (size, indexes, non indexed FK, constraints,...).

Scripts without an alias:
The following scripts doesn't have aliases because it's not applicable or need to be used carefully:
-------------------------------------------------------------------------------------------------------- | Monitor CPU utilization + Filesystem usage + ALERTLOGs of ALL Databases and
                     Listeners running on the server and instantly report ORA- errors and TNS- errors
                     that appears in these logs to the DBA E-mail Address
                     by sending an email to the DBA 
                     (you have to modify this parameter in line number 16 to point to your E-mail Address):

                      > Of course the sendmail service should be configured on the server.

                                  *The best usage of this script, is to schedule it to run in the crontab 

                                    every 5 minutes (or less) to report ORA- and TNS- errors 
                                    when they written to alertlog & listeners logs.
-------------------------|----------------------------------------------           | Perform health check tasks on all running databases on the server such as:
                                   - Checking all databases alert logs for errors.
                                   - Checking all listeners alert logs for errors.
                                   - Checking CPU utilization.
                                   - Checking filesystem utilization.
                                   - Checking tablespaces utilization on all databases.
                                   - Checking blocking sessions on all databases.
                                   - Checking unusable indexes on all databases.
                                   - Checking invalid objects on all databases.
                                   - Checking failed login attempts on all databases.
                                   - Checking audit records on all databases.
                                   - Checking corrupted blocks on all databases.
                                   - Checking failed jobs on all databases.
                                   Modify line# 50 by replacing to your e-mail address.
                                               You can also customize the defined thresholds as per your preferences under
                                               THRESHOLD section inside the script.
                                               Last step, Schedule the script to run in the crontab every day morning:
                                               0 6 * * * /home/oracle/
                                               For detailed information, please visit:
-------------------------|----------------------------------------------  | SHUTDOWN ALL running Databases & Listeners on The server.
-------------------------|----------------------------------------------  | Take a COLD BACKUP of a specific database 
                                         (It will also creates another script to help you restore the taken cold backup easily) 
                                         This script will shutdown the database, take a cold backup, 
                                         create a restore script (in case you want to restore this cold backup
                                         later ) then it will startup the database.

That's all regarding the bundle, please note that time by time I'll update this bundle (adding new scripts, fixing bugs, adding new features). (This topic did not cover everything in the bundle).


                                           No one is perfect... that's why pencils have erasers.

You can download older versions from here :   [V. 1.1]   [V. 1.2]   [V. 1.3]     [V. 1.4]     [V. 1.5]   [V. 1.6]   [V. 1.7 Sep2014]      [V. 1.8 Oct2014]  [V. 2.0 08-May-2015]

Your suggestions, bug reporting and comments are most welcome :-)

You can watch this video tutorial on how to use this bundle: (watch this video in full screen mode)

Lastly, Special thanks to my friend Sr. DBA: Abd El-Gawad Othman, without his support, suggestions and encouragement I wouldn't have been confident enough to share this bundle with you.


mohamed said...

Thanks a lot

Anonymous said...

great job, thanks for sharing!

Rahul N said...

Great work. Thank you!!

Mahmmoud ADEL said...

Mohamed, Anonymous gentleman, Rahul
Thanks to you, I hope this bundle be beneficial for you.

manoj said...

Superb Mohamed, its one thing to spend your time on developing this beauty..but to share it for free, its something else.. :) Thanks a ton..

Mahmmoud ADEL said...

Thank you for your nice compliment, long time back since I started my career in Oracle world, I've got tons of invaluable information from others web sites and blogs. now it's time to reciprocate the favor to the Oracle community by sharing my humble knowledge hoping that help others.

gnz_bLog said...

Thanks a lot for sharing

Venk@t Oracle DBA's said...

Thanks a lot Mahmmoud Adel it's very useful for daily activity for DBA.

Anonymous said...

Thanks Mahmomoud! That is really useful set of scripts!

Jean-Pierre Tomes said...

thank you, i am going read all yours scripts

Jean-Pierre Tomes said...

thank you for yours scripts

Jean-Pierre Tomes said...

thanks you for yours scripts

Vishal Pawar said...

Thank you sir for valuable information.

vikram reddy said...

Thanks Mohamed!! Appreciate your efforts.

Anonymous said...

Very kind of you! Thanks

Anonymous said...

this is really awesome....Greatly appreciate...

Özgür Umut said...

Really awesome...
Thanks for sharing Mahmmoud..

David Williams said...

Thanks for Information Oracle Online Training Oracle is an object-relational database management system created and marketed by Oracle Corporation.Oracle Online Training

Anonymous said...

Thank you for sharing a great set of scripts!

Maksudan said...

great job.........
thanks for sharing your knowledge

Path Infotech said...

Thanks for sharing the information

Oracle Certification Courses in Noida

Samar said...

Great dear I am thankful to you as I am new to oracle