文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>数据库一致性

数据库一致性

时间:2010-12-20  来源:x-i-x

 leverage  ['levɚridʒ] 1.杠杆作用;杠杆效率 2.手段;力量;影响力
 retention  [ri'tenʃən]   1.保留;保持 2.记忆力
 vying       ['vaiiŋ]     1.竞争的;竞赛的
 spike       [spaik]     阻止;制止;使(计划等)受挫,墙头钉;尖铁,钉鞋
 
flashback
  适用版本:9i以上
  作用: 允许用户看到过去某个时间点的实际数据 ,归纳为:1.事务会滚 2.DML/Query一致读 3.数据库恢复 4.flashback
  先决条件: 指定时间点的undo数据还存在

重做 UNDO
原理:
undo segment=rollback segment , 由extents 组成,必须存放在专门的表空间:undo tablespace,一个数据库可以有多个undo表空间,同一时间只有一个被激活
(active),undo segment自动收缩和增长,循环的缓冲区。extents可以回绕到segment的最开始的地方,如果没有活动的事务在使用第一个缓冲的话。
在一个事务执行的开始,系统赋予一个undo tablespace,的undo segment,事务过程对表的修改会记录在这里。
undo segment number编号,usn=0,sys,system用户保留使用,
所有的segment归属于sys,每个segment至少有2个extents,

数据字典
V$ROLLNAME---- 当前 active undo segments
DBA_ROLLBACK_SEGS----  system,undo tablespace 里面active (online) 和inactive (offline) undo segments
V$TRANSACTION---- 事务和undo segments 的关系。
V$UNDOSTAT ---- 计算undo表空间的大小

参数:
UNDO_MANAGEMENT 方式MANUAL/ AUTO. alter system set undo_management = manual scope=spfile
UNDO_TABLESPACE   指定名称,同一个时间只有一个,除非指定了新的,旧的空间上面还有活动的事务,将并行直至事务结束。如果undo表空间在创建数
据库的时候未指定,系统默认创建一个命名为SYS_UNDOTBS的空间。alter system set undo_tablespace=undo_batch; AUTOEXTEND  如果undo tablespace’s datafiles没有指定的话,太多任务竞争较小的空间,可能导致失败。如果你能够确定足够的大小,可以关闭,防止有 些用户忽略提交造成巨大空间消耗。 UNDO_RETENTION(秒):
1、先解释下undo_retention
设置undo_retention,保证commit 后的数据在undo segment中保留多长时间。但是并不能保证commit后的undo 信息在undo_retention的时间内一定不被覆写
,当undo segment不够时,还是会覆盖已commit的undo 信息。
设0,表示自动。
2、如果需要保证在undo_retention时间内undo 信息一定不被覆写的话,可以对undo segment设置RETENTION GUARANTEE。但是这个参数受到
undo_retention和undo size的限制。如果undo size 太小,undo_retention设置太久,设置retention guarantee 时就会报错:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
3、设置该参数
 alter tablespace undotbs2 retention guarantee;
撤销该参数
 alter tablespace undotbs2 retention noguarantee;
三类数据:
Uncommitted undo information   永不覆盖
Committed undo information      可以覆盖
Expired undo information           一旦活动会话要求,可以覆盖

使用:
1.
设定segment名称,跟踪事务。
SQL> set transaction name 'Update clerk salaries';
Transaction set.
SQL> update hr.employees set salary = salary * 1.25
2 where job_id like '%CLERK';
44 rows updated.
SQL> select xid, status, start_time, xidusn seg_num,
2 r.name seg_name
3 from v$transaction t join v$rollname r
4 on t.xidusn = r.usn
5 where t.name = 'Update clerk salaries';
XID STATUS START_TIME SEG_NUM SEG_NAME
-------- --------- ----------------- ------- -------------
02002F00 ACTIVE 08/01/04 16:20:10 2 _SYSSMU2$
9A140000
1 row selected.
2.
读一致
  用法:set transaction read only; 发布之后的所有SELECT语句,其结果均为同一个时间点一致,提交之前不能执行DML。只允许以下操作:
SELECT statements without the FOR UPDATE clause
LOCK TABLE
SET ROLE
ALTER SESSION
ALTER SYSTEM
             备注:EXP导出数据时,如果CONSISTEN参数设为TRUE,则EXP导出时,会先发布SET TRANSACTION READ ONLY,保证所有导出数据在同一
时间点上的一致性。当然,如果事务频繁,导出的数据量又大,很可能会遭遇ORA-01555错误。由于SET TRANSACTION READ ONLY对SYS用户无效,用 SYS用户导出时CONSISTENT设为TRUE,应该没有效果。
恢复
媒介失败时,可以使用archived 和 online redo log files(和其它表空间一样)恢复,但是必须在MOUNT状态下进行。
回滚
  过程:使用undo空间中所有的undo信息,释放事务涉及的行的锁,结束事务。

干预
原因:1.undo表空间不足够给活动的事务 2. 长时间查询为了读一致所需的undo空间不够
提示:
ORA-01650: Unable to extend rollback segment; undo表空间不够
ORA-01555: Snapshot too old 长时间查询undo空间不足
   
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载