Call now: 252-767-6166  
Oracle Training Oracle Support Development Oracle Apps

 E-mail Us
 Oracle Articles
New Oracle Articles

 Oracle Training
 Oracle Tips

 Oracle Forum
 Class Catalog

 Remote DBA
 Oracle Tuning
 Emergency 911
 RAC Support
 Apps Support
 Oracle Support

 SQL Tuning

 Oracle UNIX
 Oracle Linux
 Remote s
 Remote plans
 Application Server

 Oracle Forms
 Oracle Portal
 App Upgrades
 SQL Server
 Oracle Concepts
 Software Support

 Remote S


 Consulting Staff
 Consulting Prices
 Help Wanted!


 Oracle Posters
 Oracle Books

 Oracle Scripts

Don Burleson Blog 









Oracle Linux DBA Benefits

Don Burleson



Oracle database administration in a Linux environment is quite different from Windows. Linux offers a robust command-line interface with a wealth of functions that go far beyond the limited capabilities of a GUI interface.

Because Linux is open-source, all of the low-level communications between the software and the hardware are exposed and the Oracle DBA can see virtually every aspect of Oracle's behavior as it interfaces with hubs, routers, RAM and disks.

Linux is also very simple in structure. Many of the Linux commands are compiled C programs, and we have the opportunity to go "behind the scene" and see the source code behind many Linux commands.

Linux Utilities for the Oracle DBA

Because of its simple structure and low-level utilities, Linux offers the ability to monitor deep into the environment and examine every aspect of Oracle operations. Some of these tools include:
  • vmstat - Provides real-time reports on CPU consumption, CPU dispatcher run queue, RAM page in, scan rate, RAM page outs
  • iostat - Provides detailed disk I/O information including disk enqueues and I/O latency
  • nestat - Shows TCP/IP traffic and packet details
  • watch - Shows top server task details including server load average
  • ps - Shows process-level details on resource consumption

These utilities are exceptional for monitoring Oracle databases and they can be placed inside Linux shell scripts to take the output from the Linux commands and store the information inside Oracle tables.

For example, here is a utility that will take the output from Linux vmstat utility and insert the output into an Oracle table:

export PATH
SERVER_NAME=`uname -a|awk '{print $2}'`
typeset -u SERVER_NAME

# sample every five minutes (300 seconds) . . . .

while true
   vmstat ${SAMPLE_TIME} 2 > /tmp/msg$$

   # run vmstat and direct the output into the Oracle table . . .
   cat /tmp/msg$$|sed 1,3d | awk '{ printf("%s %s %s %s %s %s\n", $1, $8, $9,
   14, $15, $16) }' | while read RUNQUE PAGE_IN PAGE_OUT USER_CPU SYSTEM_CPU

      $ORACLE_HOME/bin/sqlplus -s perfstat/perfstat@testsys1<<EOF
      insert into perfstat.stats\$vmstat
      values (

rm /tmp/msg$$

Note: This type of operating system script is largely obsolete in Oracle10g because the Automated Workload Repository (AWR) captures this OS information automatically.

We can use the same script technique with the Linux iostat utility and shell scripts can be used to monitor disk I/O and place the details inside Oracle tables.


while true
   iostat -x 300 1|\
   sed 1,2d|\
   awk '{ printf("%s %s %s\n", $1, $4, $5) }' |\

      if [ $VMSTAT_IO_R -gt 0 ] and [ $VMSTAT_IO_W -gt 0 ]
          sqlplus -s perfstat/perfstat <<!
          insert into
   sleep 300

s we see, the easy-to-use Linux monitoring utilities open-up a whole new world to the Oracle DBA. If you take the time to master the Linux command syntax and utilities you will gain the ability to diagnose any Oracle problem and always know the exact cause of any OS-related performance issue. Now let's take a look at some of the command-line utilities for Linux and see how they can simplify the tasks of the Oracle DBA.

Command Utilities for Linux

As we have noted, Linux has powerful command-line utilities that provide exceptional monitoring for every aspects of Oracle's interactions with the hardware environment. But there is more to Linux than the commands. The Oracle professional will also need to master shell scripting, task scheduling and specialized functions:

  • The vi file editor - The vi editor is an extremely powerful text editor that is far more powerful and flexible than Windows-based editors such as notepad.
  • Utility commands - Linux provides powerful system tools such as grep, sed and awk that allow you to create comprehensive OS monitoring facilities.
  • Job scheduling - The Linux crontab utility allows for scheduling OS tasks at specific time intervals.
  • Scripting - Shell environments such as Korn shell, C shell, Bourne shell and Bourne Again shell (bash) allow you to create sophisticated Linux monitoring scripts.

Linux tools are very powerful and flexible, and like any powerful tool, they are complex. It can take years for the staff to master Linux internals, using the powerful vi editor, and learning to program with UNIX shell scripts. Let's take a quick look at the types of scripts that a Linux DBA might employ for their Oracle environment.

There are many OS events that need to be monitored by the Oracle DBA and prior to Oracle10g the DBA would want to be notified of any server-side event.

Operating System Events:

     • File system is filling rapidly
     • Server is paging RAM
     • High CPU enqueues
     • Messages in Linux syslog (I/O errors, bus errors)

Oracle OS events:

     • Alert log message
     • Core dump
     • Background dump
     • User dump created

For example, here is an example of an actual UNIX script for Oracle to detect a almost-full filesystem:


for i in `df -k|grep /u0|awk '{ print $4 }'`
   filesize=`expr i`
   if [ $filesize -lt 100 ]
      mailx -s "Oracle filesystem $i has less than 100k free."\\

One of the most powerful utilities is grep which is used to quickly find files that contain specific strings. In fact, some Oracle DBA's using Windows will download a free copy of grep for PC's because of its power and ease of use. For example, the scripts below will cascade through the Linux directory structures, quickly finding all files that contain a specific string:

find . –print|xargs grep –i string

This script is far faster and easier to use than the Windows GUI search tool.

Linux Configuration

Configuring Linux for optimal performance is highly-dependent on the hardware. When you use a server like the UNISYS ES7000, the configuration is easy because the Linux kernel has already been optimized for the specific high-speed hardware components.

Because UNISYS Linux for Oracle is preconfigured for Oracle, you avoid the headaches of optimizing the OS for the Oracle software. In proprietary UNIX, proper configuration for Oracle is often overlooked and SUN, HP and AIX Oracle databases are often improperly configured.

For example, Oracle data files should be configured to bypass the UNIX server buffer cache and read the data blocks directly into the Oracle data buffers. However, a surprising number of proprietary UNIX shops have their I/O improperly configured, causing multiple buffer access whereby data blocks travel onto the UNIX Journaled File System (JFS) buffer cache, and then transferred into the Oracle data buffers.

This additional I/O overhead is a major problem and one that is automatic in Linux. Linux systems support direct I/O on a per-filehandle basis (which is much more flexible), and Oracle enables this O_DIRECT feature automatically. This is not true for those using Sun, HP and Veritas I/O, and tricky utilities must be implemented to enable direct I/O:

  • Solaris - Uses the "forcedirectio" option. Oracle DBAs claim this option makes a huge difference in I/O speed for Sun servers.
  • AIX - Uses the "dio" option.
  • Veritas VxFS - (including HP-UX, Solaris and AIX), uses the "convosync=direct". It is also possible to enable direct I/O on a per-file basis using Veritas QIO; refer to the "qiostat" command and corresponding man page for hints.

In sum, using Linux with a hardware vendor such as UNISYS ensures that the Linux environment is optimized to run as quickly as possible. Now let's look at the issue of migrating to Linux from Windows and proprietary UNIX.

Migrating to Linux from Proprietary UNIX

Migrating into Linux can be very easy or very difficult, depending on your existing Oracle configuration. It is not uncommon to see small "dialect" differences between implementations of UNIX, especially with respect to display output and command arguments.

Those shops that find a migration difficult are those that have made extensive use of operating system utilities for their Oracle functions:

External scheduling of Oracle tasks

   - Crontab
   - Windows "at" scheduling

Extensive use of OS shell scripts

   - Automated e-mail alerts (new dumps, alert log messages, Linux syslog messages)
   - File system alerts
   - Server overload alerts

If you avoid the OS trap and use Oracle to schedule all Oracle tasks you can easily port your database across OS platforms. This is especially true if you migrate to Oracle10g where Oracle automatically collects OS metrics and has a built-in alert and scheduling mechanism:

  • Migrate to Oracle10g
  • Schedule all Oracle tasks with dbms_scheduler
  • Use the Oracle dbms_alert package to replace OS scripting

Let's take a closer look at the syntax differences between proprietary UNIX and Linux so that you can appreciate the challenge of migration.

Linux command syntax

Users of proprietary UNIX will immediately recognize many similarities between Sun, HP, AIX and Linux commands. However, there are significant syntax issues, especially with regard to command arguments and the output from Linux utilities:

Linux Command Syntax examples

Display the number of CPUs            cat /proc/cpuinfo|grep processor|wc –l
Show top CPU%                         ps aux|sort -n +2
Display top-10 CPU consumers          ps aux|sort -rn +2|head -10
RAM memory display free

Shutdown server as root               /sbin/shutdown -r now
Kill all xxx processes                pkill [-9] "xxx"
Show swap paging space                /sbin/swapon -s
Show Linux syslog errors              tail /var/log/messages
Show swap disk details                swapon -s
See held memory segments              ipcs -m
Show Linux system parms               sysctl -a
Linux command history files           history|more

Migrating from Sun to Linux can be especially problematic because of the syntax differences and the different output from the utilities such as vmstat and netstat. This can cause considerable re-writing of shell scripts.

vmstat Linux:

>vmstat 2 5

procs memory swap io system cpu
r b w swpd free buff cache si … bi bo in cs us sy id
1 0 0 140 90372 726988 26228 0 … 0 0 14 7 0 0 4
0 0 0 140 90372 726988 26228 0 … 0 2 103 11 0 0 100

vmstat Solaris:

>vmstat 2 5

procs memory  page disk faults cpu
r b w swap free re mf pi po … s6 -- -- in sy cs us sy id
0 0 0 2949744 988800 0 4 0 0 … 0 0 0 148 200 41 0 0 99
0 0 0 2874808 938960 27 247 0 1 … 0 0 0 196 434 64 1 2 98

Display number of CPU's:


>cat /proc/cpuinfo|grep processor|wc -l



>psrinfo -v|grep "Status of processor"|wc -l

RAM Size in Linux:


total used free shared buffers cached
Mem: 3728668 504688 3223980 41316 430072 29440
-/+ buffers/cache: 45176 3683492
Swap: 265032 608 264424

RAM Size in Solaris:

>prtconf|grep -i mem

Memory size: 2048 Megabytes
memory (driver not attached)
virtual-memory (driver not attached)

Netstat Differences

On any Sun and Linux server the netstat utility provides information about all network traffic touching the server. However the output from the

Solaris netstat


Local Address Remote Address   Swind Send-Q Rwind Recv-Q State
------------- ------------------- ----- ------ ----- ------  -----------
sting.32773 ting.1521 32768 0 32768 0  ESTABLISHED
sting.1521 ting.32773 32768 0 32768 0  ESTABLISHED
sting.32774 ting.1521 32768 0 32768 0  ESTABLISHED

Linux netstat

In Linux, we see that the output from netstat is quite different from Solaris:


Proto Recv-Q Send-Q Local Address       Foreign Address         State
tcp 0     0     donsrv1.rov:netbios-ssn ESTABLISHED
tcp 0     0     TIME_WAIT
tcp 0     40 h pop3-146.gloryroa:1096  ESTABLISHED

Ironically, the syntax differences between proprietary UNIX and Linux can hinder your migration and shops that use SFU on Windows often have a far easier migration. In sum, those Oracle shops that avoid OS utilities such as scheduling (crontab) and shell scripts will find database migration very easy.



Oracle Training at Sea
oracle dba poster

Follow us on Twitter 
Oracle performance tuning software 
Oracle Linux poster


Burleson is the American Team

Note: This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals.  Feel free to ask questions on our Oracle forum.

Verify experience! Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise. All legitimate Oracle experts publish their Oracle qualifications.

Errata?  Oracle technology is changing and we strive to update our BC Oracle support information.  If you find an error or have a suggestion for improving our content, we would appreciate your feedback.  Just  e-mail:  

and include the URL for the page.


Burleson Consulting

The Oracle of Database Support

Oracle Performance Tuning

Remote DBA Services


Copyright © 1996 -  2020

All rights reserved by Burleson

Oracle ® is the registered trademark of Oracle Corporation.