[学习笔记1] Oracle Basic

本文详细介绍了Oracle数据库的架构,包括实例、数据库、表空间、数据文件等概念,并深入解析了数据块、自由列表、高水位线等核心数据存储结构。此外,还介绍了SGA、PGA的组成部分及管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值