Hello Friends,
I know how tough it is to face the interviews inspite of being prepared well. Trust me even after facing so many interviews the day the interview is scheduled I go totally numb and cold feet. I really don't know what to revise and what to look into. I am sure you might be facing the same things.
Well the other night I had an interview call from one of the most renowned company in the market but due to hectic and busy schedule I was not able to revise the topics that needs to be done before an interview. After the interview I thought of maintaining the most basic questions asked during a DBA interview ready for the next time so that even if I dont get enough time a glance at the questions from my DATABANK would give me enough confidence to face the interview. I am sure you too would be feeling the same. So here goes most common DBA interview questions and there probable answers. Any suggestions and corrections are most welcomed.
Here is the Collection and Answer to some Interesting ORACLE DBA Interview Questions
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,priveleges information,datafile,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?
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
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
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
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’);
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;
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
/
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
/
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.
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:
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
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
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';
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 deleetd 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.
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 deleetd 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.
Anybody who's asking question during an interview like 25 and 26 are out of their mind. It could be just a description of what you would do in this situation, but not specific queries.
ReplyDeleteBTW there are several small and BIG mistakes that I've spotted right away in your answers.
Specifically, #31 is a big one and #33 is a small one.
Hi Anonymous,
ReplyDeleteSome companies do ask it and trust me that Time I also thought they are out of their mind... But then nonetheless they are interviewers :)
And thanks for pointing out the mistake and your valuables comments
hello sir i have completed ocp in oracle9i and now working as operation support i want to back in DBA.can u suggest me sir.
ReplyDeletesuggest what? incomplete question!! You are out.
DeleteThanks for sharing. you have done good job. i learned so much from this post. keep it up.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteVery nice collection of questions thank you for sharing. Know more about Oracle DBA Training
ReplyDeletethis is the worst interview questions I had ever seen. Buffer hit ratio?? if they answer like this ... then the chances are less to win the interview.
ReplyDeleteYou meant say that the provided answer is wrong ? or something else, if it's wrong, what's the correct answer ?
DeleteAustralia Best Tutor is one of the best Online Assignment Help providers at an affordable price. Here All Learners or Students are getting best quality assignment help with reference and styles formatting.
ReplyDeleteVisit us for more Information
Australia Best Tutor
Sydney, NSW, Australia
Call @ +61-730-407-305
Live Chat @ https://www.australiabesttutor.com
Our Services
Online assignment help Australia
my assignment help Australia
assignment help
help with assignment
Online instant assignment help
Online Assignment help Services
Each department of CAD have specific programmes which, while completed could provide you with a recognisable qualification that could assist you get a job in anything design enterprise which you would really like.
ReplyDeleteAutoCAD training in Noida
AutoCAD training institute in Noida
Best AutoCAD training institute in Noida
Best kitchen chimney installation and service in Faridabad
ReplyDeleteWhen cooking with oil, you will see the fact that smoke usually receives emitted in case you often uses the identical oil. Typically, these form of eating places have today's hoods as well as exhaust fans.
Visit here
Kitchen Chimney Repair Service in Noida
Kitchen Kitchen Chimney Repair Service in Vaishali
Kitchen Kitchen Chimney Repair Service in indirapuram
Kitchen Kitchen Chimney Repair Service in vasundhra
Kitchen Kitchen Chimney Repair Service in faridabad
Very nice post with lots of information. Thanks for sharing this updates.
ReplyDeleteBlue Prism Training in Chennai
Blue Prism Training Institute in Chennai
UiPath Training in Chennai
Robotics Process Automation Training in Chennai
RPA Training in Chennai
Data Science Course in Chennai
Blue Prism Training in OMR
Blue Prism Training in Porur
Thanks for sharing. I really liked your post, keep sharing!!
ReplyDeleteCEH Training In Hyderbad
good....nice
ReplyDeletecategory/advocate-resume
category/agriculture-forestry-fishing
category/android-developer-resume
category/assistant-professor-resume
category/chartered-accountant-resume
category/database-resume
category/design-engineer-resume
category/developer-resume
category/engineer-resume
category/entrepreneur-and-financial-services-resume
Thanks for posting useful information.You have provided an nice article, Thank you very much for this one. oracle training in chennai
ReplyDelete