简介
相关信息
Oracle 数据库 是由美国 Oracle 公司开发的关系型数据库管理系统(RDBMS),也是目前全球最流行、最广泛使用的大型数据库之一。它广泛应用于企业级应用程序,尤其是在金融、电信、政府等行业中,凭借其稳定性、扩展性、安全性和高性能,成为处理大规模数据和事务的首选数据库之一。
安装和配置 Oracle 数据库
前往 Oracle 官网,下载适合操作系统的 Oracle 数据库版本。
安装过程中,需要指定以下内容:
- Oracle Home:安装 Oracle 软件的路径。
- SID(System Identifier):数据库的唯一标识符。
- 存储路径:指定数据库文件存储的位置。
安装完成后,Oracle 服务会启动并运行,后台将启动一个实例用于管理和访问数据库。
连接 Oracle 数据库
Oracle 数据库支持多种方式连接数据库,常见的有命令行工具、图形化工具以及编程语言驱动。
SQL Plus
SQL Plus 是 Oracle 提供的一个命令行工具,用于执行 SQL 和 PL/SQL 语句。要使用 SQL Plus 连接数据库,可以使用以下命令:
sqlplus username/password@hostname:port/SID
示例: sqlplus scott/tiger@localhost:1521/orcl
- scott 是用户名,若是以特权用户连接则必须带
[as sysdba/sysoper]
. - tiger 是密码
- localhost 是数据库服务器地址(本地)
- 1521 是监听器的端口号
- orcl 是数据库实例名(SID)
Oracle SQL Developer
Oracle SQL Developer 是 Oracle 提供的免费 GUI 工具,用户可以通过该工具进行数据库管理和 SQL 查询操作。连接步骤:
- 下载并安装 SQL Developer。
- 启动 SQL Developer,并创建一个新的连接。
- 输入数据库的主机名、端口号(默认 1521)、SID 以及用户名和密码。
- 测试连接,成功后点击“连接”。
通过编程语言连接
Oracle 提供了多种编程语言的驱动来连接数据库:
- Java:通过 JDBC(Java Database Connectivity)驱动连接 Oracle 数据库。
- Python:通过 cx_Oracle 模块连接。
- PHP:通过 OCI8 或 PDO_OCI 扩展进行连接。
核心特性
关系型数据库模型: Oracle 数据库遵循关系型数据库模型,数据存储在表(表格结构)中,表与表之间可以通过主键和外键建立关联。支持 SQL 语言,用于查询和管理数据库中的数据。
高可扩展性: Oracle 可以很好地扩展,以支持从小型应用到大型企业级应用的不同需求,能处理从几 GB 到几 TB 甚至 PB 级别的数据。通过分区表、并行查询、分布式数据库等技术,Oracle 能够高效管理大数据量和高并发的访问需求。
跨平台支持: Oracle 数据库支持多种操作系统平台,如 Windows、Linux、Unix 和 macOS,这使得它具有广泛的适用性,能够在不同的硬件和操作系统环境中运行。
高性能与高可用性: Oracle 数据库提供多种优化技术,如缓存机制、并行处理、批处理等,来提升查询和数据处理的效率。其集群技术(如 Oracle RAC)和备份恢复功能(如 Oracle Data Guard)确保数据库的高可用性和灾难恢复能力。
安全性: Oracle 数据库具有全面的安全机制,如角色和权限管理、加密、审计、用户认证、多级访问控制等,确保数据的安全性和机密性。
事务处理与并发控制: Oracle 提供强大的事务管理机制,支持 ACID(原子性、一致性、隔离性、持久性)特性,确保数据的完整性。它还使用锁机制和多版本并发控制(MVCC)来处理并发事务,确保多个用户能够同时进行数据操作,而不会发生数据冲突或不一致的情况。
PL/SQL 支持: Oracle 提供了 PL/SQL(Procedural Language/SQL)编程语言,这是一种专门为 Oracle 数据库设计的过程式扩展语言。PL/SQL 允许在数据库中编写存储过程、函数、触发器等复杂业务逻辑,提高数据库操作的灵活性和性能。
数据仓库和 OLAP 支持: Oracle 提供了一整套数据仓库和在线分析处理(OLAP)解决方案,用于处理复杂的数据分析任务。Oracle 提供的数据仓库功能支持大规模数据的存储、ETL(提取、转换、加载)操作、复杂查询优化等。
分布式数据库和复制: Oracle 支持分布式数据库,允许在多个物理位置存储和管理数据,通过复制、分片和集群等技术实现数据的分布式存储和访问,确保全球范围内的高可用性和快速响应。
云计算和多租户架构: Oracle 支持在云环境中部署数据库,并提供专门的云解决方案(如 Oracle Cloud Infrastructure)。其多租户架构允许在同一个 Oracle 实例中运行多个独立的数据库(PDBs),大幅提高了资源利用率和管理灵活性。
逻辑与物理结构
Oracle 数据库的结构可以分为逻辑结构和物理结构。

逻辑结构
- 表空间(Tablespace): 表空间是 Oracle 数据库的逻辑存储单元,它包含多个数据文件。一个数据库可以有多个表空间,用来存放不同类型的数据。每个表空间可以包括表、索引、视图等数据库对象。
- 段(Segment): 段是表空间中的存储单元,表示某个数据库对象(如表、索引等)在数据库中的物理存储位置。段是由多个区(Extent)组成的。
- 区(Extent): 区是段的组成部分,是数据在数据文件中占据的连续空间。一个区包含多个 Oracle 数据块。
- 数据块(Data Block): 数据块是 Oracle 数据库的最小存储单位。数据库中的所有数据最终都以数据块的形式存储在磁盘中。
物理结构

- 数据文件(Data Files): 数据文件是数据库在操作系统层面的物理文件,存储实际的数据记录。表空间由一个或多个数据文件组成。
- 控制文件(Control Files): 控制文件存储有关数据库的物理结构信息(如数据文件、重做日志文件的位置、数据库名等)。数据库启动时需要读取控制文件。
- 重做日志文件(Redo Log Files): 重做日志文件记录数据库的所有修改操作,用于恢复数据库,确保即使在系统故障后,数据也能恢复到一致的状态。
- 归档日志文件(Archived Log Files): 归档日志是重做日志的备份文件,用于在归档模式下进行数据库的恢复操作。
- 初始化参数文件: 用于设置数据库启动时的参数初始值。
- 跟踪文件: 用于记录用户进程、数据库后台进程等的运行情况。
- 口令文件: 用于保存具有 SYSDBA,SYSOPER 权限的用户名和 SYS 用户口令。
- 警告文件: 用于记录数据库的重要活动以及发生的错误。
- 备份文件: 用于存放数据库备份所产生的文件。
核心组件

- Oracle 实例(Instance): Oracle 实例由内存结构和后台进程组成,负责管理数据库的操作。实例包括 SGA(系统全局区)和多个后台进程。
- SGA(System Global Area): SGA 是 Oracle 数据库的内存区,用于缓存数据、SQL 语句和控制信息。它帮助提高数据库的性能。
- PGA(Program Global Area): PGA 是 Oracle 为每个服务器进程分配的内存,用于存储会话相关的信息,如 SQL 工作区。
- 后台进程: Oracle 使用多个后台进程来管理数据库的核心操作,如数据写入、日志管理和恢复。常见的后台进程包括 DBWR(数据库写进程)、LGWR(日志写进程)、CKPT(检查点进程)等。

数据文件
在 Oracle 数据库 中,数据文件(Data File) 是数据库的核心物理存储单元,实际存储了所有的表、索引以及其他数据对象的数据。每个数据文件与数据库中的表空间相关联,表空间中的对象(如表、索引等)将实际数据保存在数据文件中。
数据文件的主要功能
- 物理存储数据: Oracle 数据库的所有用户数据和数据字典信息都存储在数据文件中。每个表空间包含一个或多个数据文件,数据文件保存在数据库所在的物理存储设备(如硬盘、存储阵列)上。
- 与表空间关联: 数据文件与数据库中的表空间相关联。表空间是数据库逻辑存储结构的一部分,而数据文件则是物理结构的一部分。一个表空间可以包含多个数据文件,而数据文件不能跨表空间共享。
- 扩展性: 数据文件的大小可以在数据库运行期间动态调整。管理员可以通过扩展数据文件或增加新的数据文件来支持更多的数据存储需求。
- 恢复和一致性: 数据文件通过 Oracle 的恢复机制(如重做日志文件、归档日志文件、RMAN 等)支持数据库的故障恢复和一致性保障。即使系统出现崩溃,Oracle 也能通过这些文件恢复数据库的状态。
数据文件的特点
- 唯一性: 每个数据文件在数据库中有唯一的文件路径和名称,Oracle 使用这个路径和名称来识别和管理文件。
- 可动态增加: 数据文件的初始大小可以在创建时指定,之后可以根据需要手动或自动调整数据文件的大小。
- 自动扩展(Autoextend): 可以配置数据文件为自动扩展(AUTOEXTEND),即当文件大小达到上限时,Oracle 自动增加文件的大小,以防止由于数据文件不足而导致的存储问题。
- 稀疏文件(Sparse Files): 数据文件是稀疏文件,意味着它们可以包含空闲的、未使用的块,这些块在数据库表中没有数据。
管理数据文件的操作
创建数据文件: 数据文件是通过创建或扩展表空间来创建的。在创建表空间时,系统会指定一个或多个数据文件。可以使用以下 SQL 语句来创建表空间及其关联的数据文件:
CREATE TABLESPACE my_tablespace
DATAFILE '/u01/oradata/mydb/my_tablespace_01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
my_tablespace
是表空间的名称。DATAFILE
指定数据文件的路径和初始大小。AUTOEXTEND
指定数据文件自动扩展,每次扩展 10MB,最大不超过 500MB。
添加数据文件: 如果现有表空间的存储空间不足,可以添加新的数据文件来扩展表空间的存储能力:
ALTER TABLESPACE my_tablespace
ADD DATAFILE '/u01/oradata/mydb/my_tablespace_02.dbf' SIZE 100M;
扩展数据文件大小: 如果启用了 AUTOEXTEND 功能,数据文件会根据需要自动扩展。如果没有自动扩展,管理员可以手动调整数据文件的大小:
ALTER DATABASE DATAFILE '/u01/oradata/mydb/my_tablespace_01.dbf' RESIZE 200M;
查看数据文件信息: 可以使用以下 SQL 查询来查看数据库中所有数据文件的信息,包括文件名称、大小、状态等:
SELECT file_name, bytes, autoextensible, maxbytes
FROM dba_data_files;
删除数据文件: 删除数据文件不是常见操作,通常需要通过删除整个表空间来移除数据文件:
DROP TABLESPACE my_tablespace INCLUDING CONTENTS AND DATAFILES;
此操作将删除表空间以及与其相关的所有数据文件。
表空间
Oracle数据库在逻辑上可以划分为一系列的逻辑空间,每一个逻辑空间就可以称为一个表空间。
- 一个数据库由有一个或多个表空间构成,表空间大小决定了数据库的大小。
- 一个表空间对应一个或多个数据文件,数据文件大小决定了表空间的大小。
- 一个数据文件只能从属于一个表空间。
--1.创建表空间
create tablespace tablespace_name
datafile 'd:\...\.dbf' size []m;
autoextend on next []m maxsize []m; --数据文件自动扩展
extent management local --指定表空间的管理方式local或dictionary
uniform size []m;--设定区的分配方式autoallocate或uniform
segment space management manual--设定段的管理方式manual或auto
--2.修改表空间
alter tablespace tablespace_name
add datafile/tempfile
'd:\...' size[]m;
--resize []m; 改变数据文件的大小
--3. 设置默认表空间
alter database default tablespace tablespace_name;
alter database default temporary tablespace tablespace_name;
--4.表空间重命名
alter tablespace tablespace_name
rename to tablespace_name;
--5.表空间的备份
alter tablespace tablespace_name
begin backup --设置为备份模式
end backup --结束备份模式
--6.删除表空间
drop tablespace tablespace_name--只删除表空间
including contents --表空间非空应带子句,删除其文件
and datafiles --删除操作系统下的数据文件
cascade constraints; --删除参照完整性约束
模式对象
模式是指一系列逻辑数据结构或对象的集合。
模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。
- 如果用户以 NORMAL 身份登录,则进入同名模式;
- 若以 SYSDBA 身份登录,则进入 SYS 模式。
- 如果以 SYSOPER 身份登录,则进入 PUBLIC 模式。
数据表
在创建表之前最好把表设计完整。表中都会存在一个id作为表的主键,唯一不重复。每一列都要指定一个数据类型。
Oracle中列包含6个数据类型。
数据类型 | 描述 |
---|---|
char(长度) | 固定长度字符串类型 |
varchar2(长度) | 可变字符串类型 |
long | 长文本,最大2GB |
number(位数,精度) | 数字类型 |
date | 日期类型(精准到秒) |
time | 时间类型(精准到毫秒) |
- sysdate:获得系统当前时间。
create table 表名
(列名 数据类型 完整性约束,
......
);
--复制表(表结构和数据)
create table table_name1 as select * from scott.emp;
--复制表(只复制表结构)
create table table_name1 as select * from scott.emp where 1=2;
表约束
在表中定义的用于维护数据库完整性的一些规则。通过对表中列定义约束,可以防止在执行DML操作时,将不符合要求的数据插入到表中。
在 Oracle 数据库中对列的约束包括主键约束、惟一性约束、检查约束、外键约束和空/非空约束 5 种,定义方法有表级约束和列级约束 2 种。
在 Oracle 中创建表时一般不给完整性约束,这样的完整性约束没有名,无法删除。一般在创建后手动添加。
primary key --主键约束
unique --唯一性约束
check --检查约束
foreign key references --外键约束
null/not null --空值约束
--1.添加约束
alter table table_name
add constraint p_pk primary key(id);
add constraint p_uk unique(sname);
add constraint p_ck check(sage between 20 and 30);
add constraint p_fk foreign key(sno) references student(sno) on delete cascade;
modify resume not null;
--添加空值约束必须使用modify代替add子句。
--2.删除约束
alter table table_name
drop unique(sname); --删除指定内容的约束
drop constraint p_ck; --删除指定名称的约束
drop constraint p_uk keep index --保留唯一性索引
drop constraint p_pk cascade --删除引用该约束的其他约束
注释
在 Oracle 中不能在创建表时在每一列后 comment 的方式给列添加注释。应该在创建后手动添加注释。
--给表添加注释
commit on table t_blog is '博客表';
--给表字段添加注释
commit on column t_blog.id is '博客的唯一ID';
数据表操作
--1.添加列
alter table table_name
add(列名 数据结构 [完整性约束],...);
--2.修改列名
alter table table_name
rename 列名 oldname to newname
--3.删除列
alter table table_name
drop column 列名 [cascade constraints]
--4.表重命名
alter table old_name rename to newname
rename old_name to new_name
--5.删除表
drop table table_name
[cascade constraints][purge]
--当对表中的数据进行修改时需要进行确认
commit;--提交
rollback;--回滚
索引
索引是为了加速对表中元组的检索而创建的一种分散存储结构。Oracle自动使用、维护索引。
- 使用索引加速行的检索,但减慢更新的速度。
- 快速定位数据,减少磁盘 I/O。
索引使用原则:
- 导入数据后再创建索引。
- 在适当的表和字段上创建索引。
- 合理设置复合索引中的字段顺序。
- 限制表中索引的数目。
- 为索引设置合适的PCTFREE参数。
- 选择存储索引的表空间。
--1.创建索引
create [unique][bitmap] index index_name
on table_name (列名[asd|desc],...)
[expression]
[reverse]
[parameter_list]
--unique表示建立惟一性索引;
--bitmap表示建立位图索引;
--asc/desc指定索引值的排列顺序,asc升序排序,desc降序排序,缺省值为asc;
--reverse表示建立反键索引;
--parameter_list用于指定索引的存放位置、存储空间分配和数据块参数设置。
--2.合并索引
alter index table_name coalesce
--3.重建索引
alter index table_name rebuild
--4.索引重命名
alter index old_name to new_name
--5.删除索引
drop index table_name
分区
分区原则:
- 表的大小超过2GB
- 要对一个表进行并行DML操作,必须分区
- 为了平衡硬盘的I/O操作,将一个表分散存储在不同的表空间中,必须对它进行分区
- 如果需要将表一部分设置为只读,另一部分为可更新的,必须对表进行分区
范围分区
范围分区是按照分区列值的范围来对表进行分区的。
create table table_name(
列名 数据类型 完整性约束,
...
)
partition by range(列名)
(partition 分区名 values less than()
tablespace tablespace_name,
partition 分区名 values less than()
tablespace tablespace_name,
...
);
通过 PARTITION BY RANGE 子句说明根据范围进行分区,其后括号中列出分区列,可以进行多列分区。每个分区以 PARTITION 关键字开头,其后是分区名。VALUES LESS THAN 子句用于设置分区中分区列值的范围。可以对每个分区的存储进行设置,也可以对所有分区采用默认的存储设置。
列表分区
如果分区列的值并不能划分范围(非数值类型或日期类型),同时分区列的取值范围只是一个包含少数值的集合,则可以对表进行列表分区(LIST),如按地区、性别等分区。与范围分区不同,列表分区不支持多列分区,只能根据一个单独的列来进行分区。创建列表分区时需要指定分区列和分区描述。
create table table_name(
列名 数据类型 完整性约束,
...
)
partition by list(列名)
(partition 分区名 values('[]')
tablespace tablespace_name,
partition 分区名 values('[]')
tablespace tablespace_name,
...
);
通过 PARTITION BY LIST 子句说明根据列表进行分区,其后括号中列出分区列。每个分区以 PARTITION 关键字开头,其后是分区名。VALUES 子句用于设置分区所对应的分区列取值。
散列分区
在进行范围分区或列表分区时,由于无法对各个分区中可能具有的记录数量进行预测,可能导致数据在各个分区中分布不均衡,某个分区中数据很多,而某个分区中数据很少。此时可以采用散列分区(HASH)方法,在指定数量的分区中均等地分配数据。为了创建散列分区,需要指定分区列、分区数量或单独的分区描述。
create table table_name(
列名 数据类型 完整性约束,
...
)
--1.
partition by hash(列名)
(partition 分区名 tablespace tablespace_name,
partition 分区名 tablespace tablespace_name,
...
);
--2.
partition by hash(列名)
partition 2 store in(tablespace_name1,tablespace_name2);
通过PARTITION BY HASH指定分区方法,其后的括号指定分区列。使用PARTITION子句指定每个分区名称和其存储空间。或者使用PARTITIONS子句指定分区数量,用STORE IN子句指定分区存储空间。
复合分区
复合分区包括:范围-列表复合分区,范围-散列复合分区。
范围-列表复合分区先对表进行范围分区,然后再对每个分区进行列表分区,即在一个范围分区中创建多个列表子分区。
create table table_name(
列名 数据类型 完整性约束,
...
)
partition by range(列名)
subpartition by list(列名)
(
partition 分区名 values less than([])
(subpartition 分区名 values('[]')
tablespace tablespace_name ,
...),
partition 分区名 values less than([])
(subpartition 分区名 values('[]')
tablespace tablespace_name ,
...),
...
);
范围-散列复合分区先对表进行范围分区,然后再对每个分区进行散列分区,即在一个范围分区中创建多个散列子分区。
create table table_name(
列名 数据类型 完整性约束,
...
)
partition by range(列名)
subpartition by hash(列名)
(
partition 分区名 values less than([])
(subpartition 分区名 tablespace tablespace_name,
subpartition 分区名 tablespace tablespace_name,
...),
partition 分区名 values less than([])
(subpartition 分区名 tablespace tablespace_name,
subpartition 分区名 tablespace tablespace_name,
...),
...
);
分区索引
本地分区索引是指为分区表中的各个分区单独建立索引分区,各个索引分区之间是相互独立的。
--在分区表的sname列上创建本地分区索引
on index_name(sname) local;
--为分区表的sage列建立基于范围的全局分区索引
create idnex table_name
on table_name(sage)
global partition by range(sage)
(partition 分区名 values less than([])
tablespace tablespace_name,
partition 分区名 values less than([])
tablespace tablespace_name,
...
)
--为分区表创建全局非分区索引。
create index table_name
on table_name(sname)
全局分区索引与表分区方法类似,索引分区方法也包括范围分区、列表分区、散列分区和复合分区 4 种。在指明分区方法时使用 GLOBAL 关键字标识全局分区索引。
全局非分区索引为分区表创建全局非分区索引与为标准表创建索引一样。
视图
视图是从一个或多个表或视图中提取出来的数据的一种表现形式。在数据库中只有视图的定义,而没有实际对应“表”的存在,因此视图是一个“虚”表。当对视图进行操作时,系统根据视图定义临时生成数据。
--1.创建视图
create view view_name
as
select *
from ...
--2.修改视图
create or replace view view_name
as
select *
from ...
--3.重命名试图
sp_rename oldname,newname;
4.--删除视图
drop view view_name;
通过视图的使用可以提高数据安全性、隐藏数据的复杂性、简化查询语句、分离应用程序与基础表、保存复杂查询等。
序列
序列用于产生惟一序号的数据库对象,用于为多个数据库用户依次生成不重复的连续整数。
--1.语法
create sequence sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[cycle | nocycle]
[cache n | nocache];
--2.修改序列
alter sequence sequence_name
...
--3.删除序列
drop sequence sequence_name
increment by | 设置相邻两个元素之间的差值,即步长,默认值为1 |
---|---|
start with | 设置序列初始值,默认值为1 |
maxvalue | 设置序列最大值 |
nomaxvalue | 默认情况下,递增序列的最大值为1027,递减序列的最大值为-1 |
minvalue | 设置序列最小值 |
nominvalue | 默认情况下,递增序列的最小值为1, 递减序列的最小值为-1026 |
cycle | nocycle | 指定当序列达到其最大值或最小值后,是否循环生成值,NOCYCLE 是默认选项 |
cache | nocache | 设置是否在缓存中预先分配一定数量的数据值,以提高获取序列值的速度,默认为缓存20个值 |
同义词
同义词是数据库中表、索引、视图或其他模式对象的一个别名。利用同义词,一方面为数据库对象提供一定的安全性保证,例如可以隐藏对象的实际名称和所有者信息,或隐藏分布式数据库中远程对象的位置信息;另一个方面是简化对象访问。此外,当数据库对象改变时,只需要修改同义词而不需要修改应用程序。
--1.创建同义词
create [public] synonym synonym_name
for table_name
--2.删除同义词
drop [public] synonym synonym_name
同义词分为私有同义词和公有同义词两种。私有同义词只能被创建它的用户所拥有,该用户可以控制其他用户是否有权使用该同义词;公有同义词被用户组PUBLIC拥有,数据库所有用户都可以使用公有同义词。
数据库链接
数据库链接是在分布式数据库应用环境中的一个数据库与另一个数据库之间的通信途径,将远程数据库映射到本地。所有能够访问本地数据库链接的应用程序即可访问远程数据库中的模式对象。
当用户正在访问一个本地数据库同时,需要访问其他非本地数据库的数据时,就需要使用数据库链接。数据库链接分为私有和公有两种类型。
create [public] database link link_name
[connect to [current user] | [user inentified by password] ]
using connect_string--指定服务名
命令 | 描述 |
---|---|
connect to | 设置与远程数据库建立连接的方式 |
current user | 指明用当前数据库用户连接远程数据库 |
user inentified by password | 设置连接远程数据库的用户名和口令 |
安全管理
数据库的安全性主要包括两个方面的含义:
- 一方面是防止非法用户对数据库的访问,未授权的用户不能登录数据库;
- 另一方面是每个数据库用户都有不同的操作权限,只能进行自己权限范围内的操作。
Oracle数据安全控制机制 :用户管理、权限管理、角色管理 、表空间设置和配额用户资源限制、数据库审计。
Oracle数据库的安全可以分为两类:
- 系统安全性是指在系统级控制数据库的存取和使用的机制,包括有效的用户名与口令的组合、用户是否被授权可连接数据库、用户创建数据库对象时可以使用的磁盘空间大小、用户的资源限制、是否启动了数据库审计功能,以及用户可进行哪些系统操作等。
- 数据安全性是指在对象级控制数据库的存取和使用机制,包括用户可存取的模式对象和在该对象上允许进行的操作等。
用户
SYS:是数据库中具有最高权限的数据库管理员,可以启动、修改和关闭数据库,拥有数据字典。
SYSTEM:是一个辅助的数据库管理员,不能启动和关闭数据库,但可以进行其他一些管理工作,如创建用户、删除用户等。
SCOTT:是一个用于测试网络连接的用户,其口令为TIGER。
PUBLIC:实质上是一个用户组,数据库中任何一个用户都属于该组成员。要为数据库中每个用户都授予某个权限,只需把权限授予 PUBLIC 就可以。
--1.创建用户
create user user_name identified
[by password | externally | globally as 'external_name']
[default tablespace tablespace_name]
[temporary tablespace temp_tablespace_name]
[quota n k|m|unlimited on tablespace_name]
[profile profile_name]
[password expire]
[account lock|unlock];
--2.修改用户
alter user user_name
...
--3.删除用户
drop user user_name [cascade];
user_name | 设置用户名,在数据库中必须是唯一的 |
---|---|
identified | 指明用户身份认证方式 |
by password | 用于设置用户的数据库身份认证,password为口令 |
externally | 用于设置用户的外部身份认证。 |
globally as 'external_name' | 设置用户的全局身份认证,external_name为Oracle的安全管理服务器相关信息。 |
default tablespace | 设置用户的默认表空间 |
temporary tablespace | 设置用户的临时表空间。 |
quota | 指定用户在特定表空间上的配额,即用户在该表空间中可以分配的最大空间。 |
profile | 为用户指定概要文件,默认值为default,采用系统默认的概要文件。 |
password expire | 设置用户口令的初始状态为过期,用户在首次登录数据库时必须修改口令。 |
account lock|unlock | 设置用户初始状态为锁定|不锁定,默认为不锁定。 |
权限
权限就是执行特定类型 SQL 命令或访问其他用户的对象的权利。用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限。
系统权限:系统权限是指在数据库级别执行某种操作的权限,或针对某一类对象执行某种操作的权限。例如,CREATE SESSION 权限、CREATE ANY TABLE 权限。
对象权限:对象权限是指对某个特定的数据库对象执行某种操作的权限。例如,对特定表的插入、删除、修改、查询的权限。
--1.系统权限
grant 权限,...
--create session 数据库连接权限
--create database link 创建数据库链接
--create any index 创建索引
--create role 创建角色
--create sequence 创建修改删除序列
--create synonym 创建修改删除同义词
--create table 创建修改删除表
--create tablespace 创建表空间
--create trigger 创建修改删除触发器
--create view 创建修改删除视图
--create user 创建用户
to 用户,...;
[with admin option] --允许用户再授权
--2.对象权限
grant 权限
--select on emp
--select any table
--insert any table
--update any table
--delete any table
to 用户
--3.权限回收
revoke <权限>...
from <用户>
grant语句是将指定操作对象的指定操作权限授予指定的用户。如果指定了with grant option子句,则获得某种权限的用户还可以把这种权限在授予别的用户,但在收回权限时,将级联收回。 用户被授予的权限可由DBA或其他授权者用revoke语句收回。
角色管理
所谓角色就是一系列相关权限的集合。
oracle为兼容以前版本,提供三种标准角色:connect / resource和 dba.
--1.创建角色
create role role_name
[not identified]
[identified by password]
--2.修改角色
alter role role_name
...
--3.删除角色
drop role role_name
角色名 | 描述 |
---|---|
role_name | 指定自定义角色名称,该名称不能与任何用户名或其他角色相同 |
not identified | 指定该角色由数据库授权,使该角色生效时不需要口令 |
identified by password | 设置角色生效时的认证口令 |