在Oracle10g数据库中,默认表空间为USERS表空间。 设置数据库的默认表空间:
ALTER DATABASE DEFAULT TABLESPACE 例:将默认表空间设为ORCLTBS1
ALTER DATABASE DEFAULT TABLESPACE ORCLTBS1;
(3)删除表空间 语法:
DROP TABLESPACE tablespace_name
如果表空间非空,应带有子句INCLUDING CONTENTS
若要删除操作系统下的数据文件,应带有子句AND DATAFILES 删除参照完整性约束,应带有子句CASCADE CONSTRAINTS
【实验内容】
用sys/manager登录到orcl数据库实例,完成以下内容:
1. 为Users表空间添加一个数据文件,文件名为users03.dbf,大小为50M。 2. 修改上述数据文件为自动扩展方式,每次扩展5MB,文件最长100M。 3. 修改上述数据文件为自动扩展方式,每次扩展5MB,文件最长无限制。 4. 创建一个本地管理方式下自动分区管理的表空间USERTBS1,其对应的数据文件名称为
USERTBS1_1.DBF,大小为20M。
5. 为上述表空间USERTBS1添加一个数据文件USERTBS1_2.DBF,大小为20M。 6. 修改表空间USERTBS1的数据文件USERTBS1_2.DBF大小为50M。
7. 创建一个本地管理方式下的表空间USERTBS2,要求每个分区大小为512KB。
8. 为数据库添加一个重做日志文件组,组内包含两个成员文件,分别为redo04a.log和
redo04b.log,大小分别为5M。
9. 为新建的重做日志文件组添加一个成员文件,名称为redo04clog。
实验二 模式对象的管理
【开发语言及实现平台或实验环境】
Oracle10g
【实验目的】
(1)学习基本数据库表的创建,表结构的修改与删除等命令; (2)学习索引的管理命令; (3)学习索引化表的管理命令 (4)学习分区表的管理命令
(5)学习簇、视图、序列、同义词等的管理命令
【实验原理】 1.基本表的管理 (1) 表的创建: Create命令:
CREATE TABLE table_name( column_name type(size), column_name type(size), …); 或
CREATE TABLE table_name [(column_name,…)] AS SELECT statement; 表名命名规则
所用的表名必须满足下面的条件: a) 名字必须以A-Z 或a-z的字母开始; b) 名字可以包括字母、数字和特殊字母(_)。字符$和#也是合法的,但是这种用法不提倡; c) 名字大小写是一样的;例如EMP、emp和eMp是表示同一个表; d) 名字最长不超过30个字符; e) 表名不能和其它的对象重名; f) 表名不能是SQL保留字。
字段类型:
表5 字段类型 数据类型 VARCHAR2(w) CHAR(w) NUMBER NUMBER(w) NUMBER(w,s) DATE LONG RAW 和LONG RAW 描述 变长字符长度为w。最长为2000个字符。 定长字符长度为w。默认为1个字符;最长为255个字符 38位有效数字的浮点数 W位精确度的整数,范围从1至38 W是精度,或总的数字书,范围从1至38。S是比例,或是小数点右边的数字位。比例的范围从-84至127 日期值,范围从公元前14712年1月到公元314712年12月 变长字符串,其最大长度为2G(或231-1个字节) 面向字节数据,可存储字符串、浮点数,二进制数据等
完整性约束:
Oracle允许用户为表和列定义完整性约束来增强一定的规则。 可分为:表约束和字段约束 约束类型如下: 1)NOT NULL约束
NOT NULL约束保证字段值不能为NULL。没有NOT NULL约束的字段,值可以为NULL。
2)UNIQUE约束
指定一个字段或者字段的集合为唯一键。在表中没有两行具有相同的值。如果唯一键是基于单条记录的,NULL是允许的。
表约束命令格式:
,[CONSTRAINT constraint_name] UNIQUE (Column, Column, …) 字段约束命令格式:
[CONSTRAINT constraint_name] UNIQUE 例如:
CREATE TABLE DEPT
(DEPTNO NUMBER, DNAME VARCHAR2(9), LOC VARCHAR2(10),CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME,LOC)); UNQ_DEPT_LOC是一个表约束。 3)主键约束(Primary Key Constraint)
主键约束强制字段和字段集合的唯一性,并且用一个唯一索引来管理它。每个表中只能用一个主键,这样可以通过主键来标识表中的每条记录。NULL值不允许在主键字段出现。
表约束命令格式:
,[CONSTRAINT constraint_name] PRIMARY KEY (Column, Column, …) 字段约束命令格式:
[CONSTRAINT constraint_name] PRIMARY KEY 例如:用字段约束定义DEPTNO为主键 CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT DEPT_PRIM PRIMARY KEY, …); 4)外键约束
外键提供表内或表间的完整性规则。外键必须依赖于一个primary或unique key。 表约束命令格式:
,[CONSTRAINT constraint_name] FOREIGN KEY (Column, Column, …) REFERENCE table (column, column, …)
字段约束命令格式:
[CONSTRAINT constraint_name] FOREIGN KEY table (column) 例如:
CREATE TABLE EMP
(…CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCE DEPT(DEPTNO)); 5)Check约束
CHECK约束定义了每条记录必须满足的条件
语法:
[CONSTRAINT constraint_name] CHECK (condition)
(2)修改表
ALTER TABLE命令可用来修改数据表的定义。 命令格式:
ALTER TABLE tablename
[ADD或MODIFY或DROP options ](column_spec [column_constraint]) [ENABLE clause 或DISABLE clause]
ADD关键字可以用来给已存在的数据表增加一个字段或约束。 如:给EMP增加一个字段
ALTER TABLE EMP ADD (SPOUSES_NAME CHAR(10)); MODIFY关键字可以用来修改已存在的数据表定义。 如:把EMP中ENAME长度改为25个字符
ALTER TABLE EMP MODIFY (ENAM CHAR(25));
(3)删除表
用DROP TABLE命令删除Oracle数据表的定义。 命令格式:
DROP TABLE table_name [CASCADE CONSTRAINT] 例如:
DROP TABLE EMP;
CASCADE CONSTRAINT选项说明了也把完整性约束一起删除。 注意:
? DROP TABLE也把数据表中的数据删除。
? 数据表的VIEWS和SYNOMNYMS保留下来,但它们变成了不合法的。 ? 任何悬而未决的事务将被提交。
? 只有数据表的生成者或DBA才有权删除它。
2.索引的管理 (1)创建索引 语法
CREATE [UNIQUE]|[BITMAP] INDEX index_name ON table_name([column_name[ASC|DESC],…]| [expression]) [REVERSE]
[parameter_list];
创建非惟一性索引
CREATE INDEX employee_ename ON employee(ename)TABLESPACE users STORAGE (INITIAL 20K NEXT 20k PCTINCREASE 75); 创建惟一性索引
CREATE UNIQUE INDEX deptartment_index ON department(dname); 创建位图索引
CREATE BITMAP INDEX student_sex ON student(sex); 创建反序索引
CREATE INDEX player_sage ON player(sage) REVERSE; 创建函数索引
CREATE INDEX idx ON employee(UPPER(ename));
(2)删除索引 语法
DROP INDEX index_name;
3.索引化表的管理
在CREATE TABLE语句中指定ORGANIZATION INDEX关键字。 CREATE TABLE new_student(
sno NUMBER PRIMARY KEY , sname CHAR(11), sage NUMBER, sex CHAR(2))
ORGANIZATION INDEX TABLESPACE USERS ;
可以通过子查询创建索引化表 CREATE TABLE new_emp(
empno PRIMARY KEY,ename) ORGANIZATION INDEX
AS SELECT empno,ename FROM emp; 4. 分区表的管理 创建分区表 (1)范围分区
范围分区是按照分区列值的范围来对表进行分区的。
通过PARTITION BY RANGE子句说明根据范围进行分区,其后括号中列出分区列。 每个分区以PARTITION关键字开头,其后是分区名。VALUES LESS THAN子句用于设置分区中分区列值的范围。
示例:
创建一个分区表,将学生信息根据其出生日期进行分区,将1980年1月1日前出生的学生信息保存在ORCLTBS1表空间中,将1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS2表空间中,将其他学生信息保存在ORCLTBS3表空间中。 CREATE TABLE student_range(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage int, birthday DATE )
PARTITION BY RANGE(birthday) ( PARTITION p1 VALUES LESS THAN
(TO_DATE('1980-1-1', 'YYYY-MM-DD'))