Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1610887
  • 博文数量: 292
  • 博客积分: 10791
  • 博客等级: 上将
  • 技术积分: 2479
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-20 21:06
文章分类

全部博文(292)

文章存档

2011年(31)

2010年(261)

分类: Oracle

2010-06-03 17:19:55


二、数据块,数据扩展,及数据段
1、block


Header:block address、segment type
Table Directory:如果segment type为table,则存储表信息
Row Directory:每个row piece的地址
-----------------------      Overhead[84-107bytes]   ------------------
Free Space:当INSERT或UPDATE需要更多空间时将使用这部分空间,也有可能存储INSERT,UPDATE,DELETE,及 SELECT...FOR UPDATE 语句访问时的事务条目信息。约为23bytes。
Row Data:包含表和索引的真实数据,同一个ROWID的数据行可以跨多个数据块。

2、行链接(Row Chaining)及行迁移(Row Migrating):
[1]、行链接:当INSERT一个数据块就无法容纳。在这种情况下 Oracle将这行数据存储在段内的一个数据块链(chain)中。如列中包含LONG或者LONG RAW数据类型的对象。
[2]、行迁移:当UPDATE一个数据块时,Free Space中也无法容纳增长后的数据。则该行数据被迁移至新数据块,ROWID不变。
--行链接和行迁移都会增加I/O次数,降低了数据库的I/O性能。

3、PCTFREE,PCTUSED,FreeList[控制段中的可用数据块]:
前提:表空间的管理必须是MANUAL
不适用:LOB 数据类型(BLOB,CLOB,NCLOB,及 BFILE);
PCTFREE:如当用户用 CREATE TABLE 语句创建表时指定了以下参数:PCTFREE 20,则这个表对应的相关数据段中的block的Free Space至少要有20%,这部分空间用于数据行的更新,只有Free Space>=20%时才能INSERT数据。
PCTUSED:row data+overhead的最大值,row data+overhead<=PCTUSED的时候才能插入新数据行。
FreeList:用于可用空间比例大于 PCTFREE 限定的数据块。这些块可以被插入(insert)操作使用。当用户提交了 INSERT 语句后,Oracle 从可用块列表中选择第一个有效的数据块使用。如果此数据块的可用空间不够容纳 INSERT 语句提交的数据,且此块的占用容量已经超过 PCTUSED 的限定,Oracle就将其从可用块列表中移出;如果可以容纳,则INSERT数据块直到达到1-PCTFREE限制;当用户对一个数据块提交DELETE或UPDATE操作后,若row data+overhead。一个段可以同时使用多个可用块列表,以减少对一个表进行并发插入(concurrent insert)时产生的竞争。
4、extent:
分配
在创建表时根据initial extent[dba_segments]的字节数创建初始空间但不会有数据。initial extent中的字节用完之后,Oracle自动分配后续的数据扩展,且后续扩展>=initial extents[可以从dba_segments视图中查询next_extent的值,但如果表空间的区管理是本地管理且区分配时AUTO的话,next_extent值为空]。
回收
如下情况,extent将会被回收:
1、TRUNCATE...DROP STORAGE[DROP STORAGE是默认值,用于释放Free Space,设置HWM为第一个block,delete操作不会使HWM降低];
2、ALTER TABLE table_name DEALLOCATE UNUSED; 
3、CREATE ROLLBACK SEGMENT.../ALTER定义的回滚段设置了OPTIMAL参数时
非簇表中的extent:drop时不是立即释放extent,在空间需要时释放空间,字典管理的表空间在INSERT新数据时如果没有足够大的extent,则将通过extent合并得到更大的extent,本地管理的表空间没有这个必要?
簇表中的extent:drop一个簇不会释放extent,还需要为簇中的其他表保留,所以没有extent被回收,只能使用TRUNCATE。
索引中的extent:drop index或index所在的表或簇时,extent被回收。
Rollback Segments中的extent:周期性的检查回滚段的容量是否超过了OPTIMAL,如果回滚段超过了这个最优值(即回滚段中的数据扩展(extent)过多),Oracle将自动地从回滚段回收一些数据扩展。

5、segment:
段头:
包含一个记录此段中所有extent的目录,[其BLOCK ID为dba_segments视图中的HEADER_BLOCK列]
CREATE TABLE employees_demo
STORAGE //指定extent分配模式,STORAGE参数只针对segment level而不是tablespace level
(
INITIAL 6144
NEXT 6144
MINEXTENTS 1
MAXEXTENTS 5
);
[1]、data segment

类型

dba_segment中的segment_type

非分区表或非簇表

TABLE

分区表的一个分区

TABLE PARTITION

一个簇表

CLUSTER

[2]、index segment
--索引段也可以指定存储参数,表的数据段和与其相关的索引段不一定要存储在同一表空间中

类型

dba_segment中的segment_type

分区索引

INDEX PARTITION

非分区索引

INDEX

[3]、Temporary Segment
--只有在内存无法完成排序等操作时才会分配临时段
操作:
CREATE INDEX  
SELECT ... ORDER BY  
SELECT DISTINCT ...  
SELECT ... GROUP BY  
SELECT . . . UNION  ·[求并集]
SELECT ... INTERSECT [求交集]
SELECT ... MINUS [在第一个table中存在,而在第二个table中不存在的记录]
使用CREATE USER 或 ALTER USER 语句中的 TEMPORARY TABLESPACE 子句指定用户默认使用的临时表空间。
因为临时表的读写比较频繁,所以有必要为临时表创建单独的表空间。
临时段的数据变化不会记录到redo lo g中,只有对临时段空间管理的操作才会被记录。

6、Automatic Undo Management
undo vs. rollback
rollback segment: UNDO_MANAGEMENT=MANUAL,Oracle早期使用的撤销信息存储管理方式
undo segment[建议]:UNDO_MANAGEMENT=AUTO
--1、AUTOEXTEND的表空间:则undo信息的保存周期略大于系统中最长查询的时间同时大于 UNDO_RETENTION初始化值。
--2、表空间大小固定:则保存周期为表空间支持的最大周期,UNDO_RETENTION被忽略除非retention guarantee = enabled
--3、LOB对象的撤销信息的保存周期不能自动调整,由UNDO_RETENTION决定。

三、Oracle物理结构:

四、事务管理
一、commit和rollback
1、DDL语句会隐式结束一个任务,COMMIT和ROLLBACK则显示结束一个任务。
2、如果一个事务disc了实例,则数据库隐式执行commit;如果异常终止,则隐式执行rollback。
3、commit和rollback都会释放事务中的所有锁。

4、可配置session为resumable[alter session enable resumable],则此会话在达到用户空间分配配额无可用空间达到最大数据扩展限制[dba_segments中的max_extents列]时,且没有超出timeout值[默认为2小时],则会话被挂起。
5、set transaction name 'test'  --给事务命名,且必须是事务的第一条语句,若提示ORA-01453错误,则先commit或rollback当前事务。select不会产生事务[虽 然它属于DML操作],因为它不用commit或者rollback。事务以首个executable SQL statement开始[DML(INSERT、UPDATE、DELETE)+DDL(ALTER、DROP、CREATE、RENAME)]。
6、已提交事务在缓冲中的数据不一定被dbwn写入磁盘,写操作既可能发生在事务提交之前,也可能在提交之后。
7、默认lgwr进程写online redo先于系统通知用户事务已提交,即同步的方式,也可以使用异步的方式,但有可能丢失已提交但仍未写入磁盘的数据更改。
8、语句级回滚:插入数据时主键重复、产生死锁等,但语法错误不会产生语句级回滚,语句级回滚不会导致事务之前的数据改变失效[仍可以使用COMMIT提交数据更改],如果回滚语句是DDL,则前面隐式提交的语句不会回滚。
9、UPDATE 或 DELETE 操作前使用SELECT FOR UPDATE ... NOWAIT 语句以防止死锁。
10、回滚至保存点将释放保存点之后的所有锁保存点
SQL>savepoint a;
SQL>....
SQL>rollback to a;
11、分布式数据库Oracle RAC的区别:分布式数据库是由一组数据组成的,这些数据物理上分布在计算机网络的不同结点上,逻辑上是属于同一个系统的。而RAC只是多实例冗余,数据物理地存放在一个存储节点上,为了failover和负载均衡。
12、两步提交机制:为保证多节点协调一致 , 指定其中的任意一个节点为“协调者” , 其它节点为“参与者”。在事务结束时 , 协调者和参与者可按如下方式相互应答:
首先由协调者向参与者发 Prepare 消息 , 参与者接到 Prepare 消息后 , 根据本节 点的子事务的执行是成功还是失败回答O.K或者NotO.K, 如果所有的参与者都发来 O.K 消息 , 则协调者发COMMIT命令 , 如果任意一个参与者发来NotO.K消息 , 则参与者发 ROLLBACK命令。成功的子事务不能自行提交 , 须等到协调者确认所有的参与者都发来O.K消息 , 并发出 COMMIT命令 , 才能提交。失败的子事务可以直接卷回 , 而不必等待协调者的命令。可见 , 整个协议分两步: 第一步 , 确定各子事务都已成功执行; 第二步 , 发 COMMIT命令。因此本协议称为两步提交协议 , 或称两阶段提交协议。
RECO进程:自动解决分布式事务的failure。
13、自治事务:自治事务独立于主事务,有自己的上下文环境。自治事务内仍可以调用其他自治事务,oracle对嵌套层数没有限制。
主事务回滚至调用自治事务前的保存点,并不会回滚自治事务。

七、数据字典
1、数据字典=(基表+用户视图)=>属于SYS用户[SYSTEM表空间,所以只有open以后才可以访问]

2、提倡使用Public Synonym[公共同义词]而不是直接引用基表,因为公共同义词一般不会改变



前缀    覆盖范围
USER  用户视图(用户方案(schema)内的对象),没有 OWNER 列
   
ALL    扩展的用户视图(用户可访问的对象)
   
DBA    DBA 视图 (所有用户方案内的对象)
  


3、数据库对象视图
USER_OBJECTS    
ALL_OBJECTS
DBA_OBJECTS

4、DUAL 表:此表只有一列名为 DUMMY[VARCHAR2(1)];只有一行数据,值为 X。用于查询一些固定的值如日期时间、算术运算、sequence

5、动态性能表:以 V_$[虚表、逻辑的伪表:是内存中建立的表,不是物理存在的表,它的内容来自两个方面,内存和控制文件(在数据库NOMOUNT可以访问MEMORY,MOUNT可以访问控制文件)] 开头,由SYS用户拥有,其上创建有视图,而视图上又有公共同义词[V$开头]

6、V$FIXED_TABLE=基表[X$开头]+动态性能视图[V$开头]+OPS--Oracle Parallel Server(RAC)环境下的动态性能视图(针对每个实例)[GV$开头]

7、DBMS_METADATA软件包可提取对象的DDL创建语句。

八、Oracle的内存结构:

九、Oracle的进程结构:


十一、Oracle 工具
Data Pump:impdp/expdp[imp/exp]
--只针对Oracle数据库

SQL*Loader:sqlldr
--将具有特定格式的数据文件导入至oracle数据库,不受Oracle数据库特定格式的限制,具有一般的格式如一个以特定格式存储的文本文件

LogMiner:V$LOGMNR_CONTENTS视图
--可以对redo log[包括联机和重做日志]日志进行分析及查询
EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'D:\Oracle\product\10.2.0\oradata\orcl\REDO01.LOG', OPTIONS => DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
select * from V$LOGMNR_CONTENTS;

DBVERIFY:dbv
--执行物理数据完整性检查,只能对数据文件进行执行检查
dbv file=D:\Oracle\product\10.2.0\oradata\orcl\system01.dbf feedback=1000

DBNEWID:nid
--修改数据库标识(DBID)及数据库名(DBNAME),复制一个数据库的副本
nid target=/ dbname=newdbname


十二、数据库及实例的启动与关闭
启动:
1、本机多实例与RAC:
本机多实例是每一个实例都对应一个物理的数据库;RAC是多个实例对应一个物理数据库[RAC可以在单机上实现,不过只能以虚拟机模拟的方式]
普通用户不能改变 Oracle 数据库的运行状态[开启和停止],只有拥有sysdba或sysoper权限的用户才可以启停数据库。sysoper登陆后的用户是PUBLIC,缺省无法查询数据字典,但可以启停数据库

2、数据库初始化参数:
三种初始化参数类型[前提是使用SPFILE]:
[1]、DEFERRED:动态参数,应用于后续的session,当前session保留旧值
[2]、FALSE:静态参数,实例重启后有效
[3]、IMMEDIATE:动态参数,立即生效
 
3、参数文件[数据库初始化参数]:
[1]、初始化参数文件[PFILE]:文本格式-----管理员必须手工修改,然后重启实例使之生效[ALTER SYSTEM语句只对当前实例有效]
[2]、服务器参数文件[SPFILE]:二进制格式--能够持续地(persistent)存储系统的初始化参数[ALTER SYSTEM语句可以动态改变(静态参数除外)]

4、启动过程:
[1]、启动实例:从pfile或者spfile中读取初始化参数,创建SGA,创建后台进程。
        --以限制模式启动实例:只有管理员用户[拥有RESTRICTED SESSION系统权限,一般只有dba才有]才能通过本地方式连接数据库,执行数据库导入导出、升级等管理性操作。
[2]、挂载(mount)数据库:打开控制文件[通过参数文件中的CONTROL_FILES参数],从中获取数据文件名重做日志名,实现实例和数据库的关联,除了DBA,其他用户无法访问,DBA可以做一些管理性的操作[如修改数据库的归档模式--alter database archivelog/noarchivelog]。
        --RAC中的mount:初始化参数 CLUSTER_DATABASE为true时才能被多个实例mount
        --standby database:?
        --clone database:?
[3]、打开(open)数据库  :打开数据文件联机日志文件,如果需要实例恢复,则自动进行实例恢复,RECO 进程自动处理不可信的分布式事务?。
        --只读模式打开:mount数据库之后执行alter database open read only或者startup open read only数据文件重做日志文件置为只读,其他oracle文件   依然可以访问,永久表空间无法被offline,提示ORA-16000错误,但可以对数据文件进行offline操作[alter database datafile 'D:\Oracle\product\10.2.0\oradata\orcl\users01.dbf'],可以对脱机的数据文件和表空间执行恢复。控制文件依然对数据库状态进行记录。


关闭:
5、shutdown normal或者shutdown immediate时,自动触发checkpoint,同步数据后,关闭数据文件联机日志文件
6、使用alter database close将db从open状态变为mounted状态;使用alter database dismount将db从mounted状态变为started状态。注意:dismount之前必须先close。什么作用?

十三、数据并发性和数据一致性
1、串行化处理:按串行化模式运行的事务是非并行的。
2、事务的隔离级别是为了在数据库一致性和数据库性能[加锁]之间做一个权衡。
3、数据的不一致现象[不使用加锁]:
[1]、脏读取(dirty read):事务1读了事务2的脏数据[DBW0将事务2未提交的事务写进了磁盘],但之后事务2被rollback
[2]、不可重复读取(nonrepeatable read):事务1读取某一数据后,事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值
        --(phantom read:幻影读):事务1按一定条件查询某些数据后,事务2删除或插入了部分记录。事务1再次按相同条件查询时,读取的部分记录增加或消失了。
                --不存在读取
                --新增读取
[3]、丢失修改:两个事务1、2读入同一数据并修改,事务2提交的结果破坏了事务1提交的结果,导致事务1的修改被丢失。

3、锁机制解决数据并发访问
4、读一致性
[1]、语句级读一致性(Oracle自动实现):如果查询[包括INSERT、UPDATE、DELETE中的子查询]涉及的某个数据块内的数据被修改过(即数据块的 SCN 晚于查询开始执行时记录的 SCN),Oracle 将使用回滚段中的信息重建此数据块,并以重建的数据块替代被修改的数据块供查询使用。
[2]、事务级读一致性:Serializable或者read-only的方式
5、RAC 环境下的读一致性:使用Cache Fusion技术[前提条件:互联网络的速度要比访问磁盘的速度要快!]--Cache Fusion就是通过互联网络在集群内各节点的SGA之间进行块传递,以避免首先将块推送到磁盘,然后再重新读入其他实例的缓存中这样一种低效的实现方式(OPS的实现)。
6、事务隔离级别:通过Serializable事务来实,保证了可重复读取。

Read committed

默认,只能看到查询[非事务]开始时已提交的数据

可能出现不可重复读取{因为事务中查询的SCN不同}。数据处理能力较高{并发度高},适合事务发生冲突的可能性较小的系统

Serializable

只能看到事务开始前已经提交的数据,可以执行INSERT、UPDATE及DELETE

适用于事务中需要运行同一查询多次,因为串行化事务支持重复读,Oracle使用nonblocking query和行级锁以提高串行化事务的并行度。适合于需要执行多个满足一致性的查询的事务。例如,汇总数据并将结果写入数据库的报表应用可以采用串行化隔离,因为串行化事务所提供的数据一致性与 READ ONLY 事务相同,但其中还可以执行 INSERT, UPDATE,和 DELETE 操作。

Read-only

和Serializable类似,但事务中不能包含INSERT、UPDATE和DELETE语句

?

7、设置隔离级别:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;  
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;  
SET TRANSACTION READ ONLY;
--和SET TRANSACTION NAME一样,以上语句必须是事务的第一个语句。[即前一天语句不能为DML语句[SELECT除外]]

如果在每个事务开始时都使用 SET TRANSACTION 语句,将加重网络及处
理器的负担。用户可以使用 ALTER SESSION 语句改变一个会话所有内事
务的默认隔离级别:
 
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;  
ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;


8、:[Oracle自动加锁+用户手工加锁]
(1)、根据限制程度:
[1]、X锁:不能再对加锁对象加其他任何的锁[包括S锁],但Oracle中的SELECT ... FROM ... 不会加锁,所以Oracle中还可以对加X锁的对象进行查询。
[2]、S锁:不能再对加锁对象加X锁,但可以对其加S锁。


(2)、根据限制对象:
[1]、DML锁(数据锁,表级锁+行级锁)
        --行级锁(TX):粒度最精细、限制程度最高[对于单个数据行来说]的锁,能够提供最好的并发度,且一定是排他的。
        --表级锁(TM):

表级锁(TM) 类型

含义

特点

禁止的操作

允许的操作

行共享表级锁(RS)[SELECT FOR UPDATE&ROW SHARE MODE]

表明拥有此锁的事务已经锁定了表内的 某些数据行,并有意对数据行进行更新操作

表级锁的限制程度最低,因而能够保证表的最大的并发访问能力

LOCK TABLE table IN EXCLUSIVE MODE;

其他事务也能获得相同表上的行共享[RS],行排他[RX],共享[S], 及共享行排他模式[SRX]的表级锁

行排他表级锁(RX)[INSERT、UPDATE、DELETE&ROW EXCLUSIVE MODE]

通常表明拥有此锁的事务已经对表内的某些数据行进行了更新操作

行排他表级锁比行共享表级锁(row share table lock)的限制程度略高。

LOCK TABLE table IN SHARE MODE;  
 
LOCK TABLE table IN SHARE EXCLUSIVE MODE;  
 
LOCK TABLE table IN EXCLUSIVE MODE;

允许其他多个事务同时获得相同表上的行共享表级锁[RS]或行排他表级锁[RX]

共享表级锁(S SHARE MODE)

 

 

LOCK TABLE table IN ROW EXCLUSIVE MODE;  
 
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;  
 
LOCK TABLE table IN EXCLUSIVE MODE; 

某个事务拥有了某个表的共享表级锁后,其他事务可以查询表,可以使用 SELECT ... FOR UPDATE[RS] 语句锁定选中的数据行,也能够成功执行 LOCK TABLE ... IN SHARE MODE[S]语句。
但其他事务不能对表进行更新操作。多个事务可以并发地获得同一个表上的共享表级锁
在此种情况下任何事务都不能对表进行更新(即便事务通过SELECT ... FOR UPDATE 语句获得了行级锁也不行)。因此,拥有共享表级锁的事务只有在此表上没有其他事务的共享表级锁时,才能对表进行更新操作

共享行排他表级锁(SRX SHARE EXCLUSIVE MODE)

 

与共享表级锁(share table lock)相比限制更为严格

LOCK TABLE table IN ROW EXCLUSIVE MODE;
 
LOCK TABLE table IN SHARE MODE;  
 
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;    
 
LOCK TABLE table IN EXCLUSIVE MODE; 

同一时间只有一个事物能够获得表的共享行排他表级锁。
某个事务拥有了某个表的共享行排他表级锁后,其他事务可以查询表,可以使用 SELECT ... FOR UPDATE [RS]语句锁定选中的数行,但不能对表进行更新操作。

排他表级锁(X EXCLUSIVE MODE)

排他地对表进行写操作

限制程度最高的表级锁

一个事务获得排他表级锁后,将禁止其他事务对表执行任,何 DML 操作,其他事务也无法获取表上任何类型的锁。

同一时间只有一个事务能获得表上的排他表级锁。一个事
务获得排他表级锁后,其他事务只能对表进行查询操作


DML 语句获取的锁
:

DML 语句

是否存在行级锁

表级锁的模式

SELECT ... FROM table

 

 

INSERT INTO table ...

X

RX

UPDATE table ...

X

RX

DELETE FROM table ...

X

RX

SELECT ... FROM table ... FOR UPDATE OF ...

X

RS

LOCK TABLE table IN ...

ROW SHARE MODE

 

RS

ROW EXCLUSIVE MODE

 

RX

SHARE MODE

 

S

SHARE EXCLUSIVE MODE

 

SRX

EXCLUSIVE MODE

 

X


[2]、DDL锁(数据字典锁,保护表或视图等的定义)--在DDL操作期间存在,DDL自动提交后释放,可解除的解析锁则一直存在。
1、排他 DDL 锁:例如ALTER TABLE时防止其他事物执行DROP TABLE之类
2、共享 DDL 锁 :例如,执行 CREATE PROCEDURE 语句时,事务将获取所有引用对象上的共享 DDL 锁。此时,其他事务可以并发地获取相同表上的共享 DDL 锁并创建引用了相同表的过程。但任何事务都无法获取被引用表上的排他 DDL 锁。
3、可解除的解析锁:解析锁的作用是,当共享 SQL 区(shared SQL area)所引用的对象被修改或移除后,此共享 SQL 区能够被置为无效。解析锁不会禁止任何 DDL 操作,当出现与解析锁冲突的 DDL 操作时,解析锁将被解除,因此也称之为可解除的解析锁。解析锁是在 SQL 语句执行的解析阶段(parse phase)获得的,在共享 SQL 区被清除出共享池(shared pool)前一直保持。

[3]、内部锁及闩锁(latch)(内部结构如数据文件):
闩锁:保护SGA中的共享结构如用户列表或buffer中的block结构等等,加锁时间极短。和操作系统有关。
内部锁:比闩锁更复杂。
--1、数据字典缓存锁:确保正在被解析的语句不会看到不一致的对象定义,当语句解析结束时共享锁将被释放,而当 DDL 操作结束时排它锁将被释放
--2、文件及重做日志管理锁:确保同一时间只有一个进程能够对其进行修改,持续时间较长。协调重做日志文件(redo log file)使用与归档;数据文件(datafile)锁,实现多实例在共享模式下挂载数据库,或一个实例在排他模式下挂载数据库。
--3、表空间及回滚段锁:回滚段上的锁保证同一时间只有一个实例能够对其执行写操作,例如,一个表空间处于联机(online)还是脱机(offline)状态对访问同一数据库的所有实例应该是一致的[即对状态加锁]

9、排他行级锁已经是限制程度最高的锁,无需转换。Oracle能够将低限制的锁自动转换为高限制的锁。
10、死锁
Oracle能够自动检测出死锁,并向其中一个事务发送ORA-00060错误,则此事务需要手动进行rollback,此事务被rollback之后将可以使另一个事务继续执行。
11、静默数据库
静默:ALTER SYSTEM QUIESCE RESTRICTED [只有 SYS 和 SYSTEM 能够提交,将等待所有实例中由 SYS 及 SYSTEM 之外的用户所提交的事务结束(提交或终止)]--用户的连接被挂起;连接用户的查询被挂起
恢复:ALTER SYSTEM UNQUIESCE--所有挂起的连接和查询继续执行。
对于必须持续运行的系统,无需关闭数据库就能执行某些特殊操作的功能是十分必要的。
12、手工加锁
事务级
[1]、SET TRANSACTION ISOLATION LEVEL 语句  
[2]、LOCK TABLE 语句(可以对表加锁,对视图使用时,实际将对底层
的表加锁)  
[3]、SELECT ... FOR UPDATE 语句 
会话级[修改所有事务]
ALTER SESSION
13、用户锁以UL为前缀,所以不会和Oracle锁冲突

十五、数据库备份与恢复
备份:
1、涉及到的文件:
数据文件
控制文件
联机日志文件--实例恢复
归档日志文件--介质恢复

2、
物理备份:对物理文件的备份。
--热备[联机|归档模式]:恢复时需要应用归档日志文件。
--冷备[脱机]。还原所有的数据文件、控制文件、联机日志文件、参数文件,然后打开数据库即可。
方式:RMAN、SQLPLUS\操作系统命令
逻辑备份:利用EXP/IMP导入导出工具导出数据库的逻辑对象

恢复:
1、实例恢复:实例失败,下次启动自动执行。
2、介质恢复
一般步骤:
(1)、Mount[恢复整个数据库]/Open[恢复单个数据文件或者表空间]数据库
(2)、设置恢复点
(3)、RESTORE[将备份还原到指定的位置]
(4)、RECOVER[应用归档日志文件和联机日志文件]
(5)、OPEN或者使表空间在线
[1]、完全恢复:
[2]、不完全恢复:
SET UNTIL命令设置恢复到数据库的某个状态。
3、用户错误的恢复

二十、数据库安全

1、数据库用户的属性:
用户名、认证方法、默认表空间、临时表空间、表空间限额、资源限制文件
2、SYS\SYSTEM
SYS:拥有所有数据字典表和视图,DBA权限
SYSTEM[normal身份]:DBA权限,对oracle日常维护和管理
3、验证:
[1]、口令认证(数据库认证):口令以加密的形式存储在数据字典中。
[2]、外部认证:CREATE USER OPS$SUN IDENTIFIED EXTERNALLY;设置初始化参数OS_AUTHENT_PERFIX[前缀]、并使REMOTE_OS_AUTHENT=TURE。
[3]、全局认证:用户密码不存放在数据库中,使用Oracle高级安全选项进行验证。
4、权限
系统权限:在数据库级执行某种操作,不是针对特定的数据库对象,例:SYSDBA、SYSOPER、CREATE TABLE\SESSION等等
对象权限:针对表、视图、序列、过程、函数或包上的访问权限。
5、角色
一系列权限的集合。角色不属于某个用户,即使创建角色的用户删除、角色仍然可以存在。
优点:简化权限管理
预定义角色+用户自定义角色
6、Profile资源限制文件
限制的资源:
[1]、CPU时间
[2]、逻辑读
[3]、每个用户的并发会话数
[4]、会话的空闲时间
[5]、会话的连接时间
[6]、私有SQL区大小
限制的级别:
会话级别:整个会话期间
调用级别:每句语句
7、审计





 
阅读(2085) | 评论(0) | 转发(0) |
0

上一篇:RAID

下一篇:"log file sync" 等待事件

给主人留下些什么吧!~~