用户操作、赋权、事务、锁、索引资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、用户操作:
用户锁定和解锁/密码设置:
alter user [USER] account lock;
alter user [USER] account unlock;
alter user scott identified by tiger;
select * from dba_users; --查看用户信息表
创建用户:create user [USER] identified by [PASSWD];
删除用户:drop user [USER] cascade;
二、简单赋权
对于权限的赋予和收回语法如下:
grant [权限] to [用户]
revoke [权限] from [用户]
在oracle里有俩个最著名的角色: connect、resource 除了dba之外的最大角色。
查看当前用户的所有权限:select * from session_privs; 我们与scott用户下的权限进行对比,发现多了一个unlimited,其含义是拥有所有表空间配合的使用权限,这个权限太大了,一般来讲需要进行回收,然后重新进行分配一个表空间配合。
revoke unlimited tablespace from [USER];
查看用户缺省表空间:select username,default_tablespace from user_users;
alter user [USER] quota 10m on users;。
我们想让新建用户拥有对scott.emp表的查询权限:grant select on scott.emp to [USER];
我们想让新建用户拥有对scott的建立表操作:grant create any table to tim;
我们想让新建用户拥有对scott.emp表的修改权限:grant select, update(sal) on emp to tim; <注意:可以精确到字段>
三、事务特性
事务必须具备以下四个属性,简称ACID 属性:
原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
场景: 银行转账,A-100 B+100 同时成功或同时失败
一致性(Consistency):一个查询的结果必须与数据库在查询开始的状态一致(读不等待写,写不等待读)。
场景: 查询数据,9:00开始查询数据9:15查询完毕,在这期间所查询的数据被其他操作更新,且在9:00-1:15之间查询结果显示的是9:00时候并没有被更改的数据. 一般oracle是把这个没有更新的数据放入'undo'里, 如果oracle在'undo'里没有找到数据,则宁可报错,也不会让你看到其他操作更新的新的数据.
隔离性(Isolation):对于其他会话来说,未完成的(也就是未提交的)事务必须不可见。场景: 事务和事务之间相互隔离,2个session 一个查询一个更新,那么在更新操作没有commit之前, 查询所看到的数据是没有提交之前的,相互没有影响。
持久性(Durability):事务一旦提交完成后,数据库就不可以丢失这个事务的结果,数据库通过日志能够保持事务的持久性。
场景: 事务提交之后不可逆, 提交数据是由内存的数据刷新到磁盘上,这个过程的快慢和性能有关。那么oracle主要是靠'rudo' 日志,先记录日志,在写到磁盘上。
事务采用隐性的方式,起始于session的第一条DML语句,注意登录的用户需要使用sysdba 形式:conn system/tiger@orcl as sysdba;
查看事务:select * from v$transaction;
事务结束于:
1)COMMIT(提交)或ROLLBACK(回滚)
2)DDL语句被执行(提交)
3)DCL语句被执行(提交)
4)用户退出SQLPLUS(正常退出是提交,非正常退出是回滚)
5)机器故障或系统崩溃(回滚)
6)shutdowm immediate(回滚)
四、锁
锁大概分为:共享锁与排他锁。
排他锁(独占),排斥其他排他锁和共享锁。
共享锁,排斥其他排他锁,但不排斥其他共享锁。
锁类型:
DML锁(data locks,数据锁),用于保护数据的完整性。TX(行级锁),TM(表级锁),我们日常所使用的DML操作就会产生事物和锁。
查看事物:select * from v$transaction;
查看锁:select * from v$lock;
DDL锁(dictionary locks,数据字典锁),用于保护数据库对象的结构,如表、索引等的结构定义。
SYSTEM锁(internal locks and latches),保护数据库的内部结构
锁用途:只有有事物才会产生锁,保证数据的完整性和正确性。
自动加锁,做DML操作时,如insert,update,delete,以及select....for update由oracle自动完成加锁.
select * from emp1 where deptno = 10 for update;
修改其部门为10的记录则会被锁定,我们可以进行试探要修改数据记录是否被加锁。如下三种形式均可:
select * from emp1 where empno = 7782 for update nowait;
select * from emp1 where empno = 7782 for update wait 5;
select * from emp1 where job= 'CLERK' for update skip locked;
如果这个锁占用的时间太长,我们可以通过管理员杀掉session用户。
首先要找到是哪个sid占用了太长时间,查看v$lock表
然后根据v$lock表的SID,去v$session里面去找到,进行kill操作。
select sid, serial# from v$session where sid = 170;
alter system kill session 'sid,serial';
死锁问题:
五、索引