oracle basic 使用,[学习笔记1] Oracle Basic

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 whenAt commit

When one-third full

When there is 1MB of redo

Every three seconds

Before DBWn writes

18. CKPT

CKPT writes whenredo 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. BackupLogical Backup

Physical Backup

22. Physical BackupCold 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@]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值