Oracle Architectural Components:

Dynamic Predicate:

SQL> col my_col new_value dyn_where_clause
SQL> select decode('&&deptno',null,decode('&&hiredate',null,'','where hire_date=to_date(
2 '''||'&&hiredate",''DD-MON-YYYY'')'),decode('&&hiredate',null,
3 'where dept_id=' || '&&deptno',
4 'where dept_id=' || '&&deptno' || 'and

hire_date=to_date('''||'&&hiredate'',''DD-MON-YYYY'')'))

5 AS my_col from dual;
输入 deptno 的值: 20
输入 hiredate 的值: 01-03-2005
原值 1: select decode('&&deptno',null,decode('&&hiredate',null,'','where hire_date=to_date(
新值 1: select decode('20',null,decode('01-03-2005',null,'','where hire_date=to_date(
原值 2: '''||'&&hiredate",''DD-MON-YYYY'')'),decode('&&hiredate',null,
新值 2: '''||'01-03-2005",''DD-MON-YYYY'')'),decode('01-03-2005',null,
原值 3: 'where dept_id=' || '&&deptno',
新值 3: 'where dept_id=' || '20',
原值 4: 'where dept_id=' || '&&deptno' || 'and

hire_date=to_date('''||'&&hiredate'',''DD-MON-YYYY'')
新值 4: 'where dept_id=' || '20' || 'and

hire_date=to_date('''||'01-03-2005'',''DD-MON-YYYY'')'))

MY_COL
-----------------------------------------------------------------
where dept_id=20and hire_date=to_date('01-03-2005','DD-MON-YYYY')

已选择 1 行。


Oracle Server makes up of processes,memory structures and files and consists of
Oracle Instance and Oracle Database.

Oracle Instance is an combination of the background processes and memory structures.The
instace must be started to access data in the database.

Oracle database has a logical structure and a physical structure.
The physical structure-operating system files.Database has at least one data file
Oracle database consists of three file types:

Datafiles-system files that provide actual storage for database information are used to
keep data consistent and data that can be recovered in a failure of the instance.
The data-storaged user-defined tables.a datafile can be accociated with only one database.
One or more datafiles form alogical unit of database storage called atablespace.


Control files maintain and verify database integrity.A database needs at least one control file.

SGA contains data and control information for the Oracle server.It is allocated in the
virtual memory of the computer where the oracle server resides.

The shared pool is used to store the most recently executed SQL statements and the most recently
used data from the data dict.

The database buffer cache is used to store the most recently used data.The data is read from,and
written to,data files.

The redo log buffer is used to track changes made to the database by the server and background
processes.


DBW0-writing changed data from database buffers cache to data files/

LGWR-writing changed registered in the redo log buffer to redo log files/

SMON-check for consistency of the database and ,if necessary,initates recovery of the database
when the database is open.

PMON-cleans up resources if one the Oracle process fails.

CKPT-Updating database status information in the control files and data files whenever changes
in the buffer cache are permanently recorded in the database.


Process a Query: Parse->Execute->Fetch;
在解析阶段,SQL语句从用户进程传到服务进程,一个解析请求被发送到共享SQL区。
服务进程会搜索在共享池内是否存在这个SQL语句的备份,检查它的语法,然后执行数据字典查找有效的
相关表和列的定义。

Shared pool(共享池):包括library缓冲区和数据字典缓冲区,library缓冲区主要存储共享SQL区内的
最近被用的SQL语句的信息;共享SQL区:包括SQL文本,SQL的编译版本,执行计划。如果一个SQL语句
重复执行,共享SQL区已经有它的执行计划,服务进程不再解析这个语句。library缓冲区提高了应用性能
和SQL语句的重用,减少了解析时间和内存要求。如果不重用,会被library缓冲区释放掉。

数据缓冲区:存储最近被用的块;一个查询执行时,服务进程会到数据缓冲区查找它需要的块,
如果块没有被发现,服务进程会从数据文件中读取,并在数据缓冲区中留一个备份,以后的读取
可以直接在内存中读,而不要求物理读取。Oracle服务器利用"最近被用原则"释放那些最近没有被访问的
数据,为新的数据块预留空间。在数据缓冲区的每个buffer的大小和oracle block的大小是相等的,
缓冲区的大小由DB_BLOCK_SIZE决定.缓冲区的数量由db_block_buffers决定。
数据字典缓冲区:包括表,列,其他模式对象的定义和权限。
共享池的大小由shared_pool_size决定。

不能设置 shared_pool_size 过大,通常应该控制在100M--200M
log_buffer :128K -- 1M 之间通常问题不大,不应该太大。
large_pool_size :如果不设置MTS,通常在 RMAN 、OPQ 会使用到,
但是在10M --50M ;
由于 UGA 放到large_pool_size 的缘故,这个时候依据 session最大数量和
sort_ares_size 等参数,可以考虑为 session * (sort_area_size + 2M)
不主张使用MTS,尤其同时在线用户数小于500的情况下
java_pool_size : 若不使用java,给30M通常就够了
data buffer :在做了前面的设置后,凡可以提供给Oracle的内存,
都应该给data buffer = (db_block_size * db_block_buffers)
在9i 中可以是 db_cache_size。
OS 使用内存+ SGA + session*(sort_area_size + hash_area_size + 2M)
< 总物理RAM 为好 。
假定Oracle是 32 bit ,服务器RAM大于2G ,注意你的PGA的情况,则建议:

shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G
如果512M RAM
建议 shared_pool_size = 50M, data buffer = 200M ;
如果2G RAM
shared_pool_size = 150M ,data buffer = 1.2G。
举例来说:
假定64 bit ORACLE

内存4G
shared_pool_size = 200M , data buffer = 2.5G

内存8G
shared_pool_size = 200M , data buffer = 5G

内存 12G
shared_pool_size = 300M , data buffer = 8G

程序全局区:是一种内存区域,包含服务进程的数据和控制信息。当一个服务进程启动时,
它是被oracle创建的不共享的内存;它是独立地访问服务进程,仅被服务进程读、写。
每个和Oracle实例联系的服务进程所分配的PGA memorary,是和Oracle实例所分配的PGA memorary集合相关的。


在一个专用服务配置中,服务器的PGA(程序执行时被分配,程序结束时被释放)包括:
排序区(sort area):处理SQL语句。
会话信息(session information):会话的权限和性能统计。
游动状态(cursor state):指出这个当前会话处理SQL的状态
堆栈空间(stack space):含有其他会话的变量。

重做日志缓冲区:大小由log_buffer决定。记录数据块的变化,变化的位置和在重做条目中的新值。重做条目
不区别被改变的数据块的类型,只是简单记录在数据块中哪个字节被改变了。服务进程把数据块的变化记录到日

志缓冲区中。它是不断循环的,但它仅在重做条目被记录到重做日志文件后再记录。

回滚段:象表和索引一样,存在数据文件中,在请求时回滚段被调入到数据库缓冲区中。回滚段的变化记录在
日志缓冲区中。


无论一个事务在什么时候提交,Oracle服务器都会分配一个系统改变号(SCN)给事务。这个SCN单调地增加,
并且在数据库里是唯一的。Oracle server利用SCN作一个内部的同步数据的时间标识,在数据被获取时
保证一致性。Oracle server利用SCN执行一致性检查而不依赖操作系统的时间和日期。

提交进程的步骤:
服务进程会把一个带有SCN的提交记录放置到重做日志缓冲区中。
日志写进程会执行一个连续的写,包括提交记录都写到日志文件中。
Oracle server保证这个点以后的变化,即使实例失败也不会丢失。

正处理提交进程时:
commit完成后,用户被通知。服务进程记录事务完成信息并释放资源块。在事务提交的前后,DBW0进程会把
"胀数据缓冲区"写到数据文件中。

提交的优点:
快速提交机制通过日志缓冲区记录写的变化而代替数据文件。
连续往日志文件写是更快的。比往数据文件中写不同的块还快。仅仅有最小的信息是需要把记录变化
写到日志文件中,然而往数据文件中写则要求数据的整个块被重写。
如果多个事务在同一时间要求提交,实例会让日志记录随单独的写联系到一起。
除非日志缓冲区是特别的满,否则每个事务仅有一个同步的写被请求。如果附带发生,
可能每个事务会有少于一个的写。
因为重做日志缓冲区可能在事务提交前是流动的,事务的大小不会影响提交操作需要的时间总数。

回滚一个事务不会触发日志写进程往磁盘里写。Oracle server在从失败中恢复时总是回滚没有提交的变化。
如果回滚以后有一个失败,回滚前整个被记录在磁盘里,提交记录不存在能有效地确认事务回滚产生的变化。


日志写进程连续地从日志缓冲区往日志文件写,发生在以下情况下:
存在一个commit;日志缓冲区的日志达到1/3;日志大于1M;在DBW0写进程之前。
因为重做在恢复时是必要的,LGWR进程在重做写到磁盘以后才确认commit;


服务进程会在缓冲区中把改变记录到回滚段和数据块中。DBW0从数据缓冲区中把"胀缓冲区"写到数据文件中。
DBW0总是保证数据缓冲区有自由的缓冲空间,当服务进程从数据文件读时,DBW0会把buffer写到数据文件中。
DBW0延迟往数据文件写的时间,除非以下情况:
胀缓冲区的数目达到一个极限值;
一个进程扫描一个块的清单,当有很少的自由缓冲区或不能找到时
时间超时(三秒)
checkpoint发生(checkpoint保证数据缓冲区和数据文件同步)


系统进程:(假如实例失败)
当数据库重新启动时,向前回滚,恢复在数据文件中还没有被记录的而在线日志记录的数据。
这个数据没有被写到磁盘,因为在实例失败时,SGA的数据丢失。在这个处理期间,系统进程
读取重做日志文件,并且应用日志中记录的变化到数据块中。因为所有的事务提交已经被写到
重做日志中,这个处理完全地恢复事务。

打开数据库,以至于用户能登陆;任何没有被还没恢复的事务锁住的数据变得可行。

回滚没提交的事务。事务被系统进程回滚或者在专用服务器处理下,他们能通过锁数据。

在数据文件内合并、调整邻近的自由空间。

释放临时段,返回到数据文件的自由空间。临时段存储SQL处理的数据。


进程监控:在实例失败后,回滚事务,释放锁,释放其他资源。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8382469/viewspace-259849/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8382469/viewspace-259849/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值