96
Oracle Database Administration How does one create a new database? 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. 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 and Oracle 9i 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; What database block size should I use? 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). How does one coalesce free space? SMON coalesces free space (extents) into larger, contiguous extents every 2 hours and even then, only for a short period of time. SMON will not coalesce free space if a tablespace’s default storage parameter “pctincrease” is set to 0. With Oracle 7.3 one can manually coalesce a tablespace using the ALTER TABLESPACE ... COALESCE; command, until then use: SQL> alter session set events ‘immediate trace name coalesce level n’; Where ‘n’ is the tablespace number you get from SELECT TS#, NAME FROM SYS.TS$; You can get status information about this process by selecting from the SYS.DBA_FREE_SPACE_COALESCED dictionary view. 1

Oracle DBA Faq's

Embed Size (px)

Citation preview

Page 1: Oracle DBA Faq's

Oracle Database Administration

How does one create a new database?

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. 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 and Oracle 9i database:

CONNECT SYS AS SYSDBAALTER 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;

What database block size should I use?

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).

How does one coalesce free space?

SMON coalesces free space (extents) into larger, contiguous extents every 2 hours and even then, only for a short period of time. SMON will not coalesce free space if a tablespace’s default storage parameter “pctincrease” is set to 0. With Oracle 7.3 one can manually coalesce a tablespace using the ALTER TABLESPACE ... COALESCE; command, until then use:SQL> alter session set events ‘immediate trace name coalesce level n’;Where ‘n’ is the tablespace number you get from SELECT TS#, NAME FROM SYS.TS$; You can get status information about this process by selecting from the SYS.DBA_FREE_SPACE_COALESCED dictionary view.

How does one prevent tablespace fragmentation?

Always set PCTINCREASE to 0 or 100.Bizarre values for PCTINCREASE will contribute to fragmentation. For example if you set PCTINCREASE to 1 you will see that your extents are going to have weird and wacky sizes: 100K, 100K, 101K, 102K, etc. Such extents of bizarre size are rarely re-used in their entirety. PCTINCREASE of 0 or 100 gives you nice round extent sizes that can easily be reused. Eg. 100K, 100K, 200K, 400K, etc.

Thiru Vadivelu contributed the following:Use the same extent size for all the segments in a given tablespace. Locally Managed tablespaces (available from 8i onwards) with uniform extent sizes virtually eliminates any tablespace fragmentation. Note that the number of extents per segment does not cause any performance issue anymore, unless they run into thousands and thousands where additional I/O may be required to fetch the additional blocks where extent maps of the segment are stored.

Where can one find the high water mark for a table?

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_SEGMENTSWHERE OWNER=UPPER(owner) AND SEGMENT_NAME = UPPER(table);

1

Page 2: Oracle DBA Faq's

ANALYZE TABLE owner.table ESTIMATE STATISTICS;

SELECT EMPTY_BLOCKS FROM DBA_TABLESWHERE 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 Acreate new user BImport system/manager fromuser=A touser=BDrop user A

Can one rename a tablespace?

No, this is listed as Enhancement Request 148742. Workaround: Export all of the objects from the tablespaceDrop the tablespace including contentsRecreate the tablespaceImport 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_tsDATAFILE ‘c:\ora_apps\pcs\pcsdata1.dbf’ SIZE 3MAUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITEDDEFAULT STORAGE (INITIAL 10240NEXT 10240MINEXTENTS 1MAXEXTENTS UNLIMITEDPCTINCREASE 0)ONLINEPERMANENT;

2

Page 3: Oracle DBA Faq's

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 = trueInclude 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) STARTEDfrom SYS.V_$INSTANCE JUL,SYS.V_$INSTANCE SEC,SYS.V_$THREAD CWhere 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’) STARTEDfrom SYS.V_$INSTANCE JUL,SYS.V_$INSTANCE SECwhere JUL.KEY like ‘%JULIAN%’and SEC.KEY like ‘%SECOND%’;

3

Page 4: Oracle DBA Faq's

select to_char (to_date (JUL.VALUE, ‘J’) + (SEC.VALUE/86400), -Return a DATE‘DD-MON-YY HH24:MI:SS’) STARTEDfrom V$INSTANCE JUL,V$INSTANCE SECwhere 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_headerGROUP 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.blocksfrom sys.v_$session s, sys.v_$sort_usage uwhere s.addr = u.session_addr /select s.osuser, s.process, s.username, s.serial#,Sum (u.blocks)*vp.value/1024 sort_sizefrom sys.v_$session s, sys.v_$sort_usage u, sys.v_$parameter VPwhere s.saddr = u.session_addrand 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’;

4

Page 5: Oracle DBA Faq's

Oracle Backup and RecoveryWhy 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.

5

Page 6: Oracle DBA Faq's

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 SYSDBASql> 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 abortstartup restrictshutdown immediateNote 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.

How does one do on-line database backups?

Each tablespace that needs to be backed-up must be switched into backup mode before copying the files out to secondary storage (tapes). Look at this simple example. ALTER TABLESPACE xyz BEGIN BACKUP;! cp xyfFile1 /backupDir/

6

Page 7: Oracle DBA Faq's

ALTER TABLESPACE xyz END BACKUP;It is better to backup tablespace for tablespace than to put all tablespaces in backup mode. Backing them up separately incurs less overhead. When done, remember to backup your control files. Look at this example:ALTER SYSTEM SWITCH LOGFILE; -- Force log switch to update control file headers ALTER DATABASE BACKUP CONTROLFILE TO ‘/backupDir/control.dbf’;NOTE: Do not run on-line backups during peak processing periods. Oracle will write complete database blocks instead of the normal deltas to redo log files while in backup mode. This will lead to excessive database archiving and even database freezes.

How does one backup a database using RMAN?

The biggest advantage of RMAN is that it only backup used space in the database. Rman doesn’t put tablespaces in backup mode, saving on redo generation overhead. RMAN will re-read database blocks until it gets a consistent image of it. Look at this simple backup example. rman target sys/*** nocatalog run { allocate channel t1 type disk;backup format ‘/app/oracle/db_backup/%d_t%t_s%s_p%p’( database ); release channel t1; }Example RMAN restore: rman target sys/*** nocatalog run {allocate channel t1 type disk;# set until time ‘Aug 07 2000 :51’;restore tablespace users; recover tablespace users; release channel t1; }The examples above are extremely simplistic and only useful for illustrating basic concepts. By default Oracle uses the database controlfiles to store information about backups. Normally one would rather setup a RMAN catalog database to store RMAN metadata in. Read the Oracle Backup and Recovery Guide before implementing any RMAN backups. Note: RMAN cannot write image copies directly to tape. One needs to use a third-party media manager that integrates with RMAN to backup directly to tape. Alternatively one can backup to disk and then manually copy the backups to tape.

How does one put a database into ARCHIVELOG mode?

The main reason for running in archivelog mode is that one can provide 24-hour availability and guarantee complete data recoverability. It is also necessary to enable ARCHIVELOG mode before one can start to use on-line database backups. To enable ARCHIVELOG mode, simply change your database startup command script, and bounce the database: SQLPLUS> connect sys as sysdbaSQLPLUS> startup mount exclusive;SQLPLUS> alter database archivelog;SQLPLUS> archive log start;SQLPLUS> alter database open;NOTE1: Remember to take a baseline database backup right after enabling archivelog mode. Without it one would not be able to recover. Also, implement an archivelog backup to prevent the archive log directory from filling-up.

7

Page 8: Oracle DBA Faq's

NOTE2: ARCHIVELOG mode was introduced with Oracle V6, and is essential for database point-in-time recovery. Archiving can be used in combination with on-line and off-line database backups. NOTE3: You may want to set the following INIT.ORA parameters when enabling ARCHIVELOG mode: log_archive_start=TRUE, log_archive_dest=... and log_archive_format=... NOTE4: You can change the archive log destination of a database on-line with the ARCHIVE LOG START TO ‘directory’; statement. This statement is often used to switch archiving between a set of directories. NOTE5: When running Oracle Real Application Server (RAC), you need to shut down all nodes before changing the database to ARCHIVELOG mode.

How does one backup archived log files?

One can backup archived log files using RMAN or any operating system backup utility. Remember to delete files after backing them up to prevent the archive log directory from filling up. If the archive log directory becomes full, your database will hang! Look at this simple RMAN backup script: RMAN> run {2> allocate channel dev1 type disk;3> backup 4> format ‘/app/oracle/arch_backup/log_t%t_s%s_p%p’ 5> (archivelog all delete input);6> release channel dev1;7> }

Does Oracle write to data files in begin/hot backup mode?

Oracle will stop updating file headers, but will continue to write data to the database files even if a tablespace is in backup mode. In backup mode, Oracle will write out complete changed blocks to the redo log files. Normally only deltas (changes) are logged to the redo logs. This is done to enable reconstruction of a block if only half of it was backed up (split blocks). Because of this, one should notice increased log activity and archiving during on-line backups.

My database was terminated while in BACKUP MODE, do I need to recover?

If a database was terminated while one of its tablespaces was in BACKUP MODE (ALTER TABLESPACE xyz BEGIN BACKUP;), it will tell you that media recovery is required when you try to restart the database. The DBA is then required to recover the database and apply all archived logs to the database. However, from Oracle7.2, you can simply take the individual datafiles out of backup mode and restart the database. ALTER DATABASE DATAFILE ‘/path/filename’ END BACKUP;One can select from V$BACKUP to see which datafiles are in backup mode. This normally saves a significant amount of database down time. Thiru Vadivelu contributed the following:From Oracle9i onwards, the following command can be used to take all of the datafiles out of hot backup mode: ALTER DATABASE END BACKUP;The above commands need to be issued when the database is mounted.

My database is down and I cannot restore. What now?

Recovery without any backup is normally not supported, however, Oracle Consulting can sometimes extract data from an offline database using a utility called DUL (Disk UnLoad). This utility reads data in the data files and unloads it into SQL*Loader or export dump files. DUL does not care about rollback segments, corrupted blocks, etc, and can thus not guarantee that the data is not logically corrupt. It is intended as an absolute last resort and will most likely cost your company a lot of money!!!

I’ve lost my REDOLOG files, how can I get my DB back?

8

Page 9: Oracle DBA Faq's

The following INIT.ORA parameter may be required if your current redo logs are corrupted or blown away. Caution is advised when enabling this parameter as you might end-up losing your entire database. Please contact Oracle Support before using it. _allow_resetlogs_corruption = true

I’ve lost some Rollback Segments, how can I get my DB back?

Re-start your database with the following INIT.ORA parameter if one of your rollback segments is corrupted. You can then drop the corrupted rollback segments and create it from scratch. Caution is advised when enabling this parameter, as uncommitted transactions will be marked as committed. One can very well end up with lost or inconsistent data!!! Please contact Oracle Support before using it. _Corrupted_rollback_segments = (rbs01, rbs01, rbs03, rbs04)

What are the differences between EBU and RMAN?

Enterprise Backup Utility (EBU) is a functionally rich, high performance interface for backing up Oracle7 databases. It is sometimes referred to as OEBU for Oracle Enterprise Backup Utility. The Oracle Recovery Manager (RMAN) utility that ships with Oracle8 and above is similar to Oracle7’s EBU utility. However, there is no direct upgrade path from EBU to RMAN.

How does one create a RMAN recovery catalog?

Start by creating a database schema (usually called rman). Assign an appropriate tablespace to it and grant it the recovery_catalog_owner role. Look at this example: sqlplus sysSQL> create user rman identified by rman;SQL> alter user rman default tablespace tools temporary tablespace temp;SQL> alter user rman quota unlimited on tools;SQL> grant connect, resource, recovery_catalog_owner to rman;SQL> exit;Next, log in to rman and create the catalog schema. Prior to Oracle 8i this was done by running the catrman.sql script. rman catalog rman/rmanRMAN> create catalog tablespace tools;RMAN> exit;You can now continue by registering your databases in the catalog. Look at this example: rman catalog rman/rman target backdba/backdbaRMAN> register database;

What are the common RMAN errors (with solutions)?

Some of the common RMAN errors are: RMAN-20242: Specification does not match any archivelog in the recovery catalog.Add to RMAN script: sql ‘alter system archive log current’;RMAN-06089: archived log xyz not found or out of sync with catalogExecute from RMAN: change archivelog all validate;

What third party tools can be used with Oracle EBU/ RMAN?

The following Media Management Software Vendors have integrated their media management software packages with Oracle Recovery Manager and Oracle7 Enterprise Backup Utility. The Media Management Vendors will provide first line technical support for the integrated backup/recover solutions. Veritas NetBackupEMC Data Manager (EDM)HP OMNIBack IIIBM’s Tivoli Storage Manager - formerly ADSMLegato NetworkerManageIT Backup and RecoverySterling Software’s SAMS:Alexandria - formerly from Spectralogic

9

Page 10: Oracle DBA Faq's

Sun Solstice Backup.

Books on Oracle Backup and Recovery?

Oracle Backup and Recovery Handbook (Rama Velpuri, McGraw-Hill Professional Publishing) Kevin Loney’s New DBA FAQs: Part 1 - Backup Strategy

Oracle Monitoring and Performance Tuning

Why and when should one tune?

One of the biggest responsibilities of a DBA is to ensure that the Oracle database is tuned properly. The Oracle RDBMS is highly tunable and allows the database to be monitored and adjusted to increase its performance. One should do performance tuning for the following reasons: The speed of computing might be wasting valuable human time (users waiting for response); Enable your system to keep-up with the speed business is conducted; and Optimize hardware usage to save money (companies are spending millions on hardware). Although this FAQ is not overly concerned with hardware issues, one needs to remember than you cannot tune a Buick into a Ferrari.

What database aspects should be monitored?

One should implement a monitoring system to constantly monitor the following aspects of a database. Writing custom scripts, implementing Oracle’s Enterprise Manager, or buying a third-party monitoring product can achieve this. If an alarm is triggered, the system should automatically notify the DBA (e-mail, page, etc.) to take appropriate action.

Infrastructure availability:

Is the database up and responding to requests Are the listeners up and responding to requests Are the Oracle Names and LDAP Servers up and responding to requests Are the Web Listeners up and responding to requests

Things that can cause service outages:

Is the archive log destination filling up? Objects getting close to their max extents Tablespaces running low on free space/ Objects what would not be able to extend User and process limits reached

Things that can cause bad performance: See question “What tuning indicators can one use?”.

Where should the tuning effort be directed?

Consider the following areas for tuning. The order in which steps are listed needs to be maintained to prevent tuning side effects. For example, it is no good increasing the buffer cache if you can reduce I/O by rewriting a SQL statement. Database Design (if it’s not too late):Poor system performance usually results from a poor database design. One should generally normalize to the 3NF. Selective denormalization can provide valuable performance improvements. When designing, always keep the “data access path” in mind. Also look at proper data partitioning, data replication, aggregation tables for decision support systems, etc. Application Tuning:Experience showed that approximately 80% of all Oracle system performance problems are resolved by coding optimal SQL. Also consider proper scheduling of batch tasks after peak working hours.

10

Page 11: Oracle DBA Faq's

Memory Tuning:Properly size your database buffers (shared pool, buffer cache, log buffer, etc) by looking at your buffer hit ratios. Pin large objects into memory to prevent frequent reloads. Disk I/O Tuning:Database files needs to be properly sized and placed to provide maximum disk subsystem throughput. Also look for frequent disk sorts, full table scans, missing indexes, row chaining, data fragmentation, etc.

Eliminate Database Contention:Study database locks, latches and wait events carefully and eliminate where possible. Tune the Operating System:Monitor and tune operating system CPU, I/O and memory utilization. For more information, read the related Oracle FAQ dealing with your specific operating system.

What tuning indicators can one use?

The following high-level tuning indicators can be used to establish if a database is performing optimally or not:

Buffer Cache Hit RatioFormula: Hit Ratio = (Logical Reads - Physical Reads) / Logical ReadsAction: Increase DB_CACHE_SIZE (DB_BLOCK_BUFFERS prior to 9i) to increase hit ratio

Library Cache Hit RatioAction: Increase the SHARED_POOL_SIZE to increase hit ratio

What tools/utilities does Oracle provide to assist with performance tuning?

Oracle provide the following tools/ utilities to assist with performance monitoring and tuning: TKProf UTLBSTAT.SQL and UTLESTAT.SQL - Begin and end stats monitoring Statspack Oracle Enterprise Manager - Tuning Pack

What is STATSPACK and how does one use it?

Statspack is a set of performance monitoring and reporting utilities provided by Oracle from Oracle8i and above. Statspack provides improved BSTAT/ESTAT functionality, though the old BSTAT/ESTAT scripts are still available. For more information about STATSPACK, read the documentation in file $ORACLE_HOME/rdbms/admin/spdoc.txt. Install Statspack: cd $ORACLE_HOME/rdbms/admin sqlplus “/ as sysdba” @spdrop.sql -- Install Statspack - sqlplus “/ as sysdba” @spcreate.sql-- Enter tablespace names when promptedUse Statspack: sqlplus perfstat/perfstatexec statspack.snap; -- Take a performance snapshots exec statspack.snap; • Get a list of snapshotsselect SNAP_ID, SNAP_TIME from STATS$SNAPSHOT; @spreport.sql -- Enter two snapshot id’s for difference reportOther Statspack Scripts:

sppurge.sql - Purge a range of Snapshot Id’s between the specified begin and end Snap Id’s spauto.sql - Schedule a dbms_job to automate the collection of STATPACK statistics spcreate.sql - Installs the STATSPACK user, tables and package on a database (Run as SYS). spdrop.sql - Deinstall STATSPACK from database (Run as SYS) sppurge.sql - Delete a range of Snapshot Id’s from the database spreport.sql - Report on differences between values recorded in two snapshots sptrunc.sql - Truncates all data in Statspack tables

When is cost based optimization triggered?

It’s important to have statistics on all tables for the CBO (Cost Based Optimizer) to work correctly. If one table involved in a statement does not have statistics, Oracle has to revert to rule-based optimization for

11

Page 12: Oracle DBA Faq's

that statement. So you really want for all tables to have statistics right away; it won’t help much to just have the larger tables analyzed. Generally, the CBO can change the execution plan when you: 1. Change statistics of objects by doing an ANALYZE; 2. Change some initialization parameters (for example: hash_join_enabled, sort_area_size, db_file_multiblock_read_count).

How can one optimize %XYZ% queries?

It is possible to improve %XYZ% queries by forcing the optimizer to scan all the entries from the index instead of the table. This can be done by specifying hints. If the index is physically smaller than the table (which is usually the case) it will take less time to scan the entire index than to scan the entire table.

Where can one find I/O statistics per table?

The UTLESTAT report shows I/O per tablespace but one cannot see what tables in the tablespace has the most I/O. The $ORACLE_HOME/rdbms/admin/catio.sql script creates a sample_io procedure and table to gather the required information. After executing the procedure, one can do a simple SELECT * FROM io_per_object; to extract the required information. For more details, look at the header comments in the $ORACLE_HOME/rdbms/admin/catio.sql script.

My query was fine last week and now it is slow. Why?

The likely cause of this is because the execution plan has changed. Generate a current explain plan of the offending query and compare it to a previous one that was taken when the query was performing well. Usually the previous plan is not available. Some factors that can cause a plan to change are:

Which tables are currently analyzed? Were they previously analyzed? (ie. Was the query using RBO and now CBO?)

Has OPTIMIZER_MODE been changed in INIT.ORA? Has the DEGREE of parallelism been defined/changed on any table? Have the tables been re-analyzed? Were the tables analyzed using estimate or compute? If

estimate, what percentage was used? Have the statistics changed? Has the INIT.ORA parameter DB_FILE_MULTIBLOCK_READ_COUNT been changed? Has the INIT.ORA parameter SORT_AREA_SIZE been changed? Have any other INIT.ORA parameters been changed? What do you think the plan should be? Run the query with hints to see if this produces the

required performance.

Why is Oracle not using the damn index?

This problem normally only arises when the query plan is being generated by the Cost Based Optimizer. The usual cause is because the CBO calculates that executing a Full Table Scan would be faster than accessing the table via the index. Fundamental things that can be checked are:

USER_TAB_COLUMNS.NUM_DISTINCT - This column defines the number of distinct values the column holds.

USER_TABLES.NUM_ROWS - If NUM_DISTINCT = NUM_ROWS then using an index would be preferable to doing a FULL TABLE SCAN. As the NUM_DISTINCT decreases, the cost of using an index increase thereby is making the index less desirable.

USER_INDEXES.CLUSTERING_FACTOR - This defines how ordered the rows are in the index. If CLUSTERING_FACTOR approaches the number of blocks in the table, the rows are

ordered. If it approaches the number of rows in the table, the rows are randomly ordered. In such a case, it is unlikely that index entries in the same leaf block will point to rows in the same data blocks.

Decrease the INIT.ORA parameter DB_FILE_MULTIBLOCK_READ_COUNT - A higher value will make the cost of a FULL TABLE SCAN cheaper.

Remember that you MUST supply the leading column of an index, for the index to be used (unless you use a FAST FULL SCAN or SKIP SCANNING).

There are many other factors that affect the cost, but sometimes the above can help to show why

12

Page 13: Oracle DBA Faq's

an index is not being used by the CBO. If from checking the above you still feel that the query should be using an index, try specifying an index hint. Obtain an explain plan of the query either using TKPROF with TIMED_STATISTICS, so that one can see the CPU utilization, or with AUTOTRACE to see the statistics. Compare this to the explain plan when not using an index.

When should one rebuild an index?

You can run the ‘ANALYZE INDEX VALIDATE STRUCTURE’ command on the affected indexes - each invocation of this command creates a single row in the INDEX_STATS view. This row is overwritten by the next ANALYZE INDEX command, so copy the contents of the view into a local table after each ANALYZE. The ‘badness’ of the index can then be judged by the ratio of ‘DEL_LF_ROWS’ to ‘LF_ROWS’.

How does one tune Oracle Wait events?

Some wait events from V$SESSION_WAIT and V$SYSTEM_EVENT views:Event Name: Tuning Recommendation:

db file sequential read

Tune SQL to do less I/O. Make sure all objects are analyzed. Redistribute I/O across disks.

buffer busy waitsIncrease DB_CACHE_SIZE (DB_BLOCK_BUFFERS prior to 9i)/ Analyze contention from SYS.V$BH

log buffer space Increase LOG_BUFFER parameter or move log files to faster disks

What is the difference between DBFile Sequential and Scattered Reads?

Both “db file sequential read” and “db file scattered read” events signify time waited for I/O read requests to complete. Time is reported in 100’s of a second for Oracle 8i releases and below, and 1000’s of a second for Oracle 9i and above. Most people confuse these events with each other as they think of how data is read from disk. Instead they should think of how data is read into the SGA buffer cache. db file sequential read: A sequential read operation reads data into contiguous memory (usually a single-block read with p3=1, but can be multiple blocks). Single block I/Os are usually the result of using indexes. This event is also used for rebuilding the controlfile and reading datafile headers (P2=1). In general, this event is indicative of disk contention on index reads. db file scattered read: Similar to db file sequential reads, except that the session is reading multiple data blocks and scatters them into different discontinuous buffers in the SGA. This statistic is NORMALLY indicating disk contention on full table scans. Rarely, data from full table scans could be fitted into a contiguous buffer area, these waits would then show up as sequential reads instead of scattered reads. The following query shows average wait time for sequential versus scattered reads: prompt “AVERAGE WAIT TIME FOR READ REQUESTS”select a.average_wait “SEQ READ”, b.average_wait “SCAT READ”from sys.v_$system_event a, sys.v_$system_event bwhere a.event = ‘db file sequential read’and b.event = ‘db file scattered read’;

13

Page 14: Oracle DBA Faq's

DBA Tasks, Responsibilities and Skills Required

DBA Responsibilities:

The job of the DBA seems to be everything that everyone else either doesn’t want to do, or doesn’t have the ability to do. DBAs get the enviable task of figuring out all of the things no one else can figure out. More seriously though, here is a list of typical DBA responsibilities:

Installation, configuration and upgrading of Oracle server software and related products Evaluate Oracle features and Oracle related products Establish and maintain sound backup and recovery policies and procedures Take care of the Database design and implementation Implement and maintain database security (create and maintain users and roles, assign privileges) Perform database tuning and performance monitoring Perform application tuning and performance monitoring Setup and maintain documentation and standards Plan growth and changes (capacity planning) Work as part of a team and provide 7x24 support when required Perform general technical trouble shooting and give consultation to development teams Interface with Oracle Corporation for technical support.

Required Skills: Good understanding of the Oracle database, related utilities and tools A good understanding of the underlying operating system A good knowledge of the physical database design Ability to perform both Oracle and operating system performance tuning and monitoring Knowledge of ALL Oracle backup and recovery scenarios A good knowledge of Oracle security management A good knowledge of how Oracle acquires and manages resources A good knowledge Oracle data integrity Sound knowledge of the implemented application systems Experience in code migration, database change management and data management through the various stages of the development life cycle A sound knowledge of both database and system performance tuning A DBA should have sound communication skills with management, development teams, vendors and systems administrators Provide a strategic database direction for the organisation A DBA should have the ability to handle multiple projects and deadlines A DBA should possess a sound understanding of the business

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?

14

Page 15: Oracle DBA Faq's

How do you define ‘success’? What has been your most significant accomplishment to date? Describe a challenge you encountered and how you dealt with it. Describe a failure and how you dealt with it. Describe the ‘ideal’ job... the ‘ideal’ supervisor. What leadership roles have you held? What prejudices do you hold? What do you like to do in your spare time? What are your career goals (a) 3 years from now; (b) 10 years from now? How does this position match your career goals? What have you done in the past year to improve yourself? In what areas do you feel you need further education and training to be successful? What do you know about our company? Why do you want to work for this company. Why should we hire you? Where do you see yourself fitting in to this organization . . .initially? . . .in 5 years? Why are you looking for a new job? How do you feel about re-locating? Are you willing to travel? What are your salary requirements? When would you be available to start if you were selected? Did you use online or off-line backups? What version of Oracle were you running? Haw many databases and what sizes? If you have to advise a backup strategy for a new application, how would you approach it and

what questions will you ask? If a customer calls you about a hanging database session, what will you do to resolve it? Compare Oracle to any other database that you know. Why would you prefer to work on one and

not on the other?

15

Page 16: Oracle DBA Faq's

Oracle Database Internals

What is the difference between locks, latches, enqueues and semaphores?

A latch is an internal Oracle mechanism used to protect data structures in the SGA from simultaneous access. Atomic hardware instructions like TEST-AND-SET is used to implement latches. Latches are more restrictive than locks in that they are always exclusive. Latches are never queued, but will spin or sleep until they obtain a resource, or time out. Enqueues and locks are different names for the same thing. Both support queuing and concurrency. They are queued and serviced in a first-in-first-out (FIFO) order. Semaphores are an operating system facility used to control waiting. Semaphores are controlled by the following Unix parameters: semmni, semmns and semmsl. Typical settings are: semmns = sum of the “processes” parameter for each instance(see init<instance>.ora for each instance)semmni = number of instances running simultaneously;semmsl = semmns

Where can one get a list of all hidden Oracle parameters?

Oracle initialization or INIT.ORA parameters with an underscore in front are hidden or unsupported parameters. One can get a list of all hidden parameters by executing this query: select *from SYS.X$KSPPIwhere substr(KSPPINM,1,1) = ‘_’;The following query displays parameter names with their current value: select a.ksppinm “Parameter”, b.ksppstvl “Session Value”, c.ksppstvl “Instance Value”from x$ksppi a, x$ksppcv b, x$ksppsv cwhere a.indx = b.indx and a.indx = c.indxand substr(ksppinm,1,1)=’_’order by a.ksppinm;Remember: Thou shall not play with undocumented parameters!

What is a database EVENT and how does one set it?

Oracle trace events are useful for debugging the Oracle database server. The following two examples are simply to demonstrate syntax. Refer to later notes on this page for an explanation of what these particular events do. Either adding them to the INIT.ORA parameter file can activate events. E.g. event=’1401 trace name errorstack, level 12’... or, by issuing an ALTER SESSION SET EVENTS command: E.g. alter session set events ‘10046 trace name context forever, level 4’;The alter session method only affects the user’s current session, whereas changes to the INIT.ORA file will affect all sessions once the database has been restarted.

What database events can be set?

The following events are frequently used by DBAs and Oracle Support to diagnose problems: 10046 trace name context forever, level 4Trace SQL statements and show bind variables in trace output. 10046 trace name context forever, level 8This shows wait events in the SQL trace files 10046 trace name context forever, level 12This shows both bind variable names and wait events in the SQL trace files 1401 trace name errorstack, level 12

1401 trace name errorstack, level 4 1401 trace name processstate

16

Page 17: Oracle DBA Faq's

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 10Show 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 1010211 trace name context forever, level 1010231 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 contentsalter session set events ‘immediate trace name CONTROLF level 10’/• Dump file headersalter session set events ‘immediate trace name FILE_HDRS level 10’/• Dump redo log headersalter session set events ‘immediate trace name REDOHDR level 10’/• Dump the system state

NOTE: Take 3 successive SYSTEMSTATE dumps, with 10-minute intervalsalter session set events ‘immediate trace name SYSTEMSTATE level 10’/• Dump the process statealter session set events ‘immediate trace name PROCESSSTATE level 10’/• Dump Library Cache detailsalter 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’ /

17

Page 18: Oracle DBA Faq's

How does one use ORADEBUG from Server Manager/ SQL*Plus?

Execute the “ORADEBUG HELP” command from svrmgrl or sqlplus to obtain a list of valid ORADEBUG commands. Look at these examples: SQLPLUS> REM Trace SQL statements with bind variablesSQLPLUS> oradebug setospid 10121Oracle pid: 91, Unix process pid: 10121, image: oracleorclSQLPLUS> oradebug EVENT 10046 trace name context forever, level 12Statement processed.SQLPLUS> ! vi /app/oracle/admin/orcl/bdump/ora_10121.trcSQLPLUS> REM Trace Process StatisticsSQLPLUS> oradebug setorapid 2Unix process pid: 1436, image: ora_pmon_orclSQLPLUS> oradebug procstatStatement processed.SQLPLUS> oradebug TRACEFILE_NAME/app/oracle/admin/orcl/bdump/pmon_1436.trcSQLPLUS> REM List semaphores and shared memory segments in useSQLPLUS> oradebug ipcSQLPLUS> REM Dump Error StackSQLPLUS> oradebug setospid <pid>SQLPLUS> oradebug event immediate trace name errorstack level 3SQLPLUS> REM Dump Parallel Server DLM locksSQLPLUS> oradebug lkdebug -a convlockSQLPLUS> oradebug lkdebug -a convresSQLPLUS> oradebug lkdebug -r <resource handle> (i.e 0x8066d338 from convres dump)

Are there any undocumented commands in Oracle?

Sure there are, but it is hard to find them. Look at these examples: From Server Manager (Oracle7.3 and above): ORADEBUG HELPIt looks like one can change memory locations with the ORADEBUG POKE command. Anyone brave enough to test this one for us?Previously this functionality was available with ORADBX (ls -l $ORACLE_HOME/rdbms/lib/oradbx.o; make -f oracle.mk oradbx) SQL*Plus: ALTER SESSION SET CURRENT_SCHEMA = SYS;

What is in all those X$ tables?

The following list attempts to describe some x$ tables. The list may not be complete or accurate, but represents an attempt to figure out what information they contain. One should generally not write queries against these tables as they are internal to Oracle, and Oracle may change them without any prior notification.

X$K2GTE2 Kernel 2 Phase Commit Global Transaction Entry Fixed Table

X$K2GTE Kernel 2 Phase Commit Global Transaction Entry Fixed Table

X$BHBuffer headers contain information describing the current contents of a piece of the buffer cache.

X$KCBCBH

Cache Buffer Current Buffer Header Fixed Table. It can predict the potential loss of decreasing the number of database buffers. The db_block_lru_statistics parameter has to be set to true to gather information in this table.

X$KCVFH File Header Fixed Table

X$KDNCE SGA Cache Entry Fixed Table

X$KDNST Sequence Cache Statistics Fixed Table

X$KDXHS Histogram structure Fixed Table

X$KDXST Statistics collection Fixed Table

18

Page 19: Oracle DBA Faq's

X$KGHLU One-row summary of LRU statistics for the shared pool

X$KGLBODY Derived from X$KGLOB (col kglhdnsp = 2)

X$KGLCLUSTER Derived from X$KGLOB (col kglhdnsp = 5)

X$KGLINDEX Derived from X$KGLOB (col kglhdnsp = 4)

X$KGLLC Latch Clean-up state for library cache objects Fixed Table

X$KGLPN Library cache pin Fixed Table

X$KGLTABLE Derived from X$KGLOB (col kglhdnsp = 1)

X$KGLTR Library Cache Translation Table entry Fixed Table

X$KGLTRIGGER Derived from X$KGLOB (col kglhdnsp = 3)

X$KGLXS Library Cache Access Table

X$KKMMD Fixed table to look at what databases are mounted and their status

X$KKSBV Cursor Cache Bind Variables

X$KSMSP Each row represents a piece of memory in the shared pool

X$KSQDN Global database name

X$KSQST Enqueue statistics by type

X$KSUCF Cost function for each Kernel Profile (join to X$KSUPL)

X$KSUPL Resource Limit for each Kernel Profile

X$KSURU Resource Usage for each Kernel Profile (join with X$KSUPL)

X$KSQST Gets and waits for different types of enqueues

X$KTTVS Indicate tablespace that has valid save undo segments

X$KVII Internal instance parameters set at instance initialization

X$KVIS Oracle Data Block (size_t type) variables

X$KVITInstance internal flags, variables and parameters that can change during the life of an instance

X$KXFPCDS Client Dequeue Statistics

X$KXFPCMS Client Messages Statistics

X$KZDOS Represent an os role as defined by the operating system

X$KZSRO Security state Role: List of enabled roles

X$LELock Element: each PCM lock that is used by the buffer cache (gc_db_locks)

X$MESSAGESDisplays all the different messages that can be sent to the Background processes

X$NLS_PARAMETERS

NLS database parameters

Handy X$table queriesSome handy queries based on the X$ memory tables:

Largest # blocks you can write at any given time: select kviival write_batch_size from x$kvii where kviitag = ‘kcbswc’; See the gets and waits for different types of enqueues: select * from x$ksqst where ksqstget > 0;

Oracle Kernel SubsystemsListed below are some of the important subsystems in the Oracle kernel. This table might help you to read those dreaded trace files and internal messages. For example, if you see messages like this, you will at least know where they come from:OPIRIP: Uncaught error 447. Error stack:KCF: write/open error block=0x3e800 online=1

19

Page 20: Oracle DBA Faq's

Kernel Subsystems:

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> passwordChanging password for SCOTTOld 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 userAfter creating a new user, assign the required privileges: GRANT CONNECT, RESOURCE TO scott;GRANT DBA TO scott; -- Make user a DB AdministratorRemember to give the user some space quota on its tablespaces: ALTER USER scott QUOTA UNLIMITED ON tools;

20

Page 21: Oracle DBA Faq's

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 accountALTER USER scott ACCOUNT UNLOCK; -- unlocks a locked users accountALTER USER scott PASSWORD EXPIRE; -- Force user to choose a new password

How does one enforce strict password control?

By default Oracle’s security is not extremely good. For example, Oracle will allow users to choose single character passwords and passwords that match their names and userids. Also, passwords don’t ever expire. This means that one can hack an account for years without ever locking the user. From Oracle8 one can manage passwords through profiles. Some of the things that one can restrict:

FAILED_LOGIN_ATTEMPTS - failed login attempts before the account is locked PASSWORD_LIFE_TIME - limits the number of days the same password can be used for authentication PASSWORD_REUSE_TIME - number of days before a password can be reused PASSWORD_REUSE_MAX - number of password changes required before the current password can be reused PASSWORD_LOCK_TIME - number of days an account will be locked after maximum failed login attempts PASSWORD_GRACE_TIME - number of days after the grace period begins during which a warning is issued and login is allowed PASSWORD_VERIFY_FUNCTION - password complexity verification script

Look at this simple example: CREATE PROFILE my_profile LIMITPASSWORD_LIFE_TIME 30;ALTER USER scott PROFILE my_profile;

What is an administrative (privileged) user?

Oracle DBAs and operators typically use administrative accounts to manage the database and database instance. An administrative account is a user that is granted SYSOPER or SYSDBA privileges. SYSDBA and SYSOPER allow access to a database instance even if it is not running. Control of these privileges is managed outside of the database via password files and special operating system groups. This password file is created with the orapwd utility.

How does one connect to an administrative user?

If an administrative user belongs to the “dba” group on Unix, or the “ORA_DBA” (ORA_sid_DBA) group on NT, he/she can connect like this: connect / as sysdbaNo password is required. This is equivalent to the desupported “connect internal” method. A password is required for “non-secure” administrative access. These passwords are stored in password files. Remote connections via Net8 are classified as non-secure. Look at this example: connect sys/password as sysdba

How does one create a password file?

The Oracle Password File ($ORACLE_HOME/dbs/orapw or orapwSID) stores passwords for users with administrative privileges. One needs to create a password files before remote administrators (like OEM) will be allowed to connect. Follow this procedure to create a new password file:

Log in as the Oracle software owner Runcommand: orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=mypasswd

21

Page 22: Oracle DBA Faq's

Shutdown the database (SQLPLUS> SHUTDOWN IMMEDIATE) Edit the INIT.ORA file and ensure REMOTE_LOGIN_PASSWORDFILE=exclusive is set. Startup the database (SQLPLUS> STARTUP)

NOTE: The orapwd utility presents a security risk in that it receives a password from the command line. This password is visible in the process table of many systems. Administrators needs to be aware of this!

How does one add users to a password file?

One can select from the SYS.V_$PWFILE_USERS view to see which users are listed in the password file. New users can be added to the password file by granting them SYSDBA or SYSOPER privileges, or by using the orapwd utility. GRANT SYSDBA TO scott;

How does one switch to another user in Oracle?

Users normally use the “connect” statement to connect from one database user to another. However, DBAs can switch from one user to another without a password. Of course it is not advisable to bridge Oracle’s security, but look at this example: SQL> select password from dba_users where username=’SCOTT’;PASSWORDF894844C34402B67SQL> alter user scott identified by lion;User altered.

SQL> connect scott/lionConnected.

REM Do whatever you like...SQL> connect system/managerConnected.

SQL> alter user scott identified by values ‘F894844C34402B67’;User altered.SQL> connect scott/tigerConnected.Note: Also see the su.sql script in the Useful Scripts and Sample Programs Page.

Why are OPS$ accounts a security risk in a client/server environment?

If you allow people to log in with OPS$ accounts from Windows Workstations, you cannot be sure who they really are. With terminals, you can rely on operating system passwords, with Windows, you cannot. If you set REMOTE_OS_AUTHENT=TRUE in your init.ora file, Oracle assumes that the remote OS has authenticated the user. If REMOTE_OS_AUTHENT is set to FALSE (recommended), remote users will be unable to connect without a password. IDENTIFIED EXTERNALLY will only be in effect from the local host. Also, if you are using “OPS$” as your prefix, you will be able to log on locally with or without a password, regardless of whether you have identified your ID with a password or defined it to be IDENTIFIED EXTERNALLY.

Who created all these users in my database?/ Can I drop this user?

Oracle creates a number of default database users or schemas when a new database is created. Below are a few of them: SYS/CHANGE_ON_INSTALL or INTERNALOracle Data Dictionary/ CatalogCreated by: ?/rdbms/admin/sql.bsq and various cat*.sql scriptsCan password be changed: Yes (Do so right after the database was created)Can user be dropped: NOSYSTEM/MANAGERThe default DBA user name (please do not use SYS)Created by: ?/rdbms/admin/sql.bsqCan password be changed: Yes (Do so right after the database was created)Can user be dropped: NO

22

Page 23: Oracle DBA Faq's

OUTLN/OUTLNStored outlines for optimizer plan stabilityCreated by: ?/rdbms/admin/sql.bsqCan password be changed: Yes (Do so right after the database was created)Can user be dropped: NOSCOTT/TIGER, ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER.Training/ demonstration users containing the popular EMP and DEPT tablesCreated by: ?/rdbms/admin/utlsampl.sqlCan password be changed: YesCan user be dropped: YES - Drop users cascade from all production environmentsHR/HR (Human Resources), OE/OE (Order Entry), SH/SH (Sales History).Training/ demonstration users containing the popular EMPLOYEES and DEPARTMENTS tablesCreated by: ?/demo/schema/mksample.sqlCan password be changed: YesCan user be dropped: YES - Drop users cascade from all production environmentsCTXSYS/CTXSYSOracle interMedia (ConText Cartridge) administrator userCreated by: ?/ctx/admin/dr0csys.sqlTRACESVR/TRACEOracle Trace serverCreated by: ?/rdbms/admin/otrcsvr.sqlDBSNMP/DBSNMPOracle Intelligent agentCreated by: ?/rdbms/admin/catsnmp.sql, called from catalog.sqlCan password be changed: Yes - put the new password in snmp_rw.ora fileCan user be dropped: YES - Only if you do not use the Intelligent AgentsORDPLUGINS/ORDPLUGINSObject Relational Data (ORD) User used by Time Series, etc.Created by: ?/ord/admin/ordinst.sqlORDSYS/ORDSYSObject Relational Data (ORD) User used by Time Series, etcCreated by: ?/ord/admin/ordinst.sqlDSSYS/DSSYSOracle Dynamic Services and Syndication ServerCreated by: ?/ds/sql/dssys_init.sqlMDSYS/MDSYSOracle Spatial administrator userCreated by: ?/ord/admin/ordinst.sqlAURORA$ORB$UNAUTHENTICATED/INVALIDUsed for users who do not authenticate in Aurora/ORBCreated by: ?/javavm/install/init_orb.sql called from ?/javavm/install/initjvm.sqlPERFSTAT/PERFSTATOracle Statistics Package (STATSPACK) that supersedes UTLBSTAT/UTLESTATCreated by: ?/rdbms/admin/statscre.sqlRemember 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 auditingselect * from EMP where c1 = 09; -- No auditing• Now we can see the statments that triggered the auditing condition...select sqltext from sys.fga_log$;

23

Page 24: Oracle DBA Faq's

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 andalso manages the process of restoring and recovering from them.

WHY USE RMAN ?

No extra costs …Its available free RMAN introduced in Oracle 8 it has become simpler with newer versions and easier than user

managed backups Proper security You are 100% sure your database has been backed up. Its contains detail of the backups taken etc in its central repository Facility for testing validity of backups also commands like crosscheck to check the status of

backup. Faster backups and restores compared to backups without RMAN RMAN is the only backup tool which supports incremental backups. Oracle 10g has got further optimized incremental backup which has resulted in improvement of

performance during backup and recovery time Parallel operations are supported Better querying facility for knowing different details of backup No extra redo generated when backup is taken..compared to online backup without RMAN which results in saving of space in hard disk RMAN an intelligent tool Maintains repository of backup metadata Remembers backup set location Knows what need to backed up Knows what is required for recovery Knows what backups are redundant

UNDERSTANDING THE RMAN ARCHITECTUREAn oracle RMAN comprises ofRMAN EXECUTABLE This could be present and fired even through client sideTARGET DATABASE This is the database which needs to be backed up .RECOVERY CATALOG Recovery catalog is optional otherwise backup details are stored in target database controlfile .It is a repository of information queried and updated by Recovery ManagerIt is a schema or user stored in Oracle database. One schema can support many databases

24

Page 25: Oracle DBA Faq's

It contains information about physical schema of target database datafile and archive log ,backup sets and piecesRecovery catalog is a must in following scenarios

In order to store scripts For tablespace point in time recovery

Media Management SoftwareMedia Management software is a must if you are using RMAN for storing backup in tape drive directly.

Backups in RMANOracle backups in RMAN are of the following typeRMAN complete backup OR RMAN incremental backupThese backups are of RMAN proprietary nature

IMAGE COPYThe advantage of uing Image copy is its not in RMAN proprietary format..

Backup FormatRMAN 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 locationThere are two type of backup sets Datafile backup sets, Archivelog backup setsOne 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 RMANTaking RMAN BackupIn non archive mode in dos prompt typeRMANYou get the RMAN promptRMAN > Connect TargetConnect to target database : Magic <Dbid=129283912>using target database controlfile instead of recovery catalog

Lets take a simple backup of database in non archive modeshutdown immediate ; - - Shutdowns the databasestartup mountbackup database ;- its start backing the databasealter database open;We can fire the same command in archive log modeAnd whole of datafiles will be backedBackup database plus archivelog;

Restoring databaseRestoring database has been made very simple in 9i .It is justRestore database..RMAN has become intelligent to identify which datafiles has to be restoredand the location of backuped up file.

Oracle Enhancement for RMAN in 10 G

Flash Recovery AreaRight 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 isDB_RECOVERY_FILE_DEST = /oracle/flash_recovery_areaBy 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 configurationOracle has introduced new features in incremental backup

25

Page 26: Oracle DBA Faq's

Change Tracking FileOracle 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 BackupsOracle 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

Oracle 9i New features Persistent RMAN ConfigurationA new configure command has been introduced in Oracle 9i , that lets you configure various features including automatic channels, parallelism ,backup options, etc.These automatic allocations and options can be overridden by commands in a RMAN command file.

Controlfile Auto backupsThrough this new feature RMAN will automatically perform a controlfile auto backup. after every backup or copy command.

Block Media RecoveryIf we can restore a few blocks rather than an entire file we only need few blocks.We even dont need to bring the data file offline.Syntax for it as followsBlock Recover datafile 8 block 22;

Configure Backup OptimizationPrior to 9i whenever we backed up database using RMAN our backup also used take backup of read only table spaces which had already been backed up and also the same with archive log too.Now with 9i backup optimization parameter we can prevent repeat backup of read only tablespace and archive log.The command for this is as follows Configure backup optimization on

Archive Log failoverIf RMAN cannot read a block in an archived log from a destination. RMAN automatically attempts to read from an alternate location this is called as archive log failover

There are additional commands likebackup database not backed up since time ‘31-jan-2002 14:00:00’Do not backup previously backed up files(say a previous backup failed and you want to restart from where it left off).Similar syntax is supported for restoresbackup device sbt backup set all Copy a disk backup to tape(backing up a backupAdditionally it supports

Backup of server parameter file Parallel operation supported Extensive reporting available Scripting Duplex backup sets Corrupt block detection Backup archive logs

Pitfalls of using RMAN

26

Page 27: Oracle DBA Faq's

Previous to version Oracle 9i backups were not that easy which means youhad to allocate a channel compulsorily to take backup You had to give a run etc .The syntax was a bit complex …RMAN has now become very simple and easyto use..If you changed the location of backup set it is compulsory for you toregister it using RMAN or while you are trying to restore backup It resulted inhanging situationsThere is no method to know whether during recovery database restore is goingto fail because of missing archive log file.Compulsory Media Management only if using tape backupIncremental backups though used to consume less space used to be slowersince it used to read the entire database to find the changed blocks and alsoThey have difficult time streaming the tape device. .Considerable improvement has been made in 10g to optimize the algorithm tohandle changed block.

ObservationIntroduced in Oracle 8 it has become more powerful and simpler withnewer version of Oracle 9 and 10 g.So if you really don’t want to miss something critical please start using RMAN.

Oracle Enterprise Manager and Management Server

What is OEM (Oracle Enterprise Manager)?

OEM is a set of systems management tools provided by Oracle Corporation for managing the Oracle environment. It provides tools to monitor the Oracle environment and automate tasks (both one-time and repetitive in nature) to take database administration a step closer to “Lights Out” management.

What are the components of OEM?

Oracle Enterprise Manager (OEM) has the following components: Management Server (OMS): Middle tier server that handles communication with the intelligent agents. The OEM Console connects to the management server to monitor and configure the Oracle enterprise. Console: This is a graphical interface from where one can schedule jobs, events, and monitor the database. The console can be opened from a Windows workstation, Unix XTerm (oemapp command) or Web browser session (oem_webstage). Intelligent Agent (OIA): The OIA runs on the target database and takes care of the execution of jobs and events scheduled through the Console.

How does one stop and start the OMS?

Use the following command sequence to stop and start the OMS (Oracle Management Server): oemctl start omsoemctl status oms sysman/oem_tempoemctl stop oms sysman/oem_tempWindows NT/2000 users can just stop and start the required services. The default OEM administrator is “sysman” with a password of “oem_temp”. NOTE: Use command oemctrl instead of oemctl for Oracle 8i and below.

How does one create a repository?

For OEM v2 and above, start the Oracle Enterprise Manager Configuration Assistant (emca on Unix) to create and configure the management server and repository. Remember to setup a backup for the repository database after creating it. The following describes means to create a OEM V1.x (very old!!!) repository on

27

Page 28: Oracle DBA Faq's

WindowsNT: Create a tablespace that would hold the repository data. A size between 200- 250 MB would be ideal. Let us call it Dummy_Space. Create an Oracle user who would own this repository. Assign DBA, SNMPAgent, Exp_Full_database, Imp_Full_database roles to this user. Lets call this user Dummy_user. Assign Dummy_Space as the default tablespace. Create an operating system user with the same name as the Oracle username. I.e. Dummy_User. Add ‘Log on as a batch job’ under advanced rights in User manager. Fire up Enterprise manager and log in as Dummy_User and enter the password. This would trigger the creation of the repository. From now on, Enterprise manager is ready to accept jobs.

How does one list one’s databases in the OEM Console?

Follow these steps to discover databases and other services from the OEM Console: 1. Ensure the GLOBAL_DBNAME parameter is set for all databases in your LISTENER.ORA file (optional). These names will be listed in the OEM Console. Please note that names entered are case sensitive. A portion of a listener.ora file: (SID_DESC =(GLOBAL_DBNAME = DB_name_for_OEM)(SID_NAME = ...2. Start the Oracle Intelligent Agent on the machine you want to discover. See section “How does one start the Oracle Intelligent Agent?”. 3. Start the OEM Console, navigate to menu “Navigator/ Discover Nodes”. The OEM Discovery Wizard will guide you through the process of discovering your databases and other services.

Should the OEM Console be displayed at all times (when there are scheduled jobs)?

When a job is submitted the agent will confirm the status of the job. When the status shows up as scheduled, you can close down the OEM console. The processing of the job is managed by the OIA (Oracle Intelligent Agent). The OIA maintains a .jou file in the agent’s subdirectory. When the console is launched communication with the Agent is established and the contents of the .jou file (binary) are reported to the console job subsystem. Note that OEM will not be able to send e-mail and paging notifications when the Console is not started.

What kind of jobs can one schedule with OEM?

OEM comes with pre-defined jobs like Export, Import, run OS commands, run sql scripts, SQL*Plus commands etc. It also gives you the flexibility of scheduling custom jobs written with the TCL language.

How does one backout events and jobs during maintenance slots?

Managemnet and data collection activity can be suspended by imposing a blackout. Look at these examples: agentctl start blackout # Blackout the entrire agentagentctl stop blackout # Resume normal monitoring and management

agentctl start blackout ORCL # Blackout database ORCLagentctl stop blackout ORCL # Resume normal monitoring and management

agentctl start blackout -s jobs -d 00:20 # Blackout jobs for 20 minutes

What is the Oracle Intelligent Agent?

The Oracle Intelligent Agent (OIA) is an autonomous process that needs to run on a remote node in the network to make the node OEM manageable. The Oracle Intelligent Agent is responsible for:

Discovering targets that can be managed (Database Servers, Net8 Listeners, etc.); Monitoring of events registered in Enterprise Manager; and Executing tasks associated with jobs submitted to Enterprise Manager.

How does one start the Oracle Intelligent Agent?

28

Page 29: Oracle DBA Faq's

One needs to start an OIA (Oracle Intelligent Agent) process on all machines that will to be managed via OEM. For OEM 9i and above:agentctl start agentagentctl stop agent

For OEM 2.1 and below:lsnrctl dbsnmp_startlsnrctl dbsnmp_status

On Windows NT, start the “OracleAgent” Service.If the agent doesn’t want to start, ensure your environment variables are set correctly and delete the following files before trying again:1) In $ORACLE_HOME/network/admin: snmp_ro.ora and snmp_rw.ora.2) Also delete ALL files in $ORACLE_HOME/network/agent/.

Can one write scripts to send alert messages to the console?

Start the OEM console and create a new event. Select option “Enable Unsolicited Event”. Select test “Unsolicited Event”. When entering the parameters, enter values similar to these: Event Name: /oracle/script/myalert Object: * Severity: * Message: *One can now write the script and invoke the oemevent command to send alerts to the console. Look at this example: oemevent /oracle/script/myalert DESTINATION alert “My custom error message”where DESTINATION is the same value as entered in the “Monitored Destinations” field when you’ve registered the event in the OEM Console.

Where can one get more information about TCL?

One can write custom event checking routines for OEM using the TCL (Tool Command Language) language. Check the following sites for more information about TCL:

The Tcl Developer Xchange - download and learn about TCL OraTCL at Sourceforge - Download the OraTCL package Tom Poindexter’s Tcl Page - Oratcl was originally written by Tom Poindexter

Are there any troubleshooting tips for OEM?

Create the OEM repository with a user (which will manage the OEM) and store it in a tablespace that does not share any data with other database users. It is a bad practice to create the repository with SYS and System. If you are unable to launch the console or there is a communication problem with the intelligent agent (daemon). Ensure OCX files are registered. Type the following in the DOS prompt (the current directory should be $ORACLE_HOME\BIN: C:\Orawin95\Bin> RegSvr32 mmdx32.OCXC:\Orawin95\Bin> RegSvr32 vojt.OCX If you have a problem starting the Oracle Agent

Solution A: Backup the *.Q files and Delete all the *.Q Files ($Oracle_home/network/agent folder) Backup and delete SNMP_RO.ora, SNMP_RW.ora, dbsnmp.ver and services.ora files ($Oracle_Home/network/admin folder) Start the Oracle Agent service. Solution B: Your version of Intelligent Agent could be buggy. Check with Oracle for any available patches. For example, the Intelligent Agent that comes with Oracle 8.0.4 is buggy. Sometimes you get a Failed status for the job that was executed successfully. Check the log to see the results of the execution rather than relying on this status.

29

Page 30: Oracle DBA Faq's

Oracle E-Business Suite (Oracle Applications)

What is Oracle Financials?

Oracle Financials products provide organizations with solutions to a wide range of long- and short-term accounting system issues. Regardless of the size of the business, Oracle Financials can meet accounting management demands with:

Oracle Assets: Ensures that an organization’s property and equipment investment is accurate and that the correct asset tax accounting strategies are chosen. Oracle General Ledger: Offers a complete solution to journal entry, budgeting, allocations, consolidation, and financial reporting needs. Oracle Inventory: Helps an organization make better inventory decisions by minimizing stock and maximizing cash flow. Oracle Order Entry: Provides organizations with a sophisticated order entry system for managing customer commitments. Oracle Payables: Lets an organization process more invoices with fewer staff members and tighter controls. Helps save money through maximum discounts, bank float, and prevention of duplicate payment. Oracle Personnel: Improves the management of employee- related issues by retaining and making available every form of personnel data. Oracle Purchasing: Improves buying power, helps negotiate bigger discounts, eliminates paper flow, increases financial controls, and increases productivity. Oracle Receivables:. Improves cash flow by letting an organization process more payments faster, without off-line research. Helps correctly account for cash, reduce outstanding receivables, and improve collection effectiveness. Oracle Revenue Accounting Gives an organization timely and accurate revenue and flexible commissions reporting. Oracle Sales Analysis: Allows for better forecasting, planning. and reporting of sales information.

What is the most important module in Oracle Financials?

The General Ledger (GL) module is the basis for all other Oracle Financial modules. All other modules provide information to it. If you implement Oracle Financials, you should switch your current GL system first.GL is relatively easy to implement. You should go live with it first to give your implementation team a chance to be familiar with Oracle Financials.

What is the MultiOrg and what is it used for?

MultiOrg or Multiple Organizations Architecture allows multiple operating units and their relationships to be defined within a single installation of Oracle Applications. This keeps each operating unit’s transaction data separate and secure. Use the following query to determine if MuliOrg is intalled: select multi_org_flag from fnd_product_groups;

What is the difference between Fields and FlexFields?

A field is a position on a form that one uses to enter, view, update, or delete information. A field prompt describes each field by telling what kind of information appears in the field, or alternatively, what kind of information should be entered in the field. A flexfield is an Oracle Applications field made up of segments. Each segment has an assigned name and a set of valid values. Oracle Applications uses flexfields to capture information about your organization. There are two types of flexfields: key flexfields and descriptive flexfields.

30

Page 31: Oracle DBA Faq's

Oracle Import/ Export

What is import/export and why does one need it?

The Oracle export (EXP) and import (IMP) utilities are used to perform logical database backup and recovery. They are also used to move Oracle data from one machine, database or schema to another. The imp/exp utilities use an Oracle proprietary binary file format and can thus only be used between Oracle databases. One cannot export data and expect to import it into a non-Oracle database. For more information on how to load and unload data from files, read the SQL*Loader FAQ. The export/import utilities are also commonly used to perform the following tasks:

Backup and recovery (small databases only) Reorganization of data/ Eliminate database fragmentation Detect database corruption. Ensure that all the data can be read. Transporting tablespaces between databases Etc.

How does one use the import/export utilities?

Look for the “imp” and “exp” executables in your $ORACLE_HOME/bin directory. One can run them interactively, using command line parameters, or using parameter files. Look at the imp/exp parameters before starting. These parameters can be listed by executing the following commands: “exp help=yes” or “imp help=yes”. The following examples demonstrate how the imp/exp utilities can be used: exp scott/tiger file=emp.dmp log=emp.log tables=emp rows=yes indexes=noexp scott/tiger file=emp.dmp tables=(emp,dept)imp scott/tiger file=emp.dmp full=yesimp scott/tiger file=emp.dmp fromuser=scott touser=scott tables=deptexp userid=scott/tiger@orcl parfile=export.txt... where export.txt contains:BUFFER=100000FILE=account.dmpFULL=nOWNER=scottGRANTS=yCOMPRESS=yNOTE: 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_minfrom sys.v_$sqlareawhere sql_text like ‘INSERT %INTO “%’and command_type = 2and 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

31

Page 32: Oracle DBA Faq's

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.logUse 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 pipemknod exp.pipe p# read the pipe - output to zip file in the backgroundgzip < exp.pipe > scott.exp.gz &# feed the pipeexp userid=scott/tiger file=exp.pipe ...

32

Page 33: Oracle DBA Faq's

How can one improve Import/ Export performance?

EXPORT: Set the BUFFER parameter to a high value (e.g. 2M) Set the RECORDLENGTH parameter to a high value (e.g. 64K) Stop unnecessary applications to free-up resources for your job. If you run multiple export sessions, ensure they write to different physical disks. DO NOT export to an NFS mounted filesystem. It will take forever.

IMPORT: Create an indexfile so that you can create indexes AFTER you have imported data. Do this by setting INDEXFILE to a filename and then import. No data will be imported but a file containing index definitions will be created. You must edit this file afterwards and supply the passwords for the schemas on all CONNECT statements. Place the file to be imported on a separate physical disk from the oracle data files Increase DB_CACHE_SIZE (DB_BLOCK_BUFFERS prior to 9i) considerably in the init$SID.ora file Set the LOG_BUFFER to a big value and restart oracle. Stop redo log archiving if it is running (ALTER DATABASE NOARCHIVELOG;) Create a BIG tablespace with a BIG rollback segment inside. Set all other rollback segments offline (except the SYSTEM rollback segment of course). The rollback segment must be as big as your biggest table (I think?) Use COMMIT=N in the import parameter file if you can afford it Use ANALYZE=N in the import parameter file to avoid time consuming ANALYZE statements Remember to run the indexfile previously created

What are the common Import/ Export problems?

ORA-00001: Unique constraint (...) violated - You are importing duplicate rows. Use IGNORE=NO to skip tables that already exist (imp will give an error if the object is re-created).ORA-01555: Snapshot too old - Ask your users to STOP working while you are exporting or use parameter CONSISTENT=NOORA-01562: Failed to extend rollback segment - Create bigger rollback segments or set parameter COMMIT=Y while importingIMP-00015: Statement failed ... object already exists... - Use the IGNORE=Y import parameter to ignore these errors, but be careful as you might end up with duplicate rows.

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.ctlThis sample control file (loader.ctl) will load an external data file containing delimited data: load datainfile ‘c:\data\mydata.csv’into table empfields terminated by “,” optionally enclosed by ‘”’ ( empno, empname, sal, deptno )The mydata.csv file may look like this: 10001,”Scott Tiger”, 1000, 4010002,”Frank Naude”, 500, 20

33

Page 34: Oracle DBA Faq's

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 datainfile *replaceinto table departments( dept position (02:05) char(4),deptname position (08:27) char(20) )begindataCOSC COMPUTER SCIENCEENGL ENGLISH LITERATUREMATH MATHEMATICSPOLY 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 onspool oradata.txtselect col1 || ‘,’ || col2 || ‘,’ || col3from tab1where col2 = ‘XYZ’;spool offAlternatively use the UTL_FILE PL/SQL package: rem Remember to update initSID.ora, utl_file_dir=’c:\oradata’ parameterdeclarefp utl_file.file_type;beginfp := 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 DATAINFILE *INTO TABLE load_delimited_dataFIELDS TERMINATED BY “,” OPTIONALLY ENCLOSED BY ‘”’TRAILING NULLCOLS( data1,data2 )BEGINDATA11111,AAAAAAAAAA22222,”A,B,C,D,”If you need to load positional data (fixed length), look at the following control file example: LOAD DATAINFILE *INTO TABLE load_positional_data( data1 POSITION(1:5),data2 POSITION(6:15) )BEGINDATA

34

Page 35: Oracle DBA Faq's

11111AAAAAAAAAA22222BBBBBBBBBBCan 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 DATAINFILE *INTO TABLE load_positional_dataSKIP 5( data1 POSITION(1:5),data2 POSITION(6:15) )BEGINDATA11111AAAAAAAAAA22222BBBBBBBBBB

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 DATAINFILE *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’)” )BEGINDATA11111AAAAAAAAAA99120122222BBBBBBBBBB990112LOAD DATAINFILE ‘mail_orders.txt’BADFILE ‘bad_orders.txt’APPENDINTO TABLE mailing_listFIELDS 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 DATAINFILE *REPLACEINTO TABLE empWHEN 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

35

Page 36: Oracle DBA Faq's

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 DATAINFILE ‘mydata.dat’ BADFILE ‘mydata.bad’ DISCARDFILE ‘mydata.dis’APPENDINTO TABLE my_selective_tableWHEN (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 DATATRUNCATE INTO TABLE T1FIELDS 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:

36

Page 37: Oracle DBA Faq's

Given the following table: CREATE TABLE image_table (image_id NUMBER(5),file_name VARCHAR2(30),image_data BLOB);Control File: LOAD DATAINFILE *INTO TABLE image_tableREPLACEFIELDS TERMINATED BY ‘,’(image_id INTEGER(5),file_name CHAR(30),image_data LOBFILE (file_name) TERMINATED BY EOF)BEGINDATA001,image1.gif002,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 :-

37

Page 38: Oracle DBA Faq's

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

38

Page 39: Oracle DBA Faq's

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

39

Page 40: Oracle DBA Faq's

representing a consistent set of related records had been written to the Database at the end of a committed Transaction, with no open Transactions.

Ted Codd and his Rules for Relational Databases

THE RULES:

0. (Yes, there is a Rule 0!)For a system to qualify as a RELATIONAL, DATABASE, MANAGEMENT system, that system must use its RELATIONAL facilities (exclusively) to MANAGE the DATABASE.

1. The information ruleThe information rule simply requires all information in the database to be represented in one and only one way, Namely by values in column positions within rows of tables.

2. The guaranteed access ruleThis rule is essentially a restatement of the fundamental requirement for primary keys. It says that every individual scalar value in the database must be logically addressable by specifying the mane of the containing table, the name of the containing column and thePrimary key value of the containing row.

3. Systematic treatment of null valuesThe DBMS is required to support a representation of “missing information and inapplicable Information” that is systematic, distinct from all regular values (for example, “distinct from zero or any other number,” in the case of numeric values), and independent of data type. It is also implied that such representations must be manipulated by the DBMS in a systematic way.

4. Active online catalog based on the relational modelThe system is required to support an online, inline, relational catalog that is accessible to authorized users by means of their regular query language.

5. The comprehensive data sub language ruleThe system must support a least one relational language that (a) Has a linear syntax, (b) Can be used both interactively and within application programs, and © supports data definition operations (including view definitions), data manipulation operations (update as well as retrieval), security and integrity constraints, and transaction management operations (begin, commit, and rollback).

6. The view-updating ruleAll views that are theoretically up datable must be updatable by the system.

7. High-level insert, update, and deleteThe system must support set-at-a-time INSERT, UPDATE, and DELETE operators.

8. Physical data independenceSelf-explanatory.

9. Logical data independenceSelf-explanatory

10. Integrity independenceIntegrity constraints must be specified separately from application programs and stored in the catalog. It must be possible to change such constraints as and when appropriate without unnecessarily affecting existing applications.

11. Distribution independenceExisting applications should continue to operate successfully (a) When a distributed version of the DBMS is first introduced; (b) When existing distributed data is redistributed around the system.

12. The nonsubversion rule

40

Page 41: Oracle DBA Faq's

If the system provides a low-level (record-at-a-time) interface, then that interface cannot be used to subvert the system (e.g.) bypassing a relational security or integrity constraint.

What is Data Warehousing?

Data Warehousing is concerned with the activities involved with creating a DataRepository where you store all the facts you know about some large enterprise or activity, and then analyse the data in different ways,to look for patterns on the data. Typically this is done by large retail organisations, trying to identify patterns in buying behaviour so they can sell more stuff to the poor unsuspecting customer.The most commonly quoted example is that somewhere in the States they discovered that on Friday nights the sales of beer and diapers/nappies went up.The explanation seemed to be that men would call in to buy beer for the weekend and the wives would say “While you are in the supermarket,please pick up some diapers/nappies for the baby”.As a result of this analysis they started putting diapers/nappies next to the beer and increased the sales of both items.TERMS IN COMMON USE in DW is: -Facts - for example, sales in a shop for the beer and nappies example.2) Dimensions - for example, date and time of purchase, product and product category.Then DW involves analyzing Facts by different combinations of Diumensions.For example, “When do we sell most beer? “And “When do we sell most nappies” - then they find the answer to both of these is Friday evening -and hey presto they can make more money by making it easier for the beer-buyers to buy nappies (and please the wife), and vice versa.From this example, you can see that most DW examples and work are pretty boring. A major growth area for DW at present is the storage and analysis of ‘clickstream data’ of traffic on Internet Web Sites. This is typically used to identify hits and page impressions to determine how many people will see a particular banner advertisement on the Web Site. An excellent book covering this very new area is “The Data Webhouse” by Ralph Kimball.3) OLAP: -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 databasesql> shutdown2) startup the database in mount statesql> startup mount3) set the database in archivelog or noarchivelogsql> alter database archivelog | noarchivelog4) open the databasesql> alter database open5) Take a full backup

What are the different ways to stop an Oracle instance?

There are 4 ways to shutdown an Oracle Instance,

1) Normal2) Transactional3) Immediate4) Abort

1) NormalDuring “normal” shutdown no new connections are allowed and the server will wait for all users

41

Page 42: Oracle DBA Faq's

to disconnect before shutting down. The redo buffers and database buffer are written to the datafiles, then the variousbackground processes are terminated and the allocated memory for the SGAare de-allocated. Finally Oracle will close and dismount the database.

2) TransactionalDuring “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) ImmediateDuring “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) AbortDuring abort” shutdown no new connections are allowed. The server will not wait for connected users to disconnect, uncommitted transactions will not be 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 system monitor is responsible for:

1) Instance RecoveryIt rolls forward any data that has been recorded in the online redo log files but not to the data files.It opens the database and any data that is not locked by unrecovered transactions is available to the usersIt rolls back uncommitted transactions (rolled back by SMON or by the server process as they access the locked data)2) Combining or coalesces free space in the data files3) Deallocates temporary segments to return them as free space in the data files.

What does the Process monitor (PMON) do?

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.

Added by Deepak –

1. Check patches applied to db -There are several ways to identify whether a patch applied to database. Few of them –

1)By invoking $ opatch lsinventory.Note that before invoking opatch you have to set or export ORACLE_HOME and then change the directory to opatch.

oracle:/home/oracle APPS> $ opatch lsinventory Invoking OPatch 10.2.0.4.3

Oracle Interim Patch Installer version 10.2.0.4.3 Copyright (c) 2007, Oracle Corporation. All rights reserved.

42

Page 43: Oracle DBA Faq's

Oracle Home : /APPS/app/oracle/product/10.2.0/dbCentral Inventory : /APPS/app/oracle/oraInventory from : /var/opt/oracle/oraInst.loc OPatch version : 10.2.0.4.3 OUI version : 10.2.0.4.0 OUI location : /APPS/app/oracle/product/10.2.0/db/ouiLog file location :/APPS/app/oracle/product/10.2.0/db/cfgtoollogs/opatch/opatch2010-01-07_00-19-28AM.log

Lsinventory Output file location :/APPS/app/oracle/product/10.2.0/db/cfgtoollogs/opatch/lsinv/lsinventory2010-01-07_00-19-28AM.txt

-----------------------------------------------------------------------------Installed Top-level Products (2):

Oracle Database 10g 10.2.0.1.0Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0 There are 2 products in-stalled in this Oracle Home.

There are no Interim patches installed in this Oracle Home.-----------------------------------------------------------------------------OPatch succeeded.

2)By invoking $ opatch lsinventory -details

oracle:/APPS/app/oracle/product/10.2.0/db/OPatch AHDP> $ opatch lsinventory -details Invoking OPatch 10.2.0.4.3

Oracle Interim Patch Installer version 10.2.0.4.3 Copyright (c) 2007, Oracle Corporation. All rights reserved.

Oracle Home : /APPS/app/oracle/product/10.2.0/dbCentral Inventory : /APPS/app/oracle/oraInventory from : /var/opt/oracle/oraInst.locOPatch version : 10.2.0.4.3OUI version : 10.2.0.4.0OUI location : /APPS/app/oracle/product/10.2.0/db/ouiLog file location :/APPS/app/oracle/product/10.2.0/db/cfgtoollogs/opatch/opatch2010-01-07_00-26-17AM.log

Lsinventory Output file location :/APPS/app/oracle/product/10.2.0/db/cfgtoollogs/opatch/lsinv/lsinventory2010-01-07_00-26-17AM.txt

Installed Top-level Products (2):

Oracle Database 10g 10.2.0.1.0Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0There are 2 products installed in this Oracle Home.

Installed Products (160):

10.2.0.1.0SQLJ Runtime Patch 10.2.0.4.0

43

Page 44: Oracle DBA Faq's

SSL Required Support Files for InstantClient 10.2.0.1.0SSL Required Support Files for InstantClient Patch 10.2.0.4.0Sun JDK 1.4.2.13.0Sun JDK extensions 9.0.4.0.0XDK Required Support Files 10.2.0.1.0XDK Required Support Files Patch 10.2.0.4.0XML Parser for Java 10.2.0.1.0XML Parser for Java Patch 10.2.0.4.0XML Parser for Oracle JVM 10.2.0.1.0XML Parser for Oracle JVM Patch 10.2.0.4.0There are 160 products installed in this Oracle Home.

There are no Interim patches installed in this Oracle Home.-----------------------------------------------------------------------------

OPatch succeeded.3)Login to oracle as sys user and invoke select * from sys.registry$history;

SQL> select * from sys.registry$history;ACTION_TIME ACTION NAMESPACE------------------------------- ------------------------------VERSION ID COMMENTS BUNDLE_SERIES------------------------------------ ------------------------------30-JUL-08 05.43.41.290171 PM CPU6452863 view recompilation

08-SEP-08 08.22.59.110066 PM CPU SERVER10.2.0.3.0 6864068 CPUApr2008

05-AUG-09 07.08.18.158451 AM UPGRADE SERVER 10.2.0.4.0 Upgraded from 10.2.0.3.0

05-AUG-09 07.42.03.040347 AM CPU6452863 view recompilation4)Various OS Commands.$ showrev -p$ owhat bin/oracle

Create Index and Rebuilt Index - create index and rebuild index on the original table will be added when the 4 locks on obj$ plus 3 locks to prevent DML operations on the original table create index online and rebuild index online using a temporary table to deal with new or to re-create the original table when the index changes the index column, so that you can not lock the table, ensure that the original form of the dml operations in the process can be run properly. rebuild process can still take the old users to query the index, index, rebuild the index needs twice the space the original index

Test 1: create table lock conn scott / tiger select sid, username from v $ session; create index test_index on test (name);

44

Page 45: Oracle DBA Faq's

SID USERNAME ------- ------------- 139 143 SCOTT

SQL> SELECT OBJECT_NAME, LMODE FROM V $ LOCK L, DBA_OBJECTS O WHERE O. OBJECT_ID = L.ID1 AND L. TYPE = 'TM' AND SID = 143;

OBJECT_NAME LMODE ------------------------------ ---------- OBJ $ 3 TEST 4

Test 2: rebuild online lock alter index test_index rebuild online; SELECT OBJECT_NAME, LMODE FROM V $ LOCK L, DBA_OBJECTS O WHERE O. OBJECT_ID = L.ID1 AND L. TYPE = 'TM' AND SID = 143; OBJECT_NAME LMODE ------------------------------ ---------- SYS_JOURNAL_10499 4 TEST 2

Attached to the lock type 0, 'None', / * Mon Lock equivalent * / 1, 'Null', / * N * / 2, 'Row-S (SS)', / * L * / 3, 'Row-X (SX)', / * R * / 4, 'Share', / * S * / 5, 'S / Row-X (SSX)', / * C * / 6, 'Exclusive', / * X * /

Test 3: In the online renewal process, the database is to record.

First create a large table, to ensure there is sufficient time to observe the details of the index rebuild process. SQL> create table test_rebuild as select * from dba_objects;

Table created.

SQL> insert into test_rebuild select * from test_rebuild;

6398 rows created. Insertion of non-stop data

SQL> /

409472 rows created.

SQL> commit;

Commit complete. SQL> desc test_rebuild Name Null? Type

45

Page 46: Oracle DBA Faq's

----------------------------------------- -------- - -------------------- OWNER VARCHAR2 (30) OBJECT_NAME VARCHAR2 (128) SUBOBJECT_NAME VARCHAR2 (30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2 (18) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2 (19) STATUS VARCHAR2 (7) TEMPORARY VARCHAR2 (1) GENERATED VARCHAR2 (1) SECONDARY VARCHAR2 (1)

SQL> create index idx_rebuild on test_rebuild (object_name);

Index created.

Then the three began to highlight open session 15:13:09 session1> alter index idx_rebuild rebuild online; 15:13:30 session2> select rowid, object_name from scott.test_rebuild where rownum <2;

ROWID OBJECT_NAME ------------------ -------------------------------- ----------------------------

AAABoLAAFAAAAI0AAA old 15:13:41 session2> update scott.test_rebuild set object_name = 'new' where rownum <2;

1 row updated.

15:13:54 SQL> commit;

Commit complete. 15:13:57 session3> select * from scott.SYS_JOURNAL_6668;

C0 OPTODE PARTNO RID -------------------------------------------------- -----

old D 0 AAAAABAAFAAAAI0AAA new I 0 AAAAABAAFAAAAI0AAA

When session1 Report Index altered. And then query select * from scott.SYS_JOURNAL_6668; will prompt table does not exist

Oracle can be seen in the changes to the index out of the process will modify the value to write to create a temporary table SYS_JOURNAL_xxxx, xxxx that index object_id, can query select index_name, object_id from user_objects get such example update operation, the temporary creation table records the two movements, a representative of the old value of D to delete, the representative I insert a new value, while recording changes rowid. Modifications to the non-indexed column SYS_JOURNAL_xxxx no records.

Added: If the building is the combination of the index create index idx_rebuild on test_rebuild (object_name, status) online

46

Page 47: Oracle DBA Faq's

, The query select * from scott.SYS_JOURNAL_6668;C0 C1 O PARTNO RID ------------------------------ ------- - ---------- - ---------------- new invalid I 0 BAEAAAAAFAAAAI0AAA old invalid D 0 BAEAAAAAFAAAAI0AAA Combination of the two columns built an index, it will create the temporary table has two columns C at the beginning

RMAN - Backup current controlfile creates a BACKUPSET containing controlfile. You don't have to give the FILENAME

Backup controlfile copy <filename> creates a BACKUPSET from a copy of con-trolfile. You have to give the FILENAME.

RMAN architecture as follows:

1, RMAN tool is RMAN commands, originated in the Oracle version 8, generally in the $ORACLE_HOME /bin directory, you can run the rman this command to start the RMAN tool for backup and restore interface.

2, the service process RMAN service process is a background process, with the RMAN tool for communication between the database and also for the RMAN tool and disk / tape, etc. I/O communication between devices, services, backup and recovery process for all the work in the following circumstances will result in a service process when connecting to the target database is assigned a new channel

3, channel-channel is a service process and I / O devices read and write channels, a channel will correspond to a service process, in the distribution channel, the need to consider the I / O device of the type, I / O parallel processing capacity, I / O devices to create the file size, the largest database file read rate, the maximum number of open files and so on.

4, The target database RMAN backup and recovery is a database, RMAN can back up in addition to the online log, pfile, password file other than data files, control files, archived log, spfile. 5, Recovery catalog to store information on backup and restore a database, is not recommended to create the target database, using recovery catalog can also manage multiple target databases, the backup storage for more information, you can store the backup script. If you do not use recovery catalog, you can use control file instead of recovery catalog, oracle 9i as the functions of automatic backup control file, using a large extent can be replaced to restore control file directory. 6, media management Media Management Layer (MML) is a third-party tools or software for the management of the tape read and write and document tracking management. If you want RMAN backups directly to tape, you must configure the media management, media management tools such as backup software can call the RMAN to back up and recovery.

7, Backup, backup sets and backup time when the issue of backup command, RMAN will create a complete backup, including one to the multiple backup sets, backup set is a logical structure, contains a set of physical files. The physical file corresponding to the backup piece. Backup

47

Page 48: Oracle DBA Faq's

piece is the most basic physical structure, can produce a disk or tape, you can target database that contains the data files, control files, archived log files and spfile. Backup sets and backup the following provisions: A data file can not span a backup set, but can span the backup piece, data files, control files can be saved in the same backup sets, but can not be stored in the same archive log backup set. Second, start and run RMAN

2.1 Operation requirements 1, The process requires more process and memory needs of a large pool allocation 2, the basic needs of the environment variable ORACLE_SID, ORACLE_HOME, PATH, NLS_LANG, if used in a time-based backup and recovery, need another set NLS_DATE_FORMAT 3, The permissions need SYSDBA system privileges required, if local, can use OS authentication, the remote requires authentication using the password file. 4, version requirements RMAN tool version and the target database must be the same version, if you use a recovery catalog, also need attention:* Create a RMAN recovery catalog script version must be equal to or greater than the version to restore directory where the database creates RMAN recovery catalog script version must be equal to or greater than the target database version

2.2 Basic operation method 9i default nocatalog, do not use the recovery catalog, enter the command rman RMAN command line interface, such as [Oracle @ db oracle] $ $ ORACLE_HOME / bin / rman Recovery Manager: Release 9.2.0.4.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> Connect the target database, you can use the following similar command RMAN> Connect target / 2.3 how to run RMAN commands like 1, a single execution RMAN> backup database;

2, run a command block RMAN> run ( copy datafile 10 to '/ oracle/prod/backup/prod_10.dbf'; )

3, run the script $ Rman TARGET / @ backup_db.rman RMAN> @ backup_db.rman RMAN> RUN (@ backup_db.rman) Run stored in the recovery catalog script RMAN> RUN (EXECUTE SCRIPT backup_whole_db);

4, SHELL script, if executed in cron, pay attention to set the correct environment variables in the script [Oracle @ db worksh] $ more rmanback.sh #! / Bin / ksh # Set env export ORACLE_HOME = / opt/oracle/product/9.2 export ORACLE_SID = test

48

Page 49: Oracle DBA Faq's

export NLS_LANG = "AMERICAN_AMERICA.zhs16gbk" export PATH = $ PATH: $ ORACLE_HOME / bin echo "----------------------------- start ------------------ -----------"; date # Backup start $ ORACLE_HOME / bin / rman <<EOF connect target delete noprompt obsolete; backup database format '/ netappdata1/rmanback/tbdb2 /% U_% s.bak' filesperset = 2; exit; EOF echo "------------------------------ end ----------------- -------------"; date

3, RMAN's automatic configuration Oracle 9i can configure the number of parameters such as channel, backup strategies, maintain the information, through a set can be repeatedly used, and set the information in the script does not affect the re-set. RMAN default configuration parameters can be seen through the show all come out.

RMAN> show all; RMAN configuration parameters are: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; CONFIGURE BACKUP OPTIMIZATION OFF; CONFIGURE DEFAULT DEVICE TYPE TO DISK; CONFIGURE CONTROLFILE AUTOBACKUP OFF; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE DISK TO '% F'; CONFIGURE DEVICE TYPE DISK PARALLELISM 1; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; CONFIGURE MAXSETSIZE TO UNLIMITED; CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/ U01/app/oracle/product/9.0.2/dbs/snapcf_U02.f';

3.1 maintain a backup strategy to keep two strategies, one strategy is time to decide at least one backup to restore to the specified date, a redundancy strategy, provides at least a few redundant backup. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS; CONFIGURE RETENTION POLICY TO REDUNDANCY 5; CONFIGURE RETENTION POLICY TO NONE;

In the first strategy is to ensure that at least one backup can be restored to Sysdate-5 time point, the backup will be marked prior to Obsolete. The second strategy described at least three redundant backup exist, if the excess over the three backups will be marked as redundant backup. NONE can maintain a strategy of failure to make a backup, Clear will maintain the strategy to restore the default.

3.2-channel configuration and automatic channel allocation configuration through the CONFIGURE automatic distribution channel, but also through a different channel number to specify the distribution. CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/ U01/ORACLE/BACKUP /% U' CONFIGURE CHANNEL n DEVICE TYPE DISK FORMAT '/ U01/ORACLE/BACKUP /% U' Of course, you can run block, manually specify the channel distribution, so, will replace the default channel allocation. Run (

49

Page 50: Oracle DBA Faq's

allocate channel cq type disk format = '/ u01/backup /% u.bak' ... ... ) Here are some characteristics of read channel rate limiting Allocate channel ... ... rate = integer The maximum size limit backup piece Allocate channel ... ... maxpiecesize = integer The maximum number of concurrent open files (default 16) Allocate channel ... ... maxopenfile = integer

3.3 Automatic backup control file starting from 9i, you can configure the automatic backup control file, but this set is in standby database failure. By the following command, you can set the automatic backup control file CONFIGURE CONTROLFILE AUTOBACKUP ON; Did not resume the directory for the backup strategy is, this feature is particularly effective, automated backup control file backup or copy Zairen He happened the Order of, or after any change in the database's structure. The configuration can be specified as the backup control file path and format CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR TYPE DISK TO '% F';During the backup, will produce a snapshot control file, used to control the read consistency of the file, the snapshots can be configured as follows CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/ U01/app/oracle/product/9.0.2/dbs/snapcf_U02.f'; 3.4 Parallel backup set RMAN supports parallel backup and restore, you can also specify a default in the configuration of parallel level. As CONFIGURE DEVICE TYPE DISK PARALLELISM 4; Specified in subsequent backup and recovery, the parallel degree of 4, 4 channels simultaneously open the backup and recovery, of course, can also run the operation block in the specified channel to determine the degree of parallel backup and restore. Determine the number of parallel open channel number. If you specify a channel configuration, will use the specified channel, if the channel is not specified, will use the default channel configuration.

3.5 Configure the default IO device type IO device type can be a disk or tape, in case of default is the disk, the following command can be re-configured. CONFIGURE DEFAULT DEVICE TYPE TO DISK; CONFIGURE DEFAULT DEVICE TYPE TO SBT; Note that if for an IO device, the corresponding configuration changes also needs to be done, such as RMAN> CONFIGURE DEVICE TYPE SBT PARALLELISM 2;

3.6 Configuring the number of multiple backup copies of a single backup set, if that does not worry, you can set up multiple copies of backup sets, such as CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2; CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2; If you specify more than one copy, you can configure in the channel configuration or the backup location specified in multiple copies CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/ u01/backup /% U', '/ u02/backup /% U'; RMAN> backup datafile n format '/ u01/backup /% U', '/ u02/backup /% U';

3.7 Optimizing the backup set in the configuration backup can be optimized, such as

50

Page 51: Oracle DBA Faq's

CONFIGURE BACKUP OPTIMIZATION ON; If the optimal set to open, will back up data files, archive log, or backup sets to run an optimization algorithm. The same DBID, checkpoint SCN, ResetlogSCN and time normal offline, read-only or normal log off filing the same thread, sequence number and time RESETLOG SCN

3.8 backup file format backup file to customize a variety of formats, as follows % C backup copies of films % D database name % D in the first few days of the mid-(DD) % M in the first few months in the (MM) % F DBID a unique name based on this format in the form of c-IIIIIIIIII-YYYYMMDD-QQ, One IIIIIIIIII the database DBID, YYYYMMDD for the date, QQ is the sequence of a 1-256 % N database name, the right to fill to the maximum of eight characters % U the name of a representative of eight characters and create the backup set time % P Backup piece of the backup set number, starting from a number of documents to create % U a unique file name, on behalf of% u_% p_% c % S Backup set number % T Backup set timestamp % T years day format (YYYYMMDD) Fourth, the RMAN backup RMAN can be used to back up the primary or standby database, such as tablespaces, data files, archive logs, control files, server files and backup sets.

4.1 The file copy of the original file copy, a bit like OS hot backup, you can copy the entire data file to another location, but the results can only be written to the hard disk, and separate files are separate. Example of a file copy run ( allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; copy # first datafile 1 to '$ HOME/prd1.dbf', datafile 2 to '$ HOME/prd2.dbf'; copy # second datafile 3 to '$ HOME/prd3.dbf'; sql 'alter system archive log current'; )

4.2 backup and backup sets RMAN backup is to generate only regular RMAN backup sets can be identified, so, in addition to other than the backup copy command, all RMAN backup sets created and the corresponding backup pieces. Example of a backup database, open the two channels, the database backup to tape run ( allocate channel t1 type 'SBT_TAPE'; allocate channel t2 type 'SBT_TAPE'; backup filesperset 2 format 'df_% t_% s_% p' database; ) RMAN can also be achieved with multiple mirror backup

51

Page 52: Oracle DBA Faq's

Run ( allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; SET BACKUP COPIES 3; BACKUP DATAFILE 7 FORMAT '/ tmp /% U','?/ oradata /% U','?/% U'; ); The following are common examples of the backup archive RMAN> sql 'alter system archive log current'; RMAN> backup archivelog all delete input; RMAN> backup archivelog from time '01-jan-00 'until time '30-jun-00'; RMAN> backup archivelog like 'oracle / arc / dest / log%'; RMAN> backup archivelog all; RMAN> backup archivelog from logseq 20 until logseq 50 thread 1; RMAN> backup archivelog from scn 1 until scn 9999;In the RAC environment, because the database is shared, so you can connect to an instance you can back up the entire database, however, because archived logs can be backed up locally, so RAC archive log backup to become more complex, we can connect to the Two examples of the channel to back up two instances of the archive log. run ( ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys / pass @ dbin1'; ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys / pass @ dbin2'; sql 'ALTER SYSTEM ARCHIVE LOG CURRENT'; backup archivelog all delete input format '/ u01/dbbak /% U_% s.bak' filesperset = 5; )

4.3 Common backup parameters 1, Keep the special parameters can be maintained long-term backup or copy them from the default backup strategy of keeping, such as RMAN> BACKUP DATABASE KEEP UNTIL TIME 2> "to_date ('31-MAR-2002 ',' DD_MM_YYYY)" nologs; RMAN> BACKUP TABLESPACE SAMPLE KEEP FOREVER NOLOGS; That can not keep them NOLOGS since the backup archive log, the default is the LOGS, said that since the parameters of the retention of the backup, the backup if you want a permanent and effective, you can use FOREVER parameters. 2, Tag parameters specify the backup set of signs, up to 30 characters in length, such as RMAN> BACKUP DEVICE TYPE DISK DATAFILE 1 TAG 2> "wkly_bkup"; After the Oracle 92 release, RMAN automatically provides a TAG, the format TAGYYYYMMDDTHHMMSS as TAG20020208T133437, through the backup flag TAG, also can easily recover from a backup set, such as Restore database from tag = 'tag name' 4.4 incremental backup before incremental backup in the notes, we must first understand the difference between incremental and cumulative incremental backups, and incremental backups of the backup and recovery principles. Incremental difference, is the default incremental backup. Cumulative incremental backup, you can see, the difference is incremental backup since the changes in higher-level or equivalent backup block, the cumulative incremental backup is a backup since the changes in higher-level block. Cumulative incremental backups increases the time, but because the recovery time, less need to focus on restoring the backup data, so in order to reduce recovery time, the cumulative incremental backups incremental backups more efficient than the differences. Whatever incremental backup, the Oracle version 9, or the need to compare all the data blocks in the database, this process is also a long process, and because the formation of a number of

52

Page 53: Oracle DBA Faq's

different incremental backup backup set, make recovery becomes more unreliable and slow, so incremental backups in version 9 is still tasteless, unless very large data warehouse system, no need to choose an incremental backup. Oracle version 10 in the incremental backup made a big improvement, you can make incremental backups into a truly incremental, because the special increment by the log, so RMAN does not need to compare the database of each block, of course the price is the log IO and disk space to pay, full or not suitable for OLTP systems. In addition, version 10 through the back of the merger, so that the result of incremental backups can be combined together, and completely reduced recovery time. Incremental backup requires a foundation, such as level 0 incremental backup is the foundation of all backup, level 0 backup and full backup of the difference is level 0 backup can be used as the basis for other incremental backup backup backup and all is not possible, whether Select incremental backup as your backup strategy, ultimately, you need to have a clear understanding of their own. The following are examples of zero-level backup backup incremental level 0 database; An example of the incremental difference backup incremental level 1 database; An example of the cumulative incremental backup incremental level 1 cumulative database;

4.5 Validate backup checks we can check whether the command to back up, such as data file exists, the existence of bad blocks can not be backed up, such as: BACKUP VALIDATE DATABASE; BACKUP VALIDATE DATABASE ARCHIVELOG ALL; 4.6 Restart the backup for the backup abnormal end, many people may not want to start back up it again, especially back up to 90%, and the reasons for abnormal termination of the backup, then how should we do? RMAN provides a way to start back up, through a simple command, you can only back up that less than 10% of the data. RMAN> BACKUP NOT BACKED UP SINCE TIME 'SYSDATE-14' 2> DATABASE PLUS ARCHIVELOG;

4.7 RMAN The following dynamic performance view has a relationship with the RMAN backup some dynamic performance view, information is obtained from the control file. V$ARCHIVED_LOG V$BACKUP_CORRUPTION V$COPY_CORRUPTION V$BACKUP_DATAFILE V$BACKUP_REDOLOG V$BACKUP_SET V$BACKUP_PIECE V$BACKUP_DEVICE V$CONTROLFILE_RECORD_SECTION Here is a view, we can roughly monitor the extent to RMAN backups. Such as through the following SQL script, will be the backup progress. SQL> SELECT SID, SERIAL #, CONTEXT, SOFAR, TOTALWORK, 2 ROUND (SOFAR / TOTALWORK * 100,2) "% _COMPLETE" 3 FROM V $ SESSION_LONGOPS 4 WHERE OPNAME LIKE 'RMAN%' 5 AND OPNAME NOT LIKE '% aggregate%' 6 AND TOTALWORK! = 0 7 AND SOFAR <> TOTALWORK; SID SERIAL # CONTEXT SOFAR TOTAL WORK% _COMPLETE--- ------- ------- ------- --------- ----------

53

Page 54: Oracle DBA Faq's

13,751,947,015,360 61.65 128,111,587,128,160 56.36

5, restore and recovery 5.1 General Reduction and Recovery RMAN in the recovery process can be divided into restore (restore) and restore (recover), their meaning is very different, one is the physical meaning of the file to restore and copy, a means to restore database consistency, Therefore, the correct understanding of these two concepts will help to restore the correct database. The RMAN backup, restore operations can only be in use RMAN or RMAN packages do, and for the recovery operation is very flexible, and in addition to RMAN, can be completed in SQLPLUS. Restore and restore a database, you can use the following two simple commands to complete RMAN> restore database; RMAN> recover database; To restore a table space, or restore a data file, restore the database can take relatively less time. RMAN> SQL "ALTER TABLESPACE tools OFFLINE IMMEDIATE"; RMAN> RESTORE TABLESPACE tools; RMAN> RECOVER TABLESPACE tools; RMAN> SQL "ALTER TABLESPACE tools ONLINE"; The database and data files, you can restore from the specified tag RMAN> RESTORE DATAFILE 1 FROM TAG = 'tag name' The recovery time is not fully recovered, may only completely restore the database. RMAN> RUN ( 2> ALLOCATE CHANNEL c1 TYPE DISK; 3> ALLOCATE CHANNEL c2 TYPE DISK; 4> SET UNTIL TIME = '2002-12-09: 11:44:00 '; 5> RESTORE DATABASE; 6> RECOVER DATABASE; 7> ALTER DATABASE OPEN RESETLOGS;) Incomplete recovery in RMAN can also log-based recovery RMAN> RUN ( 2> SET UNTIL SEQUENCE 120 THREAD 1; 3> ALTER DATABASE MOUNT; 4> RESTORE DATABASE; 5> RECOVER DATABASE; # recovers through log 119 6> ALTER DATABASE OPEN RESESTLOGS; 7>) If possible, you can restore data files to a new location SET NEWNAME FOR datafile '/ U01/oradata/tools01.dbf' TO '/ tmp/tools01.dbf'; RESTORE datafile '/ u01/oradata/tools01.dbf'; SWITCH DATAFILE ALL; In addition to restoration of database and data files, we can restore control file, need to start to nomount, using the following command can be Restore controlfile from 'file name' Restore controlfile from autobackup Restore controlfile from tag = '... ...' Under normal circumstances, no recovery archive log, the recovery process will automatically search for the required archive logs, of course, we can specify where to restore. SET ARCHIVELOG DESTINATION TO '/ u02/tmp_restore'; RESTORE ARCHIVELOG ALL; If you use the server parameter file (spfile), RMAN can back up the parameter file, in case of file corruption, you can use RMAN to restore spfile parameter file, in case of no parameter file,

54

Page 55: Oracle DBA Faq's

using Rman temporary parameter file to start the database Nomount under execute the following command can be Restore controlfile from autobackup Restore controlfile from 'file name'

5.2 The special circumstances of the restoration of lost in the assumption that recovery catalog and control file, only the backup sets and backup pieces, this time may only be restored from the file. The following is a call dbms_backup_restore package, from file recovery example. declare devtype varchar2 (100); done boolean; recid number; stamp number; fullname varchar2 (80); begin devtype: = dbms_backup_restore.deviceallocate ('sbt_tape', params => 'ENV = (NSR_SERVER = backup_server) '); dbms_backup_restore.restoresetdata file; dbms_backup_restore.restorecontrolfileto ( 'First_control_file'); dbms_backup_restore.restorebackuppiece ('backup_piece', done); dbms_backup_restore.copycontrolfile ('first_control_file', 'Second_control_file', recid, stamp, fullname); - Repeat the above copycontrolfile for each control file end; /

5.3 Reduction of inspection and test to check the same with the backup, restore operations can also check whether the normal restore or if the backup set is valid. Such as: RMAN> RESTORE DATABASE VALIDATE; RMAN> VALIDATE BACKUPSET 218; Recover can be tested, test recovery error, the error message recorded in the alert file, pass the test, we can know whether the restore operation completed normally. SQL> RECOVER TABLESPACE sales TEST; SQL> RECOVER DATABASE UNTIL CANCEL TEST 5.4-level recovery block restoration Block Media Recovery (BMR), block the restoration of the smallest unit, the block can reduce recovery time, and data files online. Recovery block when the block must specify the specific number, such as: BLOCKRECOVER datafile 6 BLOCK 3;To recover the bad block information from the alarm and tracking files, table and index analysis, DBV tools or third-party media management tools, and get a specific query. Causes of damage produced block generally intermittent or random IO errors or block of memory error. Block error information is stored in V $ DATABASE_BLOCK_CORRUPTION, use the following command to restore the view out the bad block RMAN> BLOCKRECOVER CORRUPTION LIST 2> RESTORE UNTIL TIME 'sysdate - 10'; Backup bad block information stored in V $ BACKUP_CORRUPTION V $ COPY_CORRUPTION Can use the following command to recover bad blocks. BLOCKRECOVER datafile 2 BLOCK 12, 13 datafile 7 BLOCK 5, 98, 99 datafile 9 BLOCK 19; BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 FROM TAG

55

Page 56: Oracle DBA Faq's

"Weekly_backup"; BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404, 4194405 RESTORE UNTIL TIME 'SYSDATE-2';

5.5 Database replication can be used RMAN to copy and clone the database, RMAN provides a special command to complete this operation. As CONNECT TARGET CONNECT AUXILIARY SYS / aux_pwd @ newdb DUPLICATE TARGET DATABASE TO ndbnewh LOGFILE '? / Dbs/log_1.f' SIZE 100M, '? / Dbs/log_2.f' SIZE 100M SKIP READONLY NOFILENAMECHECK; In the above command before, note the following points 1, back up all data on the primary database files, control files, and backup and archive logs generated after the backup, and the need to copy the backup copy to the machine the same directory (if not the same directory, in linux / unix environment may be considered to establish a link to complete). 2, copy the primary database initialization parameter file to the copy machine and make the appropriate changes, such as modifying the database name and instance name 3, in the copy machine to create a new password file, and start copying the database to nomount next. 4, configure the primary database to copy the database or copy a database of network connections to the main database. 5 in the main database or copy the database to run RMAN, are connected to the primary database and copy the database instance. 6, run the copy command, the command will restore all data files, re-create the control file, and start using the new parameter file to restore the database to a consistent state, and finally with resetlog open the database, create the specified redolog. Copy command can also backup from the tape copy, and change the database name, you can also change the database file of the new path and return to the previous point in time, skip the copy of the table space does not need, such as a more complex replication command: RUN ( ALLOCATE AUXILIARY CHANNEL newdb1 DEVICE TYPE sbt; DUPLICATE TARGET DATABASE TO newdb DB_FILE_NAME_CONVERT = ('/ h1/oracle/dbs/trgt /','/ h2/oracle/oradata/newdb /') UNTIL TIME 'SYSDATE-1' # specifies incomplete recovery SKIP TABLESPACE cmwlite, drsys, example # skip desired tablespaces PFILE =? / Dbs / initNEWDB.ora lOGFILE GROUP 1 ('? / Oradata/newdb/redo01_1.f', '? / Oradata/newdb/redo01_2.f') SIZE 200K, GROUP 2 ('? / Oradata/newdb/redo02_1.f', '? / Oradata/newdb/redo02_2.f') SIZE 200K GROUP 3 ('? / Oradata/newdb/redo03_1.f', '? / Oradata/newdb/redo03_2.f') SIZE 200K REUSE; )

5.6 Using RMAN to create standby database using RMAN to create standby database can be used two ways, one is conventional Restore command from the main database using backup control file copy in the past, to start to back-mount standby database, this time to the standby

56

Page 57: Oracle DBA Faq's

database there is no data file. And then back-end, start the RMAN command, connect to the database (DBID as the main database), the master database from backup to restore RMAN copied out. Finally, like other methods, and access to the management of backup recovery mode.

Another way is to copy the commands, such as DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK; The following detailed description of this process. 1, create a backup parameter file and password file, start the standby database to the next nomount 2, back up the primary database and standby control file and all archives RMAN> Backup Database; RMAN> Backup current controlfile for standby; RMAN> sql "Alter System Archive Log Current"; RMAN> Backup filesperset 10 ArchiveLog all delete input; 3, copy the backup to the standby database, all the same path 4, configure the primary database to the standby database connection 5, start RMAN rman target / auxiliary sys / change_on_install @ STANDBY 6, start creating standby database RMAN> duplicate target database for standby dorecover nofilenamecheck; The whole process including the creation of the standby control file, start to the Mount, the parameter file path specified in the reduction of conversion and data files, archive log restore so. 7, the final restoration of the log and start to manage recovery mode. SQL> recover standby database; SQL> alter database recover managed standby database disconnect; 6, RMAN management 6.1Report commandReport command can detect those files to backup, the backup file can be deleted and those who can not obtain information, such as the reporting database can be backed up data files for all objects Report schema Or RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14'; RMAN> REPORT SCHEMA AT SCN 1000; RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1; Report need backup of data files Report need backup [redundancy | days | incremental n]; Report out of date or unavailable data file backup and copy Report obsolete [orphan] Report not available or inaccessible data file information Report unrecoverable [database]

6.2 List command List command is usually used to view the backup and copy information, such as view the backup information List backup View the backup summary information List backup summary View the file copy of the information List copy See detailed backup information List backup of datafile 'file name' list incarnation of database;

57

Page 58: Oracle DBA Faq's

6.3 Crosscheck command checks the disk or tape backup or copy is correct, and update the status of backup or copy, if incorrect, will be marked as expired (expired) Crosscheck backup; Crosscheck archivelog all; Delete [noprompt] expired backup command to delete expired backups can also be used to view the report of the List LIST EXPIRED BACKUP; LIST EXPIRED BACKUP SUMMARY;

6.4 Delete command Delete command can be used to delete the backup, or to remove abandoned or expired backup sets, such as delete the specified backup sets and backup pieces RMAN> DELETE BACKUPPIECE 101; RMAN> DELETE CONTROLFILECOPY '/ tmp/control01.ctl'; RMAN> DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt; Remove outdated or obsolete backup RMAN> DELETE EXPIRED BACKUP; RMAN> DELETE NOPROMPT OBSOLETE; RMAN> DELETE OBSOLETE REDUNDANCY = 3; RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS; Remove the backup archive RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;

7, recovery catalog Oracle version 9, because the control files automatically backed up, you can become a great extent do not need to restore catalog, but to restore the directory using the following benefits have only been restored some order catalog support (for 9i, the special operation is to restore directory statements only) * Be able to retain more historical backup information to manage a recovery catalog database, if multiple targets with the backup in 9i ago, lost control of files not restored directory will be hard to recover without recovery catalog, and place the structure on De change, time of recovery requires careful operation can storage backup and recovery of the script can see, is mainly to retain more of Beifenxinxi Yu Fang Bian's Guanli multiple Mubiao database, this target database in the Zhongduo case, is can be considered.

7.1 Creating restore directory attention, recovery catalog and target database do the same machine, but also relatively small size requirements. SQL> create user RMAN identified by RMAN 2 temporary tablespace TEMP 3 default tablespace RCVCAT 4 quota unlimited on RCVCAT; SQL> grant recovery_catalog_owner to RMAN; RMAN> create catalog RMAN> register database; Recovery catalog can be used to upgrade and delete the following command RMAN> UPGRADE CATALOG; RMAN> DROP CATALOG;

7.2 recovery catalog management to support the following command to restore directory (CREATE | UPGRADE | DROP) CATALOG (CREATE | DELETE | REPLACE | PRINT) SCRIPT LIST INCARNATION REGISTER DATABASE REPORT SCHEMA AT TIME

58

Page 59: Oracle DBA Faq's

RESET DATABASE RESYNC CATALOG 1, Resync command Resync can be synchronized between the database and recovery catalog information, in practice, rman can generally be automatically synchronized. In the following circumstances need to synchronize changes in the physical structure of the database data file is to change the size of the increase or remove the rollback tablespace to create and delete the archive logs to generate 10 per 2, Reset command after the target database resetlogs need to reset the recovery catalog. Reset command to reset the recovery catalog. 7.3 recovery catalog view to restore directory itself has a view of the target database for the storage and backup information, such as the restoration of directory-related view RC_DATABASE RC_DATAFILE RC_STORED_SCRIPT RC_STORED_SCRIPT_LINE RC_TABLESPACE

By the following command to view information select * from rc_database; 7.4 Storage store script script RMAN> creata script level0backp ( backup incremental level 0 format '/ u01/db01/backup /% U' filesperset 5 database plus archivelog delete input; sql 'alter database archive log current'; ) Scripting RMAN> run (execute script Level0backup;) Update script RMAN> replace script level0backup ( ... ... ) Remove ScriptRMAN> delete script Level0backup; View Script RMAN> print script level0backup; Section RMAN architecture and operating method RMAN for common backup methods Reduction and Recovery RMAN Management method and common RMAN recovery catalog and restore order to use the directory command in Appendix abandoned and replaced by a new version of the old command syntax of the command current

9.2 REPLICATE RESTORE CONTROLFILE FROM ... SET AUTOLOCATE Now enabled by default. ALLOCATE CHANNEL FOR DELETE Not available

59

Page 60: Oracle DBA Faq's

901 ALLOCATE CHANNEL ... TYPE CONFIGURE CHANNEL ... DEVICE TYPE 9.0.1 ALLOCATE CHANNEL ... KBYTES CONFIGURE CHANNEL ... MAXPIECESIZE 901 ALLOCATE CHANNEL ... READRATE CONFIGURE CHANNEL ... RATE 9.0.1 ... ARCHIVELOG ... LOGSEQ ... ARCHIVELOG ... SEQUENCE 9.0.1 BACKUP ... SETSIZE BACKUP ... MAXSETSIZE 9.0.1 CHANGE ... CROSSCHECK CROSSCHECK 9.0.1 CHANGE ... DELETE DELETE 9.0.1 REPORT ... AT LOGSEQ REPORT ... AT SEQUENCE 9.0.1 SET AUXNAME CONFIGURE AUXNAME A practical script, including the RAC database backup and archiving log shell script [Oracle @ db worksh] $ more rmanback.sh #! / Bin / sh # Set env export ORACLE_HOME = / opt/oracle/product/9.2 export ORACLE_SID = db2in1 export NLS_LANG = "AMERICAN_AMERICA.zhs16gbk" export PATH = $ PATH: $ ORACLE_HOME / bin: / sbin: / usr / sbin echo "----------------------------- start ------------------ -----------"; date # Backup start $ ORACLE_HOME / bin / rman <<EOF connect target delete noprompt obsolete; backup database include current controlfile format '/ rmanback/db2 /% U_% s.bak' filesperset = 2; run ( ALLOCATE CHANNEL node_c1 DEVICE TYPE DISK CONNECT 'sys / pass @ db1in1'; ALLOCATE CHANNEL node_c2 DEVICE TYPE DISK CONNECT 'sys / pass @ db2in2'; sql 'ALTER SYSTEM ARCHIVE LOG CURRENT'; backup archivelog all delete input format '/ rmanback/db2 /% U_% s.bak' filesperset = 5; ) list backup; exit; EOF echo "------------------------------ end ----------------- -------------"; date

Why RMAN Backup -

On top of all of the good things you have said there are a couple of other very very good things about RMAN:

1. It is much (MUCH) faster than OS file copies by a long shot. I can fully backup small databases even on Windoze in a few minutes.2. It deals with the backup process at the block level so it waits for each block to become consistent to back it up, therfore no "cracked blocks" like file copying.3. You can "easily" parallelize backup and much more importantly it can par-allelize recovery.

60

Page 61: Oracle DBA Faq's

4. Backup retension scheduling is built-in, no more do I delete this backup or not, it's part of your design and deployment process.5. It can manage the archived redo log automatically for you (getting them off the system to somewhere safe is important) including deleting the old logs.6. It deals with cold backups (if anybody actually wants to do one anymore).7. One RMAN catalog database can manage a complete enterprise, Unix, Windoze who cares and it can do it concurrently because the Oracle database Server is doing the real work.8. Testing backups without restoral is built-in and that's nice as well.9. No more putting tablespaces in backup mode and hammering the daylights out of the redo log system.10. Making standby databases and cloning is way simpler under RMAN becuse it is designed to do that for you.

Flushing the shared poolTo flush the shared pool use:

ALTER SYSTEM FLUSH SHARED_POOL;

Flushing the buffer cacheIn Oracle 10.1 and above, the following supported command can be used to flush the buffer cache:

ALTER SYSTEM FLUSH BUFFER_CACHE;

In Oracle 9.0.1 and above the following unsupported command can also be used to flush the buffer cache:

ALTER SESSION SET EVENTS 'immediate trace name flush_cache';

After this command has been executed, the STATE column for all rows in X$BH will be zero unless the block is cur-rently pinned

In Oracle 9.2.0.1 (Windows 2000) the equivalent ORADEBUG command fails with ORA-3113

Forcing a checkpointTo force a checkpoint use

ALTER SYSTEM CHECKPOINT;

Forcing a logfile switchTo force a logfile switch use

ALTER SYSTEM SWITCH LOGFILE;

Events

IntroductionEnabling EventsListing All EventsListing Enabled EventsEvent Reference

61

Page 62: Oracle DBA Faq's

IntroductionThere are four types of numeric events

Immediate dumps

Conditional dumps

Trace dumps

Events that change database behaviour

Every event has a number which is in the Oracle error message range e.g. event 10046 is ORA-10046

Each event has one or more levels which can be

range e.g. 1 to 10

bitmask e.g. 0x01 0x02 0x04 0x08 0x10

flag e.g. 0=off; 1=on

identifier e.g. object id, memory address etc

Note that events change from one release to another. As existing events become deprecated and then obsolete, the event number is frequently reused for a new event. Note also that the message file sometimes does not reflect the events in the current release.

Many events change the behaviour of the database. Some testing events may cause the database to crash. Never set an event on a production database without obtaining permission from Oracle support. In addition, never set an event on a development database without first making a backup.

Enabling EventsEvents can be enabled at instance level in the init.ora file using

event='event trace name context forever, level level';

Multiple events can be enabled in one of two ways

1 - Use a colon to separate the event text e.g.

event = "10248 trace name context forever, level 10:10249 trace name con-text forever, level 10"

2 - List events on consecutive lines e.g.

event = "10248 trace name context forever, level 10" event = "10249 trace name context forever, level 10"

Note that in some versions of Oracle, the keyword "event" must be in the same case (i.e. always uppercase or al-ways lowercase).

Events can also be enabled at instance level using the ALTER SYSTEM command

ALTER SYSTEM SET EVENTS 'event trace name context forever, level level';

Events are disabled at instance level using

ALTER SYSTEM SET EVENTS 'event trace name context off';

Events can also be enabled at session level using the ALTER SESSION command

ALTER SESSION SET EVENTS 'event trace name context forever, level level';

Events are disabled at session level using

ALTER SESSION SET EVENTS 'event trace name context off';

Events can be enabled in other sessions using ORADEBUG

To enable an event in a process use

62

Page 63: Oracle DBA Faq's

ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level

For example to set event 10046, level 12 in Oracle process 8 use

ORADEBUG SETORAPID 8 ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12

To disable an event in a process use

ORADEBUG EVENT event TRACE NAME CONTEXT OFF

To enable an event in a session use

ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level

For example

ORADEBUG SESSION_EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12

To disable an event in a session use

ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT OFF

Events can be also enabled in other sessions using DBMS_SYSTEM.SETEV

The SID and the serial number of the target session must be obtained from V$SESSION.

For example to enable event 10046 level 8 in a session with SID 9 and serial number 29 use

EXECUTE dbms_system.set_ev (9,29,10046,8,'');

To disable event 10046 in the same session use

EXECUTE dbms_system.set_ev (9,29,10046,0,'');

Listing All EventsMost events are numbered in the range 10000 to 10999. To dump all event messages in this range use

SET SERVEROUTPUT ON DECLARE err_msg VARCHAR2(120); BEGIN dbms_output.enable (1000000); FOR err_num IN 10000..10999 LOOP err_msg := SQLERRM (-err_num); IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN dbms_output.put_line (err_msg); END IF; END LOOP; END; /

On Unix systems event messages are in the formatted text file

$ORACLE_HOME/rdbms/mesg/oraus.msg

To print detailed event messages (Unix only) use the following script

event=10000 while [ $event -ne 10999 ] do event=`expr $event + 1` oerr ora $event done

Listing Enabled EventsTo check which events are enabled in the current session

SET SERVEROUTPUT ON DECLARE l_level NUMBER; BEGIN

63

Page 64: Oracle DBA Faq's

FOR l_event IN 10000..10999 LOOP dbms_system.read_ev (l_event,l_level); IF l_level > 0 THEN dbms_output.put_line ('Event '||TO_CHAR (l_event)|| ' is set at level '||TO_CHAR (l_level)); END IF; END LOOP; END; /------------Check background process using command – SELECT ksbdd.ksbddidn, ksmfsv.ksmfsnam, ksbdd.ksbdddsc

FROM x$ksbdd ksbdd, x$ksbdp ksbdp, x$ksmfsv ksmfsv

WHERE ksbdd.indx = ksbdp.indx

AND ksbdp.addr = ksmfsv.ksmfsadr

ORDER BY ksbdd.ksbddidn

/

Redo

All changes to the database are recorded by redo. Redo includes all changes to datafiles, but does not include changes to control files or the parameter file.

Redo is initially written to online redo logs. The contents of a redo log file depend on a combination of Oracle version, operating system and server architecture. In general redo logs written on one architecture cannot be read on another. There are a few exceptions to this rule. For example, in Oracle 10.2 a redo log written in Linux can be read by a Win-dows database.

Redo Threads

Each online redo log has a thread number and a sequence number. The thread number is mainly relevant in RAC databases where there can be multiple threads; one for each instance. The thread number is not necessarily the same as the instance number. For single instance databases there is only one redo log thread at any time.

Redo Log Groups

A redo thread consists of two or more redo log groups.

Each redo log group contains one or more physical redo log files known as members. Multiple members are config-ured to provide protection against media failure (mirroring). All members within a redo log group should be identical at any time.

Each redo log group has a status. Possible status values include UNUSED, CURRENT, ACTIVE and INACTIVE. Ini-tially redo log groups are UNUSED. Only one redo log group can be CURRENT at any time. Following a log switch, redo log group continues to be ACTIVE until a checkpoint has completed. Thereafter the redo log group becomes IN-ACTIVE until it is reused by the LGWR background process.

Log Switches

Log switches occur when the online redo log becomes full. Alternatively log switches can be triggered externally by commands such as:

ALTER SYSTEM SWITCH LOGFILE;

64

Page 65: Oracle DBA Faq's

When a log switch occurs, the sequence number is incremented and redo continues to be written to the next file in the sequence. If archive logging is enabled, then following a low switch the completed online redo log will be copied to the archive log destination(s) either by the ARCH background process or the LNSn background process depend-ing on the configuration.

Redo Log Files

A redo log file consists of a number of fixed size blocks. The overall size of the redo log file is specified when the log group is created. For most platforms including Linux and Solaris the redo log block size is 512 bytes. On other plat-forms including HP/UX Itanium the redo log block size can be 1024 bytes.

Each redo log file has a fixed header. In recent versions of Oracle (8.0 and above) this header is two blocks. There-fore on Linux/Solaris the header is 1024 bytes. The second block of the header contains a standard Oracle file header which includes the following information:

Database name

Thread

Compatibility Version

Start Time

End Time

Start SCN

End SCN

Other data is stored in the header. Note that the End SCN is actually the Start SCN of the next redo log file.

Redo Blocks

The body of the redo log file is used to store redo blocks. Each redo block has a 16 byte header (Oracle 9.2 and 10.2). The remainder of each redo block is used to store redo records.

Redo Records

Redo records are a logical structure. The upper size limit is probably 65536 bytes. Redo records can therefore span multiple physical redo blocks. A physical redo block can also contain multiple redo records.

Each redo record has a header. The VLD field in the redo record header specifies the type of the redo record. The size of the redo record header varies depending on the type.

In Oracle 9.2 the redo record header is normally 12 bytes, though they can occasionally increase in size to 28 bytes. In Oracle 10.2 the redo record header is normally 24 bytes, though under some circumstances they can increase to 68 bytes.

The following is an example of a redo record header from Oracle 10.2:

REDO RECORD - Thread:1 RBA: 0x000092.00000193.0088 LEN: 0x0050 VLD: 0x01SCN: 0x0000.00181068 SUBSCN: 1 05/07/2009 21:53:48

The header includes the following fields

Thread - redo log thread number

RBA - redo byte address - address of redo record within redo log. Format is <sequence_number>.<block_number>.<offset>

LEN - length of redo record in bytes including header

VLD - see below

SCN - system change number of redo record

65

Page 66: Oracle DBA Faq's

SUBSCN: Unknown

Timestamp e.g. 05/07/2009 21:53:48

The VLD field determines the size of the redo record header. Known values are shown in the fol-lowing table. These values may vary from one release to another.

Mnemonic ValueDescription

KCRVOID 0The contents are not valid

KCRVALID 1Includes change vectors

KCRDEPND 2Includes commit SCN

KCRVOID 4Includes dependent SCN

KCRNMARK 8New SCN mark record. SCN allocated exactly at this point in the redo log by this instance

KCROMARK 16Old SCN mark record. SCN allocated at or before this point in the redo. May be allocated by another instance

KCRORDER 32New SCN was allocated to ensure redo for some block would be ordered by inc/seq# when redo sorted by SCN

Change Vectors

A redo record consists of one or more change records known as change vectors. Each change vector consists of:

change header

list of element lengths

list of elements

The size of the change header is 28 bytes in both Oracle 9.2 and 10.2.

The list of element lengths has a two byte header specifying the overall length of the element length list in bytes. The length of each element is stored in a two byte field. Finally if the structure does not align on a four byte boundary, a further two byte field is appended.

The list of elements consists of one or more elements aligned on a four byte boundary. Element sizes can range from four bytes to at least 32K.

If supplemental logging is enabled then for update operations (11.5), additional elements are appended to the change vector containing the primary key, unique key or column values of the row.

Operation Codes

Each change vector has an operation code. In Oracle 9.2 there were over 150 redo log operations; this number has grown significantly in Oracle 10.2 though the exact figure is not known. The operation code consists of a major num-ber and a minor number.

The major number describes the level in the kernel where the redo is generated. The following table shows common levels:

Level Description

4 Block Cleanout

5 Transaction Layer (Undo)

10 Index Operation

11 Table Operation (DML)

66

Page 67: Oracle DBA Faq's

13 Block Allocation

14 Extent Allocation

17 Backup Management

18 Online Backup

19 Direct Load

20 Transaction Metadata (LogMiner)

22 Space Management (ASSM)

23 Block Write (DBWR)

24 DDL Statement

For each level there is one or more subcode. Follow the hyperlinks for more details on individual operations:

Level 4 - Block Cleanout

Level 5 - Transaction Layer (Undo)

Level 10 - Index Operation

Level 11 - Table Operation (DML)

Level 13 - Block Allocation

Level 14 - Extent Allocation

Level 17 - Backup Management

Level 18 - Online Backup

Level 19 - Direct Load

Level 20 - Transaction Metadata (LogMiner)

Level 22 - Space Management (ASSM)

Level 23 - Block Write (DBWR)

Level 24 - DDL Statement

Log File Dumps

Symbolic dumps can be created for both online redo logs and archived redo logs using the following syntax:

ALTER SYSTEM DUMP LOGFILE '<filename>';

For online redo logs the filename of the current redo log can be obtained using the following SQL:

SELECT member FROM v$logfile WHERE group# = ( SELECT group# FROM v$log WHERE status = 'CURRENT' );

67