什么是表空间?
Oracle数据库包含逻辑结构和物理文件。数据库的物理结构是指构成数据库的一组操作系统文件数据库的逻辑结构是指描述数据组织方式的一组逻辑概念及他们之间的关系。表控件是数据库逻辑结构的一个重要组件。表控件可以存放各种应用对象,如表,索引。而每个表空间由一个或多个文件组成。
类别 举例 说 明
永久性表空间 SYSTEM,USERS 一般保存表、视图、过程和索引等的数据
临时性表空间 TEMP 只用于保存系统中短期活动的数据
撤销表空间 UNDO 用来帮助回退未提交的事务数据
小计:一般不需要建临时和撤销表空间,除非把它们转移其他磁盘中以提高性能
创建表空间
基于应用性能和管理方面的考虑,最好为不同的子系统创建独立的表空间
通过CREATE TABLESPACE命令创建表空间
语法:
CREATE TABLESPACE tablespacename
DATAFILE 'filename' [ SIZE integer [ K | M ] ]
[ AUTOEXTEND [ OFF | ON ] ] ;
}
示例:
CREATE TABLESPACE tp_hr
DATAFILE
'd:datap_hr01.dbf' SIZE 60M;
修改表空间
调整表空间大小
--方法一:更改数据文件的大小
ALTER DATABASE DATAFILE
'D:DATAp_hr01.dbf'
RESIZE 80M;
--方法二:向表空间内添加数据文件
ALTER TABLESPACE tp_hr
ADD DATAFILE
'E:DATAp_hr02.DBF' SIZE 20M
AUTOEXTEND ON;
更改表控件状态只读
实例:ALTER TABLESPACE tp_hr READONLY;
删除表空间
删除表空间前先备份再删除
通过DROP TABLESPACE命令创建表空间
语法:
DROP TABLESPACE tablespacename
[INCLUDING CONTENTS];
示例:DROP TABLESPACE tp_hr INCLUDING CONTENTS;
SYS和SYSTEM用户都是Oracle 的系统用户,它们都使用SYSTEM表空间,SYS拥有更大的权限
SYS用户 SYSTEM用户
地位 Oracle的一个超级用户 Oracle默认的系统管理员,拥有DBA权限
作用 主要用来维护系统信息和管理实例 通常用来管理Oracle数据库的用户、权限和存储等
登录身份 只能以SYSDBA或SYSOPER角色登录 只能以Normal方式登录
创建用户
语法:CREATE USER user
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace ] ...]
[PASSWORD EXPIRE ]
权限与角色
权限指执行特定类型SQL 命令或访问其他对象的权利
系统权限和对象权限
系统权限允许用户执行某些数据库操作
对象权限允许用户对某一特定对象执行特定的操作
角色是具有名称的一组权限的组合
常用系统预定义角色
CONNECT:临时用户
RESOURCE:更为可靠和正式的用户
DBA:数据库管理员角色,拥有管理数据库的最高权限
--分配权限或角色
GRANT privileges or role TO user;
--撤销权限或角色
REVOKE privileges or role FROM user;
序列
序列是用于生成唯一、连续序号的对象
序列可以是升序的,也可以是降序的
使用CREATE SEQUENCE语句创建序列
实例: CREATE SEQUENCE toys_seq
START WITH 10指定第一个序号从 10 开始
INCREMENT BY 10指定序号之间的间隔为 10
MAXVALUE 2000表示序列的最大值为 2000
MINVALUE 10表示序列的最小值为 10
NOCYCLE在达到最大值后停止生成下一个值
CACHE 10;指定内存中预先分配的序号数
访问序列
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
SYS_GUID函数
生成32位的唯一编码作为主键
与SYS_GUID函数区别
在不需要并行的环境中使用序列作为主键
在并行的环境里或者希望避免使用序列的情况下使用函数
更改和删除序列
使用ALTER SEQUENCE语句修改序列,
不能更改序列的START WITH参数
SQL> ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;
使用DROP SEQUENCE语句删除序列
SQL> DROP SEQUENCE toys_seq;
同义词
同义词是现有对象的一个别名
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
同义词共有两种类型
私有同义词只能在其模式内访问,且不能与当前模式的对象同名
公有同义词可被所有的数据库用户访问
私有同义词
CREATE OR REPLACE SYNONYM emp 别名 FOR SCOTT 模式.emp 表名;
公有同义词
CREATE PUBLIC SYNONYM public_sy_dept FOR SCOTT.dept;
删除同义词
SQL> DROP SYNONYM emp;
SQL> DROP PUBLIC SYNONYM emp_syn;
索引
物理分类 逻辑分类
分区或非分区索引 单列或组合索引
B树索引 唯一或非唯一索引
正常或反向键索引 基于函数索引
位图索引
B 树索引结构
CREATE INDEX index_id ON t(id);
反向键索引
CREATE INDEX index_reverse_empno ON emp(empno) REVERSE;
位图索引
CREATE BITMAP INDEX index_bit_job ON emp(job);
表分区
允许用户将一个表分成多个分区
用户可以执行查询,只访问表中的特定分区
将不同的分区存储在不同的磁盘,提高访问性能和安全性
可以独立地备份和恢复每个分区
范围分区
以表中的一个列或一组列的值的范围分区
语法:
PARTITION BY RANGE (column_name)
(
PARTITION part1 VALUE LESS THAN (range1),
PARTITION part2 VALUE LESS THAN (range2),
...
[PARTITION partN VALUE LESS THAN (MAXVALUE)]
);
间隔分区
PARTITION BY RANGE(column_name)
INTERVAL(NUMTOYMINTERVAL(n, 'interval_unit'))
(PARTITION P1 VALUES LESS THAN (range1));