Oracle Database Administration: How Does One Create A New Database?
Oracle Database Administration: How Does One Create A New Database?
SELECT EMPTY_BLOCKS
FROM DBA_TABLES
WHERE OWNER=UPPER(owner) AND SEGMENT_NAME = UPPER(table);
Thus, the tables’ HWM = (query result 1) - (query result 2) - 1
NOTE: You can also use the DBMS_SPACE package and calculate the HWM =
TOTAL_BLOCKS - UNUSED_BLOCKS - 1.
How are extents allocated to a segment?
Oracle8 and above rounds off extents to a multiple of 5 blocks when more than 5 blocks are requested. If
one requests 16K or 2 blocks (assuming a 8K block size), Oracle doesn’t round it up to 5 blocks, but it
allocates 2 blocks or 16K as requested. If one asks for 8 blocks, Oracle will round it up to 10 blocks.
Space allocation also depends upon the size of contiguous free space available. If one asks for 8 blocks
and Oracle finds a contiguous free space that is exactly 8 blocks, it would give it you. If it were 9 blocks,
Oracle would also give it to you. Clearly Oracle doesn’t always round extents to a multiple of 5 blocks.
The exception to this rule is locally managed tablespaces. If a tablespace is created
with local extent management and the extent size is 64K, then Oracle allocates 64K or
8 blocks assuming 8K-block size. Oracle doesn’t round it up to the multiple of 5 when a
tablespace is locally managed.
Can one rename a database user (schema)?
No, this is listed as Enhancement Request 158508.
Workaround: Do a user-level export of user A
create new user B
Import system/manager fromuser=A
touser=B Drop user A
Can one rename a tablespace?
No, this is listed as Enhancement Request 148742.
Workaround: Export all of the objects from the tablespace
Drop the tablespace including
contents Recreate the tablespace
Import the objects
Can one resize tablespaces and data files?
One can manually increase or decrease the size of a datafile from Oracle 7.2 using the
command. ALTER DATABASE DATAFILE ‘filename2’ RESIZE 100M;
Because you can change the sizes of datafiles, you can add more space to your database
without adding more datafiles. This is beneficial if you are concerned about reaching the
maximum number of datafiles allowed in your database.
Manually reducing the sizes of datafiles allows you to reclaim unused space in the
database. This is useful for correcting errors in estimations of space requirements.
Also, datafiles can be allowed to automatically extend if more space is required. Look at the
following command:
CREATE TABLESPACE pcs_data_ts
DATAFILE ‘c:\ora_apps\pcs\pcsdata1.dbf’ SIZE 3M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
DEFAULT STORAGE (INITIAL 10240
NEXT 10240
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0)
ONLINE
PERMANENT;
How does one create a standby database?
While your production database is running, take an (image copy) backup and
restore it on duplicate hardware. Note that an export will not work!!!
On your standby database, issue the following commands:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS
‘filename’; ALTER DATABASE MOUNT STANDBY DATABASE;
RECOVER STANDBY DATABASE;
On systems prior to Oracle 8i, write a job to copy archived redo log files from the primary
database to the standby system, and apply the redo log files to the standby database (pipe it).
Remember the database is recovering and will prompt you for the next log file to apply.
Oracle 8i onwards provide an “Automated Standby Database” feature, which will send archived,
log files to the remote site via NET8, and apply then to the standby database.
When one needs to activate the standby database, stop the recovery process and
activate it: ALTER DATABASE ACTIVATE STANDBY DATABASE;
How does one give developers access to trace files (required as input to tkprof)?
The “alter session set sql_trace=true” command generates trace files in USER_DUMP_DEST
that can be used by developers as input to tkprof. On Unix the default file mask for these files
are “rwx r-- ---“. There is an undocumented INIT.ORA parameter that will allow everyone to read
(rwx r—r--) these trace files:
_trace_files_public = true
Include this in your INIT.ORA file and bounce your database for it to take effect.
How does one see the uptime for a database?
Look at the following SQL query:
SELECT to_char (startup_time,’DD-MON-YYYY HH24: MI: SS’) “DB Startup
Time” FROM sys.v_$instance;
Marco Bergman provided the following alternative solution:
SELECT to_char (logon_time,’Dy dd Mon HH24: MI: SS’) “DB Startup
Time” FROM sys.v_$session
WHERE Sid=1 /* this is pmon */
/
Users still running on Oracle 7 can try one of the following
queries: Column STARTED format a18 head ‘STARTUP TIME’
Select C.INSTANCE,
to_date (JUL.VALUE, ‘J’)
|| to_char (floor (SEC.VALUE/3600), ‘09’)
|| ‘:’
-- || Substr (to_char (mod (SEC.VALUE/60, 60), ‘09’), 2, 2)
|| Substr (to_char (floor (mod (SEC.VALUE/60, 60)), ‘09’), 2, 2)
|| ‘.’
|| Substr (to_char (mod (SEC.VALUE, 60), ‘09’), 2, 2)
STARTED from SYS.V_$INSTANCE JUL,
SYS.V_$INSTANCE SEC,
SYS.V_$THREAD C
Where JUL.KEY like ‘%JULIAN%’
and SEC.KEY like ‘%SECOND%’;
Select to_date (JUL.VALUE, ‘J’)
|| to_char (to_date (SEC.VALUE, ‘SSSSS’), ‘ HH24:MI:SS’)
STARTED from SYS.V_$INSTANCE JUL,
SYS.V_$INSTANCE SEC
where JUL.KEY like ‘%JULIAN%’
and SEC.KEY like ‘%SECOND%’;
select to_char (to_date (JUL.VALUE, ‘J’) + (SEC.VALUE/86400), -Return a
DATE ‘DD-MON-YY HH24:MI:SS’) STARTED
from V$INSTANCE JUL,
V$INSTANCE SEC
where JUL.KEY like ‘%JULIAN%’
and SEC.KEY like ‘%SECOND%’;
Where are my TEMPFILES, I don’t see them in V$DATAFILE or DBA_DATA_FILE?
Tempfiles, unlike normal datafiles, are not listed in v$datafile or dba_data_files.
Instead query v$tempfile or dba_temp_files:
SELECT * FROM v$tempfile;
SELECT * FROM dba_temp_files;
How do I find used/free space in a TEMPORARY tablespace?
Unlike normal tablespaces, true temporary tablespace information is not
listed in DBA_FREE_SPACE. Instead use the V$TEMP_SPACE_HEADER
view: SELECT tablespace_name, SUM (bytes used), SUM (bytes free)
FROM V$temp_space_header
GROUP BY tablespace_name;
How can one see who is using a temporary segment?
For every user using temporary space, there is an entry in SYS.V$_LOCK with type ‘TS’.
All temporary segments are named ‘ffff.bbbb’ where ‘ffff’ is the file it is in and ‘bbbb’ is first block
of the segment.
If your temporary tablespace is set to TEMPORARY, all sorts are done in one large temporary
segment. For usage stats, see SYS.V_$SORT_SEGMENT
From Oracle 8.0, one can just query SYS.v$sort_usage. Look at these examples:
select s.username, u.”USER”, u.tablespace, u.contents, u.extents, u.blocks
from sys.v_$session s, sys.v_$sort_usage u
where s.addr = u.session_addr
/
select s.osuser, s.process, s.username, s.serial#,
Sum (u.blocks)*vp.value/1024 sort_size
from sys.v_$session s, sys.v_$sort_usage u, sys.v_$parameter VP
where s.saddr = u.session_addr
and vp.name = ‘db_block_size’
and s.osuser like ‘&1’
group by s.osuser, s.process, s.username, s.serial#, vp.value
/
How does one get the view definition of fixed views/tables?
Query v$fixed_view_definition. Example:
SELECT * FROM v$fixed_view_definition WHERE view_name=’V$SESSION’;
Oracle Backup and Recovery
Why and when should I backup my database?
Backup and recovery is one of the most important aspects of a DBAs job. If you lose your
company’s data, you could very well lose your job. Hardware and software can always be
replaced, but your data may be irreplaceable!
Normally one would schedule a hierarchy of daily, weekly and monthly backups, however consult with
your users before deciding on a backup schedule. Backup frequency normally depends on the following
factors:
· Rate of data change/ transaction rate
· Database availability/ Can you shutdown for cold backups?
· Criticality of the data/ Value of the data to the company
· Read-only tablespace needs backing up just once right after you make it read-only
· If you are running in archivelog mode you can backup parts of a database over an extended
cycle of days
· If archive logging is enabled one needs to backup archived log files timeously to prevent
database freezes
· Etc.
Carefully plan backup retention periods. Ensure enough backup media (tapes) are available and
that old backups are expired in-time to make media available for new backups. Off-site vaulting
is also highly recommended.
Frequently test your ability to recover and document all possible scenarios. Remember, it’s the
little things that will get you. Most failed recoveries are a result of organizational errors and
miscommunications.
What strategies are available for backing-up an Oracle database?
The following methods are valid for backing-up an Oracle database:
Export/Import - Exports are “logical” database backups in that they extract logical definitions
and data from the database to a file.
Cold or Off-line Backups - Shut the database down and backup up ALL data, log, and control files.
Hot or On- line Backups - If the databases are available and in ARCHIVELOG mode, set the
tablespaces into backup mode and backup their files. Also remember to backup the control files
and archived redo log files.
RMAN Backups - While the database is off-line or on-line, use the “rman” utility to backup the
database.
It is advisable to use more than one of these methods to backup your database. For example, if
you choose to do on-line database backups, also cover yourself by doing database exports.
Also test ALL backup and recovery scenarios carefully. It is better to be save than sorry.
Regardless of your strategy, also remember to backup all required software libraries, parameter
files, password files, etc. If your database is in ARCGIVELOG mode, you also need to backup
archived log files.
What is the difference between online and offline backups?
A hot backup is a backup performed while the
database is online and available for read/write.
Except for Oracle exports, one can only do on-line
backups when running in ARCHIVELOG mode.
A cold backup is a backup performed while the
database is off-line and unavailable to its users.
What is the difference between restoring and recovering?
Restoring involves copying backup files from secondary storage (backup media) to disk. This
can be done to replace damaged files or to copy/move a database to a new location.
Recovery is the process of applying redo logs to the database to roll it forward. One can roll-
forward until a specific point-in-time (before the disaster occurred), or roll-forward until the last
transaction recorded in the log files.
Sql> connect SYS as SYSDBA
Sql> RECOVER DATABASE UNTIL TIME ‘2001-03-06:16:00:00’ USING BACKUP
CONTROLFILE;
How does one backup a database using the export utility?
Oracle exports are “logical” database backups (not physical) as they extract data and logical definitions
from the database into a file. Other backup strategies normally back-up the physical data files.
One of the advantages of exports is that one can selectively re-import tables, however one
cannot roll-forward from an restored export file. To completely restore a database from an
export file one practically needs to recreate the entire database.
Always do full system level exports (FULL=YES). Full exports include more information
about the database in the export file than user level exports.
How does one do off-line database backups?
Shut down the database from sqlplus or server manager. Backup all files to secondary storage
(eg. tapes). Ensure that you backup all data files, all control files and all log files. When
completed, restart your database.
Do the following queries to get a list of all files that needs to be
backed up: select name from sys.v_$datafile;
select member from sys.v_$logfile;
select name from sys.v_$controlfile;
Sometimes Oracle takes forever to shutdown with the “immediate” option. As workaround to this
problem, shutdown using these commands:
alter system checkpoint;
shutdown abort
startup restrict
shutdown immediate
Note that if you database is in ARCHIVELOG mode, one can still use archived log files to roll forward
from an off-line backup. If you cannot take your database down for a cold (off-line) backup at a
convenient time, switch your database into ARCHIVELOG mode and perform hot (on-line) backups .
Interview Questions
· Tell us about yourself/ your background.
· What are the three major characteristics that you bring to the job market?
· What motivates you to do a good job?
· What two or three things are most important to you at work?
· What qualities do you think are essential to be successful in this kind of work?
· What courses did you attend? What job certifications do you hold?
· What subjects/courses did you excel in? Why?
· What subjects/courses gave you trouble? Why?
· How does your previous work experience prepare you for this position?
Dumps out trace information if an ORA-1401 “inserted value too large for column” error occurs.
The 1401 can be replaced by any other Oracle Server error code that you want to trace.
· 60 trace name errorstack level 10
Show where in the code Oracle gets a deadlock (ORA-60), and may help to diagnose the problem .
The following lists of events are examples only. They might be version specific, so
please call Oracle before using them:
· 10210 trace name context forever, level 10
10211 trace name context forever, level 10
10231 trace name context forever, level 10
These events prevent database block corruptions
· 10049 trace name context forever,
level 2 Memory protect cursor
· 10210 trace name context forever,
level 2 Data block check
· 10211 trace name context forever,
level 2 Index block check
· 10235 trace name context forever,
level 1 Memory heap check
· 10262 trace name context forever, level
300 Allow 300 bytes memory leak for connections
Note: You can use the Unix oerr command to get the description of an event. On Unix, you can
type “oerr ora 10053” from the command prompt to get event details.
How can one dump internal database structures?
The following (mostly undocumented) commands can be used to obtain information about
internal database structures.
• Dump control file contents
alter session set events ‘immediate trace name CONTROLF level 10’
/
• Dump file headers
alter session set events ‘immediate trace name FILE_HDRS level 10’
/
• Dump redo log headers
alter session set events ‘immediate trace name REDOHDR level 10’
/
• Dump the system state
NOTE: Take 3 successive SYSTEMSTATE dumps, with 10-minute intervals
alter session set events ‘immediate trace name SYSTEMSTATE level 10’
/
• Dump the process state
alter session set events ‘immediate trace name PROCESSSTATE level 10’
/
• Dump Library Cache details
alter session set events ‘immediate trace name library cache level 10’
/
• Dump optimizer statistics whenever a SQL statement is parsed (hint: change statement or flush
pool)
alter session set events ‘10053 trace name context forever, level 1’
/
• Dump a database block (File/ Block must be converted to DBA address)
Convert file and block number to a DBA (database block
address). Eg: variable x varchar2;
exec :x :=
dbms_utility.make_data_block_address(1,12); print x
alter session set events ‘immediate trace name blockdump level 50360894’
/
U e
n r
c r
a o
u r
g
h b
t l
o
e c
r k
r =
o 0
r x
3
4 e
4 8
7 0
. 0
E o
r n
r l
o i
r n
e
s =
t 1
a
c Kernel Subsystems:
k
:
OPI Oracle Program Interface
KK Compilation Layer - Parse SQL, compile PL/SQL
KX Execution Layer - Bind and execute SQL and PL/SQL
K2 Distributed Execution Layer - 2PC handling
NPI Network Program Interface
KZ Security Layer - Validate privs
KQ Query Layer
RPI Recursive Program Interface
KA Access Layer
KD Data Layer
KT Transaction Layer
KC Cache Layer
KS Services Layer
KJ Lock Manager Layer
KG Generic Layer
KV Kernel Variables (eg. x$KVIS and X$KVII)
S or ODS Operating System Dependencies
Oracle Security
How does one change an Oracle user’s password?
Issue the following SQL command:
ALTER USER <username> IDENTIFIED BY <new_password>;
From Oracle8 you can just type “password” from SQL*Plus, or if you need to change another
user’s
password, type “password user_name”. Look at this example:
SQL> password
Changing password for
SCOTT Old password:
New password:
Retype new
password:
How does one create and drop database users?
Look at these examples:
CREATE USER scott
IDENTIFIED BY tiger -- Assign password
DEFAULT TABLESACE tools -- Assign space for table and
index segments
TEMPORARY TABLESPACE temp; -- Assign sort space
DROP USER scott CASCADE; -- Remove user
After creating a new user, assign the required privileges:
GRANT CONNECT, RESOURCE TO scott;
GRANT DBA TO scott; -- Make user a DB Administrator
Remember to give the user some space quota on its tablespaces:
ALTER USER scott QUOTA UNLIMITED ON tools;
How does one manage Oracle database users?
Oracle user accounts can be locked, unlocked, forced to choose new passwords, etc. For example,
all accounts except SYS and SYSTEM will be locked after creating an Oracle9iDB database using
the DB Configuration Assistant (dbca). DBA’s must unlock these accounts to make them available to
users.
Look at these examples:
ALTER USER scott ACCOUNT LOCK -- lock a
user account
ALTER USER scott ACCOUNT UNLOCK; -- unlocks a locked users account
ALTER USER scott PASSWORD EXPIRE; -- Force user to choose a new password
OUTLN/OUTLN
Stored outlines for optimizer plan stability
Created by: ?/rdbms/admin/sql.bsq
Can password be changed: Yes (Do so right after the database was
created) Can user be dropped: NO
SCOTT/TIGER, ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER.
Training/ demonstration users containing the popular EMP and
DEPT tables Created by: ?/rdbms/admin/utlsampl.sql
Can password be changed: Yes
Can user be dropped: YES - Drop users cascade from all production environments
HR/HR (Human Resources), OE/OE (Order Entry), SH/SH (Sales History).
Training/ demonstration users containing the popular EMPLOYEES and
DEPARTMENTS tables Created by: ?/demo/schema/mksample.sql
Can password be changed: Yes
Can user be dropped: YES - Drop users cascade from all production environments
CTXSYS/CTXSYS
Oracle interMedia (ConText Cartridge) administrator
user Created by: ?/ctx/admin/dr0csys.sql
TRACESVR/TRACE
Oracle Trace server
Created by: ?/rdbms/admin/otrcsvr.sql
DBSNMP/DBSNMP
Oracle Intelligent agent
Created by: ?/rdbms/admin/catsnmp.sql, called from catalog.sql
Can password be changed: Yes - put the new password in snmp_rw.ora file
Can user be dropped: YES - Only if you do not use the Intelligent Agents
ORDPLUGINS/ORDPLUGINS
Object Relational Data (ORD) User used by Time
Series, etc. Created by: ?/ord/admin/ordinst.sql
ORDSYS/ORDSYS
Object Relational Data (ORD) User used by Time
Series, etc Created by: ?/ord/admin/ordinst.sql
DSSYS/DSSYS
Oracle Dynamic Services and Syndication
Server Created by: ?/ds/sql/dssys_init.sql
MDSYS/MDSYS
Oracle Spatial administrator user
Created by: ?/ord/admin/ordinst.sql
AURORA$ORB$UNAUTHENTICATED/INVALID
Used for users who do not authenticate in Aurora/ORB
Created by: ?/javavm/install/init_orb.sql called from ?/javavm/install/initjvm.sql
PERFSTAT/PERFSTAT
Oracle Statistics Package (STATSPACK) that supersedes
UTLBSTAT/UTLESTAT Created by: ?/rdbms/admin/statscre.sql
Remember to change the passwords for the SYS and SYSTEM users immediately after
installation! Except for the user SYS, there should be no problem altering these users to use a
different default and temporary tablespace.
What is Fine Grained Auditing?
Fine Grained Auditing (DBMS_FGA) allows auditing records to be generated when certain rows are selected from a
table. A list of defined policies can be obtained from DBA_AUDIT_POLICIES. Audit records are stored in
DBA_FGA_AUDIT_TRAIL. Look at this example:
• Add policy on table with autiting condition...
execute dbms_fga.add_policy(‘HR’, ‘EMP’, ‘policy1’, ‘deptno > 10’);
• Must ANALYZE, this feature works with CBO (Cost Based Optimizer)
analyze table EMP compute statistics;
select * from EMP where c1 = 11; -- Will trigger auditing
select * from EMP where c1 = 09; -- No auditing
• Now we can see the statments that triggered the auditing condition...
select sqltext from sys.fga_log$;
delete from sys.fga_log$;
What is Fine Grained Access Control?
See question “What is a Virtual Private Database”.
What is a Virtual Private Database?
Oracle 8i introduced the notion of a Virtual Private Database (VPD). A VPD offers Fine-Grained
Access Control (FGAC) for secure separation of data. This ensures that users only have access
to data that pertains to them. Using this option, one could even store multiple companies’ data
within the same schema, without them knowing about it.
VPD configuration is done via the DBMS_RLS (Row Level Security) package. Select from
SYS.V$VPD_POLICY to see existing VPD configuration.
What is Oracle Label Security?
Oracle Label Security (formerly called Trusted Oracle MLS RDBMS) uses the VPD (Virtual Private
Database) feature of Oracle8i to implement row level security. Access to rows are restricted according to
a user’s security sensitivity tag or label. Oracle Label Security is configured, controlled and managed
from the Policy Manager, an Enterprise Manager-based GUI utility.
RMAN
WHAT IS RMAN ?
Recovery Manager is a tool that: manages the process of creating backups
and also manages the process of restoring and recovering from them .
Backups in RMAN
Oracle backups in RMAN are of the following type RMAN complete
backup OR RMAN incremental backup
These backups are of RMAN proprietary nature
IMAGE COPY
The advantage of uing Image copy is its not in RMAN proprietary format..
Backup Format
RMAN backup is not in oracle format but in RMAN format. Oracle backup comprises of backup sets
and it consists of backup pieces. Backup sets are logical entity In oracle 9i it gets stored in a default
location There are two type of backup sets Datafile backup sets, Archivelog backup sets
One more important point of data file backup sets is it do not include empty blocks. A backup set
would contain many backup pieces.
A single backup piece consists of physical files which are in RMAN proprietary format.
Example of taking backup using
RMAN Taking RMAN Backup
In non archive mode in dos prompt type
RMAN
You get the RMAN prompt
RMAN > Connect Target
Connect to target database : Magic <Dbid=129283912> using
target database controlfile instead of recovery catalog
Lets take a simple backup of database in non archive
mode shutdown immediate ; - - Shutdowns the database
startup mount
backup database ;- its start backing the
database alter database open;
We can fire the same command in archive log
mode And whole of datafiles will be backed
Backup database plus archivelog;
Restoring database
Restoring database has been made very simple
in 9i . It is just
Restore database..
RMAN has become intelligent to identify which datafiles has to be
restored and the location of backuped up file.
Oracle Enhancement for RMAN in 10 G
Flash Recovery Area
Right now the price of hard disk is falling. Many dba are taking oracle database backup inside
the hard disk itself since it results in lesser mean time between recoverability.
The new parameter introduced is
DB_RECOVERY_FILE_DEST = /oracle/flash_recovery_area
By configuring the RMAN RETENTION POLICY the flash recovery area will automatically delete
obsolete backups and archive logs that are no longer required based on that configuration
Oracle has introduced new features in incremental backup
Change Tracking File
Oracle 10g has the facility to deliver faster incrementals with the implementation of changed
tracking file feature.This will results in faster backups lesser space consumption and also
reduces the time needed for daily backups
Incrementally Updated Backups
Oracle database 10g Incrementally Updates Backup features merges the image copy of a
datafile with RMAN incremental backup. The resulting image copy is now updated with block
changes captured by incremental backups.The merging of the image copy and incremental
backup is initiated with RMAN recover command. This results in faster recovery.
Binary compression technique reduces backup space usage by 50-75%.
With the new DURATION option for the RMAN BACKUP command, DBAs can weigh backup
performance against system service level requirements. By specifying a duration, RMAN will
automatically calculate the appropriate backup rate; in addition, DBAs can optionally specify
whether backups should minimize time or system load.
New Features in Oem to identify RMAN related backup like backup pieces, backup sets and image copy
OWNER=scott
GRANTS=y
COMPRESS=y
NOTE: If you do not like command line utilities, you can import and export data with the
“Schema Manager” GUI that ships with Oracle Enterprise Manager (OEM).
Can one export a subset of a table?
From Oracle8i one can use the QUERY= export parameter to selectively unload a subset of the
data from a table. Look at this example:
exp scott/tiger tables=emp query=\”where deptno=10\”
Can one monitor how fast a table is imported?
If you need to monitor how fast rows are imported from a running import job, try one of the
following methods:
Method 1:
select substr(sql_text,instr(sql_text,’INTO “’),30)
table_name, rows_processed,
round((sysdate-to_date(first_load_time,’yyyy-mm-dd hh24:mi:ss’))*24*60,1) minutes,
trunc(rows_processed/((sysdate-to_date(first_load_time,’yyyy-mm-dd hh24:mi:ss’))*24*60))
rows_per_min
from sys.v_$sqlarea
where sql_text like ‘INSERT %INTO
“%’ and command_type = 2
and open_versions > 0;
For this to work one needs to be on Oracle 7.3 or higher (7.2 might also be OK). If the import
has more than one table, this statement will only show information about the current table being
imported. Contributed by Osvaldo Ancarola, Bs. As. Argentina.
Method 2:
Use the FEEDBACK=n import parameter. This command will tell IMP to display a dot for every
N rows imported.
Can one import tables to a different tablespace?
Oracle offers no parameter to specify a different tablespace to import data into. Objects
will be re-created in the tablespace they were originally exported from. One can alter
this behaviour by following one of these procedures:
Pre-create the table(s) in the correct tablespace:
· Import the dump file using the INDEXFILE= option
· Edit the indexfile. Remove remarks and specify the correct tablespaces.
· Run this indexfile against your database, this will create the required tables in the
appropriate tablespaces
· Import the table(s) with the IGNORE=Y option.
Change the default tablespace for the user:
· Revoke the “UNLIMITED TABLESPACE” privilege from the user
· Revoke the user’s quota from the tablespace from where the object was exported. This
forces the
import utility to create tables in the user’s default tablespace.
· Make the tablespace to which you want to import the default tablespace for the user
· Import the table
Does one need to drop/ truncate objects before importing?
Before one import rows into already populated tables, one needs to truncate or drop these
tables to get rid of the old data. If not, the new data will be appended to the existing tables. One
must always DROP existing Sequences before re-importing. If the sequences are not dropped,
they will generate numbers inconsistent with the rest of the database.
Note: It is also advisable to drop indexes before importing to speed up the import process.
Indexes can easily be recreated after the data was successfully imported.
Can one import/export between different versions of Oracle?
Different versions of the import utility is upwards compatible. This means that one can take an export
file created from an old export version, and import it using a later version of the import utility. This is
quite an effective way of upgrading a database from one release of Oracle to the next.
Oracle also ships some previous catexpX.sql scripts that can be executed as user SYS
enabling older imp/exp versions to work (for backwards compatibility). For example, one can run
$ORACLE_HOME/rdbms/admin/catexp7.sql on an Oracle 8 database to allow the Oracle 7.3
exp/imp utilities to run against an Oracle 8 database.
Can one export to multiple files?/ Can one beat the Unix 2 Gig limit?
From Oracle8i, the export utility supports multiple output files. This feature enables large
exports to be divided into files whose sizes will not exceed any operating system limits
(FILESIZE= parameter) . When importing from multi-file export you must provide the same
filenames in the same sequence in the FILE= parameter. Look at this example:
exp SCOTT/TIGER FILE=D:\F1.dmp,E:\F2.dmp FILESIZE=10m LOG=scott.log
Use the following technique if you use an Oracle version prior to 8i:
Create a compressed export on the fly. Depending on the type of data, you probably can export
up to 10 gigabytes to a single file. This example uses gzip. It offers the best compression I know
of, but you can also substitute it with zip, compress or whatever.
# create a named pipe
mknod exp.pipe p
# read the pipe - output to zip file in the
background gzip < exp.pipe > scott.exp.gz &
# feed the pipe
exp userid=scott/tiger file=exp.pipe ...
Oracle SQL*Loader
What is SQL*Loader and what is it used for?
SQL*Loader is a bulk loader utility used for moving data from external files into the Oracle
database. Its syntax is similar to that of the DB2 Load utility, but comes with more options.
SQL*Loader supports various load formats, selective loading, and multi-table loads.
How does one use the SQL*Loader utility?
One can load data into an Oracle database by using the sqlldr (sqlload on some platforms) utility. Invoke
the utility without arguments to get a list of available parameters. Look at the following example:
sqlldr scott/tiger control=loader.ctl
This sample control file (loader.ctl) will load an external data file containing
delimited data: load data
infile ‘c:\data\mydata.csv’
into table emp
fields terminated by “,” optionally enclosed by
‘”’ ( empno, empname, sal, deptno )
The mydata.csv file may look like
this: 10001,”Scott Tiger”, 1000, 40
10002,”Frank Naude”, 500, 20
Another Sample control file with in-line data formatted as fix length records. The trick is to specify “*”
as the name of the data file, and use BEGINDATA to start the data section in the control file.
load data
infile *
replace
into table departments
( dept position (02:05) char(4),
deptname position (08:27) char(20)
)
begindata
COSC COMPUTER SCIENCE
ENGL ENGLISH LITERATURE
MATH MATHEMATICS POLY
POLITICAL SCIENCE
Is there a SQL*Unloader to download data to a flat file?
Oracle does not supply any data unload utilities. However, you can use SQL*Plus to select and
format your data and then spool it to a file:
set echo off newpage 0 space 0 pagesize 0 feed off head off
trimspool on spool oradata.txt
select col1 || ‘,’ || col2 || ‘,’ ||
col3 from tab1
where col2 = ‘XYZ’;
spool off
Alternatively use the UTL_FILE PL/SQL package:
rem Remember to update initSID.ora, utl_file_dir=’c:\oradata’
parameter declare
fp utl_file.file_type;
begin
fp := utl_file.fopen(‘c:\oradata’,’tab1.txt’,’w’);
utl_file.putf(fp, ‘%s, %s\n’, ‘TextField’, 55);
utl_file.fclose(fp);
end;
/
You might also want to investigate third party tools like SQLWays from Ispirer Systems, TOAD
from Quest, or ManageIT Fast Unloader from CA to help you unload data from Oracle.
Can one load variable and fix length data records?
Yes, look at the following control file examples. In the first we will load delimited data (variable
length): LOAD DATA
INFILE *
INTO TABLE load_delimited_data
FIELDS TERMINATED BY “,” OPTIONALLY ENCLOSED BY ‘”’
TRAILING NULLCOLS
( data1,
data2
)
BEGINDATA
11111,AAAAAAAAAA
22222,”A,B,C,D,”
If you need to load positional data (fixed length), look at the following control file
example: LOAD DATA
INFILE *
INTO TABLE load_positional_data (
data1 POSITION(1:5),
data2 POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
Can one skip header records load while loading?
Use the “SKIP n” keyword, where n = number of logical rows to skip. Look at this
example: LOAD DATA
INFILE *
INTO TABLE
load_positional_data SKIP 5
( data1 POSITION(1:5),
data2 POSITION(6:15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
Can one modify data as it loads into the database?
Data can be modified as it loads into the Oracle Database. Note that this only applies for the
conventional load path and not for direct path loads.
LOAD DATA
INFILE *
INTO TABLE modified_data
( rec_no “my_db_sequence.nextval”,
region CONSTANT ‘31’,
time_loaded “to_char(SYSDATE, ‘HH24:MI’)”,
data1 POSITION(1:5) “:data1/100”,
data2 POSITION(6:15) “upper(:data2)”,
data3 POSITION(16:22)”to_date(:data3, ‘YYMMDD’)”
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112
LOAD DATA
INFILE ‘mail_orders.txt’
BADFILE ‘bad_orders.txt’
APPEND
INTO TABLE mailing_list
FIELDS TERMINATED BY “,”
( addr,
city,
state,
zipcode,
mailing_addr “decode(:mailing_addr, null, :addr, :mailing_addr)”,
mailing_city “decode(:mailing_city, null, :city, :mailing_city)”,
mailing_state
)
Can one load data into multiple tables at once?
Look at the following control
file: LOAD DATA
INFILE *
REPLACE
INTO TABLE emp
WHEN empno != ‘ ‘
( empno POSITION(1:4) INTEGER
EXTERNAL, ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL
)
INTO TABLE proj
WHEN projno != ‘ ‘
( projno POSITION(25:27) INTEGER EXTERNAL,
empno POSITION(1:4) INTEGER EXTERNAL
)
Can one selectively load only the records that one need?
Look at this example, (01) is the first character, (30:37) are characters
30 to 37: LOAD DATA
INFILE ‘mydata.dat’ BADFILE ‘mydata.bad’ DISCARDFILE
‘mydata.dis’ APPEND
INTO TABLE my_selective_table
WHEN (01) <> ‘H’ and (01) <> ‘T’ and (30:37) = ‘19991217’
(
region CONSTANT ‘31’,
service_key POSITION(01:11) INTEGER EXTERNAL,
call_b_no POSITION(12:29) CHAR
)
Can one skip certain columns while loading data?
One cannot use POSTION(x:y) with delimited data. Luckily, from Oracle 8i one can specify FILLER
columns. FILLER columns are used to skip columns/fields in the load file, ignoring fields that one
does not want. Look at this example: -- One cannot use POSTION(x:y) as it is stream data, there are
no positional fields—the next field begins after some delimiter, not in column X. -->
LOAD DATA
TRUNCATE INTO TABLE T1
FIELDS TERMINATED BY ‘,’
( field1,
field2 FILLER,
field3
)
How does one load multi-line records?
One can create one logical record from multiple physical records using one of the following two clauses:
· CONCATENATE: - use when SQL*Loader should combine the same number of physical
records together to form one logical record.
· CONTINUEIF - use if a condition indicates that multiple records should be treated as one. Eg.
by having a ‘#’ character in column 1.
How can get SQL*Loader to COMMIT only at the end of the load file?
One cannot, but by setting the ROWS= parameter to a large value, committing can be reduced.
Make sure you have big rollback segments ready when you use a high value for ROWS=.
Can one improve the performance of SQL*Loader?
A very simple but easily overlooked hint is not to have any indexes and/or constraints (primary
key) on your load tables during the load process. This will significantly slow down load times
even with ROWS= set to a high value.
Add the following option in the command line: DIRECT=TRUE. This will effectively bypass most
of the RDBMS processing. However, there are cases when you can’t use direct load. Refer to
chapter 8 on Oracle server Utilities manual.
Turn off database logging by specifying the UNRECOVERABLE option. This option can only be
used with direct data loads.
Run multiple load jobs concurrently.
How does one use SQL*Loader to load images, sound clips and documents?
SQL*Loader can load data from a “primary data file”, SDF (Secondary Data file - for loading
nested tables and VARRAYs) or LOGFILE. The LOBFILE method provides and easy way to
load documents, images and audio clips into BLOB and CLOB columns. Look at this example:
Given the following table:
CREATE TABLE image_table (
image_id NUMBER(5),
file_name VARCHAR2(30),
image_data BLOB);
Control File:
LOAD DATA
INFILE *
INTO TABLE
image_table REPLACE
FIELDS TERMINATED BY ‘,’
(
image_id INTEGER(5),
file_name CHAR(30),
image_data LOBFILE (file_name) TERMINATED BY EOF
)
BEGINDATA
001,image1.gif
002,image2.jpg
What is the difference between the conventional and direct path loader?
The conventional path loader essentially loads the data by using standard INSERT statements. The direct
path loader (DIRECT=TRUE) bypasses much of the logic involved with that, and loads directly into the
Oracle data files. More information about the restrictions of direct path loading can be obtained from the
Utilities Users Guide.
What is a DBA?
A DBA is a Database Administrator, and this is the most common job that you find a database
specialist doing. There are Development DBAs and Production DBAs.
A Development DBA usually works closely with a team of developers and gets more involved
in design decisions, giving advice on performance and writing good SQL.
That can be satisfying at a human level because you are part of a team and you share the
satisfaction of the team’s accomplishments.
A Production DBA (on the other hand) is responsible for maintaining Databases within an
organisation, so it is a very difficult and demanding job. He or she, often gets involved when all
the design decisions have been made, and has simply to keep things up and running.
Therefore, of course, it is also a rewarding job, both financially and in terms of job satisfaction.
But it’s a more ‘lonely’ job than being a Development DBA.
I have many years experience of working as a Production DBA, maintaining live Databases in
Investment Banks, such as J.P.Morgan and Salomon Smith Barney.
Those were some of the most demanding and high-pressure years in my professionalcareer.
I knew that if the phone rang, nobody was calling to ask about my health, or to say that
everything was OK.
If they called, it meant they had a problem, and they wanted it fixed immediately, and they did
not care what else you were doing.
Of course, sometimes the phone would ring at home when I was in bed at 3.00 in the morning,
so I would have to get up, switch on my PC, login remotely and fix the problem.
This usually meant bringing the Database Servers down and then up again.
After I while I got to be able to do this without becoming fully awake so I could to go back to bed
and back to sleep again, and get paid for it !!!
To enjoy being a DBA, and to do it properly, you need to like technical responsibility.
You need to enjoy the feeling that ‘this is my territory’ and to take sole responsibility for a
technically demanding role.
Oddly enough, it’s easy to find out whether you would be a good
DBA. These are the Steps you follow :-
Buy a book,(see elsewhere on this Site),
If you buy a book with an evaluation copy of a DBMS then the next Step is made a whole lot easier.
Hint: Look for a book called SQL Reference, by Groff and Weinberg, which have copies of all three -
Oracle, IBM’s DB2 and Microsoft’s SQL Server on the CD-ROM that comes with the book.
Get Oracle, DB2 or SQL Server on a PC using NT.
Start doing DBA tasks, going through your chosen ‘Step-by-Step’ book,
(such as SAMS Teach Yourself DB2 in 21 days, or Oracle 8i on NT in 24
hours). If you find it boring then give it up.
If you don’t like the prospect of always being at the end of a phone ‘Help Line’, then give it up.
Else, get started as a DBA by doing daily tasks on your Database at home, and prepare for an
interview. Surprisingly enough, it’s easy to find work - either a permanent job or a contract.
There is a great demand, which is likely to remain so for the next few years.
VENDORS: -
Microsoft SQL Server is easier to get started with, because everything is Windows-driven.
It doesn’t pay so well, but you might be able to get an interesting role combining DBA with Development
work, because being a DBA doesn’t take so much time.
Being a DBA in a development environment is much less stressful, and is a natural progression
as you begin to experience ‘burn-out’ in a production environment.
Oracle has a steeper learning curve, because it is geared towards the Command Line, (except
for TOAD), but it pays better.
IBM’s DB2 is somewhere in between.
Certification will help you get a job, but (like a degree - see below) because of the
demand, Certification is not always mandatory if you have experience as a DBA.
Can you get a job as an Oracle DBA with Certification but no experience ?
If you get certified as an Oracle DBA but don’t have any experience, it can be difficult to
find a job. I have heard about people who have been able to do it, but I’ve also been told
that it is very difficult. It obviously helps if you have a background as an Oracle developer,
and if you have no other Oracle experience, then it’s certainly going to be difficult.
It is very difficult to get a job as a Production DBA without hands-on experience, and it’s
hard to find openings for Junior DBAs.
It is easier to find a job as a Development DBA, then if you really wanted to, you could move
into a slot as a Production DBA.
To do this, you should offer experience in PL/SQL, advising developers on writing efficient SQL,
creating Data Sets and sample data, which is the kind of thing, which developers often ask for.
So if you have any experiences that you would like to share and help other people trying to plan
what to do, please let us know.
Personally, I think Microsoft Certification process is just another example of how Microsoft tries
to increase their revenue stream, and I’ve heard that many of the questions asked in the
Certification exams are not the kind of questions, which come up as part of the job.
I’ve also met many people who have obtained Microsoft Certification but then never use it.
Neither Certification nor Degrees are necessary if you know your stuff, but they will definitely
help to prove commitment and competence if you are trying to change careers.
Oracle has recently introduced a qualification of Internet Database Operator, which offers the
cheapest path to Certification, at a relatively modest (for Oracle Education) cost of one 4-day
Course and a Certification Examination.
This qualification will look good on your CV but it will not help you get a job because it only
teaches you how to install Oracle Products and get them to work,(although that’s a valuable skill
but it is not enough on its own).
It also teaches you some basics about SQL in Oracle.
One option is to sign up as an Oracle Partner, which gives you 5 days free training and then
use, the training to get Certification as an Internet Database Operator.
There is a very useful set of Oracle 8i Documentation available online (Courtesy Ars Digita and
Philip Greenspun) which will help you learn a lot about how Oracle works.
The announcement of Oracle 9i means that the water has just become muddier because it
means that a great deal of the current lengthy training may be unnecessary.
9i is moving much closer to point-and- click and away from command-line administration,
although there will be plenty of Oracle 8i installations for a long time to come.
Check out the Oracle 9i Partner Accelerator Kit for an overview, and see how Oracle expects
you to administer a Database using Oracle Enterprise Manager.
Then finally, look at Oracle’s new Wizard for creating a Database for Data Warehousing.
All of these new features mean that Oracle is moving towards to a point-and-click approach for
many common DBA tasks.
This will make the work of an Oracle DBA work much more like it is for IBM’s DB2 and Microsft
SQL Server.
This means that many ‘Command Line’ skills being taught will become obsolete in the future.
Oracle - another Career Option -
As well as DBA work,a very attractive Career Option involves PL/SQL, which is Oracle’s
Procedural Language.
PL/SQL includes and extends SQL, and is primarily intended for developers who
work close to the Database, rather than close to the User.
Working with PL/SQL often includes some DBA work, for example, in data extraction and
migration from a Database.
It is therefore much more of a development job and offers design challenges and is more creative than
100% DBA work.
Here’s a typical Help Wanted Ad to give you a feeling for the skills
required - ”PL/SQL Developer With DBA Skills”
Multinational Multimedia organisation requires an experienced PL/SQL Developer who also has
had DBA exposure, with good Unix Shell Scripting skills. Working on a systems migration
project, you will have proven technical ability and excellent interpersonal skills.
An ability to be able to write PL/SQL packages & procedures, create database load scripts and
set-up development databases is essential.
The position will demand some DBA support (approximately 20% of the role) however the
support will be of a wholly ad-hoc nature.
Working within an Oracle 7, 8 & v8i environment, associated experience is essential,as is solid
commercial experience with PL/SQL.
As for Qualifications, it’s always good to have at least a Bachelor’s degree, but because of the
demand, that’s not always necessary. Subsequently, you need to keep up-to-date with new
versions of your chosen RDBMS(s).
Beware, that if you talk a good interview, but don’t deliver, you will get found out very quickly,
and then you’ll be on the road again.
What are the major Components in an RDBMS ?
ANSWER : This describes the three major Components which make up the run-time processes.
1) The Database Server.
This takes the SQL, decides how to execute it, with a sub-Component called the Query
Optimiser, and produces a Query Execution Plan.
It is possible to have many Database Server processes running simultaneously, with each one tailored to
a particular kind of “SQL Query”. I used to work as a DBA for Salomon, Smith Barney supporting
databases for Florida,England and Germany running on the same UNIX box. I always had three Servers
running, one for each location, so that I could provide high-priority,high-CPU percentage,high-memory
allocation for the very demanding real-time applications,and lower- priority for background batch jobs. It
also allowed me to handle each database independently, and bring down the server for England without
affecting the Servers and the Databases for Florida and Germany.
2) An Archive Process.
This writes completed Transactions onto a Journal or History File and deletes them from the Log
File. This is done to avoid the Log File getting filled up because then everything fails and the Servers
have to be brought down to recover. This is an embarrassing process. The worst part is that as the
DBA, you often do not know that the Archive process is not running until the Log File fills up, no
more transactions can start, everybody’s program hangs and the phone rings off the hook. I also
worked as a DBA at J.P.Morgan where the user were just as demanding as Salomon, Smith Barney,
so I created some UNIX daemons which ran all the time and would notify me automatically if the
Archive process was not running. This was in the situation where the normal messages from starting
up the Database Server would not make it clear whether the Archive process had started correctly.
3) A Recovery Process.
The Recovery Process handles the situations where is there is a Database crash and it
recovers to the last known point at which the Database was running OK and had ‘integrity’. In
other words, all the data representing a consistent set of related records had been written to the
Database at the end of a committed Transaction, with no open Transactions.
OLAP stands for ‘On-Line Analytical Processing, and the term was first used by Dr.Ted Codd, of
IBM Research, who was the father of the relational database and SQL.
The beer and nappies example is a case of OLAP in practice.
What it means is that you are online analyzing masses of data.
Whereas the common use of databases is to store details of ‘transactions’ such as Bank
account details. OLAP requirements are not very well met by SQL so extensions have been
developed by the vendors of OLAP products, like Brio or Cognos.
How do I set a database in archivelog or noarchivelog?
1) shutdown the
database sql> shutdown
2) startup the database in mount
state sql> startup mount
3) set the database in archivelog or noarchivelog
sql> alter database archivelog | noarchivelog
4) open the database
sql> alter database open
5) Take a full backup
2) Transactional
During “transactional” shutdown no new connections are allowed and the server will disconnect users
as soon as they complete their current transaction. After that Oracle will immediately shut down the
Instance.
3) Immediate
During “immediate” shutdown no new connections are allowed. The server will not wait for clients to
disconnect nor for transactions to complete and will do a rollback if needed. So after disconnecting
the clients and rolling back any active transactions Oracle will shut down the Instance.
4) Abort
During abort” shutdown no new connections are to disconnect, uncommitted transactions will not be
allowed. The server will not wait for connected users rolled back redo and database buffers are
“not” written to disk and the database is not closed or dismounted. Instance recovery will be
needed on the next startup.
What are the responsibilities of the system monitor (SMON)?
The process monitor is responsible for: Rolling back the current user’s transaction after a failed process.
Releasing all currently held table and row locks after a failed process. Freeing up other resources
reserved by the user after a failed process. Restart dead dispatchers after a failed process.
Why is a checkpoint initiated?
A checkpoint is initiated to ensure that modified data in memory are written to the datafiles on
regular basis, so no data is lost during a crash or failure.
A checkpoint is also initiated to reduce the time needed to do instance recovery. (Only from that
(check)point redo log entries need to be processed).
A checkpoint is initiated to ensure that all committed data has been written to the data files
when shutting down.