Goals for This Week • • • • • • • Brief SQL refresh New SQL in Oracle 9i Overview of Oracle Architecture Basic Oracle Administration Performance Tuning Schema Design Back-end Tools Switch to SQL Intro Role of Database Server Results SQL or Procedure Call SQL or Procedure Call Results Client HTTP: GET HTML Role of Database Server (4 tier) Results App. Server SQL or Procedure Call Proc./ Trans Call Results HTML Client HTTP: GET Web Server Logical Objects Logical Objects Database consists of Schemas own Objects Tables Indexes Sequences Views Procedures Triggers Etc Schema Types •Application Schemas Database Payroll Student records consists of Schemas own Financial Reporting Nascar Hollywood •User Schemas Joe Objects (tables, indexes, etc) Fred Dave Schema Attributes •Application Schemas Usually referred to as a “schema object” Contains a set of closely related tables and associated objects Typical Object Reference: Hollywood.Movies •User Schemas Often referred to as a “User” or “Account” object. May or may not contain personal tables (Joe.Contacts). May or may not have the right to even create objects. Are generally granted privileges to objects in application schemas. LAB Create a user schema And an application schema Using dba studio Note security weakness: System (pw: manager) Sys (pw: change_on_install) Scott (pw: tiger) Sysman (pw: oem_start) Caution Creating a user schema from SQL: CREATE USER CALVIN IDENTIFIED by HOBBES LAB Creating a user schema from SQL: CREATE USER CALVIN IDENTIFIED by HOBBES DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 100M on users QUOTA 100M on temp QUOTA 100M on rbs; -- quota on RBS not necessary on 9i GRANT CONNECT TO CALVIN; -- let him log in GRANT RESOURCE TO CALVIN; -- let him create tables and other objects Oracle Database consists of Schemas own vs. SQL Server SQL Server Software Instance defines Users own Databases contain Objects Objects (tables, indexes, etc) (tables, indexes, etc) Oracle Database consists of Schemas (users) Granted Privileges to vs. SQL Server SQL Server Software Instance defines Users own Databases contain own Objects (tables, indexes, etc) Granted Privileges to Objects (tables, indexes, etc) Controlling Application Access •Each User is given an Oracle Account and control is maintained by granting privileges to tables, procedures and other objects. (e.g. DESIGN) •All users connect ominously to a web site. The Web or Application server connects to Oracle in the context of a particular user. •Although the Web or Application server connects to Oracle in the context of a particular user, individuals connecting to the web site must still authenticate for the interface to determine what they should be allowed to do: -Oracle Authentication -Local “user” table in application -Network authentication Roles and Profiles • Role – Functions similar to NT Groups – Specific Object and System Privileges are granted to the Role – That Collection of Privs can be quickly granted to a USER by granting them the Role (Example: GRANT DBA to HOMER) • Profile Provides default values for USER attributes such as – Number of Concurrent Sessions – Password complexity LAB Creating a role Create ROLE trainee; Grant connect to trainee; -- right to log on Grant resource to trainee; -- right to create objects Grant select_catalog_role to trainee; -- dictionary privs LAB Creating user schemas from PL/SQL: DECLARE v_sqlstatement varchar2(200); v_newclass newclass%rowtype; CURSOR newclass_cursor IS SELECT * from newclass; BEGIN DBMS_OUTPUT.PUT_LINE ('****************** begin account creation'); OPEN newclass_cursor; FETCH newclass_cursor into v_newclass; WHILE newclass_cursor%found LOOP DBMS_OUTPUT.PUT_LINE (v_newclass.userid); v_sqlstatement := 'create user ' || UPPER(v_newclass.userid) || ' identified by oracle '; v_sqlstatement := v_sqlstatement || 'DEFAULT TABLESPACE USERS '; v_sqlstatement := v_sqlstatement || 'TEMPORARY TABLESPACE TEMP '; v_sqlstatement := v_sqlstatement || 'QUOTA 100M on users '; v_sqlstatement := v_sqlstatement || 'QUOTA 100M on temp '; v_sqlstatement := v_sqlstatement || 'QUOTA 100M on rbs '; -- rbs quota not needed in 9i execute immediate v_sqlstatement; -- this is dynamic SQL needed because of early binding v_sqlstatement := 'GRANT trainee TO ' || v_newclass.userid; execute immediate v_sqlstatement; FETCH newclass_cursor into v_newclass; END LOOP; DBMS_OUTPUT.PUT_LINE ('****************** end account creation'); CLOSE newclass_cursor; END; / Oracle’s Architecture Instance vs. Database Instance (memory structures) Database (disk structures) Multiple Instances for 1 Database Instance A Instance B (memory structures) (memory structures) Database 1 (disk structures) Multiple Databases for 1 Instance Instance A (memory structures) Database 1 Database 2 (disk structures) (disk structures) Instance to Instance Communication Instance A Instance B (memory structures) (memory structures) Via client Or replication process Database 1 Database 2 (disk structures) (disk structures) Key structures and Processes CLIENT CLIENT CLIENT ORACLE INSTANCE Database Buffer Cache Network Redo Log Buffer Shared Pool Library Cache LSTNR Data Dictionary Cache SERVER SERVER SERVER DBWR SMON Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) PMON CKPT Control Files Control Files LGWR ARCH On-line Redo On-line Log Files Redo On-line Log Files Redo Log Files Background Processes Database Buffer Cache Database Buffer Cache Number of Buffers determined by Initialization File Parameter: DB_BLOCK_BUFFERS (8i) DB_CACHE_SIZE (9i) Block Size is a multiple of OS Block. DBWR Block Size if fixed in Oracle 8i. Block Size is not fixed in 9i except for the system, rollback, and temp tablespaces. LRU algorithm used to determine buffered data. Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) Free block Used block Dirty block Buffer Hit Ratio Consistent Gets + DB Block Gets - Physical Reads * 100 Consistent Gets + DB Block Gets Generally, a hit ratio below 80% indicates too many physical reads and suggests that DB_Block_Buffers should be increased. LAB Hit Ratio Since Instance Startup Select sum(decode(NAME, 'consistent gets',VALUE, 0)) "Consistent Gets", sum(decode(NAME, 'db block gets',VALUE, 0)) "DB Block Gets", sum(decode(NAME, 'physical reads',VALUE, 0)) "Physical Reads", round((sum(decode(name, 'consistent gets',value, 0)) + sum(decode(name, 'db block gets',value, 0)) sum(decode(name, 'physical reads',value, 0))) / (sum(decode(name, 'consistent gets',value, 0)) + sum(decode(name, 'db block gets',value, 0))) * 100,2) "Hit Ratio" from v$sysstat Next: change number of buffers, bounce service, large query, check hits Shared Pool Shared Pool Library Cache Data Dictionary Cache Library Cache •Holds parsed SQL statements •Interrogate via v$sqlarea & v$librarycache •CURSOR_SHARING = FORCE Data Dictionary Cache •Holds table and column definitions and privileges LAB Shared Pool Hit Ratios Library Cache Hit Ratio Select (sum(pins) / (sum(pins) + sum(reloads))) * 100 “Lib. Hit Ratio” from v$librarycache Dictionary Hit Ratio Select (sum(gets) / (sum(getmisses) + sum(gets))) * 100 “Dict. Hit Ratio” from v$rowcache Also look at v$sqlarea Oracle Processes •Background Processes run on server -as separate processes on UNIX (ps –ef | grep -As separate threads in single service on NT <ORA_SID>) •Listener Process one or more per server listens for connection requests hands off to server process (on diff. Port) •Server Processes Run on server Typically one process to support each connected user (unless MTS) •Client (“User”) Process runs on client machine communicates with a server process on server Oracle Background Processes •DBWR Writes dirty blocks from the buffer pool back to disk. •SMON Checks for consistency, initiates recovery •PMON Cleans up resources if process fails •CKPT Updates database status after commits and other key events. •LGWR Writes before and after images of changed rows into the on-line redo log files •ARCH Numbers and archives on-line redo log files LAB Start and stop the instance And listener services using Various methods LAB Who is logged in? Look at v$session Alter system kill session ‘sid, serial’; Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 30000 DB-7F4 JANE 36000 Data requested might or Might not be in the buffer. DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) Update Emp Set Sal = 40000 Where name=‘FRED’ On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 30000 DB-7F4 JANE 36000 BEGIN SCN 412 LGWR DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) Update Emp Set Sal = 40000 Where name=‘FRED’ May or may not Have written at this point. On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 30000 DB-7F4 JANE 36000 RB-65B BEGIN SCN 412 LGWR DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) Update Emp Set Sal = 40000 Where name=‘FRED’ May or may not Have written at this point. On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 30000 DB-7F4 JANE 36000 OLD:7F3 FRED 30000 RB-65B NULL OLD:RB-65B BEGIN SCN 412 LGWR DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) Update Emp Set Sal = 40000 Where name=‘FRED’ May or may not Have written at this point. On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 30000 DB-7F4 JANE 36000 NEW:RB-65B FRED 30000 OLD:DB-7F3 FRED 30000 RB-65B FRED 30000 OLD:RB-65B BEGIN SCN 412 DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) May or may not Have written at this point. (rollback segs. First) Update Emp Set Sal = 40000 Where name=‘FRED’ LGWR May or may not Have written at this point. On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer DB-7F3 FRED 40000 NEW:7F3 FRED 40000 DB-7F4 JANE 36000 NEW:RB-65B FRED 30000 OLD:DB-7F3 FRED 30000 RB-65B FRED 30000 OLD:RB-65B BEGIN SCN 412 DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) May or may not Have written at this point. (rollback segs. First) Update Emp Set Sal = 40000 Where name=‘FRED’ LGWR May or may not Have written at this point. On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A Oracle Commit Processing Database Buffer Cache Redo Log Buffer COMMIT SCN 412 DB-7F3 FRED 40000 NEW:7F3 FRED 40000 DB-7F4 JANE 36000 NEW:RB-65B FRED 30000 OLD:DB-7F3 FRED 30000 RB-65B FRED 30000 OLD:RB-65B BEGIN SCN 412 DBWR Data Files Data (Inc. RB Files Segments) (Inc. RB Segments) May or may not Have written at this point. (rollback segs. First) Update Emp Set Sal = 40000 Where name=‘FRED’ LGWR Definitive write through commit record On-line Redo On-line Log File C Redo On-line Log File B Redo Log File A LAB Simulate Server Failure after update But before commit GO BACK Go Back 2 slides And discuss “consistent gets” Logical to Physical Mapping (controlling where objects are stored) Database Oracle Tablespace is similar to SQL Server File Group. Stores objects in Tablespaces Made Persistent via DataFiles Why multiple Tablespaces? • Reduce Disk Contention by spreading disk I/O over multiple spindles. – We control which TS objects are stored on – We control physical location of TS datafiles – Even if all disks are in use currently, the best practice is to keep major apps on different tablespaces to more easily allow for future movement. • Reduce performance degradation during on-line physical backups. • Allows different applications to have different physical parameters – block size – Fragmentation level – etc Typical Tablespaces: • • • • • • • • SYSTEM RBS USERS TEMP TOOLS INDX DRSYS OEM_REPOSITORY 32464 265600 89440 10560 1280 2560 2560 3841 E:\ORACLE\ORADATA\INSY\SYSTEM01.DBF E:\ORACLE\ORADATA\INSY\RBS01.DBF E:\ORACLE\ORADATA\INSY\USERS01.DBF E:\ORACLE\ORADATA\INSY\TEMP01.DBF E:\ORACLE\ORADATA\INSY\TOOLS01.DBF E:\ORACLE\ORADATA\INSY\INDX01.DBF E:\ORACLE\ORADATA\INSY\DR01.DBF E:\ORACLE\ORADATA\INSY\OEM_REPOSITORY.ORA Typical OFA segregation 1. Oracle software 12.Control file 1 2. System tablespace 13.Control file 2 3. System indexes 14.Control file 3 4. RBS tablespace 15.Application software 5. Data tablespace 16.User Tablespace inc. indexes 6. Data Indexes TS 17.Archive log dest 7. Temp tablespace 8. Tools tablespace inc. index 9. Online redo log 1 10. Online redo log 2 11. Online redo log 3 RAID: Redundant Array of Inexpensive Disks Volume Set: C: 123 456 789 10 11 12 13 14 15 Stripe Set (Raid Level 0) 123 10 11 16 17 456 12 13 18 19 789 14 15 20 21 RAID: Redundant Array of Inexpensive Disks Mirror set (Raid level 1): 1 3 2 4 3 5 = Drive Controller 1 3 2 4 3 5 RAID: Redundant Array of Inexpensive Disks Stripe Set with Parity (Raid Level 5) 1 0 0 0 0 0 1 1 1 0 0 0 + 1 0 1 1 1 0 0 1 + 0 1 0 0 = = 0 1 1 1 parity data 0 0 0 1 1 0 0 1 = 0 1 0 0 1 0 1 1 0 1 0 1 RAID: Redundant Array of Inexpensive Disks Stripe Set with Parity (Raid Level 5) 1 0 0 0 0 0 1 1 1 0 0 0 + + = = 0 1 1 1 parity data 0 0 0 1 1 0 0 1 = 0 1 0 0 1 0 1 1 0 1 0 1 RAID: Redundant Array of Inexpensive Disks Mirrored Stripe Set (Raid Level 0 + 1) Data container 123 10 11 16 17 456 12 13 18 19 789 14 15 20 21 456 12 13 18 19 789 14 15 20 21 Mirror container 123 10 11 16 17 RAID: Redundant Array of Inexpensive Disks Stripe Set of Mirrors (Raid Level 1 + 0) Stripe Set Mirror Set Mirror Set Mirror Set 123 10 11 16 17 456 12 13 18 19 789 14 15 20 21 123 10 11 16 17 456 12 13 18 19 789 14 15 20 21 Large Scale RAID dependent Oracle Installation Cabinet 1 (9 Containers, 42 drives) Log 1 Ndx 3 c1 Log 2 Ndx 4 Intf 1 c3 c2 Data 1, Cntrl 1 Log 3 Data 2, Cntrl 2 Sys, Rbs, Temp Cabinet 2 (9 containers, 42 drives) Log 4 Ndx 1 c4 Log 5 Ndx 2 Data 4, Cntrl 4 RAID 1 (Log 1) Controller 1 (c1) Details: RAID 0 + 1 (Ndx 3) RAID 0 + 1 (Data 1, Cntrl 1) Source: Oracle Performance Tuning 101, Oracle Press Intf 2 c6 c5 Data 3, Cntrl 3 Log 6 Archived Logs Small Scale RAID dependent Oracle Installation optimized for read/write operations. Datafiles, INIT, and Control Files RAID 1 + 0 Redo Log Files Arch Log Files Raid 1 Raid 1 LAB Directly Examine: dba_tables dba_tablespaces V$datafile Or indirectly: @\\neelix\oracle\scripts\admin\datafiles @\\neelix\oracle\scripts\admin\usertabs Look at Same using DBA studio Create a new tablespace And related datafile(s). Creating Indexes and Tables in specific tablespaces. • Each user is assigned a default tablespace. •Don’t create tables when logged in as system or sys unless instructed to do so when installing Oracle tools. •Override defaults when necessary through extended DDL syntax. CREATE TABLE GLACCOUNTS ( AccountNum char(6) Name varchar2(30), Balance number(12,2)) TABLESPACE FINANCIALS;