Tablespaces Oracle9i has several types of tablespaces. These are:
1. Data tablespaces - Contains data and the objects that control the
data (i.e. indexes, synonyms).
2. System tablespaces - Contains information Oracle needs to control
itself.
3. Temporary tablespaces - Contains temporary information. For example,
the space is used if Oracle needs temporary disk
space for sorting a large set of rows.
4. Tool tablespaces - Contains space required for Oracle tools.
5. Rollback tablespaces - Contains information such as uncommitted
database changes and enables Oracle’s internal
mechanisms for read consistency.
6. User tablespaces - Default tablespace assigned to the user.
1 Creating a Tablespace There are several components to the Create Tablespace command:
? Datafile - Contains the name of the file used by the
tablespace.
? Autoextend clause - Enables or disables the automatic extension of the
tablespace. Off disables this feature. On enables
the feature. The next keyword specifies the
amount of disk space to allocate when an
extension occurs. Unlimited sets no limit. The
Maxsize keyword specifies the maximum amount
of space to allocate.
? Size - Determines the maximum size of the file used for
the tablespace. Two setting symbols are used.
These are K and M. Each increment of K
increases the file or tablespace size by 1024 bytes.
Each increment of M increases the file or
tablespace size by 1,048,576 bytes.
? Initial extent - The amount of disk space initially set-aside for
the tablespace. An extent is a portion of disk
space that is reserved for the tablespace. This
disk space is unavailable to any other application
until it is released.
2 ? Next extent - The amount of additional disk space that is
reserved for the tablespace each time the existing
extents are filled.
? Minextents - This option enables the developer to set aside
additional extents at the time of creation.
? Maxextents - This option sets a limit to the number of extents a
tablespace can use.
? Pct Increase - This option is a growth factor for extents. For
example, if it is set at 25, Oracle will add 25
percent to each additional extent.
Creating a tablespace
SQL> create tablespace realistic_employees datafile 'real.tab' size 4 m 2 default storage (initial 25 k next 25 k 3 minextents 10 maxextents 50) 4 autoextend on next 50k maxsize 100k;
Tablespace created.
SQL>
End Listing
3 The Alter Tablespace command is used to change tablespace parameters. Some of these
parameters are:
Add datafile - This option is used to add a file to the tablespace.
The option uses the same format as used in the
create command (‘filename’ [size k or m] [reuse]).
The Reuse keyword when used in conjunction with
the Size keyword causes Oracle to create the file if
it does not exist and to modify the file if it exists. If
the Size keyword is not used, Oracle will destroy
the contents of any existing file with the name and
replace it with the new file. Specifying the Size
option alone causes the file to be created if it
doesn’t exist and launch an error message if it
already exists.
Rename datafile - This option is used to change the name of an
existing datafile. The keyword does not actually
change the name of the file but associates a new
name with the file. The syntax of this command is:
“rename datafile filename to filename”.
Resize - This option can be used to change the size of an
existing datafile. The syntax of the options is: “alter
database realistic_employees ‘real.tab’ resize 6m”.
4 Autoextend - Changes the size of the datafiles as needed. It does
this in increments of Next size to the Maximum of
Maxsiz.
Using the alter tablespace command to increase the size of the tablespace by adding a data file
SQL> ALTER TABLESPACE REALISTIC_EMPLOYEES 2 ADD DATAFILE 'REAL1.TAB' SIZE 8 M;
TABLESPACE ALTERED.
SQL>
END LISTING
Eliminating the “realistic_employee” tablespace
SQL> DROP TABLESPACE REALISTIC_EMPLOYEES;
TABLESPACE DROPPED.
SQL>
END LISTING
5 Creating and modifying tables Tables are created using the Create Table command. This command has a number of components and options. These are:
? Table name - Determines the table’s name. The name must start
with an alpha character. The name may contain
letters, numbers, and underscores. It must be in one
continuous string of not more than 30 characters.
? Column names - Names of the columns (entity attributes) contained
in the table. This component has the same naming
restrictions as the table name. The entire set of
column definitions must be enclosed by
parentheses.
? Column data type - The column definition contains the data type, scale
(length), and precision of each column. Valid data
types are listed in Table 2.2.
? Constraints - Constraints are options that are used to maintain
the integrity to the database. These will be
discussed later in this chapter. (optional setting).
6 ? Tablespace - This setting determines the tablespace in which to
place the table. If this setting is omitted, the table
will be created in the default tablespace assigned to
user that executes the Create Table command. It is
normal practice to assign a default tablespace to a
User account when it is created. This tablespace is
the default tablespace for the user. If the user has
not been assigned a tablespace and this option is
omitted from the Create Table command, the
System tablespace will be used. Using the System
tablespace for data tables is highly discouraged.
(optional setting).
? Partitions - The table data can be divided into numerous
partitions. These can be within one or more
tablespaces. The specifications to partition a table
are placed in the Create Table command. (optional
setting)
7 Syntax rules for the Create Table command is:
? Parentheses must enclose the entire table specification. The Create Table
keywords and the name of the table are not included in the parentheses.
? A comma completes each column definition.
? Each column name must be unique to the table.
? Oracle reserved words cannot be used as column names.
? A semi-colon ends the command.
Creating the “Consultant” table
SQL> CREATE TABLE CONSULTANT
2 (EMPLOYEE_ID NUMBER(5,0),
3 FIRST_NAME VARCHAR2(15),
4 LAST_NAME VARCHAR2(25),
5 SPECIALTY VARCHAR2(30));
TABLE CREATED.
SQL>
END LISTING
8 The following table contains acceptable data types
Integer Same as the Number data type. Values will be whole
numbers. Columns defined with this format will not
accept decimal digits.
Integer(n) Specifies an integer data type of the length n.
Long Defines a character data type up to 65,535 characters.
Only one Long column may be defined per table. This
type of column may not be used in subqueries, functions,
expressions, Where clauses, or indexes.
Long Raw The same as Long, except it contains raw binary data.
Long Varchar The same data type as Long.
Mislabel Four-byte representation of a secure operating system
label.
9 Number Defines a numeric data type with space for 40 digits,
space for a sign, and a decimal point. The numbers may
be expressed in two manners. The first is with numbers
from 0 to 9, the signs + and -, and a decimal point. The
second manner is in scientific notation (1.951E4 as
19510).
Number(n) Defines a Number column that contains the number of
digits equal to the value in n. The maximum number of
digits is 105.
Number(n, d) Defines a Number column that contains an overall size
equal to n and contains the number of decimal positions
specified by d. A format specification of number(3,2)
cannot contain a number greater than 9.99.
N THE SAME DATA TYPE AS NUMBER.
U
M B
E
R
(
*
)
S THE SAME DATA TYPE AS NUMBER. M
A
L
L
I
N T
R DEFINES A COLUMN THAT A CONTAINS RAW BINARY DATA
W WITH A LENGTH SPECIFIED TO THE
( VALUE N.
N
)
R DEFINES A COLUMN AS A BINARY
A FORMAT FOR SECURE OPERATING W SYSTEM LABEL.
M
I
S
10 Partitioning Oracle allows the developer to partition the table data. This means the data can reside in
one or more tablespaces. This has some advantages especially for large databases with a
lot of activity:
? Reduces downtime for scheduled maintenance.
? Reduces downtime caused by data failures.
? Decreases I/O.
? Can increase performance of some queries by limiting the amount of data that
is read.
? Increases performance by the reduction of contention for disk arms.
Creating a “consultant” table with a partition option
SQL> create table consultant 2 (employee_id number, 3 first_name varchar2(15), 4 last_name varchar2(25), 5 specialty varchar2(30)) partition by range (employee_id) (partition t1 value less than (250) tablespace realistic_employee1, partition t2 value less than (500) tablespace realistic_employee2, partition t3 value less than (750) tablespace realistic_employee3, partition t4 value less than (maxvalue) tablespace realistic_employee4);
Table created.
SQL>
End listing
11 Copying a table
Using the Create/Select command to copy a table
SQL> create table consultant_copy 2 as select * from consultant;
Table created.
SQL>
End Listing
This technique only creates a new table and populates the table with data. It does not duplicate the indexes and integrity constraints that were placed on the original table.
These must be created independently of the command. The data in the new table also does not stay in sync with the original tables.
MAINTAINING THE INTEGRITY OF THE DATABASE
Some of these functions are:
? Ensure the uniqueness of the primary key.
? Ensure children records in related tables have a parent record.
? Delete children records when the parent record is deleted.
? Ensure columns always contain a value.
? Ensure a column contains a value within a specific range.
? Ensure a default value is placed in a column.
12 The Check Constraint
Using a Check constraint with a table definition
SQL> drop table consultant;
Table dropped.
SQL> create table consultant 2 (employee_id number, 3 first_name varchar2(15), 4 last_name varchar2(25), 5 specialty varchar2(30), 6 gender char(1) 7 constraint gender_validation check (gender in ('M', 'F')));
Table created.
SQL>
End listing
The Default option
Using a Default option
SQL> create table consultant 2 (employee_id number, 3 first_name varchar2(15), 4 last_name varchar2(25), 5 specialty varchar2(30), 6 gender char(1), 7 salary number default(0), 8 constraint gender_edit check(gender in ('M', 'F')));
Table created. Named constraint SQL>
End Listing
13 The Not Null constraint
Defining a Not Null constraint
SQL> CREATE TABLE CONSULTANT
2 (EMPLOYEE_ID NUMBER NOT NULL,
3 FIRST_NAME VARCHAR2(15),
4 LAST_NAME VARCHAR2(25),
5 SPECIALTY VARCHAR2(30));
TABLE CREATED.
SQL>
END LISTING
The Unique constraint
Defining Unique Not Null constraints
SQL> create table consultant 2 (employee_id number not null 3 constraint unique_employee_id unique, 4 first_name varchar2(15), 5 last_name varchar2(25), 6 specialty varchar2(30)); Named constraint Table created.
SQL>
End Listing
14 The Primary Key constraint
Defining a Primary Key constraint as part of a column definition
SQL> CREATE TABLE CONSULTANT
2 (EMPLOYEE_ID NUMBER PRIMARY KEY, Primary key 3 FIRST_NAME VARCHAR2(15), constraint defined as 4 LAST_NAME VARCHAR2(25), part of a 5 SPECIALTY VARCHAR2(30)); column definition
TABLE CREATED.
SQL>
END LISTING
Listing 2.18 – Defining a Primary Key constraint as part of a table definition
SQL> create table consultant 2 (employee_id number, 3 first_name varchar2(15), 4 last_name varchar2(25), Primary key 5 specialty varchar2(30), constraint 6 primary key (employee_id)); defined as part of the table Table created. definition
SQL>
End Listing
15 The Foreign Key Constraint
Defining a Foreign Key constraint as part of a column definition
SQL> create table consultant_projects 2 (employee_id number references consultant, 3 project_name varchar(20), 4 est_completion_date date);
Table created.
End Listing DEFINING A FOREIGN KEY CONSTRAINT AS PART OF A TABLE DEFINITION
SQL> create table consultant_projects 2 (employee_id number, 3 project_name varchar(20), 4 est_completion_date date, 5 foreign key (employee_id) 6 references consultant (employee_id) on delete cascade, 7 primary key (employee_id, project_name));
Table created.
SQL>
End Listing
Modifying constraints This command has a variety of options that can be used with constraints. These are:
? Add - Adds the constraint to the table.
? Modify - Adds a constraint to an existing column.
? Drop - Removes the constraint from the table. The constraint
definition is removed from the data dictionary.
? Disable - Allows incoming data, regardless of whether it conforms
to the constraint. The constraint definition remains in
the data dictionary.
? Enable - Ensures that all incoming and existing data conforms to
the constraint
? Validate - Ensures that existing data conforms to the constraint.
? Novalidate - Allows some of the existing data not to conform to the
constraint.
16 Using the Alter command to modify constraints
SQL> alter table consultant_projects 2 add primary key (employee_id, project_name);
Table altered.
SQL> alter table consultant_projects 2 modify project_name varchar2(20) not null;
Table altered.
SQL> alter table consultant_projects 2 disable primary key;
Table altered.
SQL> alter table consultant_projects 2 enable primary key;
Table altered.
SQL> alter table consultant_projects 2 drop primary key;
Table altered.
End listing
When to use constraints . The following are some thoughts and issues concerning constraints and when to use them.
? Primary key constraints should always be used.
? A foreign key constraint should be used on all foreign key columns.
? An exception to the previous rule are foreign keys that reference a table that
you have no control over or cases where the parent record could be in multiple
tables. I developed a system in which a piece of equipment is assigned to
either an employee or a department. A proprietary Human Resource system
and another table that contained custom assignee names supplied the values
for the foreign key. A view that unioned the two tables was used to pick out
the values from the tables. I could not use the foreign key constraint since the
DBA would not allow a constraint to be placed on the Human Resource table
and the Foreign Key constraint cannot be placed on a view.
17 SYNONYNMS AND OTHER NICE THINGS
Synonyms
A synonym is another name for a database object. They are very useful when the database has a complex name for an object. For example, tables with extremely long names such as “T_and_d_cable_terminal_poles” can be difficult and tedious to type and use. A synonym can be used to create an alias for the table name. A possible alias might be a simpler name such as “CTPS”. The developer can then use either
“T_and_d_cable_terminal_poles” or “CTPS” when referencing the table.
Create [public] synonym synonym name for database object name;
Creating and dropping a public synonym for the Employee table
SQL> create public synonym emps for employee;
Synonym created.
SQL> drop public synonym emps;
Synonym dropped.
SQL>
End Listing
18 Database links
Create [public] database link linkname Connect to userid identified by password Using ‘connect string’;
ILLUSTRATES THE CREATION AND USE OF A DATA LINK.
CREATING A DATABASE LINK
Create database link student
Connect to ostu1 identified by pirates
Using ‘LEWIS’;
Select last_name, first_name
From employee@student;
End Listing
Database triggers
Several examples of the use of database triggers are:
? Recalculate and update a value in a summary table each time a record is added
to a table containing detail records.
? Populating the payroll number column with a new sequential number (using a
sequence) prior to inserting a new employee into a table.
19 There are a variety of events that can fire a database trigger. These are:
1. Inserting or adding a record into a table.
2. Updating a record in a table.
3. Deleting a record in a table.
4. Starting the database.
5. Shutting down the database.
6. A user logging on to a session.
7. The occurrence of a database error.
8. Executing a Create, Alter, or Drop statement on a schema object
Create trigger [user account]triggername (before|after) (delete|insert|update [of column, column] on [user account] table name optional [referencing (old as old name)|(new as new name)] optional [for each row] optional [when condition] PL/SQL code block
20 Some of the other available options are:
? Specifying the “Of” keyword and a table column name after the Update option
will cause the trigger to be fired only when the named column(s) is updated.
? The “For each row” option will cause the trigger to be fired for each row
affected by the operation.
? The “Old” and “New” options enable the developer to change the name of the
qualifier used with trigger table names.
? Table columns qualified with “Old” contain the column value before the
transaction occurs.
? Table columns qualified with “New ” contain the column value after the
transaction occurs.
? The “When” keyword can be used to create a condition that must be true for
the trigger to be fired.
Creating a database trigger
SQL> Create or replace trigger payroll_number_generator 2 Before insert on employee 3 Referencing new as new 4 For each row 3 Begin 4 Select payroll_number_sequence.nextval 7 into :new.payroll_number from dual; 7 End; 8 /
Trigger created.
SQL>
End Listing
21 Instead Of database trigger for updating the Wages column
create or replace trigger wages_update instead of update on wages_difference for each row begin update employee set wages = :new.wages where payroll_number = :new.payroll_number; end; / End listing
The COMMIT and ROLLBACK commands
Changes to tables require two steps. These are:
1. Issuance of an Insert, Update, or Delete statement.
2. Confirming the change with the Commit command.
Savepoint save_point_name;
Rollback save_point_name;
22