Interview Questions On Oracle DBA
Interview Questions On Oracle DBA
Interview Questions On Oracle DBA
ORACLE
Query Tuning- usage of indexes, how to forcefully use indexes, # hints in sql query like
select /* + index idx_abc */
Types of indexes and their usages # Partitioned indexes (generally for partitioned
tables), normal indexes or b-tree indexes (generally for OLTP trans) and Bitmap indexes
(generally for datawarehouses and too costly updates)
How would you determine what sessions are connected and what resources they are
waiting for?
Use of V$SESSION and V$SESSION_WAIT
Database errors
# alert.log
Hot Backups
# rman implementation
Starting from spfile or pfile #difference and methods. During startup, system always
check for spfile, if not found then pfile.
Difference between create or replace a function/package & drop and create command.
In drop command all privileges granted to users/roles etc are dropped but in case of
create or replace they remain as it is.
Meaning of
iostat
vmstat
netstat
3. Explain a tablespace?
A database is divided into Logical Storage Unit called tablespaces. A tablespace
is used to grouped related logical structures together.
6. Explain schema?
A schema is collection of database objects of a user.
3. What other parts of your organization do you interact with and how?
Again, if you have exhausted question 1 and 2 you may never get to this
question. But if you have been apprehensive to opening up and explaining
yourself, take note that you may have an issue and the interviewer might also be
already getting tired of the interview process. If you get to this question consider
yourself in trouble. You really need to forget all your hang-ups and start
explaining what it is that you like to do as a DBA, and why you want to work for
this particular company. You are going to have to reel this interviewer back into
the interview process or you might not get to the true technical question part of
the interview.
1. Explain the difference between a hot backup and a cold backup and the
benefits associated with each.
A hot backup is basically taking a backup of the database while it is still up and
running and it must be in archive log mode. A cold backup is taking a backup of
the database while it is shut down and does not require being in archive log
mode. The benefit of taking a hot backup is that the database is still available for
use while the backup is occurring and you can recover the database to any point
in time. The benefit of taking a cold backup is that it is typically easier to
administer the backup and recovery process. In addition, since you are taking
cold backups the database does not require being in archive log mode and thus
there will be a slight performance gain as the database is not cutting archive logs
to disk.
2. You have just had to restore from backup and do not have any control
files. How would you go about bringing up this database?
I would create a text based backup control file, stipulating where on disk all the
data files where and then issue the recover command with the using backup
control file clause.
3. How do you switch from an init.ora file to a spfile?
Issue the create spfile from pfile command.
4. Explain the difference between a data block, an extent and a segment.
A data block is the smallest unit of logical storage for a database object. As
objects grow they take chunks of additional storage that are composed of
contiguous data blocks. These groupings of contiguous data blocks are called
extents. All the extents that an object takes when grouped together are
considered the segment of the database object.
5. Give two examples of how you might determine the structure of the table
DEPT.
Use the describe command or use the dbms_metadata.get_ddl package.
6. Where would you look for errors from the database engine?
In the alert log.
9. Give the two types of tables involved in producing a star schema and the
type of data they hold.
Fact tables and dimension tables. A fact table contains measurements while
dimension tables will contain data that will help describe the fact tables.
12. A table is classified as a parent table and you want to drop and re-create
it. How would you do this without affecting the children tables?
Disable the foreign key constraint to the parent, drop the table, re-create the
table, enable the foreign key constraint.
14. What command would you use to create a backup control file?
Alter database backup control file to trace.
15. Give the stages of instance startup to a usable state where normal
users may access it.
STARTUP NOMOUNT - Instance startup
STARTUP MOUNT - The database is mounted
STARTUP OPEN - The database is opened
16. What column differentiates the V$ views to the GV$ views and how?
The INST_ID column which indicates the instance in a RAC environment the
information came from.
18. How would you go about increasing the buffer cache hit ratio?
Use the buffer cache advisory over a given workload and then query the
v$db_cache_advice table. If a change was necessary then I would use the alter
system set db_cache_size command.
21. How would you determine the time zone under which a database was
operating?
select DBTIMEZONE from dual;
27. Where in the Oracle directory tree structure are audit traces placed?
In unix $ORACLE_HOME/rdbms/audit, in Windows the event viewer
29. When a user process fails, what background process cleans up after it?
PMON
31. How would you determine what sessions are connected and what
resources they are waiting for?
Use of V$SESSION and V$SESSION_WAIT
34. Give two methods you could use to determine what DDL changes have
been made.
You could use Logminer or Streams
38. When creating a user, what permissions must you grant to allow them
to connect to the database?
Grant the CONNECT to the user.
41. What view would you use to look at the size of a data file?
DBA_DATA_FILES
42. What view would you use to determine free space in a tablespace?
DBA_FREE_SPACE
43. How would you determine who has added a row to a table?
Turn on fine grain auditing for the table.
18. Other way to replace query result null value with a text
SQL> Set NULL ?N/A?
to reset SQL> Set NULL ??
21. What is the maximum number of triggers, can apply to a single table?
12 triggers.
1) What are the Back ground processes in Oracle and what are they.
1) This is one of the most frequently asked question.There are basically 9
Processes but in a general system we need to mention the first five background
processes.They do the house keeping activities for the Oracle and are common
in any system.
The various background processes in oracle are
a) Data Base Writer(DBWR) :: Data Base Writer Writes Modified blocks from
Database buffer cache to Data Files.This is required since the data is not written
whenever a transaction is commited.
b)LogWriter(LGWR) :: LogWriter writes the redo log entries to disk. Redo Log
data is generated in redo log buffer of SGA. As transaction commits and log
buffer fills, LGWR writes log entries into a online redo log file.
c) System Monitor(SMON) :: The System Monitor performs instance recovery at
instance startup.This is useful for recovery from system failure
d)Process Monitor(PMON) :: The Process Monitor peforms process recovery
when user Process fails. Pmon Clears and Frees resources that process was
using.
e) CheckPoint(CKPT) :: At Specified times, all modified database buffers in SGA
are written to data files by DBWR at Checkpoints and Updating all data files and
control files of database to indicate the
most recent checkpoint
f)Archieves(ARCH) :: The Archiver copies online redo log files to archival storal
when they are busy.
g) Recoveror(RECO) :: The Recoveror is used to resolve the distributed
transaction in network
h) Dispatcher (Dnnn) :: The Dispatcher is useful in Multi Threaded Architecture
i) Lckn :: We can have upto 10 lock processes for inter instance locking in
parallel sql.
7) How many Integrity Rules are there and what are they
7) There are Three Integrity Rules. They are as follows ::
a) Entity Integrity Rule :: The Entity Integrity Rule enforces that the Primary key
cannot be Null
b) Foreign Key Integrity Rule :: The FKIR denotes that the relationship between
the foreign key and the primary key has to be enforced.When there is data in
Child Tables the Master tables cannot be deleted.
c) Business Integrity Rules :: The Third Intigrity rule is about the complex
business processes which cannot be implemented by the above 2 rules.
15) How many minimum groups are required for a matrix report
15) The minimum number of groups in matrix report are 4
19) What is the difference between candidate key, unique key and primary
key
19) Candidate keys are the columns in the table that could be the primary keys
and the primary key
is the key that has been selected to identify the rows. Unique key is also useful
for identifying the distinct rows in the table.
20)What is concurrency
20) Cuncurrency is allowing simultaneous access of same data by different
users. Locks useful for accesing the database are
a) Exclusive
The exclusive lock is useful for locking the row when an insert,update or delete is
being done.This lock should not be applied when we do only select from the row.
b) Share lock
We can do the table as Share_Lock as many share_locks can be put on the
same resource.
31) What is the Difference between a post query and a pre query
31) A post query will fire for every row that is fetched but the pre query will fire
only once.
4.Can you have two functions with the same name in a PL/SQL block ?
Yes.
5.Can you have two stored functions with the same name ?
Yes.
34.What are the states of a rollback segment ? What is the difference between
partly available and needs recovery ?
The various states of a rollback segment are :
ONLINE, OFFLINE, PARTLY AVAILABLE, NEEDS RECOVERY and INVALID.
35.What is the difference between unique key and primary key ?
Unique key can be null; Primary key cannot be null.
36.An insert statement followed by a create table statement followed by
rollback ? Will the rows be inserted ?
No.
37.Can you define multiple savepoints ?
Yes.
38.Can you Rollback to any savepoint ?
Yes.
40.What is the maximum no. of columns a table can have ?
254.
41.What is the significance of the & and && operators in PL SQL ?
The & operator means that the PL SQL block requires user input for a variable.
The && operator means that the value of this variable should be the same as
inputted by the user previously for this same variable.
If a transaction is very large, and the rollback segment is not able to hold the
rollback information, then will the transaction span across different rollback
segments or will it terminate ?
It will terminate (Please check ).
42.Can you pass a parameter to a cursor ?
Explicit cursors can take parameters, as the example below shows. A cursor
parameter can appear in a query wherever a constant can appear.
CURSOR c1 (median IN NUMBER) IS
SELECT job, ename FROM emp WHERE sal > median;
43.What are the various types of RollBack Segments ?
Public Available to all instances
Private Available to specific instance
44.Can you use %RowCount as a parameter to a cursor ?
Yes
45.Is the query below allowed :
Select sal, ename Into x From emp Where ename = 'KING'
(Where x is a record of Number(4) and Char(15))
Yes
46.Is the assignment given below allowed :
ABC = PQR (Where ABC and PQR are records)
Yes
47.Is this for loop allowed :
For x in &Start..&End Loop
Yes
48.How many rows will the following SQL return :
Select * from emp Where rownum < 10;
9 rows
49.How many rows will the following SQL return :
Select * from emp Where rownum = 10;
No rows
50.Which symbol preceeds the path to the table in the remote database ?
@
51.Are views automatically updated when base tables are updated ?
Yes
52.Can a trigger written for a view ?
No
53.If all the values from a cursor have been fetched and another fetch is issued,
the output will be : error, last record or first record ?
Last Record
54.A table has the following data : [[5, Null, 10]]. What will the average function
return ?
7.5
55.Is Sysdate a system variable or a system function?
System Function
56.Consider a sequence whose currval is 1 and gets incremented by 1 by using
the nextval reference we get the next number 2. Suppose at this point we issue
an rollback and again issue a nextval. What will the output be ?
3
56.Definition of relational DataBase by Dr. Codd (IBM)?
A Relational Database is a database where all data visible to the user is
organized strictly as tables of data values and where all database operations
work on these tables.
57.What is Multi Threaded Server (MTA) ?
In a Single Threaded Architecture (or a dedicated server configuration) the
database manager creates a separate process for each database user. But in
MTA the database manager can assign multiple users (multiple user processes)
to a single dispatcher (server process), a controlling process that queues request
for work thus reducing the databases memory requirement and resources.
58.Which are initial RDBMS, Hierarchical & N/w database ?
RDBMS - R system
Hierarchical - IMS
N/W - DBTG
59.Difference between Oracle 6 and Oracle 7
ORACLE 7 ORACLE 6
Cost based optimizer ? Rule based optimizer
Shared SQL Area ? SQL area allocated for each user
Multi Threaded Server ? Single Threaded Server
Hash Clusters ? Only B-Tree indexing
Roll back Size Adjustment ? No provision
Truncate command ? No provision
Database Integrity
Constraints ? Provision at Application Level
Stored procedures, functions
packages & triggers ? No provision
Resource profile limit. It
prevents user from running
away with system resources ? No provision
Distributed Database ? Distributed Query
Table replication & snapshots? No provision
Client/Server Tech. ? No provision
60.What is Functional Dependency
Given a relation R, attribute Y of R is functionally dependent on attribute X of R if
and only if each X-value has associated with it precisely one -Y value in R
61.What is Auditing ?
The database has the ability to audit all actions that take place within it.
a) Login attempts, b) Object Accesss, c) Database Action
Result of Greatest(1,NULL) or Least(1,NULL)
NULL
62.While designing in client/server what are the 2 imp. things to be considered ?
Network Overhead (traffic), Speed and Load of client server
63.What are the disadvantages of SQL ?
Disadvantages of SQL are :
? Cannot drop a field
? Cannot rename a field
? Cannot manage memory
? Procedural Language option not provided
? Index on view or index on index not provided
? View updation problem
Oracle Notes :
Oracle 8i -
It is a DB of internet computing , It changes the of information managed and
accessed to meet the demandof internet age.
-- Significant new feature for OLTP(Online trans Processing) and data ware
housing Appl.
-- To mange all types of datain web site.
-- iFS Internet file Syatem
-- interMedia to manage and access multimedia data,audio,video
-- Support to java(to install JVM on server)
-- Security enhancement(authentication and authorization,centralizing user
management)
Oracle 8(ORDBMS) -
-Parrallel enhancement ,faster connection
-Table partitioning , Connection inc to 30000 ,Table column upto 1000
-DB size inc from few tera byte to 10 tera. , Data file inc 65,533
-Support MTS,provides LOB
Oracle Start -
1. Oracle instance start -Allocates SGA and start BAckground processes.
2. Mount Oracle DB-Method of Associating DB with previous started instance
3.Opening DB-To make available.
Normalization -
It's a technique thr. which we can design the DB.
During normalization dependancies can be identified which can cause pbs during
deletion & updation .It is used in simplifing the structure of table.
1NF-Unnorma;ised data transfer to normalised form.
2NF-Functional dependancies can be find out & decompose the table without
loss of data.
3NF-Transist dependancies ,Every non key attrbute is functionally dependant on
just PK.
4NF(BCNF)-The relation which has multiple candidate keys ,then we have to go
for BCNF.
Denormalization-
At the same time when information is required from more than one table at faster
rate then it is wiser to add some sort of dependancies.
Rooling Forward -To reapply to Data file to all changes that are recorded in Redo
log file due to which datafile contains commited & uncommited dat.
Forward Declaration-To declare variable and procedures before using it.
2- Tier Arch. Disadv-When Business Rule changes.
PL/SQL Record-To represent more than one row at time.
PL/SQL Table -To define single variable comprises several data element.
To delete define one more empty table and assign it.
Tablespace -
Profile-To control system resources ,memory ,diskspace and CPU time.
We can find rows effected by %rowcount.
Data Binding-Dividing the cursor in appl as per select stamt.
Trancate -Faster than delete ,doesn't fire ny DB trigger ,Allocate space ,No
roolback.
Defered Integrity constraints-When we refere PK in the same table where we
defined .
Cascading trigger-
Temporary Table-Delete operation table.
Log Table-to store information abt error.
Coordinity-
Err Trap -To trap error use SQLERRM,SQLCODE
Modularity-PL/SQL allows to create program module to improve software
reliability and to hide complexity
Positional and Named Notation -
The actual arguments are associaed with formal arguments by position k/s
Positional Notation.It's commonly used.
A Trigger doesn't accept argument & have same name as table or procedure as it
exist in seperate namespace.
How we ref FK in Sql -Join Condition.
Security/Lock-
Shared/exclusive -When 2 transaction wants to read/write from db at the same
time.
Dead- 1trans updates emp and dep
2 trans update dep and emp
TO add a not null column to a table which has already some records -
Alter table a
Add(b number default 1 not null)
Sequence- Start with,increment by,Cache/No cache,Order/No order,Max,Min
ER Dia.- Entity Relation Dia.
Set Transaction -To set a current transaction online offline
Oracle err-
ORA-06500 stiorage err
ORA-00923 from keyword not found
ORA-06501program err
ORA-00904 Invalid Col
ORA-00001Uk violated.
Dynamic Sql -Which uses late binding
File I/O-To read and write dat to and from text file thr. Oracle procedure.
Joins-Equi,Non EQui,Self,inner joins,outer joins
Index-16 col per table.
Parsing-Syntax checking.
Optimization-Use of index (HINT)
Corelated Subquery -Which fires only once/ per row for entire stmt.
Simple Query--Which fires everytime for entire stmt
Packages- Encapsulation,Overloading,improve performance as I/O reduces.
PL/SQL Signature Method- To determine when remote dependant object get
invalid.
Object Previledge - On a particular object- I/U/D/Exec
System Previledge -Entire collection object -C/A/D
SGA Comprises -Data Buffer, Redo Log Buffer,Shared pool Buffer.
Shared Pool - Req to process unique SQL stmt submitted to DB.
It contains information such as parse tree and execusion plan .
PGA -A memry buffer that contains data and control information for a server
process.
Dedicated server - Handles request. for single user.
Multithresd Server-Handles request. for multiple user.
Background process -DBWR,LGWR,PMON,SMON,CKPT
DBWR-Writes modified data blocks from DB buffer to data file.
LGWR-
CKPT-Responsible to check DBWR and update control file to indicate most
recent CKPT.
SMON-Instance recovery at start up,Clean Temporary. Segment.
PMON-Responsible for process recovery and user process fails,Cleaning up
cache ,freeing resources which was using process.
Segment-Data/Index/Rollback/Temp
Data Dictionary -V$SESSION, information abt integrity constraints,space
allocated for schema object.
USER_TAB_COLUMNS gives you a list of tables as per Column.
EOD Procedure-
Mutating/Constraining Err/Table
Diff of where and group by
Connect,Allocate.Analyse Command.
Queries--
1. 3rd Max
select distinct sal
from emp a
where 3=(select count(distinct sal)
from emp b
where a.sal=<b.sal)
2. Delete Duplicate rows
Delete Emp
where rowid not in(select max(rowid)
from emp
group by emp_no)
3. First 5 Max No
select sal
from (select abs(-sal) sal
from emp
group by -sal)
where rownum<6
Views--
-No Aggr function,group by,having
-U/D without PK but not Insert.
-Join -No DML
-No join-DML
Index -are used for row selection in where and order by only if indexing on
column
You can launch the DBA Studio or the individual tools directly from the Windows
NT Start menu. Or, you can use the following syntax to launch them from a
command line prompt:
oemapp tool_name
DBA?
If to_date(sysdate,'DAY')='Tuesday' then ..
Buffer Cache-To improve data block recently used by user in order to improve the
performance.
Ordinality-Emp, Expences-Emp may expense sheet and Expense sheet has only
one Emp. This fact k/s Referred Ordinality.
Three Steps in creating DB.--
-Creating physical location for data in tables and indexes to be stored in DB.
-To create the file that still store log entries.
-To create logical structure of data dictionary.
This is accomplished by create DB
1. Back up existing DB.
2.Create or Edit the init.ora file
3.Varify the instance name
4. Start Application management DB tool.
5.start instance
6.Create and Backup the new DB.
Control file -250K
Oracle Administration Assistant for W-NT is a DB management tool that enables
to create DB administartor, operator, Users and role. To manage Oracle DB
services, DB start up, shut down, Edit registry parameter setting, views oracle
process information.
Database Configuration Assistant -To create DB
Oracle environment-
OLTP-Many users can read and update, hight response time.
DSS-Read only.
Hybrid-both OLTP & DSS App. are running with this App.
Init.ora-is a parameter file like DB_NAME, CONTROL_FILE, DB_BLOCK _SIZE
RowID-BlockIDRowIdDatafileId
Cluster Segment-To support use of cluster on the DB.
Hash Cluster-By placing data in close proximity k/s Hashing.
Optimization-
Decides line of execution of query.
First apply condition and then make Cartesian product. The cost can reduce by
reducing no of rows.
Oracle ways for optimization-
-Evaluation of expression and condition amt>500/100--amt>5
Like convert to equal
IN - OR condition
Any -OR
Between/ALL -AND
NOT-Avoid
Transitivity-where a.id=b.id and a.id=1 use a.id=1 and b.id =1
Merging views
Index column be in order by clause.
The shared pool is one of the memory structures in SGA .It is comprised of the
data dictionary and the library cache. Check v$sgastat
The data dictionary cache buffers data dictionary objects that contain data about
tables, indexes, users and all other objects.
The Library Cache/SQL Cache buffers previously executed queries, so that they
need not be reloaded and reparsed if user calls them again.
Otherwise if the information is not in the buffer then oracle must get it from disk.
The V$LIBRAY CACHE View stores performance data for library cache and
V$ROWCACHE view stores performance data for the data dictionary cache.
Redo Log --
Oracle 8 stores all changes to the database, even uncommitted changes, in the
redo log files.
LGWR writes .
Unbalanced Index ?
if we do have lot on index on a table and we are doing I/U/D frequently then there
is a problem of disk contention . To check this problem sees the BLEVEL value in
DBA_INDEXES and if it is 1,2,3,4 then it?s ok else rebuild the index .
Execute utlchain.sql
The memory structure that is used to store the most queried data from database.
This helps up to improve database performance by decreasing the amount of I/O
performed against data file.
Group of tables physically stored together because they share common columns
and are often used together is called cluster.
The related columns of the tables are called the cluster key. The cluster key is
indexed using a cluster index and its value is stored only once for multiple tables
in the cluster.
It consists of
one or more data files.
one or more control files.
two or more redo log files.
The Database contains
multiple users/schemas
one or more rollback segments
one or more tablespaces
Data dictionary tables
User objects (table,indexes,views etc.,)
The server that access the database consists of
SGA (Database buffer, Dictionary Cache Buffers, Redo log buffers, Shared
SQL pool)
SMON (System MONito)
PMON (Process MONitor)
LGWR (LoG Write)
DBWR (Data Base Write)
ARCH (ARCHiver)
CKPT (Check Point)
RECO
Dispatcher
User Process with associated PGS
Two processes waiting to update the rows of a table, which are locked by other
processes then deadlock arises.
In a database environment this will often happen because of not issuing the
proper row lock commands. Poor design of front-end application may cause this
situation and the performance of server will reduce drastically.
Memory Management
The System Global Area in an Oracle database is the area in memory to facilitate
the transfer of information between users. It holds the most recently requested
structural information between users. It holds the most recently requested
structural information about the database. The structure is database buffers,
dictionary cache, redo log buffer and shared pool area.
The data dictionary cache is stored in an area in SGA called the shared pool.
This will allow sharing of parsed SQL statements among concurrent users.
61. What is mean by Program Global Area (PGA)?
Data segment are the physical areas within a database block in which the data
associated with tables and clusters are stored.
63. What are the factors causing the reparsing of SQL statements in SGA?
Monitor the ratio of the reloads takes place while executing SQL statements. If
the ratio is greater than 1 then increase the SHARED_POOL_SIZE.
Database buffers are cache in the SGA used to hold the data blocks that are
read from the data segments in the database such as tables, indexes and
clusters DB_BLOCK_BUFFERS parameter in INIT.ORA decides the size.
Changes made to the records are written to the on-line redo log files. So that
they can be used in roll forward operations during database recoveries. Before
writing them into the redo log files, they will first brought to redo log buffers in
SGA and LGWR will write into files frequently. LOG_BUFFER parameter will
decide the size.
68. How will you swap objects into a different table space for an existing
database?
69. List the Optional Flexible Architecture (OFA) of Oracle database? How
can we organize the tablespaces in Oracle database to have maximum
performance?
70. How will you force database to use particular rollback segment?
PCTFREE parameter
We can plan the storage for a table as how much initial extents are required, how
much can be extended next, how much % should leave free for managing row
updating, etc.,
This is used to reserve certain amount of space in a block for expansion of rows.
- Make new rollback segment available (after shutdown, modify init.ora file and
start database)
79. How the space utilization takes place within rollback segments?
It will try to fit the transaction in a cyclic fashion to all existing extents. Once it
found an extent is in use then it forced to acquire a new extent (number of
extents is based on the optimal size)
A single transaction may wipeout all available free space in the rollback segment
tablespace. This prevents other user using rollback segments.
83. List the sequence of events when a large transaction that exceeds
beyond its optimal value when an entry wraps and causes the rollback
segment to expand into another extend.
Transaction Begins.
The entry attempts to wrap into second extent. None is available, so that the
RBS must extent.
85. How will you estimate the space required by a non-clustered tables?
After arriving the calculation, add 10 % additional space to calculate the initial
extent size for a working table.
86. It is possible to use raw devices as data files and what are the
advantages over file system files?
Yes.
The advantages over file system files are that I/O will be improved because
Oracle is bye-passing the kernel which writing into disk. Disk corruption will be
very less.
88. How to implement the multiple control files for an existing database?
Shadow set of disks save as a backup in the event of disk failure. In most
operating systems if any disk failure occurs it automatically switchover to place of
failed disk.
It is the set of before image data blocks that contain rows that are modified by a
transaction.
Each rollback segment entry must be completed within one rollback segment.
It is a measure of well the data cache buffer is handling requests for data.
Hit Ratio = (Logical Reads - Physical Reads - Hits Misses)/ Logical Reads.
The tar command cannot be used for physical file backup, instead we can use dd
command, which is less flexible and has limited recoveries.
96. List the factors that can affect the accuracy of the estimations?
- The space used transaction entries and deleted records, does not become free
immediately after completion due to delayed cleanout.
- Inserts of, updates to and deletes of rows as well as columns larger than a
single data block, can cause fragmentation a chained row pieces.
Instead grant the ability to access the procedures that access the tables.
99. What are the dictionary tables used to monitor a database space?
DBA_FREE_SPACE
DBA_SEGMENTS
DBA_DATA_FILES.
SQL*Plus Statements
Transaction is logical unit between two commits and commit and rollback.
TRUNCATE commits after deleting entire table i.e., cannot be rolled back.
Database triggers do not fire on TRUNCATE
DELETE allows the filtered deletion. Deleted records can be rolled back or
committed.
Database triggers fire on DELETE.
Join is a query, which retrieves related columns or rows from multiple tables.
Sub-query is a query whose return values are used in filtering conditions of the
main query.
SUBSTR (String1 n, m)
SUBSTR returns a character string of size m in string1, starting from n-th position
of string1.
Using ROWID.
CONSTRAINTS
Maintaining data integrity through a set of rules that restrict the values of one or
more columns of the tables based on the values of primary key or unique key of
the referenced table.
117. How many LONG columns are allowed in a table? Is it possible to use
LONG columns in WHERE clause or ORDER BY?
Only one LONG column is allowed. It is not possible to use LONG column in
WHERE or ORDER BY clause.
118. What are the pre-requisites to modify datatype of a column and to add
a column with NOT NULL constraint?
121. If unique key constraint on DATE column is created, will it validate the
rows that are inserted with SYSDATE?
CYCLE specifies that the sequence continue to generate values after reaching
either maximum or minimum value. After pan-ascending sequence reaches its
maximum value, it generates its minimum value. After a descending sequence
reaches its minimum, it generates its maximum.
NO CYCLE specifies that the sequence cannot generate more values after
reaching its maximum or minimum value.
A View can be updated/deleted/inserted if it has only one base table if the view is
based on columns from one or more tables then insert, update and delete is not
possible.
If changes are made to the tables and these tables are the base tables of a view,
then the changes will be reference on the view.
Oracle Interview Questions and Answers : SQL
1. To see current user name
Sql> show user;
2. Change SQL prompt name
SQL> set sqlprompt “Manimara > “
Manimara >
Manimara >
3. Switch to DOS prompt
SQL> host
4. How do I eliminate the duplicate rows ?
SQL> delete from table_name where rowid not in (select max(rowid) from table
group by duplicate_values_field_name);
or
SQL> delete duplicate_values_field_name dv from table_name ta where rowid
<(select min(rowid) from table_name tb where ta.dv=tb.dv);
Example.
Table Emp
Empno Ename
101 Scott
102 Jiyo
103 Millor
104 Jiyo
105 Smith
delete ename from emp a where rowid < ( select min(rowid) from emp b where
a.ename = b.ename);
The output like,
Empno Ename
101 Scott
102 Millor
103 Jiyo
104 Smith
5. How do I display row number with records?
To achive this use rownum pseudocolumn with query, like SQL> SQL> select
rownum, ename from emp;
Output:
1 Scott
2 Millor
3 Jiyo
4 Smith
6. Display the records between two range
select rownum, empno, ename from emp where rowid in
(select rowid from emp where rownum <=&upto
minus
select rowid from emp where rownum<&Start);
Enter value for upto: 10
Enter value for Start: 7
ROWNUM EMPNO ENAME
--------- --------- ----------
1 7782 CLARK
2 7788 SCOTT
3 7839 KING
4 7844 TURNER
7. I know the nvl function only allows the same data type(ie. number or
char or date Nvl(comm, 0)), if commission is null then the text “Not
Applicable” want to display, instead of blank space. How do I write the
query?
SQL> select nvl(to_char(comm.),'NA') from emp;
Output :
NVL(TO_CHAR(COMM),'NA')
-----------------------
NA
300
500
NA
1400
NA
NA
8. Oracle cursor : Implicit & Explicit cursors
Oracle uses work areas called private SQL areas to create SQL statements.
PL/SQL construct to identify each and every work are used, is called as Cursor.
For SQL queries returning a single row, PL/SQL declares all implicit cursors.
For queries that returning more than one row, the cursor needs to be explicitly
declared.
9. Explicit Cursor attributes
There are four cursor attributes used in Oracle
cursor_name%Found, cursor_name%NOTFOUND, cursor_name%ROWCOUNT,
cursor_name%ISOPEN
10. Implicit Cursor attributes
Same as explicit cursor but prefixed by the word SQL
SQL%Found, SQL%NOTFOUND, SQL%ROWCOUNT, SQL%ISOPEN
Tips : 1. Here SQL%ISOPEN is false, because oracle automatically closed the
implicit cursor after executing SQL statements.
: 2. All are Boolean attributes.
11. Find out nth highest salary from emp table
SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (SELECT COUNT
(DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal);
Enter value for n: 2
SAL
---------
3700
12. To view installed Oracle version information
SQL> select banner from v$version;
13. Display the number value in Words
SQL> select sal, (to_char(to_date(sal,'j'), 'jsp'))
from emp;
the output like,
SAL (TO_CHAR(TO_DATE(SAL,'J'),'JSP'))
--------- -----------------------------------------------------
800 eight hundred
1600 one thousand six hundred
1250 one thousand two hundred fifty
If you want to add some text like,
Rs. Three Thousand only.
SQL> select sal "Salary ",
(' Rs. '|| (to_char(to_date(sal,'j'), 'Jsp'))|| ' only.'))
"Sal in Words" from emp
/
Salary Sal in Words
------- ------------------------------------------------------
800 Rs. Eight Hundred only.
1600 Rs. One Thousand Six Hundred only.
1250 Rs. One Thousand Two Hundred Fifty only.
14. Display Odd/ Even number of records
Odd number of records:
select * from emp where (rowid,1) in (select rowid, mod(rownum,2) from emp);
1
3
5
Even number of records:
select * from emp where (rowid,0) in (select rowid, mod(rownum,2) from emp)
2
4
6
15. Which date function returns number value?
months_between
16. Any three PL/SQL Exceptions?
Too_many_rows, No_Data_Found, Value_Error, Zero_Error, Others
17. What are PL/SQL Cursor Exceptions?
Cursor_Already_Open, Invalid_Cursor
18. Other way to replace query result null value with a text
SQL> Set NULL ‘N/A’
to reset SQL> Set NULL ‘’
19. What are the more common pseudo-columns?
SYSDATE, USER , UID, CURVAL, NEXTVAL, ROWID, ROWNUM
20. What is the output of SIGN function?
1 for positive value,
0 for Zero,
-1 for Negative value.
21. What is the maximum number of triggers, can apply to a single table?
12 triggers.
PL/SQL interview qiuestions Database
1. Which of the following statements is true about implicit cursors?
1. Implicit cursors are used for SQL statements that are not named.
2. Developers should use implicit cursors with great care.
3. Implicit cursors are used in cursor for loops to handle data
processing.
4. Implicit cursors are no longer a feature in Oracle.
2. Which of the following is not a feature of a cursor FOR loop?
1. Record type declaration.
2. Opening and parsing of SQL statements.
3. Fetches records from cursor.
4. Requires exit condition to be defined.
3. A developer would like to use referential datatype declaration on a
variable. The variable name is EMPLOYEE_LASTNAME, and the
corresponding table and column is EMPLOYEE, and LNAME,
respectively. How would the developer define this variable using
referential datatypes?
1. Use employee.lname%type.
2. Use employee.lname%rowtype.
3. Look up datatype for EMPLOYEE column on LASTNAME table and
use that.
4. Declare it to be type LONG.
4. Which three of the following are implicit cursor attributes?
1. %found
2. %too_many_rows
3. %notfound
4. %rowcount
5. %rowtype
5. If left out, which of the following would cause an infinite loop to
occur in a simple loop?
1. LOOP
2. END LOOP
3. IF-THEN
4. EXIT
6. Which line in the following statement will produce an error?
1. cursor action_cursor is
2. select name, rate, action
3. into action_record
4. from action_table;
5. There are no errors in this statement.
7. The command used to open a CURSOR FOR loop is
1. open
2. fetch
3. parse
4. None, cursor for loops handle cursor opening implicitly.
8. What happens when rows are found using a FETCH statement
1. It causes the cursor to close
2. It causes the cursor to open
3. It loads the current row values into variables
4. It creates the variables to hold the current row values
9. Read the following code:
10. CREATE OR REPLACE PROCEDURE find_cpt
11. (v_movie_id {Argument Mode} NUMBER, v_cost_per_ticket
{argument mode} NUMBER)
12. IS
13. BEGIN
14. IF v_cost_per_ticket > 8.5 THEN
15. SELECT cost_per_ticket
16. INTO v_cost_per_ticket
17. FROM gross_receipt
18. WHERE movie_id = v_movie_id;
19. END IF;
20. END;
Which mode should be used for V_COST_PER_TICKET?
1. IN
2. OUT
3. RETURN
4. IN OUT
21. Read the following code:
22. CREATE OR REPLACE TRIGGER update_show_gross
23. {trigger information}
24. BEGIN
25. {additional code}
26. END;
The trigger code should only execute when the column,
COST_PER_TICKET, is greater than $3. Which trigger information will
you add?
1. WHEN (new.cost_per_ticket > 3.75)
2. WHEN (:new.cost_per_ticket > 3.75
3. WHERE (new.cost_per_ticket > 3.75)
4. WHERE (:new.cost_per_ticket > 3.75)
27. What is the maximum number of handlers processed before the
PL/SQL block is exited when an exception occurs?
1. Only one
2. All that apply
3. All referenced
4. None
28. For which trigger timing can you reference the NEW and OLD
qualifiers?
1. Statement and Row
2. Statement only
3. Row only
4. Oracle Forms trigger
29. Read the following code:
30. CREATE OR REPLACE FUNCTION get_budget(v_studio_id IN
NUMBER)
RETURN number IS
v_yearly_budget NUMBER;
BEGIN
SELECT yearly_budget
INTO v_yearly_budget
FROM studio
WHERE id = v_studio_id;
RETURN v_yearly_budget;
END;
Which set of statements will successfully invoke this function within
SQL*Plus?
1. VARIABLE g_yearly_budget NUMBER
EXECUTE g_yearly_budget := GET_BUDGET(11);
2. VARIABLE g_yearly_budget NUMBER
EXECUTE :g_yearly_budget := GET_BUDGET(11);
3. VARIABLE :g_yearly_budget NUMBER
EXECUTE :g_yearly_budget := GET_BUDGET(11);
4. VARIABLE g_yearly_budget NUMBER
:g_yearly_budget := GET_BUDGET(11);
31. CREATE OR REPLACE PROCEDURE update_theater
32. (v_name IN VARCHAR v_theater_id IN NUMBER) IS
33. BEGIN
34. UPDATE theater
35. SET name = v_name
36. WHERE id = v_theater_id;
37. END update_theater;
38. When invoking this procedure, you encounter the error:
ORA-000: Unique constraint(SCOTT.THEATER_NAME_UK)
violated.
How should you modify the function to handle this error?
1. An user defined exception must be declared and associated with
the error code and handled in the EXCEPTION section.
2. Handle the error in EXCEPTION section by referencing the error
code directly.
3. Handle the error in the EXCEPTION section by referencing the
UNIQUE_ERROR predefined exception.
4. Check for success by checking the value of SQL%FOUND
immediately after the UPDATE statement.
39. Read the following code:
40. CREATE OR REPLACE PROCEDURE calculate_budget IS
41. v_budget studio.yearly_budget%TYPE;
42. BEGIN
43. v_budget := get_budget(11);
44. IF v_budget < 30000
45. THEN
46. set_budget(11,30000000);
47. END IF;
48. END;
You are about to add an argument to CALCULATE_BUDGET. What
effect will this have?
1. The GET_BUDGET function will be marked invalid and must be
recompiled before the next execution.
2. The SET_BUDGET function will be marked invalid and must be
recompiled before the next execution.
3. Only the CALCULATE_BUDGET procedure needs to be
recompiled.
4. All three procedures are marked invalid and must be recompiled.
49. Which procedure can be used to create a customized error
message?
1. RAISE_ERROR
2. SQLERRM
3. RAISE_APPLICATION_ERROR
4. RAISE_SERVER_ERROR
50. The CHECK_THEATER trigger of the THEATER table has been
disabled. Which command can you issue to enable this trigger?
1. ALTER TRIGGER check_theater ENABLE;
2. ENABLE TRIGGER check_theater;
3. ALTER TABLE check_theater ENABLE check_theater;
4. ENABLE check_theater;
51. Examine this database trigger
52. CREATE OR REPLACE TRIGGER prevent_gross_modification
53. {additional trigger information}
54. BEGIN
55. IF TO_CHAR(sysdate, DY) = MON
56. THEN
57. RAISE_APPLICATION_ERROR(-20000,Gross receipts cannot
be deleted on Monday);
58. END IF;
59. END;
This trigger must fire before each DELETE of the GROSS_RECEIPT
table. It should fire only once for the entire DELETE statement. What
additional information must you add?
1. BEFORE DELETE ON gross_receipt
2. AFTER DELETE ON gross_receipt
3. BEFORE (gross_receipt DELETE)
4. FOR EACH ROW DELETED FROM gross_receipt
60. Examine this function:
61. CREATE OR REPLACE FUNCTION set_budget
62. (v_studio_id IN NUMBER, v_new_budget IN NUMBER) IS
63. BEGIN
64. UPDATE studio
65. SET yearly_budget = v_new_budget
WHERE id = v_studio_id;
IF SQL%FOUND THEN
RETURN TRUEl;
ELSE
RETURN FALSE;
END IF;
COMMIT;
END;
Which code must be added to successfully compile this function?
1. Add RETURN right before the IS keyword.
2. Add RETURN number right before the IS keyword.
3. Add RETURN boolean right after the IS keyword.
4. Add RETURN boolean right before the IS keyword.
66. Under which circumstance must you recompile the package body
after recompiling the package specification?
1. Altering the argument list of one of the package constructs
2. Any change made to one of the package constructs
3. Any SQL statement change made to one of the package constructs
4. Removing a local variable from the DECLARE section of one of the
package constructs
67. Procedure and Functions are explicitly executed. This is different
from a database trigger. When is a database trigger executed?
1. When the transaction is committed
2. During the data manipulation statement
3. When an Oracle supplied package references the trigger
4. During a data manipulation statement and when the transaction is
committed
68. Which Oracle supplied package can you use to output values and
messages from database triggers, stored procedures and functions
within SQL*Plus?
1. DBMS_DISPLAY
2. DBMS_OUTPUT
3. DBMS_LIST
4. DBMS_DESCRIBE
69. What occurs if a procedure or function terminates with failure
without being handled?
1. Any DML statements issued by the construct are still pending and
can be committed or rolled back.
2. Any DML statements issued by the construct are committed
3. Unless a GOTO statement is used to continue processing within the
BEGIN section, the construct terminates.
4. The construct rolls back any DML statements issued and returns
the unhandled exception to the calling environment.
70. Examine this code
71. BEGIN
72. theater_pck.v_total_seats_sold_overall :=
theater_pck.get_total_for_year;
73. END;
For this code to be successful, what must be true?
1. Both the V_TOTAL_SEATS_SOLD_OVERALL variable and the
GET_TOTAL_FOR_YEAR function must exist only in the body of
the THEATER_PCK package.
2. Only the GET_TOTAL_FOR_YEAR variable must exist in the
specification of the THEATER_PCK package.
3. Only the V_TOTAL_SEATS_SOLD_OVERALL variable must exist
in the specification of the THEATER_PCK package.
4. Both the V_TOTAL_SEATS_SOLD_OVERALL variable and the
GET_TOTAL_FOR_YEAR function must exist in the specification of
the THEATER_PCK package.
74. A stored function must return a value based on conditions that are
determined at runtime. Therefore, the SELECT statement cannot be
hard-coded and must be created dynamically when the function is
executed. Which Oracle supplied package will enable this feature?
1. DBMS_DDL
2. DBMS_DML
3. DBMS_SYN
4. DBMS_SQL
Database management interview questions Database
1. What is a Cartesian product? What causes it?
Expected answer:
A Cartesian product is the result of an unrestricted join of two or more tables. The
result set of a three table Cartesian product will have x * y * z number of rows
where x, y, z correspond to the number of rows in each table involved in the join.
It is causes by specifying a table in the FROM clause without joining it to another
table.
2. What is an advantage to using a stored procedure as opposed to passing
an SQL query from an application.
Expected answer:
A stored procedure is pre-loaded in memory for faster execution. It allows the
DBMS control of permissions for security purposes. It also eliminates the need to
recompile components when minor changes occur to the database.
3. What is the difference of a LEFT JOIN and an INNER JOIN statement?
Expected answer:
A LEFT JOIN will take ALL values from the first declared table and matching
values from the second declared table based on the column the join has been
declared on. An INNER JOIN will take only matching values from both tables
4. When a query is sent to the database and an index is not being used,
what type of execution is taking place?
Expected answer:
A table scan.
5. What are the pros and cons of using triggers?
Expected answer:
A trigger is one or more statements of SQL that are being executed in event of
data modification in a table to which the trigger belongs.
Triggers enhance the security, efficiency, and standardization of databases.
Triggers can be beneficial when used:
– to check or modify values before they are actually updated or inserted in the
database. This is useful if you need to transform data from the way the user sees
it to some internal database format.
– to run other non-database operations coded in user-defined functions
– to update data in other tables. This is useful for maintaining relationships
between data or in keeping audit trail information.
– to check against other data in the table or in other tables. This is useful to
ensure data integrity when referential integrity constraints aren’t appropriate, or
when table check constraints limit checking to the current table only.
1. Explain the difference between a hot backup and a cold backup and the
benefits associated with each.
A hot backup is basically taking a backup of the database while it is still up and
running and it must be in archive log mode. A cold backup is taking a backup of
the database while it is shut down and does not require being in archive log
mode. The benefit of taking a hot backup is that the database is still available for
use while the backup is occurring and you can recover the database to any point
in time. The benefit of taking a cold backup is that it is typically easier to
administer the backup and recovery process. In addition, since you are taking
cold backups the database does not require being in archive log mode and thus
there will be a slight performance gain as the database is not cutting archive logs
to disk.
2. You have just had to restore from backup and do not have any control files.
How would you go about bringing up this database?
I would create a text based backup control file, stipulating where on disk all the
data files where and then issue the recover command with the using backup
control file clause.
A data block is the smallest unit of logical storage for a database object. As
objects grow they take chunks of additional storage that are composed of
contiguous data blocks. These groupings of contiguous data blocks are called
extents. All the extents that an object takes when grouped together are
considered the segment of the database object.
5. Give two examples of how you might determine the structure of the table
DEPT.
6. Where would you look for errors from the database engine?
9. Give the two types of tables involved in producing a star schema and the
type of data they hold.
Fact tables and dimension tables. A fact table contains measurements while
dimension tables will contain data that will help describe the fact tables.
A Bitmap index.
12. A table is classified as a parent table and you want to drop and re-create it.
How would you do this without affecting the children tables?
Disable the foreign key constraint to the parent, drop the table, re-create the
table, enable the foreign key constraint.
ARCHIVELOG mode is a mode that you can put the database in for creating a
backup of all transactions that have occurred in the database so that you can
recover to any point in time. NOARCHIVELOG mode is basically the absence of
ARCHIVELOG mode and has the disadvantage of not being able to recover to
any point in time. NOARCHIVELOG mode does have the advantage of not
having to write transactions to an archive log and thus increases the performance
of the database slightly.
14. What command would you use to create a backup control file?
16. What column differentiates the V$ views to the GV$ views and how?
The INST_ID column which indicates the instance in a RAC environment the
information came from.
Use the explain plan set statement_id = 'tst1' into plan_table for a SQL statement
18. How would you go about increasing the buffer cache hit ratio?
Use the buffer cache advisory over a given workload and then query the
v$db_cache_advice table. If a change was necessary then I would use the alter
system set db_cache_size command.
You get this error when you get a snapshot too old within rollback. It can usually
be solved by increasing the undo retention or increasing the size of rollbacks.
You should also look at the logic involved in the application getting the error
message.
21. How would you determine the time zone under which a database was
operating?
WRAP
A function and procedure are the same in that they are intended to be a
collection of PL/SQL code that carries a single task. While a procedure does not
have to return any values to the calling application, a function will return a single
value. A package on the other hand is a collection of functions and procedures
that are grouped together based on their commonality to a business function or
application.
Table functions are designed to return a set of rows through PL/SQL logic but are
intended to be used as a normal table or view in a SQL statement. They are also
used to pipeline information in an ETL process.
27. Where in the Oracle directory tree structure are audit traces placed?
Materialized views are objects that are reduced sets of information that have
been summarized, grouped, or aggregated from base tables. They are typically
used in data warehouse or decision support systems.
29. When a user process fails, what background process cleans up after it?
PMON
Redo logs are logical and physical structures that are designed to hold all the
changes made to a database and are intended to aid in the recovery of a
database.
34. Give two methods you could use to determine what DDL changes have been
made.
38. When creating a user, what permissions must you grant to allow them to
connect to the database?
41. What view would you use to look at the size of a data file?
DBA_DATA_FILES
42. What view would you use to determine free space in a tablespace?
DBA_FREE_SPACE
43. How would you determine who has added a row to a table?
Partitioning is a method of taking large tables and indexes and splitting them into
smaller, more manageable pieces.
46. You have just compiled a PL/SQL package but got errors, how would you
view the errors?
SHOW ERRORS
49. What is the difference between the SQL*Loader and IMPORT utilities?
These two Oracle utilities are used for loading data into the database. The
difference is that the import utility relies on the data being produced by another
Oracle utility EXPORT while the SQL*Loader utility allows data to be loaded that
has been produced by other utilities from different data sources just so long as it
conforms to ASCII formatted or delimited files.
Technical - UNIX
Every DBA should know something about the operating system that the database
will be running on. The questions here are related to UNIX but you should equally
be able to answer questions related to common Windows environments.
1. How do you list the files in an UNIX directory while also showing hidden files?
ls -ltra
3. What UNIX command will control the default file permissions when files are
created?
Umask
Write allows you to create, edit and delete files and subdirectories in the
directory.
Execute gives you the previous read/write permissions plus allows you to change
into the directory and execute programs or shells from the directory.
A symbolic (soft) linked file and the targeted file can be located on the same or
different file system while for a hard link they must be located on the same file
system.
6. Give the command to display space usage on the UNIX file system.
df -lk
7. Explain iostat, vmstat and netstat.
Vmstat reports on virtual memory statistics for processes, disk, tape and CPU
activity.
Use :%s/<old>/<new>/g
7. I know the nvl function only allows the same data type(ie. number or char or
date Nvl(comm, 0)), if commission is null then the text “Not Applicable” want to
display, instead of blank space. How do I write the query?
Output :
NVL(TO_CHAR(COMM),'NA')
-----------------------
NA
300
500
NA
1400
NA
NA
18. Other way to replace query result null value with a text
SQL> Set NULL ‘N/A’
to reset SQL> Set NULL ‘’
21. What is the maximum number of triggers, can apply to a single table?
12 triggers.
PL/SQL Questions:
Level: Low
2. What is a mutating table error and how can you get around it?
Level: Intermediate
Expected answer: This happens with triggers. It occurs because the trigger is
trying to update a row it is currently using. The usual fix involves either use of
views or temporary tables so the database is selecting from one while updating
the other.
Level: Low
4. What packages (if any) has Oracle provided for use by developers?
Expected answer: Oracle provides the DBMS_ series of packages. There are
many which developers should be aware of such as DBMS_SQL, DBMS_PIPE,
DBMS_TRANSACTION, DBMS_LOCK, DBMS_ALERT, DBMS_OUTPUT,
DBMS_JOB, DBMS_UTILITY, DBMS_DDL, UTL_FILE. If they can mention a few
of these and describe how they used them, even better. If they include the SQL
routines provided by Oracle, great, but not really what was asked.
Level: Intermediate
Expected answer: PL/SQL tables are scalar arrays that can be referenced by a
binary integer. They can be used to hold values for use in later queries or
calculations. In Oracle 8 they will be able to be of the %ROWTYPE designation,
or RECORD.
Level: Low
Level: Intermediate
Expected answer: OPEN then FETCH then LOOP followed by the exit when. If
not specified in this order will result in the final return being done twice because
of the way the %NOTFOUND is handled by PL/SQL.
8. What are SQLCODE and SQLERRM and why are they important for PL/SQL
developers?
Level: Intermediate
Expected answer: SQLCODE returns the value of the error number for the last
error encountered. The SQLERRM returns the actual error message for the last
error encountered. They can be used in exception handling to report, or, store in
an error log table, the error that occurred in the code. These are especially useful
for the WHEN OTHERS exception.
Level: Low
Expected answer: Use the %ISOPEN cursor status variable.
Level:Intermediate to high
Level:Intermediate to high
BEFORE INSERT
DBA:
1. Give one method for transferring a table from one schema to another:
Level:Intermediate
2. What is the purpose of the IMPORT option IGNORE? What is it?s default
setting?
Level: Low
Expected Answer: The IMPORT IGNORE option tells import to ignore "already
exists" errors. If it is not specified the tables that already exist will be skipped. If it
is specified, the error is ignored and the tables data will be inserted. The default
value is N.
3. You have a rollback segment in a version 7.2 database that has expanded
beyond optimal, how can it be restored to optimal?
Level: Low
Level: Low
5. What are some of the Oracle provided packages that DBAs should be aware
of?
Level: Low
Expected answer: The Oracle system will use the default name of SYS_Cxxxx
where xxxx is a system generated number. This is bad since it makes tracking
which table the constraint belongs to or what the constraint does harder.
Level: Low
Expected answer: This results in the index that is automatically generated being
placed in then users default tablespace. Since this will usually be the same
tablespace as the table is being created in, this can cause serious performance
problems.
8. What is the proper method for disabling and re-enabling a primary key
constraint?
Level: Intermediate
Expected answer: You use the ALTER TABLE command for both. However, for
the enable clause you must specify the USING INDEX and TABLESPACE clause
for primary keys.
9. What happens if a primary key constraint is disabled and then enabled without
fully specifying the index clause?
Level: Intermediate
Expected answer: The index is created in the user?s default tablespace and all
sizing information is lost. Oracle doesn?t store this information as a part of the
constraint definition, but only as part of the index definition, when the constraint
was disabled the index was dropped and the information is gone.
10. (On UNIX) When should more than one DB writer process be used? How
many should be used?
Level: High
11. You are using hot backup without being in archivelog mode, can you recover
in the event of a failure? Why or why not?
Level: High
Expected answer: You can?t use hot backup without being in archivelog mode.
So no, you couldn?t recover.
12. What causes the "snapshot too old" error? How can this be prevented or
mitigated?
Level: Intermediate
Expected answer: This is caused by large or long running transactions that have
either wrapped onto their own rollback space or have had another transaction
write on part of their rollback space. This can be prevented or mitigated by
breaking the transaction into a set of smaller transactions or increasing the size
of the rollback segments and their extents.
Level: Low
14. A user is getting an ORA-00942 error yet you know you have granted them
permission on the table, what else should you check?
Level: Low
Expected answer: You need to check that the user has specified the full name of
the object (select empid from scott.emp; instead of select empid from emp;) or
has a synonym that points to the object (create synonym emp for scott.emp;)
15. A developer is trying to create a view and the database won?t let him. He has
the "DEVELOPER" role which has the "CREATE VIEW" system privilege and
SELECT grants on the tables he is using, what is the problem?
Level: Intermediate
Expected answer: You need to verify the developer has direct grants on all tables
used in the view. You can?t create a stored object with grants given through
views.
16. If you have an example table, what is the best way to get sizing data for the
production table implementation?
Level: Intermediate
Expected answer: The best way is to analyze the table and then use the data
provided in the DBA_TABLES view to get the average row length and other
pertinent data for the calculation. The quick and dirty way is to look at the number
of blocks the table is actually using and ratio the number of rows in the table to its
number of blocks against the number of expected rows.
17. How can you find out how many users are currently logged into the
database? How can you find their operating system id?
Level: high
Expected answer: There are several ways. One is to look at the v$session or
v$process views. Another way is to check the current_logins parameter in the
v$sysstat view. Another if you are on UNIX is to do a "ps -ef|grep oracle|wc -l?
command, but this only works against a single instance installation.
18. A user selects from a sequence and gets back two values, his select is:
Level: Intermediate
Expected answer: Somehow two values have been inserted into the dual table.
This table is a single row, single column table that should only have one value in
it.
19. How can you determine if an index needs to be dropped and rebuilt?
Level: Intermediate
Expected answer: Run the ANALYZE INDEX command on the index to validate
its structure and then calculate the ratio of
LF_BLK_LEN/LF_BLK_LEN+BR_BLK_LEN and if it isn?t near 1.0 (i.e. greater
than 0.7 or so) then the index should be rebuilt. Or if the ratio
SQL/ SQLPlus
Level: Low
Expected answer: By use of the & symbol. For passing in variables the numbers
1-8 can be used (&1, &2,...,&8) to pass the values after the command into the
SQLPLUS session. To be prompted for a specific variable, place the
ampersanded variable in the code itself:
Expected answer: The best method is to use the CHR() function (CHR(10) is a
return/linefeed) and the concatenation function "||". Another method, although it is
hard to document and isn?t always portable is to use the return/linefeed as a part
of a quoted string.
Level: Intermediate
4. How do you execute a host operating system command from within SQL?
Level: Low
Expected answer: By use of the exclamation point "!" (in UNIX and some other
OS) or the HOST (HO) command.
5. You want to use SQL to build SQL, what is this called and give an example
spool drop_all.sql
spool off
Essentially you are looking to see that they know to include a command (in this
case DROP USER...CASCADE;) and that you need to concatenate using the ?||?
the values selected from the database.
Level: low
Expected answer: This is best done with the COLUMN command.
7. You want to group the following set of select returns, what can you group on?
Level: Intermediate
Expected answer: The only column that can be grouped on is the "item_no"
column, the rest have aggregate functions associated with them.
8. What special Oracle feature allows you to specify how the cost based system
treats a SQL statement?
Expected answer: The COST based system allows the use of HINTs to control
the optimizer path selection. If they can give some example hints such as FIRST
ROWS, ALL ROWS, USING INDEX, STAR, even better.
Level: High
Expected answer: Oracle tables always have one guaranteed unique column, the
rowid column. If you use a min/max function against your rowid and then select
against the proposed primary key you can squeeze out the rowids of the
duplicate rows pretty quick. For example:
from emp x
In the situation where multiple columns make up the proposed key, they must all
be used in the where clause.
Level: Low
Expected answer: A Cartesian product is the result of an unrestricted join of two
or more tables. The result set of a three table Cartesian product will have x * y * z
number of rows where x, y, z correspond to the number of rows in each table
involved in the join.
11. You are joining a local and a remote table, the network manager complains
about the traffic involved, how can you reduce the network traffic?
Level: High
Expected answer: Push the processing of the remote data to the remote instance
by using a view to pre-select the information for the join. This will result in only
the data required for the join being sent across.
Level: Low
Expected answer: The tkprof tool is a tuning tool used to determine cpu and
execution times for SQL statements. You use it by first setting timed_statistics to
true in the initialization file and then turning on tracing for either the entire
database via the sql_trace parameter or for the session using the ALTER
SESSION command. Once the trace file is generated you run the tkprof tool
against the trace file and then look at the output from the tkprof tool. This can
also be used to generate explain plan output.
15. How do you set the number of lines on a page of output? The width?
Level: Low
Expected answer: The SET command in SQLPLUS is used to control the number
of lines generated per page and the width of those lines, for example SET
PAGESIZE 60 LINESIZE 80 will generate reports that are 60 lines long with a
line width of 80 characters. The PAGESIZE and LINESIZE options can be
shortened to PAGES and LINES.
Level: Low
Expected answer: The SET option TERMOUT controls output to the screen.
Setting TERMOUT OFF turns off screen output. This option can be shortened to
TERM.
17. How do you prevent Oracle from giving you informational messages during
and after a SQL statement execution?
Level: Low
Expected answer: The SET options FEEDBACK and VERIFY can be set to OFF.
Level: Low
Tuning Questions:
1. A tablespace has a table with 30 extents in it. Is this bad? Why or why not.
Level: Intermediate
Level: Low
Expected answer: You should always attempt to use the Oracle Flexible
Architecture standard or another partitioning scheme to ensure proper separation
of SYSTEM, ROLLBACK, REDO LOG, DATA, TEMPORARY and INDEX
segments.
3. You see multiple fragments in the SYSTEM tablespace, what should you
check first?
Level: Low
Expected answer: Ensure that users don?t have the SYSTEM tablespace as
their TEMPORARY or DEFAULT tablespace assignment by checking the
DBA_USERS view.
Level: Intermediate
Expected answer: Poor data dictionary or library cache hit ratios, getting error
ORA-04031. Another indication is steadily decreasing performance with all other
tuning parameters the same.
Level: High
Expected answer: Oracle almost always reads in 64k chunks. The two should
have a product equal to 64 or a multiple of 64.
Level: Intermediate
Level: High
Expected answer: The tkprof tool is a tuning tool used to determine cpu and
execution times for SQL statements. You use it by first setting timed_statistics to
true in the initialization file and then turning on tracing for either the entire
database via the sql_trace parameter or for the session using the ALTER
SESSION command. Once the trace file is generated you run the tkprof tool
against the trace file and then look at the output from the tkprof tool. This can
also be used to generate explain plan output.
8. When looking at v$sysstat you see that sorts (disk) is high. Is this bad or
good? If bad -How do you correct it?
Level: Intermediate
Expected answer: If you get excessive disk sorts this is bad. This indicates you
need to tune the sort area parameters in the initialization files. The major sort are
parameter is the SORT_AREA_SIZe parameter.
9. When should you increase copy latches? What parameters control copy
latches?
Level: high
Expected answer: When you get excessive contention for the copy latches as
shown by the "redo copy" latch hit ratio. You can increase copy latches via the
initialization parameter LOG_SIMULTANEOUS_COPIES to twice the number of
CPUs on your system.
10. Where can you get a list of all initialization parameters for your instance?
How about an indication if they are default settings or have been changed?
Level: Low
Expected answer: You can look in the init.ora file for an indication of manually set
parameters. For all parameters, their value and whether or not the current value
is the default value, look in the v$parameter view.
11. Describe hit ratio as it pertains to the database buffers. What is the difference
between instantaneous and cumulative hit ratio and which should be used for
tuning?
Level: Intermediate
Expected answer: The hit ratio is a measure of how many times the database
was able to read a value from the buffers verses how many times it had to re-
read a data value from the disks. A value greater than 80-90% is good, less could
indicate problems. If you simply take the ratio of existing parameters this will be a
cumulative value since the database started. If you do a comparison between
pairs of readings based on some arbitrary time span, this is the instantaneous
ratio for that time span. Generally speaking an instantaneous reading gives more
valuable data since it will tell you what your instance is doing for the time it was
generated over.
12. Discuss row chaining, how does it happen? How can you reduce it? How do
you correct it?
Level: high
13. When looking at the estat events report you see that you are getting busy
buffer waits. Is this bad? How can you find what is causing it?
Level: high
Expected answer: Buffer busy waits could indicate contention in redo, rollback or
data blocks. You need to check the v$waitstat view to see what areas are
causing the problem. The value of the "count" column tells where the problem is,
the "class" column tells you with what. UNDO is rollback segments, DATA is data
base buffers.
14. If you see contention for library caches how can you fix it?
Level: Intermediate
15. If you see statistics that deal with "undo" what are they really talking about?
Level: Intermediate
16. If a tablespace has a default pctincrease of zero what will this cause (in
relationship to the smon process)?
Level: High
Expected answer: The SMON process won?t automatically coalesce its free
space fragments.
Level: High
Expected answer: In Oracle 7.0 to 7.2 The use of the 'alter session set events
'immediate trace name coalesce level ts#';? command is the easiest way to
defragment contiguous free space fragmentation. The ts# parameter
corresponds to the ts# value found in the ts$ SYS table. In version 7.3 the ?alter
tablespace coalesce;? is best. If the free space isn?t contiguous then export,
drop and import of the tablespace contents may be the only way to reclaim non-
contiguous free space.
Level: Intermediate
Is this something to worry about? What if redo log space wait time is high? How
can you fix this?
Level: Intermediate
Expected answer: Since the wait time is zero, no. If the wait time was high it
might indicate a need for more or larger redo logs.
20. What can cause a high value for recursive calls? How can this be fixed?
Level: High
Expected answer: A high value for recursive calls is cause by improper cursor
usage, excessive dynamic space management actions, and or excessive
statement re-parses. You need to determine the cause and correct it By either
relinking applications to hold cursors, use proper space management techniques
(proper storage and sizing) or ensure repeat queries are placed in packages for
proper reuse.
21. If you see a pin hit ratio of less than 0.8 in the estat library cache report is this
a problem? If so, how do you fix it?
Level: Intermediate
Expected answer: This indicate that the shared pool may be too small. Increase
the shared pool size.
22. If you see the value for reloads is high in the estat library cache report is this
a matter for concern?
Level: Intermediate
Expected answer: Yes, you should strive for zero reloads if possible. If you see
excessive reloads then increase the size of the shared pool.
23. You look at the dba_rollback_segs view and see that there is a large number
of shrinks and they are of relatively small size, is this a problem? How can it be
fixed if it is a problem?
Level: High
24. You look at the dba_rollback_segs view and see that you have a large
number of wraps is this a problem?
Level: High
Expected answer: A large number of wraps indicates that your extent size for
your rollback segments are probably too small. Increase the size of your extents
to reduce the number of wraps. You can look at the average transaction size in
the same view to get the information on transaction size.
25. In a system with an average of 40 concurrent users you get the following
from a query on rollback extents:
--------------------- --------------------------
R01 11
R02 8
R03 12
R04 9
SYSTEM 4
You have room for each to grow by 20 more extents each. Is there a problem?
Should you take any action?
Level: Intermediate
Expected answer: No there is not a problem. You have 40 extents showing and
an average of 40 concurrent users. Since there is plenty of room to grow no
action is needed.
26. You see multiple extents in the temporary tablespace. Is this a problem?
Level: Intermediate
Expected answer: As long as they are all the same size this isn?t a problem. In
fact, it can even improve performance since Oracle won?t have to create a new
extent when a user needs one.
Installation/Configuration
1. Define OFA.
Level: Low
Level: Low
3. What should be done prior to installing Oracle (for the OS and the disks)?
Level: Low
Expected Answer: adjust kernel parameters or OS tuning parameters in
accordance with installation guide. Be sure enough contiguous disk space is
available.
4. You have installed Oracle and you are now setting up the actual instance. You
have been waiting an hour for the initialization script to finish, what should you
check first to determine if there is a problem?
Expected Answer: Check to make sure that the archiver isn?t stuck. If archive
logging is turned on during install a large number of logs will be created. This can
fill up your archive log destination causing Oracle to stop to wait for more space.
5. When configuring SQLNET on the server what files must be set up?
Level: Intermediate
6. When configuring SQLNET on the client what files need to be set up?
Level: Intermediate
7. What must be installed with ODBC on the client in order for it to work with
Oracle?
Level: Intermediate
8. You have just started a new instance with a large SGA on a busy existing
server. Performance is terrible, what should you check for?
Level: Intermediate
Expected answer: The first thing to check with a large SGA is that it isn?t being
swapped out.
9. What OS user should be used for the first part of an Oracle installation (on
UNIX)?
Level: low
Expected answer: You must use root first.
10. When should the default values for Oracle initialization parameters be used
as is?
Level: Low
11. How many control files should you have? Where should they be located?
Level: Low
12. How many redo logs should you have and how should they be configured for
maximum recoverability?
Level: Intermediate
Expected answer: You should have at least three groups of two redo logs with
the two logs each on a separate disk spindle (mirrored by Oracle). The redo logs
should not be on raw devices on UNIX if it can be avoided.
13. You have a simple application with no "hot" tables (i.e. uniform IO and access
requirements). How many disks should you have assuming standard layout for
SYSTEM, USER, TEMP and ROLLBACK tablespaces?
Data Modeler:
Level: Low
Expected answer: Something like: In third normal form all attributes in an entity
are related to the primary key and only to the primary key
Expected answer: False. While 3NF is good for logical design most databases, if
they have more than just a few tables, will not perform well using full 3NF.
Usually some entities will be denormalized in the logical to physical transfer
process.
3. What is an ERD?
Level: Low
Level: Intermediate
5. What does a hard one-to-one relationship mean (one where the relationship
on both ends is "must")?
Expected answer: This means the two entities should probably be made into one
entity.
Level: Intermediate
Level: Intermediate
Expected answer: A derived key comes from a sequence. Usually it is used when
a concatenated key becomes too cumbersome to use as a foreign key.
Level: Intermediate
UNIX:
Level: Low
Expected answer: There are several commands to do this: du, df, or bdf
2. How can you determine the number of SQLNET users logged in to the UNIX
system?
Level: Intermediate
Expected answer: SQLNET users will show up with a process unique name that
begins with oracle, if you do a ps -ef|grep oracle|wc -l you can get a count of the
number of users.
Level: Low
Level: Low
Expected answer: rm
Level: Low
Level: Low
Expected answer: grep is a string search command that parses the specified
string from the specified file or files
8. The system has a program that always includes the word nocomp in its name,
how can you determine the number of processes that are using this program?
Level: intermediate
9. What is an inode?
Level: Intermediate
Expected answer: an inode is a file status indicator. It is stored in both disk and
memory and tracts file status. There is one inode for each file on the system.
10. The system administrator tells you that the system hasn?t been rebooted in 6
months, should he be proud of this?
Level: High
Expected answer: Maybe. Some UNIX systems don?t clean up well after
themselves. Inode problems and dead user processes can accumulate causing
possible performance and corruption problems. Most UNIX systems should have
a scheduled periodic reboot so file systems can be checked and cleaned and
dead or zombie processes cleared out.
Level: Intermediate
Level: Intermediate
13. How can you find all the processes on your system?
Level: Low
Level: Low
Level: Low
Expected answer: The finger command uses data in the passwd file to give
information on system users.
Level: Low
Level: Intermediate
Expected answer: The ">>" redirection symbol appends the output from the
command specified into the file specified. The file must already have been
created.
18. If you aren?t sure what command does a particular UNIX function what is the
best way to determine the command?
Expected answer: The UNIX man -k command will search the man pages for the
value specified. Review the results from the command to find the command of
interest.
Oracle Troubleshooting:
1. How can you determine if an Oracle instance is up from the operating system
level?
Level: Low
Expected answer: There are several base Oracle processes that will be running
on multi-user operating systems, these will be smon, pmon, dbwr and lgwr. Any
answer that has them using their operating system process showing feature to
check for these is acceptable. For example, on UNIX a ps -ef|grep dbwr will show
what instances are up.
Level: Low
ORA-06114: (Cnct err, can't get err txt. See Servr Msgs & Codes Manual)
3. Users from the PC clients are getting the following error stack:
Level: Low
Expected answer: The Oracle instance is shutdown that they are trying to
access, restart the instance.
4. How can you determine if the SQLNET process is running for SQLNET V1?
How about V2?
Level: Low
Expected answer: For SQLNET V1 check for the existence of the orasrv process.
You can use the command "tcpctl status" to get a full status of the V1 TCPIP
server, other protocols have similar command formats. For SQLNET V2 check for
the presence of the LISTENER process(s) or you can issue the command "lsnrctl
status".
5. What file will give you Oracle instance status information? Where is it located?
Level: Low
Expected answer: The alert.ora log. It is located in the directory specified by the
background_dump_dest parameter in the v$parameter table.
6. Users aren?t being allowed on the system. The following message is received:
Level: Intermediate
Expected answer: The archive destination is probably full, backup the archive
logs and remove them and the archiver will re-start.
7. Where would you look to find out if a redo log was corrupted assuming you are
using Oracle mirrored redo logs?
Level: Intermediate
Level: Intermediate
Expected answer: When the database was created the db_files parameter in the
initialization file was set to 40. You can shutdown and reset this to a higher value,
up to the value of MAX_DATAFILES as specified at database creation. If the
MAX_DATAFILES is set to low, you will have to rebuild the control file to increase
it before proceeding.
9. You look at your fragmentation report and see that smon hasn?t coalesced any
of you tablespaces, even though you know several have large chunks of
contiguous free extents. What is the problem?
Level: High
Expected answer: Check the dba_tablespaces view for the value of pct_increase
for the tablespaces. If pct_increase is zero, smon will not coalesce their free
space.
Level: Intermediate
Expected answer: The number of DML Locks is set by the initialization parameter
DML_LOCKS. If this value is set to low (which it is by default) you will get this
error. Increase the value of DML_LOCKS. If you are sure that this is just a
temporary problem, you can have them wait and then try again later and the error
should clear.
11. You get a call from you backup DBA while you are on vacation. He has
corrupted all of the control files while playing with the ALTER DATABASE
BACKUP CONTROLFILE command. What do you do?
Level: High
Expected answer: As long as all datafiles are safe and he was successful with
the BACKUP controlfile command you can do the following:
CONNECT INTERNAL
STARTUP MOUNT
(Take any read-only tablespaces offline before next step ALTER DATABASE
DATAFILE .... OFFLINE;)
If they have a recent output file from the ALTER DATABASE BACKUP CONTROL
FILE TO TRACE; command, they can use that to recover as well.
If no backup of the control file is available then the following will be required:
CONNECT INTERNAL
STARTUP NOMOUNT
However, they will need to know all of the datafiles, logfiles, and settings for
MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, MAXDATAFILES for
the database to use the command.
1. IN
2. OUT
3. RETURN
4. IN OUT
21. Read the following code:
22. CREATE OR REPLACE TRIGGER update_show_gross
23. {trigger information}
24. BEGIN
25. {additional code}
26. END;
v_yearly_budget NUMBER;
BEGIN
SELECT yearly_budget
INTO v_yearly_budget
FROM studio
WHERE id = v_studio_id;
RETURN v_yearly_budget;
END;
Which set of statements will successfully invoke this function within
SQL*Plus?
IF SQL%FOUND THEN
RETURN TRUEl;
ELSE
RETURN FALSE;
END IF;
COMMIT;
END;
This article( taken from Oracle website ) will discuss the circumstances under
which a query can return the
Oracle error ORA-01555 "snapshot too old (rollback segment too small)". The
article will then proceed to discuss actions that can be taken to avoid the
error and finally will provide some simple PL/SQL scripts that illustrate the
issues discussed.
Terminology
~~~~~~~~~~~
It is assumed that the reader is familiar with standard Oracle terminology such
as 'rollback segment' and 'SCN'. If not, the reader should first read the Oracle
Server Concepts manual and related Oracle documentation.
In addition to this, two key concepts are briefly covered below which help in
the understanding of ORA-01555:
1. READ CONSISTENCY:
====================
This is documented in the Oracle Server Concepts manual and so will not be
discussed further. However, for the purposes of this article this should be read
and understood if not understood already.
Oracle Server has the ability to have multi-version read consistency which is
invaluable to you because it guarantees that you are seeing a consistent view of
the data (no 'dirty reads').
Upon commit, the database simply marks the relevant rollback segment header
entry as committed. Now, when one of the changed blocks is revisited Oracle
examines the header of the data block which indicates that it has been changed
at some point. The database needs to confirm whether the change has been
committed or whether it is currently uncommitted. To do this, Oracle determines
the rollback segment used for the previous transaction (from the block's header)
and then determines whether the rollback header indicates whether it has been
committed or not.
If it is found that the block is committed then the header of the data block is
updated so that subsequent accesses to the block do not incur this processing.
Description: Next the user hits commit. Note that all that
this does is it
updates the rollback segment header's
corresponding transaction
slot as committed. It does *nothing* to the data
block.
Description: Some time later another user (or the same user)
revisits data block 500. We can see that there
is an uncommitted change in the
data block according to the data block's header.
ORA-01555 Explanation
~~~~~~~~~~~~~~~~~~~~~
There are two fundamental causes of the error ORA-01555 that are a result of
Oracle trying to attain a 'read consistent' image. These are :
Both of these situations are discussed below with the series of steps that cause
the ORA-01555. In the steps, reference is made to 'QENV'. 'QENV' is short for
'Query Environment', which can be thought of as the environment that existed
when a query is first started and to which Oracle is trying to attain a read
consistent image. Associated with this environment is the SCN
(System Change Number) at that time and hence, QENV 50 is the query
environment
with SCN 50.
This breaks down into two cases: another session overwriting the rollback that
the current session requires or the case where the current session overwrites
the rollback information that it requires. The latter is discussed in this
article because this is usually the harder one to understand.
Steps:
1. Session 1 starts query at time T1 and QENV 50
Now, Oracle can see from the block's header that it has been changed and
it is later than the required QENV (which was 50). Therefore we need to get an
image of the block as of this QENV.
If an old enough version of the block can be found in the buffer cache
then we will use this, otherwise we need to rollback the current block to
generate another version of the block as at the required QENV.
It is under this condition that Oracle may not be able to get the
required rollback information because Session 1's changes have generated
rollback information that has overwritten it and returns the ORA-1555 error.
6. Session 1's query then visits a block that has been changed since the
initial QENV was established. Oracle therefore needs to derive an image of the
block as at that point in time.
Session 1 starts a query at QENV 50. After this another process updates the
blocks that Session 1 will require. When Session 1 encounters these blocks it
determines that the blocks have changed and have not yet been cleaned out (via
delayed block cleanout). Session 1 must determine whether the rows in the
block
existed at QENV 50, were subsequently changed,
If the transaction slot has been overwritten and the transaction table cannot
be rolled back to a sufficiently old enough version then Oracle cannot derive
the block image and will return ORA-1555.
(Note: Normally Oracle can use an algorithm for determining a block's SCN
during block cleanout even when the rollback segment slot has been overwritten.
But in this case Oracle cannot guarantee that the version of the block has not
changed since the start of the query).
Solutions
~~~~~~~~~
This section lists some of the solutions that can be used to avoid the ORA-01555
problems discussed in this article. It addresses the cases where rollback
segment information is overwritten by the same session and when the rollback
segment transaction table entry is overwritten.
3. Run the processing against a range of data rather than the whole table.
(Same reason as 1).
4. Add additional rollback segments. This will allow the updates etc. to be
spread across more rollback segments thereby reducing the chances of
overwriting
required rollback information.
5. If fetching across commits, the code can be changed so that this is not
done.
6. Ensure that the outer select does not revisit the same block at different
times during the processing. This can be achieved by :
1. Use any of the methods outlined above except for '6'. This will allow
transactions to spread their work across multiple rollback segments therefore
reducing the likelihood or rollback segment transaction table slots being
consumed.
2. If it is suspected that the block cleanout variant is the cause, then force
block cleanout to occur prior to the transaction that returns the ORA-1555. This
can be achieved by issuing the following in SQL*Plus, SQL*DBA or Server
Manager
:
If indexes are being accessed then the problem may be an index block and
clean out can be forced by ensuring that all the index is traversed. Eg, if the
index is on a numeric column with a minimum value of 25 then the following
query
will force cleanout of the index :
Examples
~~~~~~~~
Listed below are some PL/SQL examples that can be used to illustrate the
ORA-1555 cases given above. Before these PL/SQL examples will return this
error
the database must be configured as follows :
REASON: You do not want the session executing the script to be able to find
old versions of the block in the buffer cache which can be used to satisfy a
block visit without requiring the rollback information.
REASON: You need to ensure that the work being done is generating rollback
information that will overwrite the rollback information required.
ROLLBACK OVERWRITTEN
rem * 1555_a.sql -
rem * Example of getting ora-1555 "Snapshot too old" by
rem * session overwriting the rollback information required
rem * by the same session.
declare
-- Must use a predicate so that we revisit a changed block at a different
-- time.
-- If another tx is updating the table then we may not need the predicate
cursor c1 is select rowid, bigemp.* from bigemp where a < 20;
begin
for c1rec in c1 loop
declare
begin
Special Cases
~~~~~~~~~~~~~
There are other special cases that may result in an ORA-01555. These are given
below but are rare and so not discussed in this article :
Summary
~~~~~~~
This article has discussed the reasons behind the error ORA-01555 "Snapshot
too
old", has provided a list of possible methods to avoid the error when it is
encountered, and has provided simple PL/SQL scripts that illustrate the cases
discussed.