trigger的一些记载和自治事务的一个练习
很早之前就接触了trigger,不过长时间不用貌似其中有些细节真记不住了。Trigger分为dml触发器,数据库级触发器,ddl触发 instead of触发先前写过两张表的同步的一个dml触发Create or replace trigger dml_trigger01After insert or update or deleteOn student01For eache rowIf inserting thenInsert into student02 values(:new.id.,:new:name);Elsif updating thenUpdate student02 set id=:new.id,name=:new.name where id=:old.id and name=:old.name;Else deleting thenDelete student02 where id=:old.id and name=:old.name;End i
回滚段记载
回滚段管理:回滚段的头部包含了使用该回滚段的事务的信息,一个事务只能只用一个回滚段,而一个回滚段可以存放多个事务的回滚段信息。事务级的读一致性:Set transaction read onlyset transaction isolation level serializable;(对数据库的并发性和性能带来影响)上述都可以设置事务期间的数据不会因为别的事务提交带来的影响。靠回滚段来实现的。回滚段种类:System表空间的系统回滚段和非系统回滚段。System系统回滚段用于存放系统表空间中对象的数据前映像。非系统回滚段:又分为公有回滚段和私有回滚段,私有回滚段应在参数文件的
latch的基本记载
Latch的基本概念:Larch是oracle提供的轻量级锁资源,用于快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,只工作在内存中。可以简单的说:内存中资源的锁叫latch,数据库对象(表,索引等)的锁是lock。读取一个数据块的数据时,会获得该数据块的latch,这个过程叫做pin住,如果多个进程同时请求,则进程中将出现竞争。获取latch中不存在队列机制,前面的进程释放latch,后面的进程将同时竞争请求,不存在顺序的概念,也是因为latch的获取和释放都非常快。Latch和lock区别:1 latch是对sga中的数据块提供的互斥访问机
自治事务的记载
自治事务:一个事务A在另一个事务B内被调用,那个事务A是自治事务,自治事务A执行过程中会脱离其session内未执行完毕的事务的影响。 如果session从B事务开始——A事务开始和结束——B事务结束上述的A事务不受没有完成的B事务的影响,然后A事务执行完毕后再次回到B事务执行没有完成的B事务。 通过pragma autonomous_transaction将一个pl/sql程序结构设定为自治事务,pragma是编译器指令,可以将procedure function package等顶级匿名块定义成自治的程序结构。 罗嗦了半天直接来测试下: 首先创建一个procedure—noautonomous_transaction
resetlogs和noresetlogs重建ctl 表空间脱机联机和scn联系
刚开始觉得数据库恢复这部分知识要点还算清楚了,现在觉得以前得有些理解都错了,看来oracle这行还真不能说自己很会,oracle的内部世界可能现在的我根本无法去想象。哎,坚持oracle热爱oracle吧。入门找到属于自己的领地吧!关于表空间和检查点的:表空间脱机Alter tablespace users offline此时将表空间离线将触发检查点,所以此时的控制文件中记录该数据文件检查点Select checkpoint_change# from v$datafile数据文件头部记载的数据文件启动scn也会变化Select checkpoint_change# from v$datafile_header如果此时再进行表空间上线又会触发
分析函数rank() row_number
很早之前就听网友谈过oracle的分析函数的好处,这两天有些需求不然不觉中用到了分析函数。分析函数和聚合函数根本不同之处在于聚合函数sum average max min count等只能返回一行,而分析函数可以按组返回多行。开窗函数的理解:也就是over(partition by class order by s),开窗函数指定了分析函数工作的窗口大小。(具体开窗函数中一些幅度值限制可以参考tom的export one-on-one)create table student(name varchar2(10),class number,s number)然后插入一些数据,例如此时student表中的数据:select * from studentname class sa
v$session_wait和v$session_event视图
看eygle循序渐进中提到了oracle 几个很重要的视图。关于oracle的等待事件v$session_wait和v$session_event应该是检查oracle数据库性能瓶颈的很有用的视图。V$session_wait提供了任何情况下session在数据库中当前等待什么(如果session当前什么也没有做,显示最后的等待事件)V$session_wait中常用column:Sid: session id对应与v$session等视图的sidEvent:session等待的事件Seq#:等待事件触发每次加1P1,P2,P3 等待事件中等待的信息(P1-与等待相关的数据文件的全部文件数量P2-P1中得数据文件的块数量P3-描述等待产生原因的代码)P1TEX
move和shrink的原理和redo的产生 ,利用rowid的含义实用block个数
前几篇blog中整理了关于HWM和delete drop truncate的一些关系。补充一下HWM的另外一些东东。首先减少HWM的方法上次提到了move和shrinkAlter table test09 move 通过move移动对象,但是move之后,需要重建索引,而且move的过程中会影响在线使用Alter index indexName rebuildMove原理是创建一个新表,所以需要两倍的空间,然后将原表的数据插入新的表中,然后在删除原来的表和数据,释放空间。可以看出move的过程中数据行的rowid改变了,所以需要重构索引。利用shrink在线收缩表内的HWMAlter table test09 enable row movementAlter table
data block extent and segment-03
今天继续啃oracle concept中的Data blocks extent and segments。其中的临时段 临时表和排序段看了好迷惑。临时段:当oracle处理一个查询时,可能需要为sql解析与执行的中间结果分配临时表空间,oracle会自动分配临时段的临时空间。例如当sql执行中需要排序,很有可能需要在临时表空间中分配临时段(排序不在pga的sort area,也没有利用索引来执行)有点需要说明的是:临时表空间的只有一个临时段,当排序等使用临时段的操作结束后,这个临时段不会被删除,将此临时段的区间标记为free供以后排序等使用。临时表空间的临时段是循环使用的,
data block extent and segment-02
继续整理一下oracle体系中的data block exten and segment。前几篇blog中提到了delete drop truncate和高水位线HWM关系。创建table或者index等对象会创建segment,分配extent,此时delete from table无法回收段内的数据扩展的,这些数据块会用于以后段内数据的插入更新操作。扩展的回收:oracle只是会对block更新,然后在local管理的tablespace对数据文件头部位图信息进行相应更新,数据文件的前两个块使用来记载数据文件头部信息,第三个块则是位图信息。Alter system dump datafile 4 block min 1 max 3;可以具体去dump数据文件数据块来
oracle commit随笔记载
在oracle中的commit经常使用,但是commit前后数据库内部所做的事情还是很值得推敲的。网友又提到了一个dml语句,没有commit会产生redo吗,产生redo肯定是的,而且在commit之前已经产生了大量的redo。SQL> select name,value from v$mystat a,v$statname b where a.statistic#=b.statistic# and name='redo size'; NAME VALUE ---------------------------------------------------------------- ---------- redo size 1372 SQL> insert into test01 values(1,'pom'); 1 row inserted SQL> select name,value from v$mystat a,v$s
v$sesstat,v$mystat,v$statname和v$sysstat视图简介
今天早上打开ITPUB的论坛,提到了查询dml操作期间,没有commit之前是否产生redo log,就涉及到如何查看current session产生的redo的计算,因为前段时间接触过统计的几个视图V$sysstat v$mystat v$session v$statname,翻看资料 实验记载下:V$sysstat是系统资源使用情况的统计分析,sys会不自然的想到conn / as sysdba,Desc v$sysstatName----------Stattistic# :标识,用来识别nameName Classs 统计类别Value Stat_id 统计标识Name中包括的统计信息: redo size(产生的redo log) user commits/user rollback(某种操作的次数) cpu u
聚簇 聚簇索引和聚簇下的表的记载
前段时间又重新理解了一下cluster,觉得有必要整理以后再拿来看看,cluster当初自己也是很理解不通,现在自己又在看oracle concept就查查资料扫盲了,要从根本上理解。 根据一个表占用一个segment,然后为其分配extent,所以此extent中的block都是存储的这个表的数据信息,不存在别的表的数据信息。这样如果做表的关联时:select a.id ,b.name from test01 a,test02 b where a.id=b.id and a.id=10;很明显要访问a表的block和b表的block,访问过多的数据块,I/O操作会更多消耗资源。簇是用来存储表的方法,一组表有共同的column,聚簇就把这
HWM和delete,drop,truncate的关系
今天下午好好看了oracle中的HWM,也就是高水位线,高水位线是一个段内使用和未使用的数据块的分界线。Select * from user_tables where table_name=’TEST03’其中有blocks,empty_blocks,num_rows其中的blocks也就是此表所占用的block数量,empty_blocks空的block,num_rows数据行数。User_tables中blocks也就是HWMUser_segment数据字典视图:blocks就是此segment分配的blocks总数,header_block就是此段断头所在的数据块编号等。HWM的信息存储在段头中,根据段空间自动管理中是用位图来管理段内的空间分配Delete,truncate和drop和高水
tablespace 大文件,undo,temp tablespace
大文件表空间:大文件表空间增强了oracle数据库的存储能力,一个小文件表空间最多可以包含1024个datafile,大文件表空间只能包含一个datafile,大文件表空间最大容量是小数据文件的1024倍。大文件表空间和小文件表空间的最大容量是相同的,但是在文件管理方面减少了对数据文件的管理工作。使用大文件表空间替代传统的表空间,数据库open checkpoint以及dbwr进程的性能会得到提高,但是增大数据文件的容量可能增加备份和恢复时间。System表空间是存储pl/sql程序结构,包括procedure function package trigger等,数据库打开后就必须将system
trigger和物化视图同步表
做了两张数据表的同步,测试刚好通过。两张测试表Create table tongbu01(id number primary key,Name varchar2(10)) Create table tongbu02 as select * from tongbu01的trigger这里我们利用tongbu01来同步tongbu02 tongbu_trigger tongbu01 inserting tongbu02 (:new.id,:new.name); updating tongbu02 =:new.id,=:new.name =:old.id =:old.name; deleting tongbu02 =:old.id =:old.name; ;; 的所有dml的相应的dml利用物化视图:语句的查询。 和on demand仅仅在物化视图需要被刷新时才进行刷新,以保证和基表数据
回南京,抓紧了!
昨天顺利回南京,这段时间大概有一个星期没有更新blog了,跟即将接触工作的同事总算交接完毕了,这段时间真没怎么好好接触oracle和更新blog了,哎,下面的日子要刻苦了,时间也不多了,还有大概不到半年的时间给我充电,然后就北漂了,所以抓紧了,今晚去淘个个人笔记本,好好利用。come on![@more@]
rman的全备份脚本和控制文件安全策略
在nocatalog模式下的备份,所有的备份信息都存储在控制文件中,所以数据库的一个完整备份集应该包括数据文件,控制文件,初始化参数文件还有所有的归档日志。Oracle 10G环境rman全备份脚本:rman>run{allocate channedl d1 device type disk;backup full tag ‘orcl’ database include current controlfile plus archivelog delete all input:}在数据库全备份完成之后,需要执行alter system archive log current命令将当前日志归档,备份归档日志应该包括最后生成的归档日志。...RMAN> backup full tag 'orcl' database include c
自动段空间管理-eygle循序渐进记载
自动段空间管理:Oracle9I后推出自动段空间管理,原来自由列表被位图所取代,通过位图能够迅速有效管理存储数据扩展和剩余区块block。 在手工管理表空间时,需要insert和delete自由列表freelist,并通过pctfree和pctused参数来判断一个block移除和加载到freelist中,这样操作肯定会带来自由列表的竞争。在ASSM管理下,insert通过扫描数据文件头部的位图查找可用block,即使可用空间低于pctfree也不会被位图上移除,因此后续的pctused参数也不再需要。低于Pctfree的数据块将用于已有数据的更新,所以freelist和freelist group参数在ASSM中都
手工管理段空间大概
oracle9I后可以对段内的数据块自动段空间管理,oracle9I前需要对段内的数据块手工管理。手工管理段空间manaual segment space management(MSSM)手工管理段空间是在段头放置一个自由列表来管理block的使用,可以把自由列表freelist想象成tables,手工管理段空间也就是insert和delete这个自由列表的block来手工管理段空间。可以create 手工管理的tablespaceCreate tablespace MSSM datafile ‘’ size 50M extent management local segment space management manual然后在MSSM中创建对象Create table MSSM(id number) tablespace MSSM在创