oracle sg 读书笔记.docx
《oracle sg 读书笔记.docx》由会员分享,可在线阅读,更多相关《oracle sg 读书笔记.docx(89页珍藏版)》请在冰豆网上搜索。
![oracle sg 读书笔记.docx](https://file1.bdocx.com/fileroot1/2023-4/19/b8fbe789-f7fe-484f-b4ff-e104228318ed/b8fbe789-f7fe-484f-b4ff-e104228318ed1.gif)
oraclesg读书笔记
1.oracle服务器=oracle实例+oracle数据库
2.oracle实例=共享内存区域(sga)+后台进程或线程(主要进程dbwn,lgwr,ckpt,arch,pmon,smon)
3.oracle数据库即一系列的os文件,主要的文件有数据文件,日志文件和控制文件。
4.其他文件:
参数文件和口令文件
5.其它进程:
高级队列,RAC,共享服务器,高级复制,
Oracleserver运行环境:
1.Client–applicationserver–server:
客户端通过应用服务器访问oracle
2.Client–server:
客户端直接通过网络访问服务器
3.Host—base:
客户端和服务器位于一台机器上
Oracle服务器的两大重要组成部分:
一。
Oracle实例
1.oracleinstance由共享内存结构和后台进程(windows下线程)组成,用来管理数据库
2.实例与数据库的关系
一个时刻,一个实例有且仅能mount一个数据库,而一个数据库可以由多个实例来管理(例如9i以前的ops,以及9i以后的rac,都是可以一个数据库对应多个实例)
4.区别实例和数据库
实例就是共享内存结构+后台进程(线程)
数据库就是一系列的os文件
连接到oracle实例
用户连接实例的过程:
1.用户打开一个客户端工具,如sqlplus,oracleforms.
2.用户进程登陆到服务器,oracle服务器为用户进程开启一个服务器进程(这个应该是指独占服务器模式下,共享服务器模式下用户进程不会直接连接到服务器进程而是连接到调度器,如果存在空闲的服务器进程,调度器就将用户的请求传递给服务器进程),服务器进程代表用户进程于oracle实例通信以及执行sql语句。
Connection:
用户进程和服务器的一个通路,建立连接的三种方式
1.客户端和服务器位于一台机器上,通过interprocess建立connection
2.客户端和通过网络连接到oracle服务器,这也就是常见的cs结构
3.客户端通过网络连接到应用服务器,应用服务器再通过网络连接oracle服务器,这就是常说的三层结构。
Session
Session是用户到数据库的特殊连接,这里的特殊是指用户是合法的(即用户名和密码是正确的),当用户正常退出或者异常中断的时候都会导致session结束。
一个用户可以起很多个session,如运行不同的客户端工具。
共享服务器和独占服务器的区别:
独占服务器是指一个服务器进程只能为一个客户端进程服务,并且用户进程直接和服务器进程连接。
对于共享服务器进程,一个服务器进程可以为不同的客户进程服务,共享服务器中,客户进程是直接于调度器连接,并非是服务器进程。
二.Oracle数据库
Oracle数据库即一系列的os文件,由三个部分组成,控制文件,数据文件和日志文件。
数据库由逻辑结构和物理结构之分:
1.
数据库的物理结构,主要由三个类型的文件组成,控制文件,数据文件和日志文件。
控制文件:
存储了数据库的结构信息,还有checkpoint信息,同时rman的备份信息也是存储在控制文件中,对于rman没有使用catalog的话,控制文件是很重要的,控制文件中的内容分为可重用和不可重用,如数据文件和日志文件的信息就属于不可重用的部分,rman的信息就属于可重用的部分和control_file_record_keep_time这个参数有关(控制文件必须保留rman信息的最短时间),建议将控制文件保存在多个不同的磁盘,这几个文件互为镜象,如果所有控制文件都损坏可以重建,重建控制文件读取数据头的信息。
数据文件:
数据库中所有的数据都存储在这类文件中,我将它分为四类,system文件(10g中是system,sysaux,9i中的system),撤消文件(undo,一个数据库虽然可以建立多个undotablespace,但是一个时刻只能使用其中的一个),临时文件(主要用来排序),用户数据文件(除去以上三类)
日志文件:
日志记录了数据库中的重做信息,用户的操作都会被记录在日志文件中,实例恢复利用status为active和current的日志。
当数据库异常关机(abort),或者因为某种原因而异常当机,那么下次启动的时候就要做实例恢复,实例恢复的第一个过程是rollforward(前滚),即将数据库恢复到当机前的那个时刻。
接着就open数据库,数据库打开后做rollback。
2.
其它的文件主要有参数文件(initsid.ora或者服务端参数文件),口令文件,归档日志文件。
参数文件:
记载了数据库启动信息,nomount的时候就要读取参数文件。
Oracle的认证模式主要有口令文件认证和os认证。
认证就要通过口令文件。
口令文件存储了sysoper和sysdba用户的密码信息,可以通过查询v$pwfile_users来查询具有sysoper或sysdba的用户。
Os认证:
对于windows,os的用户要在oracle_dba组中,同时SQLNET.AUTHENTICATION_SERVICES=(NTS)
对于linux,只要os的用户在oracle_dba组中即可。
归档文件:
这类文件只会在归档模式下存在,就是日志文件的副本,altersystemswitchlogfile,altersystemarchivelogcurrent以及数据库自己引起的日志切换都会触发arch进程归档。
Oracle内存结构:
sga+pga
Sga:
共享内存区域,所有的进程共享,sga在数据库nomount的过程中分配
Pga:
进程全局区,又称私有全局区,和进程一一对应,其他进程不能访问。
服务器进程进程启动的时候分配。
Uga:
用户全局区域,和会话对应。
对于共享服务器模式,uga来自sga,独占服务器模式uga来自pga。
Sga分类:
1.动态sga:
允许在线修改sga的组成部分,直接生效。
动态修改的2个前提
(1)使用服务端参数文件
(2)修改后的sga的总和小于或等于sga_max_size。
2.定制(size)sga:
在参数文件中把sga的各个组件设置好。
Sga的分配:
粒度(granule):
sga分配和收缩的最小单元。
9i:
ifsga_max_size<128m
thengranule=4m
elseifplatform=windows
thengranule=8m
else
granule=16m
10g:
ifsga_max_size<1g
thengranule=4m
elseifplatform=windows
thengranule=8m
else
granule=16m
也可以查视图v$sga_dynamic_components
Sga的最小值是三个粒度,onegranuleforfixedsga(includelog_buffer),oneforbuffercache,oneforshared_pool(摘自sg)
Sga的主要组成部分:
一.Sharedpool
Sharedpool:
存储最近使用的sql语句和数据定义,大小设置shared_pool_size,可以通过altersystem在线改。
Sharedpool的主要组成部分
1.库高速缓存区(librarycache),大小受限于shared_pool_size,为了共享相同的sql语句,避免不要的硬分析,librarycache使用LRU算法。
(相关视图v$librarycache)
(1)共享sql区:
存储sql语句的执行计划和分析树,下次运行相同的语句时,可以直接执行语句,从而避免再次分析。
(语句是否共享和cursor_sharing的设置有关)
Cursoring_sharinghttp:
//www.dba-
(2)共享plsql区:
共享最近执行的plsql语句,包括分析和编译的程序单元(存储过程,函数,包和触发器)
3.数据字典缓存区(datdictionarycache),依赖于shared_pool_size,存储数据字典信息提高响应时间。
(相关视图v$rowcache)
二.Buffercache
从数据文件中读取的数据先缓存到databuffer中,如果下一次要读取相同数据的时候可以直接从databuffer中提取,减少物理读,遵循LRU算法。
Buffercache大小的设置:
1.db_cache_size:
默认cache的大小,不能设置为0,从数据文件中读取的数据默认放这个池。
2.db_keep_cache_size:
保留池的大小,如果一个表很小而有经常查询,可以将这个表keep到保留池
3.db_recycle_cache_size:
回收池的大小,如果一个大对象基本不会被重用,可以放到这个池
这三个池相互独立。
buffercache中buffer的大小,默认是db_block_size,9i中可以为用户表空间设置不同的块大小,前提是设置db_nk_cache_size(n=2-32,n的大小与平台有关,有的平台n不能为32),不同块大小的buffercache也是相互独立。
Buffercache的大小可以通过altersystem修改在线改。
三.Log_buffer:
用户对数据库所有修改先存在到log_buffer中,然后由lgwr进程将logbuffer中的数据写入日志文件。
保证数据的一致性。
由log_buffer参数控制大小,可以再线改。
四.Largepool(可选池)
1.共享服务器下,uga优先从largepool分配
2.rman备份也会使用largepool,前提是当backup_slave_io=n(这个参数我在10g中没找到,不知道被什么参数替代),backup_tape_io_slaves=true,并且largepool能够分配足够的内存,否则将会在alert.log中记录一条错误信息,而且不使用io_slaves做备份和恢复。
参数large_pool_size,可以通过altersystem在线改。
五.Javapool(可选)
如果安装并且使用java,就要设置java_pool,大小由java_pool_size确定,9i中默认值24m。
PGA
PGA包含服务器进程和后台进程的数据信息和控制信息的内存区域,pga在进程创建是创建,销毁是销毁。
独占模式下pga的结构:
Sortarea,sessioninformation,cursorstate,stackspace
进程结构:
1.用户进程:
当客户端向数据库请求连接时创建,用户进程不与数据库服务器直接通信。
2.服务器进程:
当用户和数据库建立连接后,服务器进程启动,独占模式下,一个服务器只能为一个用户进程服务。
共享模式下,一个服务器进程可以为多个用户进程服务。
3.后台进程:
(1)dbwn(必须):
负责将数据库缓存区中的数据写如数据文件。
触发条件
1.Incrementcheckpointandnormalcheckpoint
2.Thenumberofdirtybuffersreachesathresholdvalue(thresholdvalue是多少呢?
?
?
)
3.Aprocessscanaspecifiednumberofblockswhenscaningforfreebufferbutnotfound.(specifiednumber指多少?
?
?
)
4.Timeoutcursor.(多长写一次?
?
?
)
5.ApingrequestinRACenviorment(不知道pingrequest啥意思)
6.Tablespaceoffline(excludeimmediate)
7.ModifyTablespacereadonly
8.Droportruncateatable
9.Altertablespacetablespace_namebeginbackup;
(2)lgwr(必须):
负责将logbuffer中的内容写到logfile,触发条件:
1.commit
2.1/3full
3.1m
4.3seconds
5.dbwnwrites
(3)smon(必须)作用:
1.实例恢复。
(1)前滚
(2)打开数据库(3)回滚未提交事务
2.合并空闲空间(这个好象是数据字典管理里面才有的吧?
?
?
?
)
3.释放临时表空间
(4)pmon(必须)作用:
清理失败的进程。
(1)回滚事务
(2)释放锁(3)释放资源(4)重启死亡的调度器。
(5)ckpt(必须)作用:
1.触发dbwn
2.修改数据头的检查点信息
3.修改控制文件的检查点信息
分类:
1.完全检查点(altersystemcheckpoint和正常shutdown)
2.增量检查点
检查点的事件:
将内存中的数据块写入磁盘
(6)arch(非必须但是非常重要)作用:
Arch进程在归档模式下才存在,当日志切换(包括手工)发生的时候,arch服务将当前的在线日志归档,并切换到下一个日志组,非归档模式下不存在这个进程。
数据库的逻辑结构:
1.数据库由表空间组成
2.表空间由段组成
3.段由区组成
4.区由连续的块组成
5.块是io的最小单位
Dml语句的处理过程
1.查找要修改的数据,如果在buffercache中不存在则从数据文件读取
2.服务器进程给需要修改的行加锁,同时通过rollbacksegment或者undo提供读一致性,和回滚事务
3.将数据块修改成新值。
参考资料:
sg,oracle9i&10g编程艺术
二
OracleUniversalInstaller:
用来安装,升级或者删除软件
Oracledatabaseconfigurationassistant:
用来创建删除或者修改数据库的属性
Passwordfileutility:
口令文件创建工具
Sqlplus:
访问数据库的工具
OracleEnterpriseManager:
具有图形用户界面的工具,用来管理,监控和调整一个或者多个数据库
Oracle的认证模式 :
os认证和口令文件认证
Os认证只是对本地连接而言。
Os认证:
1.用户必须属于ora_dba组,windows下必须SQLNET.AUTHENTICATION_SERVICES=(NTS)。
口令文件认证:
关于参数remote_login_passwordfile
(1)none:
不使用口令文件认证
(2)exclusive:
只允许一个实例使用口令文件,同时存储sysdba和sysoper的密码
(3)shared:
多个实例可以共用一个口令文件,同时只存储sys的密码,口令文件不能被修改。
Orapwd工具可以创建口令文件,参数unix下是放在dbs下,windows是放在database下,
参数file=口令文件所在的路径,entries最多存储几个具有sysdba或者sysoper的用户,password是sysdba或者sysoper的密码。
三
1.参数文件 :
oraclenomount的过程中必须读取参数文件并从中获取实例启动的一些信息。
(1)文本格式的pfile,windows下一般位于database下,取名initsid.ora,可以用文本编辑器直接修改,修改后的参数在系统下次启动时生效。
(2)二进制格式的spfile:
由oracle服务器维护,可以查看但是绝对不能用手工修改(可能导致系统启不来),要通过altersystem的方式修改,存放位置于pfile类似,参数scope可以取三个值,memory,spfile,both.
Both是默认值,即参数的修改既对当前实例也对spfile生效
Spfile有些启动参数没法通过both,可以设置为scope=spfile,下次启动后生效
Memory参数的修改只对当前实例有效
(3)通过pfile创建spfile
Createspfilefrompfile=’实际位置’
(4)通过spfile创建pfile
Createpfile=’实际位置‘fromspfile;
(5)showparameterspfile查看是否为spfile启动
2.使用OMF管理文件
Db_create_file_dest设置数据文件的默认位置
Db_create_online_log_dest_n:
设置控制文件和日志文件的默认位置
以前没用过omf来个简单的例子:
SQL>altersystemsetdb_create_file_dest='G:
\oracle\product\10.2.0\oradata';
系统已更改。
SQL>createtablespacetest;
表空间已创建。
SQL>selectnamefromv$datafilewherets#=(selectts#fromv$tablespacewherename='TEST');
NAME
--------------------------------------------------------------------------------
G:
\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_TEST_3GNPQHHW_.DBF
SQL>altersystemresetdb_create_file_destscope=spfilesid='*';//将参数变为原值
系统已更改。
SQL>showparameterdb_create_file_dest;
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_create_file_deststringG:
\oracle\product\10.2.0\orada
ta
SQL>startupforce;
ORACLE例程已经启动。
TotalSystemGlobalArea167772160bytes
FixedSize1247876bytes
VariableSize75498876bytes
DatabaseBuffers83886080bytes
RedoBuffers7139328bytes
数据库装载完毕。
数据库已经打开。
SQL>showparameterdb_create_file_dest;
NAMETYPEVALUE
----------------------------------------------------------------------------
db_create_file_deststring
3.Oracle的启动过程
(1)nomount:
a.读取参数文件(spfilesid.ora->spfile.ora->initsid.ora,或者手工指定pfile的位置)
b.分配sga
c.启动后台进程
d.打开alertsid.log和跟踪文件
必须在nomount状态下做的操作
A.创建数据库
B.重建控制文件
(2)mount:
通过参数文件中的control_files读取控制文件,同时获取日志文件和数据文件的位置信息(不检查存在性)
必须在mount状态下做的操作
a.移动数据文件和日志文件(这里指alterdatabaserename的方式)
b.启动和关闭归档
c.启动闪回
d.Recoverdatabase;
(3)open:
打开数据文件和日志文件,open之前可能要执行实例恢复(smon完成),open之前先前滚将数据库恢复到当机时刻,然后打开数据库,open之后可能要做回滚。
介质恢复和实例恢复:
介质恢复:
Oracle启动过程中会判断是否要做介质恢复(利用归档,备份或者是redo),oracle比较控制文件的scn和数据头的scn如果不一致则要进行介质恢复。
分2种情况,如果控制文件的scn小于数据头的scn,则说明控制文件比数据文件旧,这时的要加usingbackupcontrolfile做恢复。
如果控制文件的scn大于数据文件的scn,则直接recoverdatabase。
实例恢复:
oracle启动过程如果发现v$datafile中的last_change#为空则要求进行实例恢复,实例恢复只使用在线日志,更直接的说只使用active和current状态的在线日志,实例恢复的起点是lowrba。
启动的语法
Startup[force],[restrict],[mount],[pfile],[nomount],[recover]
1.不带参数的startup就是直接启动到open状态
2.startupforce=shutdownabort+startup
3.startuprestrict只允许有restrictedsession的用户才能登陆mount,启动到mount状态
4.pfile手工指定启动参数文件
5.nomount启动到nomount状态
6.recover启动过程进行介质恢复(这参数还没用过)
、
受限模式下的数据库
1.原来是以restrict模式打开数据库的,只有具有restrictedsession权限的用户才能登陆。
2.Open后执行,altersystemenablerestrictedsession;对于已经登陆的用户不受影响,以后登陆的用户就要具有restrictedsession权限才能登陆。
(altersystemdisablerestrictedsession)取消受限模式。
只读打开数据库
1.允许用户查询
2.如果是使用本地管理的临时