Beruflich Dokumente
Kultur Dokumente
Overview
Oracle terms
Schema logical collection of users objects Tablespace logical space used for storage Datafile physical file used for storage Extent group of contiguous blocks Block unit of physical storage
Oracle Architecture
database vs. instance
Database Instance
Disk
Memory
* Parameter files include the init<SID>.ora and config<SID>.ora files. These are used to set options for the database. ** Control files contain information about the db in binary form. They can be backed up to a text file however.
MySQL
Three files per table Permissions based on user, database, and host
Oracle
Many files Many roles/permissions possible
1. Samples table created in users schema 2. Primary key index created in users schema (SYS_C984620)
3. Data dictionary is also updated, with rows being inserted into tables underlying the following data dictionary views: User_objects User_constraints User_cons_columns And lots more
inserting apostrophes
INSERT INTO emp (name) VALUES (ONeill);
Sysdate
Sysdate returns current system date AND time use trunc function to remove time piece
Example: select to_char (adate, dd-mon-yy hh24:mi:ss)
TO_CHAR(ADATE, DD-MON-YY:HH24:MI:SS) 17-feb-00 23:41:50
ROWID
ROWID is an internal number Oracle uses to uniquely identify each row NOT a primary key! Is the actual location of a row on a disk. Very efficient for retrieval. Format specifies block, row, and file (and object in 8)
Oracle 7: BBBBBBB.RRRR.FFFFF Oracle 8: OOOOOO.FFF.BBBBBB.RRR
More functions
nvl()
If NULL, return this instead
Nvl(lastname,Anonymous)
decode()
Sort of like an If/Then statement
Decode(gender,0,Male,1,Female,Unknown)
Constraints
Primary key Foreign key Unique, not null Check CREATE TABLE test
id NUMBER(2), col2 VARCHAR2(2), col3 VARCHAR2(3), CONSTRAINT test_pk PRIMARY KEY(id), CONSTRAINT col3_ck CHECK (col3 IN ('yes','no')) );
constraint_type type,
user_constraints.search_condition FROM user_constraints, user_cons_columns WHERE
user_constraints.table_name=user_cons_columns.table_name
AND user_constraints.constraint_name=user_cons_columns.constraint_name AND user_constraints.owner=user_cons_columns.owner AND user_constraints.table_name=TEST;
NAME
T SEARCH_CONDITION
Constraints
Oracle naming of constraints is NOT intuitive! enabling and disabling
disable constraint constraint_name;
More objects
Sequences
creating the sequence
create sequence CustomerID increment by 1 start with 1000;
Synonyms
provide location and owner transparency Can be public or private
PL/SQL - Triggers
Executed on insert, update, delete Use to enforce business logic that cant be coded through referential integrity or constraints Types of triggers
row level (use FOR EACH ROW clause) statement level (default) Before and After triggers
Trigger example
SQL> desc all_triggers; Name Null? ------------------------------- -------OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT TABLE_OWNER BASE_OBJECT_TYPE TABLE_NAME COLUMN_NAME REFERENCING_NAMES WHEN_CLAUSE STATUS DESCRIPTION ACTION_TYPE TRIGGER_BODY Type ---VARCHAR2(30) VARCHAR2(30) VARCHAR2(16) VARCHAR2(75) VARCHAR2(30) VARCHAR2(16) VARCHAR2(30) VARCHAR2(4000) VARCHAR2(128) VARCHAR2(4000) VARCHAR2(8) VARCHAR2(4000) VARCHAR2(11) LONG
Trigger example
(cont.)
set lines 120 col trigger_name format a20 col triggering_event format a18 col table_name format a10 col description format a26 col trigger_body format a35 select trigger_name, trigger_type, triggering_event, table_name, status, description, trigger_body from all_triggers where trigger_name='AFTER_INS_UPD_ON_EMP';
Trigger example
SQL> /
(cont.)
TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT TABLE_NAME STATUS DESCRIPTION -------------------- ---------------- ------------------ ---------- -------- ----------------------TRIGGER_BODY ----------------------------------AFTER_INS_UPD_ON_EMP BEFORE EACH ROW INSERT OR UPDATE EMP ENABLED scott.after_ins_upd_on_emp before insert or update on scott.emp for each row begin :new.ename := upper(:new.ename); end;
The above trigger was created with the following statement: create or replace trigger scott.after_ins_upd_on_emp before insert or update on scott.emp for each row begin :new.ename := upper(:new.ename); end;
Understanding Indexes
Index overhead
impact on inserts, updates and deletes batch inserts can be slowed by indexes - may want to drop, then recreate rebuilding indexes
Use indexes when query will return less than 5% of rows in a large table Determining what to index
All primary and foreign keys Examine SQL and index heavily hit, selective columns (columns often found in where clauses)
B*-tree index
Miller
< Miller > Miller
Branch blocks
Leaf blocks
Bitmap index
Parts table
partno
1 2 3 4
color
GREEN RED RED BLUE
size
MED MED SMALL LARGE