/* 数据并发性和一致性 */
数据并发性是指多个用户可以在同一时刻访问相同的数据.
数据一致性是指在保证并发性的同时,每个用户都能看到一致的数据视图,包括用户能够看到自己或其它用户的事务对数据所做出的更改.
可防止的三种读现象:
* 脏读:某个事务读取了被其它未提交事务修改过的数据.
* 不可重复读:在某个事务读取一次数据后,其它事务修改了这些数据并进行了提交,这样当该事务重新读取这些数据时就会得到与前一次读取不一致的结果.
* 假象读:在某个事务执行第一次查询时获得了满足查询条件的一个结果集,随后其它事务又插入或删除了一些满足查询条件的记录,这样当该事务重新执行相同的查询时,就会得到与前一次查询不一致的结果集.
各种隔离等级对可防止的读现象的处理能力:
隔离等级 脏读 不可重复读 假象读
-------------------------------------------
read uncommitted 可能发生 可能发生 可能发生
read committed 不会发生 可能发生 可能发生
repeatable read 不会发生 不会发生 可能发生
serializable 不会发生 不会发生 不会发生
Oracle提供read committed和serializable两种隔离等级,默认情况下,oracle使用的是read committed事务隔离等级.
利用不同的隔离等级,ORACLE能够实现两种级别的读一致性:
* 语句级读一致性:查询操作所读取的数据都是在语句开始执行之前已经提交的数据,而不会包含任何未提交的数据或者在查询语句开始执行之后才提交的数据.
* 事务级读一致性:在事务执行的全过程中所读取的数据都时在事务开始之前已经提交的数据,而不会包含任何未提交的数据或者在事务开始之后才提交的数据.
/* 数据完整性 */
关系数据库的数据完整性主要包含三方面:实体完整性,参照完整性和用户定义的完整性.这些完整性都可以在ORACLE中通过约束,触发器等对象来实现.
ORACLE中可以建立如下五种类型的完整性约束:
* NOT NULL约束
* UNIQUE约束
* PRIMARY KEYL约束
* FOREIGN KEY约束
* CHECK约束
/* 概要文件 */
一个数据库用户只能指定一个概要文件
1.通过概要文件,可以对以下数据库和系统资源进行限制:
CPU时间
逻辑读
用户的并发会话数
空闲时间
连接时间
私有SGA区
2.概要文件还可以对用户的口令策略进行控制
创造概要文件
create profile accounting_user limit
sessions_per_user 6
connect_time 1440
idle_time 120
logical_reads_per_session unlimited
cpu_per_session unlimited
password_grace_time 30
failed_login_attempts 6;
指定概要文件
alter user scott profile accounting_user;
修改概要文件
alter profile accounting_user limit
cpu_per_call default;
删除概要文件
drop profile accounting_user cascade;
概要文件数据字典
dba_profiles 包含所有概要文件的基本信息
/* 用户 */
创建用户
create user zhao
identified by password
default tablespace accounting_tbs
quota 100M/unlimited on accounting_tbs
quota 500k on indx
temporary tablespace temptbs
profile accounting_users
grant connect to zhao、
默认情况下,新建的用户在任何表空间中都不具有任何配额
锁定/解锁用户
alter user zhao account lock/unlock
修改用户
alter user zhao
identified by aaaaaa
default tablespace users
删除用户(cascade关键字指定删除用户模式中所有的对象)
drop user zhao cascade
用户信息字典
all_users/dba_users/user_users 数据库用户的信息
dba_ts_quotas/user_ts_quotas 用户的表空间配额信息
/* 权限和角色 */
oracle中,权限分为两类:
对象权限:对象权限是针对某个特定的模式对象执行各种操作的权利.
下面这些模式对象都可以设置对象权限:
表、视图、序列、存储过程、函数、包.
系统权限:系统权限是在数据库级别执行某种操作,或者针对某一类的模式或非模式对象执行某种操作的权利.系统权限并不针对某一个特定的对象,而是针对整个数据库范围.
系统权限还可以分为两类
1.针对数据库中某一类型的数据库对象
select any table,drop any index,......
2.针对某种数据库级别的操作
alter system,......
如果在授予用户系统权限时使用了with admin option子句,被授予的用户还可以将这项系统权限再授予其它用户
对象权限一共有九类:
select(不能授予表中的字段,只能授予整个表)
update
delete
insert
execute(针对存储过程,函数和包)
read(针对目录)
index
references
alter
如果在授予用户对象权限时使用了with grant option子句,被授予的用户还可以将这项对象权限再授予其它用户
创建角色(通过角色可以简化权限管理及进行动态的权限管理)
预定义角色:
connect
resource
dba
exp_full_database
imp_full_database
.....
create role accts_role;
grant select on sal_history to accts_role;
grant insert,update on mount_entry to accts_role;
grant create view to accts_role;
授予权限或角色
1.将系统权限授予用户
grant create any table to hanzo;
2.将对象权限授予用户
grant select,update on customer to felix;
其中insert,update和references可以授予表或视图中的字段
grant update(name,email) on customer to felix;
可以使用关键字all将某个对象的所有对象权限全部授予指定的用户
grant all on customer to felix;
3.将角色授予用户
grant accts_role to hanzo with admin option;
不能使用一条grant语句同时为用户授予对象权限和角色
回收权限和角色
revoke select,update on customer from felix;
revoke accts_role from hanzo;
revoke all on customer from hanzo;
权限和角色数据字典
all/dba/user_tab_privs 包含所有对象已授予的对象权限信息
all/user_col_privs_made 包含由当前用户授予的对象权限信息
dba/user_sys_privs 包含所有已授予的系统权限信息
session_privs 包含当前会话所具有的系统权限信息
all/dba/user_col_privs 包含所有字段已授予的对象权限信息
dba_roles 包含数据库中所有角色的描述信息
dba/user_role_privs 包含为用户或角色授予的角色信息
role_role_privs 包含为角色授予的角色信息
role_sys_privs 包含为角色授予的系统权限信息
role_tab_privs 包含为角色授予的对象权限信息
session_roles 包含当前会话所具有的角色信息