学习oracle的指点迷津。
学习oracle 对于不同的角色的相关知识的储备。
oracle的物理体系结构。
1,oracle数据库是由实例(instance)和数据库(database)组成。
2,instance 是由一个开辟的共享内存区sga(system global area)和一些列的后台。
组成,其中sga区域可以被划分成共享池,数据缓冲池,日志缓冲池三类。
后台进程包括 pmon,smon,lckn,reco,ckpt,dbwr,lgwr,arch等进程。
3,数据库是由数据文件,参数文件,日志文件,控制文件,归档日志文件等组成,其中。
归档日志文件最终可能会被转移到新的存储介质中,用于备份恢复使用。
4,pga(program global area)也是一个开辟出来的内存区域,pga不是共享内存是私有的,s 理解为共享的首字母,用户对数据库发起的任何操作,都是在pga先处理在进入到实例区域。
pga的预处理主要的三点:第一 ,保存用户的连接信息,如会话属性 ,绑定变量等。第二保存用户权限等信息,当用户进程与数据库建立会话时系统会将用户的相关权限查询出来,保存在会话区内,第三 ,当发起指令需要排序的时pga正是这个排序区,如果内存中可以放下排序的尺寸,就在内存pga的区完成,如果不够,超出的部分就在临时表空间中完成排序,即在磁盘中完成。
5,用户请求发起的顺序一般如下:1->2->3或者1->2
pga 中第二条在重复时,可以查询记录session 不必再到硬盘中查询, 减少查询的时间。
使用一个例子来证明pga中第二条的效果。
oracle@el5 ~]oraenv
oracle_sid = asm] ?orcl
the oracle base for oracle_home=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
oracle@el5 ~]sqlplus hr
sql> set timing on
sql> select * from huayu; 自己建立的一张表。
第一次查询需要的时间。
elapsed: 00:00:00.03
第二次查询需要的时间。
elapsed: 00:00:00.01
第三次查询需要的时间。
elapsed: 00:00:00.0
在有索引和全表扫描后,查询需要的时间也是不相同的,一般有索引会比较快。
sql> select /*full(t)*/id from huayu where lastname='tom'; 强制全表查询。
elapsed: 00:00:00.12 查询时间。
在修改了数据库操作后需要用户做commit 或rollback 的动作。
commit是确认无误 rollback是用户后悔了撤销先前操作。
数据库每一次提交都是批量操作,可以提高效率。
oracle做到了安全和效率的兼顾。
日志缓存区是记录在内存中。
日志文件是永久保存在磁盘的。
什么时候将数据缓存区的数据写到磁盘是有进程ckpt来出发的,ckpt出发dbwr写出。
当数据库崩溃的时候可以调整ckpt的参数用于实例恢复。
dml语句分为三类:insert,update,delete
在使用了dml(数据库管理语言)操作时,数据缓存区信息会写入磁盘 ,即使一直不ccommit 因为不是由commit来决定的,而是由ckpt进程来决定的
对8个核的进程进行劳模评选。
pmon,smon,lckn,reco,ckpt,dbwr,lgwr ,arch
pmon 含义是processess monitor 进程监视器,在执行更新某语句未提交是进程崩溃这时pmon 会自动回滚该操作,无需人工rollback 。还有如果reco 异常失败 pmon会重启reco进程 。
smon 是system monitor 系统监视器于pmon不同smon关注系统级的操作而不是单个进程,重点工作在于instance recovery 除此之外还有清理临时表空间,清理回滚段表空间,合并空闲空间。
lckn 仅使用于rac数据库做多可有10个进程(用于实例间的封锁。
reco用于分布式数据库的恢复(distributed database recovery),适用于两阶段提交的应用场景。比如我们面临多个数据库a,b,c某个应用跨域三个数据库,发起的过程需要a,b,c库都提交成功,事务才会成功,只要一个失败必须全部回滚。
dbwr是oracle最核心的进程之一,负责把数据从数据缓存区写到磁盘里面,该进程和ckpt相辅相成,因为ckpt促成dbwr去写,不过dbwr也和lgwr密切相关,因为dbwr想将数据缓存区写到磁盘时,必须通知lgwr先完成日志缓冲区写到磁盘动作后,lgwr就是把日志缓存区的数据写到磁盘的redo的文件,完成数据库对象创建,更新数据等操作过程的记录。这个redo记录威力强大,可以用来做数据库的异常恢复,只要保护好了redo文件和后续对应的归档文件,,来保证数据库的安全。
lgwr必须记录下所用的数据缓存区写进数据文件的动作,要顺序记录情况下保留的日志才有意义,lgwr给自己制定了5条制度要求自己,1, 每隔三秒,lgwr运行一次。
2, 任何commit触发lgwr运行一次。
3, dbwr要把数据从数据缓存写到磁盘,触发lgwr运行一次。
4, 日志缓冲区满三分之一或记录满1mb,触发lgwr运行一次。
5, 联机日志文件切换也触发lgwr
arch进程作用是在lgwr写日志到需要覆盖重写的时候触发arch进行更去转移日志文件,复制出去形成归档日志文件,防止日志丢失。
准备回滚的钱镜像数据的生成其实和普通的数据操作产不多,唯一的差别就在于一个是刷新到磁盘的普通文件一个是刷新到磁盘的回滚数据文件。
数据缓存区没立即刷新到磁盘数据丢失后需要依据redo来重做场景,回滚前镜像也是这样。
当回滚的前镜像数据既不在内存又不在磁盘的情况出现(例如突然断电)所以前镜像相关操作的日志是很重要的。
undo 是记录了反向信息的动作。
redo 之前的动作在再来一次。
回滚段不仅保证了数据的回退还提供了另外一个功能保证数据库的一致读。
前提: 1, 了解数据库的scn,即system change number,这是一个只会增加不会减少的递增数字,存在于oracle的最小单位块中,2, 数据库的回滚段记录事务槽(事务槽是用来分配回滚空间)如果更新了某块,事务就被写进事务槽,若为提交或回滚,该块就存在活动事务,数据库读到此块可以十倍这种情况的存在
读过了的数据块不会再回头比较,在早期的sql server的数据块版本,是读产生锁,在读数据时表就被锁住,但是诶过读表会让表锁住,那么数据库的并发就会受到很大的影响,但是oracle的回滚段解决了读的一致性问题,又避免了锁,增强了数据库的并发操作能力。
sql> show parameter share_pool_size;
sql> show parameter db_cache_size;
nametype value
db_cache_sizebig integer 0
共享池和数据缓冲区的大小都是0,因为oracle设置sga为自动管理,sga_target 不能大于 ga_max_size 6
在oracle 11g中自动化的程度更加彻底,推出了memory_target参数,只要设置了该参数连pga都不需要设置了。
oracle@el5 ~]ipcs –m 可以查看。
log_buffer 的大小不能自动分配必须手动来调整,因为log_buffer每满1m就要写一次,每满三分之一也要写一次,分配的太大优化效果不明显,一般15m
修改的例子。
更改后查看没有生效,要重启才会生效哦。
oracle笔记
1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...
Oracle笔记
第1页1.oracle 的使用 1.1.sqlplus 的命令 初始化表的位置 set nls lang american 设置编码才可以使用下面脚本 cd oracle home rdbms cd demo 我们目前使用的是oralce 9i 9201 版本 select from v versi...
oracle笔记
clear 清屏。col title for a20 设置title的字符最多有20个。oracle介绍。rdbsrdb 基本的存储结构是,二维表。表头。行。列。字段。sql的分类 dsl 关键字 select dml 操作 insert delete update ddl 定义 create dr...