Professional Documents
Culture Documents
[edit]How
One can create and modify Oracle databases using the Oracle DBCA (Database Configuration Assistant)
utility. The dbca utility is located in the $ORACLE_HOME/bin directory. The Oracle Universal Installer
(oui) normally starts it after installing the database server software to create the starter database.
One can also create databases manually using scripts. This option, however, is falling out of fashion as it
is quite involved and error prone. Look at this example for creating an Oracle 9i or higher database:
CONNECT SYS AS SYSDBA
ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u01/oradata/';
ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_1='/u02/oradata/';
ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_2='/u03/oradata/';
CREATE DATABASE;
Also see Creating a New Database.
[edit]What
Oracle recommends that your database block size match, or be multiples of your operating system block
size. One can use smaller block sizes, but the performance cost is significant. Your choice should depend
on the type of application you are running. If you have many small transactions as with OLTP, use a
smaller block size. With fewer but larger transactions, as with a DSS application, use a larger block size.
If you are using a volume manager, consider your "operating system block size" to be 8K. This is because
volume manager products use 8K blocks (and this is not configurable).
[edit]What
One should implement a monitoring system to constantly monitor the following aspects of a database.
This can be achieved by writing custom scripts, implementing Oracle's Enterprise Manager, or buying
a third-party monitoring product. If an alarm is triggered, the system should automatically notify the DBA
(e-mail, text, etc.) to take appropriate action.
Infrastructure availability:
Are the Oracle Names and LDAP Servers up and responding to requests
Etc.
Tablespaces running low on free space / Objects that would not be able to extend
Etc.
[edit]How
Start by making a full database backup of your database (in case you need to restore if this
procedure is not working).
Locate the latest dump file in your USER_DUMP_DEST directory (show parameter
USER_DUMP_DEST) - rename it to something like dbrename.sql.
Edit dbrename.sql, remove all headers and comments, and change the database's name. Also
change "CREATE CONTROLFILE REUSE ..." to "CREATE CONTROLFILE SET ...".
Shutdown the database (use SHUTDOWN NORMAL or IMMEDIATE, don't ABORT!) and run
dbrename.sql.
drop user A
[edit]Can
[edit]How
The biggest portion of a database's size comes from the datafiles. To find out how many megabytes are
allocated to ALL datafiles:
select sum(bytes)/1024/1024 "Meg" from dba_data_files;
Select from the DBA_SEGMENTS or DBA_EXTENTS views to find the used space of a database.
Example:
SELECT SUM(bytes)/1024/1024 "Meg" FROM dba_segments;
[edit]Where
There is no single system table which contains the high water mark (HWM) for a table. A table's HWM can
be calculated using the results from the following SQL statements:
SELECT BLOCKS
FROM
DBA_SEGMENTS
WHERE OWNER=UPPER(owner) AND SEGMENT_NAME = UPPER(table);
ANALYZE TABLE owner.table ESTIMATE STATISTICS;
SELECT EMPTY_BLOCKS
FROM
DBA_TABLES
WHERE OWNER=UPPER(owner) AND TABLE_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.
[edit]How
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;
To report true free space within the used portion of the TEMPFILE:
SELECT
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, 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.saddr = 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
/
[edit]Who
Execute the following query to determine who is using a particular UNDO or Rollback Segment:
SQL> SELECT TO_CHAR(s.sid)||','||TO_CHAR(s.serial#) sid_serial,
2
NVL(s.username, 'None') orauser,
3
s.program,
4
r.name undoseg,
5
t.used_ublk * TO_NUMBER(x.value)/1024||'K' "Undo"
6
FROM sys.v_$rollname
r,
7
sys.v_$session
s,
8
sys.v_$transaction t,
9
sys.v_$parameter
x
10
WHERE s.taddr = t.addr
11
AND r.usn
= t.xidusn(+)
12
AND x.name = 'db_block_size'
SID_SERIAL ORAUSER
PROGRAM
UNDOSEG
Undo
---------- ---------- ------------------------------ --------------- ------260,7
SCOTT
sqlplus@localhost.localdomain _SYSSMU4$
8K
(TNS V1-V3)
Here is a query that can tell you how full the current redo log file is. Handy for when you need to predict
when the next log file will be archived out.
SQL> SELECT le.leseq
"Current log sequence No",
2
100*cp.cpodr_bno/le.lesiz "Percent Full",
3
cp.cpodr_bno
"Current Block No",
4
le.lesiz
"Size of Log in Blocks"
5
FROM x$kcccp cp, x$kccle le
6
WHERE le.leseq =CP.cpodr_seq
7
AND bitand(le.leflg,24) = 8
8 /
Current log sequence No Percent Full Current Block No Size of Log in Blocks
----------------------- ------------ ---------------- --------------------416
48.6669922
49835
102400
[edit]Tired
If you are tired of typing sqlplus "/as sysdba" every time you want to perform some DBA task,
implement the following shortcut:
On Unix/Linux systems:
Add the following alias to your .profile or .bash_profile file:
alias sss='sqlplus "/as sysdba"'
On Windows systems:
Create a batch file, sss.bat, add the command to it, and place it somewhere in your PATH. Whenever you
now want to start sqlplus as sysdba, just type "sss". Much less typing for ya lazy DBA's.
Note: From Oracle 10g you don't need to put the "/AS SYSDBA" in quotes anymore.
[edit]What
DBA's often do not document the patches they install. This may lead to situations where a feature works
on machine X, but not on machine Y. This FAQ will show how you can list and compare the patches
installed within your Oracle Homes.
All patches that are installed with Oracle's OPatch Utility (Oracle's Interim Patch Installer) can be listed by
invoking the opatch command with the lsinventory option. Here is an example:
$ cd $ORACLE_HOME/OPatch
$ opatch lsinventory
Invoking OPatch 10.2.0.1.0
Oracle interim Patch Installer version 10.2.0.1.0
Copyright (c) 2005, Oracle Corporation. All rights reserved..
...
Installed Top-level Products (1):
Oracle Database 10g
There are 1 products installed in this Oracle Home.
There are no Interim patches installed in this Oracle Home.
10.2.0.1.0
OPatch succeeded.
NOTE: If OPatch is not installed into your Oracle Home ($ORACLE_HOME/OPatch), you may need to
download it from Metalink and install it yourself.
[edit]How