Oracle Dba Jobs Interview Question and Answers. PART-2
Continued from:
1. How many
memory layers are in the shared pool?
Ans: The shared pool portion of the SGA contains
three major areas: library cache(contains parsed sql statements,cursor
information,execution plans), dictionary cache (contains cache -user account
information,privileges information,data file,segment and extent information),
buffers for parallel execution messages, and control structure.
2. How do
you find out from the RMAN catalog if a particular archive log has been
backed-up?
Ans: list archivelog all;
3. How can
you tell how much space is left on a given file system and how much space each
of the file system’s subdirectories take-up?
Ans: df -kh
and du-sh
4. Define
the SGA and:
i) How you would configure SGA for a mid-sized
OLTP environment?
ii) What is
involved in tuning the SGA?
Ans: SGA:
The System Global Area (SGA) is a group of shared memory areas that are
dedicated to an Oracle “instance” (an instance is your database programs and
RAM). All Oracle processes use the SGA to hold information. The SGA is used to
store incoming data (the data buffers as defined by the db_cache_size
parameter), and internal control information that is needed by the database.
You control the amount of memory to be allocated to the SGA by setting some of
the Oracle “initialization parameters”.
These might include db_cache_size, shared_pool_size and log_buffer.
i) 40% of
RAM can be used for sizing SGA rest is reserved for OS and others in 64 bit
machine and in 32 bit machine max SGA configured can be 1.5GB only.
ii) Check
the statspack report. Check hit ratio of Data buffer. If it is less than 90%,
then we need to increase the Data buffer. Check hit ratio of Shared pool. If it
is less than 95%, then we need to increase the Shared pool. Check log buffer.
If redo buffer allocation retries/redo entries is greater than 1%, then we need
to increase log_buffer.
------------------------------------------------
5. What is
the cache hit ratio, what impact does it have on performance of an Oracle
database and what is involved in tuning it?
Ans: Buffer
cache hit ratio: It calculates how often a requested block has been found in
the buffer cache without requiring disk access. This ratio is computed using
data selected from the dynamic performance view V$SYSSTAT. The buffer cache hit
ratio can be used to verify the physical I/O as predicted by V$DB_CACHE_ADVICE.
sql>
select name, value From v$sysstat Where name in (‘db block gets’, ‘consistent
gets’, ‘physical reads’);
The
cache-hit ratio can be calculated as follows: Hit ratio = 1 – (physical reads /
(db block gets + consistent gets)) If the cache-hit ratio goes below 90%
then: increase the initialisation
parameter DB_CACHE_SIZE.
Library
cache hit ratio: It calculates how often the parsed representation of the
statement can be reused. It also known as soft parse.
sql> select namespace, pins, pinhits, reloads,
invalidations from v$librarycache order by namespace;
Library
Cache Hit Ratio = sum(pinhits) / sum(pins)
Dictionary
cache hit ratio: It is a measure of the proportion of requests for information
from the data dictionary, the collection of database tables and views
containing reference information about the database, its structures, and its
users. On instance startup, the data dictionary cache contains no data, so any
SQL statement issued is likely to result in cache misses. As more data is read
into the cache, the likelihood of cache misses should decrease. Eventually the
database should reach a "steady state" in which the most frequently
used dictionary data is in the cache.
6. Other
than making use of the statspack utility, what would you check when you are
monitoring or running a health check on an Oracle 8i or 9i database?
Ans: Daily
Monitoring activities and check different logs for any sort of errors.
7. How do
you tell what your machine name is and what is its IP address?
Ans:
hostname, uname -n and ifconfig
8. How would
you go about verifying the network name that the local_listener is currently
using?
Ans: lsnrctl
stat or ps-eaf|grep tns
9. You have
4 instances running on the same UNIX box. How can you determine which shared
memory and semaphores are associated with which instance?
Ans:
SQL>oradebug
setmypid
SQL>
oradebug ipc
SQL>oradebug
tracfile_name
Also you can
check the spfile. The parameters will start with instance_name. parameter_name
naming.
10. What
view(s) do you use to associate a user’s SQLPLUS session with his o/s process?
Ans:
v$process and v$session
sql>
select a.spid from v$process a, v$session b where a.addr = b.addr and
b.audsid=userenv(‘sessionid’);
11. What is
the recommended interval at which to run statspack snapshots, and why?
Ans: Should
be in minutes (15-20 mins approx)
because where the time between the two snapshots is measured in hours,
the events that caused serious performance issues for 20 minutes during peak
processing don’t look so bad when they’re spread out over an 8-hour window.
It’s also true with STATSPACK that measuring things over too long of a period tends
to level them off over time. Nothing will stand out and strike you as being
wrong.
12. What
spfile/init.ora file parameter exists to force the CBO to make the execution
path of a given statement use an index, even if the index scan may appear to be
calculated as more costly?
Ans:
OPTIMIZER_INDEX_COST_ADJ= FORCE
13. Assuming
today is Monday, how would you use the DBMS_JOB package to schedule the
execution of a given procedure owned by SCOTT to start Wednesday at 9AM and to
run subsequently every other day at 2AM.
Ans:
dbms_job.submit(:jobno,'statspack.snap;',trunc(sysdate)+9/24,'trunc(SYSDATE+1/24,''HH'')',
TRUE, :instno);
14. How
would you edit your CRONTAB to schedule the running of /test/test.sh to run
every other day at 2PM?
Ans: 00 02 *
* * /test/test.sh
15. In which
dictionary table or view would you look to determine at which time a snapshot
or MVIEW last successfully refreshed?
Ans: SQL>
SELECT MVIEW_NAME,LAST_REFRESH_DATE from USER_MVIEWS;
16. How
would you best determine why your MVIEW couldn’t FAST REFRESH?
Ans:
Possibly by checking the MVIEW LOG for errors.
20. How would
you begin to troubleshoot an ORA-3113 error?
Ans: End of
File Communication Error. Check Alert Logfile. CheckNetwrok Latency. Check
sqlnet.ora file has expire_time = 0, delete unwanted files and check the swap
and temp spaces.
21. Which
dictionary tables and/or views would you look at to diagnose a locking issue?
Ans: v$lock, v$session, v$process
22. An
automatic job running via DBMS_JOB has failed. Knowing only that “it’s failed”,
how do you approach troubleshooting this issue?
Ans:Check
the log and possible reason for the JOB failed.
23. How
would you extract DDL of a table without using a GUI tool?
Ans: select
dbms_metadata.get_ddl('OBJECT','OBJECT_NAME') from dual;
24. You’re
getting high “busy buffer waits” - how can you find what’s causing it?
Ans: Buffer busy wait means that the queries are
waiting for the blocks to be read into the db cache.There could be the reason
when the block may be busy in the cache and session is waiting for it. It could
be undo, data block or segment header wait.
Run the
following query to find out the p1,p2 and p3 of a session causing buffer busy
wait
sql>
select p1 "File #",p2 "Block #",p3 "Reason Code"
from v$session_wait where event = 'buffer busy waits';
After that
running the following query to find the
segment causing buffer busy wait:-
sql>
select owner,segment_name,segment_type from dba_extents where file_id = &P1
and &P2 between block_id and block_id + blocks -1;
25. What
query tells you how much space a tablespace named “test” is taking up, and how
much space is remaining?
Ans:
SET
SERVEROUTPUT ON
SET LINESIZE
1000
SET FEEDBACK
OFF
rem column
dummy noprintcolumn pct_used format
999.9 heading "%|Used"
column name
format a25 heading
"Tablespace Name"
column Kbytes
format 999,999,999 heading
"MBytes"
column used
format 999,999,999 heading
"Used(MB)"
column free
format 999,999,999 heading
"Free(MB)"
column largest
format 999,999,999 heading
"Largest"
break on report
compute sum
of kbytes on report
compute sum
of free on report
compute sum
of used on report
set pagesize
100
select
nvl(b.tablespace_name,
nvl(a.tablespace_name,'UNKOWN'))
name,(kbytes_alloc/1024) kbytes,
((kbytes_alloc-nvl(kbytes_free,0))/1024)
used,(nvl(kbytes_free,0)/1024) free,
((kbytes_alloc-nvl(kbytes_free,0))/kbytes_alloc)*100
"%used",
nvl(largest,0)/1024 largest
from (
select sum(bytes)/1024 Kbytes_free,
max(bytes)/1024 largest, tablespace_name
from
sys.dba_free_space group by
tablespace_name ) a,
( select sum(bytes)/1024
Kbytes_alloc,
tablespace_name
from sys.dba_data_files group by tablespace_name )b
where
a.tablespace_name (+) = b.tablespace_name
order by 1
/
26. Database
is hung. Old and new user connections alike hang on impact. What do you do?
Your SYS SQLPLUS session is able to connect.
Ans: Log
into the system and find whether there are any deadlocks in the system using
the following query.
select 'SID ' || l1.sid ||' is blocking ' || l2.sid blocking
from v$lock l1, v$lock l2
where l1.block =1 and l2.request > 0
and l1.id1=l2.id1
and l1.id2=l2.id2
/
If so kill
the processes caught in deadlock
alter system
kill session 'SID,SERIAL#' immediate;
Also find
out which wait events exist in the system using following commands and go in
detail as to what events are causing these waits and take appropriate actions.
select
event,count(*) from v$session group by event
/
select
u.sid,u.serial#,
u.username,p.spid,to_char(u.logon_time,'DD-MON-YYYY:HH24:MI:SS') from v$session u, v$session w,v$process p
where u.sid = w.sid and w.event like '%&a%' and u.paddr = p.addr
/
27. Database
crashes. Corruption is found scattered among the file system neither of your
doing nor of Oracle’s. What database recovery options are available? Database
is in archive log mode.
Ans: First
of all secure all the archives and all the backups you have on the tape or
other system. Then run fschk to check the filesystem. If the corruption is
detected at the filesystem level and is not recoverable by fschk format the
file system and restore the database through
RMAN.
28.
Illustrate how to determine the amount of physical CPUs a Unix Box possesses
(LINUX and/or Solaris).
Ans:
29. How do
you increase the OS limitation for open files (LINUX and/or Solaris)?
Ans: Set the file-max parameter is
/etc/sysctl.conf to the number you want.Save the file and execute it by using
command /etc/sysctl.conf-p
30. Provide
an example of a shell script which logs into SQLPLUS as SYS, determines the
current date, changes the date format to include minutes & seconds, issues
a drop table command, displays the date again, and finally exits.
Ans:
export
ORACLE_BASE=/oracle
export
ORACLE_HOME=/oracle/ora10g
export
ORACLE_SID=ora10g
export
path=$ORACLE_HOME/lib
sqlplus sys
as sysdba << EOF
@/oracle/date.sql
exit;
Now the
contents of /oracle/date.sql
select
SYSDATE from dual;
select
to_char(SYSDATE,'dd-mon-yyyy hh24:mi:ss') from dual;
drop table
tablename cascade constraints;
select
to_char(SYSDATE,'dd-mon-yyyy hh24:mi:ss') from dual;
/
31. Explain
how you would restore a database using RMAN to Point in Time?
Ans:
restore
database
until time
"to_date('Aug 27 2001 02:00:00','Mon DD YYYY HH24:MI:SS')";
recover
database
32. How does
Oracle guarantee data integrity of data changes?
Ans: Oracle
enables you to define and enforce data integrity constraints like PRIMARY KEY
CONSTRAINTS, FOREIGN KEY CONSTRAINTS and UNIQUE CONSTRAINTS.
33. Which
environment variables are absolutely critical in order to run the OUI?
Ans:
ORACLE_BASE, ORACLE_HOME, ORACLE_SID,path and library path
34. What SQL
query from v$session can you run to show how many sessions are logged in as a
particular user account?
Ans: select
count(1) from v$session where USERNAME='username';
35. Why does
Oracle not permit the use of PCTUSED with indexes?
Ans: Imagine
you've got an index on people's names. And, just for the sake of argument, only
4 entries can fit in a block.
So you have
Adam
Bob
Charles
David
and
Edward
Frank
Graham
Howard
You want to
insert a new entry in the table (and hence into the index on that table) of
Zebedee.
As things
stand, both blocks of the index are full, so Zebedee has to go into a third
block all on his own.
Now say you
delete some existing rows:
delete from
employees where name in ('Bob', 'Charles', 'David'). You're left in this state:
Block 1:
Adam
Block 2:
Edward
Frank
Graham
Howard
That means
block 1 has 3 empty slots for new entries. So you still want to insert a record
for someone called Zebedee: can it go into the first block, with all that empty
space? No. Because if it did, you'd end up with an index that ran:
Adam
Zebedee
Edward
Frank
Graham
Howard
...and you
might notice that the alphabetical order has been screwed to buggery at this
point. So no, although the first block contains lots of empty space, it's still
defined as an "A-ish" sort of block. It actually has to have entries
between Adam and Edward, and it can't suddenly decide to accept entries from
Wilma, Susan or Mary.
So when can
block 1 be used to house those sorts of entries? When Adam gets deleted.
Because when that row goes, you're in this position:
Block 1: completely
empty
Block 2:
values from E to G
Being
completely empty, there's no "A or B'ness' about block 1 any more. So
suddenly, it can accept any entry at all. Now, physically, block 1 might come
"before" block 2... but we jig things around in the root and branch
blocks so that doesn't matter. Therefore, you can now insert all those other
records you wanted and get this situation:
Block 1:
Mary
Susan
Wilma
Zebedee
Block 2:
Edward
Frank
Graham
Howard
And we have
a branch block (actually, in this case, the root node) which says:
A -> L:
goto block 2
M -> Z:
goto block 1
So, once we deleted
Adam, we were allowed to insert new items into all that empty space. But of
course, once we deleted Adam, the first block was completely and utterly empty.
And what does a completely empty block equate to in PCTUSED terms? Er, 0%.
It has to be
0% PCTUSED, in other words, because entries in an index have to be organised
according to some order. Allowing you to reuse space 'out of order' would
destroy the point of an index. And you can only say, "Order is irrelevant
at this point" when no entries exist at all... which equates to PCTUSED of
0.
PCTFREE is
fine to set, because that simply says when to stop filling one block and start
filling another. In indexes, it reserves space that might come in handy for
preventing block splits. So there's a use for PCTFREE, definitely. Imagine we'd
set PCTFREE of 25%. Then the earlier index would be:
Block 1:
Adam
Bob
Charles
Block 2:
David
Edward
Frank
Block 3:
Graham
Howard
With a
PCTFREE of 25% and only 4 entries allowed per block, we end up only storing 3
entries per block: the missing entry being reserved as 'free space'. Now insert
a guy called 'Brian': is there room to fit him between Bob and Charles? In this
new index, yes: block 1 is allowed to grow to holding 4 records, and there's
only currently 3, so yup: there's room to accomodate the new guy.
But in the
earlier example? No, the block was allowed to hold four records. It's holding
four records. You want to insert a new one that HAS to go between two existing
records... we have to perform a block split and reorganisation to allow that to
happen. Block splits are costly affairs. PCTFREE would have saved us from
having to do one.
So yes,
PCTFREE in an index is useful. PCTUSED is meaningless. Once you impose an order
on rows, they cannot just go anywhere. Space reserved for future inserts is
fine. But a flag to say 'insert away!' when inserting would disrupt a
carefully-achieved ordering is a complete no-no.
Comments
Post a Comment
Welcome to the Oracle DBA Blog.
Stay Hungry Stay Foolish