Pro Oracle Database 11g Administration (16 page)

Read Pro Oracle Database 11g Administration Online

Authors: Darl Kuhn

Tags: #Oracle DBA

BOOK: Pro Oracle Database 11g Administration
4.01Mb size Format: txt, pdf, ePub

\l

Base name of the shell’s terminal device

\n

Newline

\r

Carriage return

\s

Name of the shell

\t

Time in 24-hour HH:MM:SS format

\T

Time in 12-hour HH:MM:SS format

\@

Time in 12-hour a.m./p.m. format

\A

Time in 24-hour HH:MM format

\u

Current shell

\v

Version of the Bash shell

\V

Release of the Bash shell

\w

Current working directory

\W

Base name of the current working directory

\!

History number of command

\$

If the effective UID is 0, then displays #; otherwise, displays $

The variables available for use with your command prompt vary somewhat by operating system and shell. For example, in a Korn shell environment, the hostname variable displays the server name in the operating system prompt:

$ export PS1="[`hostnamè]$ "

53

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

Customizing Your SQL Prompt

DBAs often use SQL*Plus to perform daily administrative tasks. Often, you’ll work on servers that contain multiple databases. Obviously, each database contains multiple user accounts. When connected to a database, you can run the following commands to verify your username and database connection: SQL> show user;

SQL> select name from v$database;

A more efficient way to determine your username and SID is to set your SQL prompt to display that information. For example:

SQL> SET SQLPROMPT '&_USER.@&_CONNECT_IDENTIFIER.> '

An even more efficient way to configure your SQL prompt is to have it automatically run the SET

SQLPROMPT command when you log in to SQL*Plus. Follow these steps to fully automate this: 1. Create a file named login.sql, and place in it the SET SQLPROMPT command.

2. Set your SQLPATH operating system variable to include the directory location of login.sql. In this example, the SQLPATH operating system variable is set in the

.bashrc operating system file, which is executed each time a new shell is logged in to or started. Here is the entry:

export SQLPATH=$HOME/scripts

3. Create a file named login.sql in the HOME/scripts directory. Place the following line in the file:

SET SQLPROMPT '&_USER.@&_CONNECT_IDENTIFIER.> '

4. To see the result, you can either log out and log back in to your server, or source the .bashrc file directly:

$ . ./.bashrc

Now, log in to SQL. Here is an example of what the SQL*Plus prompt looks like: SYS@devdb1>

If you connect to a different user, this should be reflected in the prompt: SQL> conn system/foo

The SQL*Plus prompt now displays

SYSTEM@devdb1

Setting your SQL prompt is an easy way to remind yourself which environment and user you’re currently connected as. This will help prevent you from accidentally running a SQL statement in the wrong environment. The last thing you want is to think you’re in a development environment, and then discover that you’ve run a script to delete objects while connected in a production environment.

Table 3–2 contains a complete list of SQL*Plus variables that you can use to customize your prompt.

54

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

Table 3–2.
Predefined SQL*Plus Variables

Variable Description

_CONNECT_IDENTIFIER

Connection identifier, such as the Oracle SID

_DATE

Current date

_EDITOR

Editor used by the SQL EDIT command

_O_VERSION

Oracle version

_O_RELEASE

Oracle release

_PRIVILEGE

Privilege level of the current connected session

_SQLPLUS_RELEASE

SQL*Plus release number

_USER

Current connected user

Creating Shortcuts for Frequently Used Commands

In Linux/Unix environments, you can use two common methods to create shortcuts to other commands: create aliases for often-repeated commands, and use functions to create a shortcut for a group of commands. The following sections describe ways you can use these two techniques.

Using Aliases

You’ll often need to navigate to various directories on a server. For example, one such location is the database background process-logging directory. To navigate to this directory, you have to type something similar to this:

$ cd /ora01/app/oracle/admin/O10R24/bdump

You can use the alias command to create a shortcut to accomplish the same task. An
alias
is a simple mechanism for creating a short piece of text that executes other shell commands. This example creates an alias named bdump that changes directories to a background location that is dependent on the value of the ORACLE_SID variable:

$ alias bdump='cd /ora01/app/oracle/admin/$ORACLE_SID/bdump'

Now you can type bdump, which does the same thing as changing your current working directory to the Oracle background dump directory.

To show all aliases that have been defined, use the alias command with no arguments: $ alias

Listed next are some common examples of alias definitions you can use: alias l.='ls -d .*'

55

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

alias ll='ls -l'

alias lsd='ls -altr | grep ^d'

alias bdump='cd /ora01/app/oracle/admin/$ORACLE_SID/bdump'

alias sqlp='sqlplus "/ as sysdba"'

alias shutdb='echo "shutdown immediate;" | sqlp'

alias startdb='echo "startup;" | sqlp'

If you want to remove an alias definition from your current environment, use the unalias command. The following example removes the alias for lsd:

$ unalias lsd

Using a Function

You can also use a function to create command shortcuts. The following line of code creates a simple function named bdump:

$ function bdump { cd /ora01/app/oracle/admin/$ORACLE_SID/bdump; }

You can now type bdump at the command line to change your working directory to the Oracle background dump directory.

Using functions is usually preferable over using aliases. Functions are more powerful than aliases because of features such as the ability to operate on parameters passed in on the command line, and allowing for complex coding.

To demonstrate the power of functions, consider a scenario in which you have different versions of databases installed on a server, and the background-dump destination differs depending on the version.

With a function, you can build in the logic that checks to see which version of the database you’re using and navigates accordingly:

function bdump {

echo $ORACLE_HOME | grep 11 >/dev/null

if [ $? -eq 0 ]; then

lower_sid=$(echo $ORACLE_SID | tr '[:upper:]' '[:lower:]')

cd $ORACLE_BASE/diag/rdbms/$lower_sid/$ORACLE_SID/trace

else

cd $ORACLE_BASE/admin/$ORACLE_SID/bdump

fi

} # bdump

The previous lines of function code would be difficult to replicate using an alias. With functions, you can code as much logic as you need and pass in variables if required.

DBAs commonly establish functions by setting them in the HOME/.bashrc file. A better way to manage functions is to create a file that stores only function code, and call that file from the .bashrc file.

It’s also better to store special-purpose files in directories that you’ve created for these files. For example, create a directory named bin under HOME; in the bin directory, create a file named dba_fcns; and place in it your function code. Now, call the dba_fcns file from the .bashrc file. Here is an example of an entry in a .bashrc file:

56

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

. $HOME/bin/dba_fcns

Listed next is a small sample of some of the types of functions you can use:

#-----------------------------------------------------------#

# find largest files below this point

function flf {

find . -ls | sort -nrk7 | head -10

}

#-----------------------------------------------------------#

# find largest directories consuming space below this point

function fld {

du -S . | sort -nr | head -10

}

#------------------------------------------

# view alert log

function valert {

echo $ORACLE_HOME | grep 11 >/dev/null

if [ $? -eq 0 ]; then

lower_sid=$(echo $ORACLE_SID | tr '[:upper:]' '[:lower:]')

view $ORACLE_BASE/diag/rdbms/$lower_sid/$ORACLE_SID/trace/alert_$ORACLE_SID.log else

view $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log

fi

} # valert

#-----------------------------------------------------------#

If you ever wonder whether a shortcut is an alias or a function, use the type command to verify a command’s origin. This example verifies that bdump is a function:

$ type bdump

Here is the output:

bdump is a function

bdump ()

{

echo $ORACLE_HOME | grep 11;

if [ $? -eq 0 ]; then

lower_sid=$(echo $ORACLE_SID | tr '[:upper:]' '[:lower:]');

cd $ORACLE_BASE/diag/rdbms/$lower_sid/$ORACLE_SID/trace;

else

cd $ORACLE_BASE/admin/$ORACLE_SID/bdump;

fi

}

Rerunning Commands Quickly

When there are problems with a database server, you need to be able to quickly run commands from the operating system prompt. You may be having some sort of performance issue and want to run commands that navigate you to directories that contain log files, or you may want to display the top consuming processes from time to time. In these situations, you don’t want to waste time having to retype command sequences.

57

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

One timesaving feature of the Bash shell is that it has several methods for editing and rerunning previously executed commands. The following list highlights several options available for manipulating previously typed commands:

• Scrolling with the up and down arrow keys

• Using Ctrl+P and Ctrl+N

• Listing the command history

• Searching in reverse

• Setting the command editor

Each of these techniques is described briefly in the following sections.

Scrolling with the Up and Down Arrow Keys

You can use the up arrow to scroll up through your recent command history. As you scroll through previously run commands, you can rerun a desired command by pressing the Enter or Return key.

If you want to edit a command, use the Backspace key to erase characters, or use the left arrow to navigate to the desired location in the command text. After you’ve scrolled up through command stack, use the down arrow to scroll back down through previously viewed commands.


Note
If you’re familiar with Windows, scrolling through the command stack is similar to using the DOSKEY

utility.

Pressing Ctrl+P and Ctrl+N

The Ctrl+P keystroke (pressing the Ctrl and P keys at the same time) displays your previously entered command. If you’ve pressed Ctrl+P several times, you can scroll back down the command stack by pressing Ctrl+N (pressing the Ctrl and N keys at the same time).

Listing the Command History

You can use the history command to display commands that the use previously entered: $ history

Depending on how many commands have previously been executed, you may see a lengthy stack.

You can limit the output to the last
n
number of commands by providing a number with the command.

For example, the following lists the last five commands that were run: $ history 5

58

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

Here is some sample output:

273 cd -

274 grep -i ora alert.log

275 ssh -Y -l oracle 65.217.177.98

276 pwd

277 history 5

To run a previously listed command in the output, use an exclamation point (!, sometimes called the
bang
) followed by the history number. In this example, to run the pwd command on line 276, use ! as follows:

$ !276

To run the last command you ran, use !!, as shown here:

$ !!

Searching in Reverse

Press Ctrl+R, and you’re presented with the Bash shell reverse-search utility: $ (reverse-i-search)`':

From the reverse-i-search prompt, as you type each letter, the tool automatically searches through previously run commands that have text similar to the string you entered. As soon as you’re presented with the desired command match, you can rerun the command by pressing the Enter or Return key. To view all commands that match a string, press Ctrl+R repeatedly. To exit the reverse search, press Ctrl+C.

Setting the Command Editor

You can use the set -o command to make your command-line editor be either vi or emacs. This example sets the command-line editor to be vi:

$ set -o vi

Now, when you press Esc+K, you’re placed in a mode where you can use vi commands to search through the stack of previously entered commands.

For example, if you want to scroll up the command stack, you can use the K key; and similarly, you can scroll down using the J key. When in this mode, you can use the slash (/) key and then type a string to be searched for in the entire command stack.


Tip
Before you attempt to use the command editor feature, be sure you’re thoroughly familiar with either the vi or emacs editor.

A short example will illustrate the power of this feature. Say you know that you ran the ls -altr command about an hour ago. You want to run it again, but this time without the r (reverse-sort) option.

To enter the command stack, press Esc+K:

$ Esc+K

59

CHAPTER 3 ■ CONFIGURING AN EFFICIENT ENVIRONMENT

You should now see the last command you executed. To search the command stack for the ls command, type /ls and then press Enter or Return:

Other books

Love Lies Bleeding by Evans, Geraldine
Once in a Blue Moon by Kristin James
Lovers in London by Barbara Cartland
From This Day Forward by Margaret Daley
All Grown Up by Kit Tunstall
Solos by Kitty Burns Florey
In His Good Hands by Joan Kilby