1.表空间

  表空间是数据库逻辑结构的一个重要组件。表空间可以存放各种应用对象,如表、索引。而每个表空间有一个或多个数据文件组成。

2.表空间的分类

  • 永久性表空间:一般保存表、视图、过程和索引等的数据。SYSTEM  SYSAUX  USERS  EXAMPLE  表空间是默认安装的
  • 临时性表空间:只用于保存系统中短期活动的数据,如排序数据等
  • 撤销表空间:用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。一般不需要建临时和撤销表空间,除非把它们转移到其他磁盘中以提高性能

3.表空间目的

  • 对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作,对模式对象的管理
  • 可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提高I/O性能,有利于备份和恢复数据等

4.对表空间的操作:

/*创建表空间*/
create tablespace wordtbs --表空间名称
datafile 'E:\T142\WORDTBS01.dbf' --文件路径
size 10M --表空间大小
autoextend on next 10M --自动扩展10M

/*查看当前用户下的表空间*/
select * from dba_data_files;

/*修改表空间大小*/
alter database
datafile 'E:\T142\WORDTBS01.dbf'
resize 20M;


/*向表空间内添加数据文件*/
alter tablespace wordtbs
add datafile
'E:\T142\WORDTBS02.dbf'
size 10M
autoextend on;


/*更改表空间为只读*/
ALTER TABLESPACE wordtbs READ ONLY;

/*删除表空间*/
drop tablespace wordtbs including contents and datafiles;

6.用户权限管理

  • Sys:是Oracle中的一个超级用户
  • System:是Oracle中默认的系统管理员,又有DBA权限
  • Scott:是Oracle数据库中的一个示范用户,一般在数据库安装时创建

/*创建用户*/
create user ab
identified by 123456
default tablespace wordtbs

/*授予权限 连接/创建表*/
grant connect,resource to A_oe;

/*授予对表执行操作的权限*/
grant all on scott.dept to ab;
grant insert,select,update,delete on scott.emp to ab;

/*回收权限*/
revoke connect,resource from ab;

revoke all on scott.emp from ab;

/*
===========================================================
| 创建A_oe用户
============================================================
*/
CREATE USER A_oe IDENTIFIED BY bdqn
DEFAULT TABLESPACE wordtbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON wordtbs

7.序列

  是用来生成唯一,连续的整数的数据库对象。常用来自动生成主键或唯一键的值。序列可以按升序排序,也可以按降序排序。

序列的一系列操作:

--创建表
create table toys(
toysid number(4) not null,
toyname varchar(20)not null,
toyprice number(3,0) not null
);

--创建序列:
create sequence seql
start with 10
increment by 1
maxvalue 2000
nocycle
cache 30;

/*序列在创建成功后 必须先经过nextval初始化之后才可以使用currval*/
select seql.nextval from dual;

select seql.currval from dual;

--修改序列的语法:
alter sequence seql
increment by 30
maxvalue 300
minvalue 10
cycle
cache 10;

/*删除序列*/
drop sequence seql

/*插入数据*/
insert into toys(toysid,toyname,toyprice)
values (seql.nextval,'twenty',25);
insert into toys (toysid,toyname,toyprice)
values (seql.nextval,'magic pencil',75);
insert into toys(toysid,toyname,toyprice)
values (seql.nextval,'tom',65);

/*查看toys表数据*/
select * from toys;

/*删除表*/
delete from toys

--使用GUID 生成唯一标识符 推荐在并行环境下使用
select sys_guid() from dual;

8.同义词

  在数据库中,同义词可以提供其他数据库对象的别名。

  用途:

    • 简化SQL语句
    • 隐藏对象的名称和所有者
    • 为分布式数据库的远程对象提供了位置透明性
    • 提供了对对象的公共访问

  分类:

    • 私有同义词:自能对当前模式的用户访问
    • 可被所有的数据库用户访问

/*
===========================================================
| 创建私有同义词
============================================================
*/
CREATE OR REPLACE SYNONYM emp FOR employee;

----以A_oe用户登录
SELECT * FROM emp;

/*
===========================================================
| 创建公有同义词
============================================================
*/
CREATE PUBLIC SYNONYM public_emp FOR A_hr.employee;

---以aoe登录
select * from public_emp


/*
===========================================================
| 删除同义词
============================================================
*/
--删除私有同义词
DROP SYNONYM emp;
--删除公有同义词
DROP PUBLIC SYNONYM public_emp;

 9.索引

  是与表关联的可选结构,是一种快速访问数据的途径,可提高数据库性能。

  作用:

    • 快速取数据;
    • 保证数据记录的唯一性;
    • 实现表与表之间的参照完整性;
    • 在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间

   优点:

    • 大大加快数据的检索速度;
    • 创建唯一性索引,保证数据库表中每一行数据的唯一性;
    • 加速表和表之间的连接;
    • 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

  缺点:

    • 索引需要占物理空间。
    • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

/*B树索引*/
create unique index index_empno on employee(empno);

/*反向键索引*/
create index index_reverse_empno on employee(empno) reverse;

/*位图索引*/
create bitmap index index_bit_job on employee(job);

/*删除索引*/
drop index index_bit_job;

/*重建索引*/
alter index index_reverse_empno rebuild noreverse;

10.分区表

  Oracle 允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同位置。被分区的表称为分区表,分成的每个部分称为一个分区

--范围分区
partition by range(hiredate)
(
partition p1 values less than (to_date('1981-04-1','yyyy-mm-dd')),
partition p2 values less than(maxvalue)
);


drop table employee

select * from employee;
--插入数据
insert into employee select * from scott.emp;

--查询所有分区
select table_name,partition_name from user_tab_partitions
where table_name=upper('employee');

--查询分区表
select * from employee partition(P2);
--删除分区表

alter table employee drop partition(P1);

--创建间隔分区

PARTITION BY RANGE(hiredate)
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
( PARTITION p1 VALUES LESS THAN (to_date('1981-04-01','yyyy-mm-dd')));