Oracle Basic--Learning Point
1. Oracle 是数据库管理系统,而不简单指数据库。数据库就是数据的集合。
2. 大如Oracle, 小如一个简单的程序,它的架构都可以用这样三样来概括:操作系统进程,文件,内存。具体对应到oracle:file-永久保存数据,memory-用来暂存程序处理需要的信息和做cache, process-用来做数据的store和manage.
3. Instance=SGA+background process
Database=files (data files+control files+Redo log files)
4. Startup nomount (parameter file): 创建instance (启动oracle后台进程并分配oracle需要的内存)
startup mount (control files+password file)
startup open (data files+ redo log files)
note:做数据库stop,start实验时遇到ORA-12528:“监听程序:所有适用的例程都不允许建立新的连接”的错误。 在windows services里重启OracleServiceORCL服务即可。
5. tablespace=文件夹 (是数据存储的逻辑位置)
datafile=文档 (是数据存储的物理位置)
创建tablespace时必须指定至少一个datafile
创建tablespace时无法指定其大小,但可以指定datafile的大小
6. 数据存储的物理结构:tablespace-segment-extent-block
一个tablespace可以包含多个datafile
一个datafile包括一个或多个block--DMT下一个Datafile最小是一个block,但LMT下不行
一个tablespace包含一个或多个segment-即包含一个或多个table 或 index..
一个segment包含多个extent, segment 以extent为分配单位。
extent是一系列连续的block
7. Block=header+free space+data
block header可以分为两部分:
1.第一部分是定长部分,记录了block type (table, index…实际上就是所在的segment type),block的地址。
2.第二部分是变长的部分,里面的信息包括row directory---记录了这个block里的行的信息,包括行地址。变长部分更重要的部分是ITL:Interested Transaction List,这部分影响block的concurrency能力, ITL实际就是放在block header的一段数据?莆狪TL slot。每个slot都是这个block上的transaction的入口,也就是说,如果这个block上有10个ITL slot,那么在这个block在同一时刻最多允许的transaction数量是10。
free space是block里面用来存放数据的空闲空间,在oracle中这部分block是被分为两部分的:一部分free space用来add data,一部分free space用来expend data。Add data就是我们往block里面insert数据,expend data就是我们做update操作.Oracle允许通过设置一个叫pctfree的参数,为block保留一部分的空间。假如你设置
pctfree为20,这表明整个block的20%是用来expend data,当你向这个blockinsert数据的时候,你最多可以使用block 80%的空间(实际上由于header的存在,你不可能用到80%),剩下的部分与留下来用来扩展现有的行。
8. Free list
Free list 是存放在segment header的一个列表,这个列表列出了这个segment中比较空闲的、可以用于往里面insert数据的block。Free list是位于segment级别的,每个segment可以有一个或多个free list。
9. HWM
Oracle的HWM是一个标记,标志了segment当中有多少block是被使用过了,有多少block还从来没有被使用过------这是一个segment层面上的概念。请注意我这里的用词,只要一个block被使用过了,即使其中的数据全部被delete掉了,这个block还是处于HWM一下的。所以一般情况下HWM都是只升不降,只有当你truncate(例如truncate table…)或rebuild(例如alter index … rebuild)后,这个segment的HWM才会下降。
10. SGA=Java Pool+Shared Pool+Buffer Cache+Redo Buffer+Large Pool
•在SGA主要存储的三类数据中:
• data blocks
• basic operational information
• shared items
•存储data blocks的地方叫做buffer cache.
11. Buffer cache不仅仅对数据读取进行缓存,同时也提供对数据写入进行缓存,也就是说,当用户修改了buffer cache的数据后,被修改的数据并不是马上被写入disk,而是暂时放在内存里.
12. Shared pool
首先,Shared pool中cache两类数据:
1.basic operational information (Dictionary Cache)
2.shared items (Library Cache)
13. PGA
Session Memory:Session memory就是包含用户session的信息,比如logon time,session memory也是UGA里的内容。
Process Memory: Process Memory存放的是Process相关的信息,包括process使用的操作系统资源和process的状态。
Private SQL Area: (a) persistent area: 当open一个cursor时候persistent area内存被创建,当cursor被close的时候persistent area被回收。所以persistent area就是用来存储cursor需要的内存,包括绑定变量 (b) run-time area: run-time area是当你的语句在execution的时候被创建,当语句执行完毕或cancel之后被释放。使用run time area得最典型的代表就是sort, 还有Sort-based operators (order by, group-by, rollup, window function),Hash-join,Bitmap merge, Bitmap create
14. PGA 有两种管理方式:manual 和auto. Oracle9i以后推荐使用auto,但auto只适用于dedicated servers
15. Process: User Process, Server Process and Background Process
16. DBWn (允许设置20个)
DBWn Write When:
- Checkpoint occurs
- Dirty buffers reach threshold
- There are no free buffers
- Timeout occurs
- RAC ping request is made
- Tablespace offline
- Tablespace read only
- Table drop or truncate
- Tablespace begin backup
17. LGWR
LGWR writes when
- At commit
- When one-third full
- When there is 1MB of redo
- Every three seconds
- Before DBWn writes
18. CKPT
CKPT writes when
- redo log switch
CKPT do
- 触发DBWn向磁盘写入Dirty Data
- 把checkpoint信息更新到datafile header 上
- 把checkpoint信息更新到control file里
19. ARCn (可设置10个)
20. Undo
从物理上说Undo也是存储在datafile里的数据,逻辑上也是由tablespace, segment, extent, block组成,不同的是存放Undo信息的segment并没有table 和index这样数据库对象对应,存放Undo信息的segment就叫做Undo Segment.
21. 那么为什么commit的响应时间和事务的大小无关呢?实际上,当我们执行
commit,我们已经做完了整个书屋中99.9%的工作,在commit之前我们做的事情包括:
1. 在SGA中产生undo数据
2. 在SGA中修改data block
3. 产生以上两项的redo
4. 取决是完成前面工作的时间,可能已经有一部分undo, data block和redo已经
被写入磁盘
5. 获取需要的lock。
我们在commit的时候需要做的工作包括:
1. 为事务生成一个SCN(system change number),这是很快的。
2. 要求LGWR把redo log buffer里面的数据写入到磁盘并在online redo log记录
着个事务的SCN。这是整个commit中最大的操作。
3. 释放所有lock,把相应的回滚段上的事务信息标志为inactive,这就是相当于
说:“我的这个事务已经提交了,这块回滚段别人可以拿去用了”------可能还没那么快,9i里面通过设置参数undo_retention来控制当回滚段变得inactive
后,被保持不被覆盖的时间。
4. 做block cleanout-----让我们在后面专门介绍这个知识点
尽管目前我们还没有讲lock和block cleanout,我想大家应该还是可以理解
commit所作的工作相对于整个事务开说是非常小的,而且工作量和事务本身
的大小无关
22. Backup
- Logical Backup
- Physical Backup
22. Physical Backup
- Cold backup (在noarchivelog模式下唯一可选的backup方式)
- Hot backup
- Rman backup
23. Lock
• RS (Row Share)锁:
你可以通过查询语句select …… for update 来为表加上RS锁。RS锁可以阻止其他事务手动为表加上独占锁。
• RX (Row Exclusive)锁:
你可以通过DML语句insert, update, delete 来为表加上RX锁。RX锁可以阻止其他事务查询、insert, update, delete, 或者锁定表中的其他行,也可以阻止其他事务手动为表加上独占锁。
• S (Share)锁:
你可以通过手动锁表Lock table …… in share mode 来为表加上S锁。S锁允许其他事务只能在表上执行select …… for update 操作。
• SRX (Share Row Exclusive)锁:
你可以通过手动锁表Lock table …… in share row exclusive mode 来为表加上SRX锁。SRX锁可以阻止DML操作更改表,也可以阻止手动在表上加S锁。
• X (Exclusive)锁:
你可以通过手动锁表Lock table …… in exclusive mode 来为表加上X锁。X锁是最高级别的锁,他只允许其他事务在表上执行查询操作,阻止任何的DML操作和手动锁表。
23. Latch and Lock
Latch和Lock在本质上有较大的差异。首先,Latch是非常短暂的,而Lock则相对存在较长时间;其次,Latch是一种开关,而Lock划分成许多级别;最后,Latch是定位在instance级别的,而Lock是定位在database级别的。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9673555/viewspace-920998/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9673555/viewspace-920998/