Oracle学习记录.docx
- 文档编号:10573464
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:138
- 大小:168.15KB
Oracle学习记录.docx
《Oracle学习记录.docx》由会员分享,可在线阅读,更多相关《Oracle学习记录.docx(138页珍藏版)》请在冰豆网上搜索。
Oracle学习记录
System默认口令:
manager
Sys默认口令:
change_on_install
Scott默认口令:
tiger
sysfiles存放数据文件物理位置
user_indexes存放索引
user_objects存放用户对象
user_tables(user_all_tables)存放表
user_tablespaces存放表空间
user_procedures存放存储过程
user_view存放视图
user_users存放用户
用户SYS和SYSTEM所拥有的表被称为数据字典表(datadictionarytable),数据字典表提供一个数据库用来管理自己的系统目录。
数据字典由Oracle提供的一组目录脚本文件创建。
每当安装或升级一个数据库时,都需要使用创建或修改数据字典表的的脚本文件。
当在数据库中安装一个新的选项时,可能要运行另外一些附加的目录脚本文件。
用户SYS拥有数据字典表,这些表存储了数据库中其他结构的所有信息;用户SYSTEM拥有访问数据字典表的视图,这些视图供数据库中其他用户使用。
索引既可以改善数据库性能,又可以保证列值的唯一性。
当createtable命令中规定有UNIQUE或PRIMARYKEY约束条件子句时,Oracle就自动创建一个索引。
经常被同时访问的表在物理位置上可以存储在一起。
为了将它们存储在一起,就要创建一个簇(cluster)来管理这些表。
表中的数据一起存储在簇中,从而最小化必须执行的I/O次数,改善系统性能。
使用V$INSTANCE视图可以用来查看实例的当前状态。
查看Oracle数据库服务器的版本:
select*fromproduct_component_version
查询v$version视图来查看组件级信息:
select*fromv$version
启动SQL/PLUS程序,使用某个用户登录进入,执行:
select*fromsession_privs,可以查询该用户的权限。
当启动Oracle9i数据库时,系统会先在内存内规划一个固定区域,用来储存每位使用者所需存取的数据,以及Oracle9i运作时必备的系统信息。
我们称此区域为系统全域区(SystemGlobalArea),即SGA。
在Oracle8i时,SGA的大小是由起始参数文件(initializationparameterfile)内的某些参数所设定。
但最麻烦的是每次调整参数之后必须等重新启动数据库才生效。
从Oracle9i开始,DBA可以动态配置内存的大小,这样的技术我们称为「dynamicSGA」。
有了dynamicSGA,SGA的各组成区域都可以动态地进行规划与调整,而不需先关闭数据库。
SGA的大小可由起始参数文件之特定参数所控制,下表整理出与SGA相关的参数名称及其意义:
参数名称用途
SGA_MAX_SIZE设定SGA总大小
DB_CACHE_SIZE设定由标准区块组成的DatabaseBufferCache大小
LOG_BUFFER设定LogBuffer之大小
SHARED_POOL_SIZE设定Sharedpool之大小
LARGE_POOL_SIZE设定largepool大小;预设为0
SGA又包含数个重要区域,分别是:
●DatabaseBufferCache(数据快取缓冲区)
●RedoLogBuffer(重置日志缓冲区)
●SharedPool(共享区)
●其它,如Largepool
数据快取缓冲区:
为SGA的主要成员,用来存放读取自数据文件的数据区块复本,或是使用者曾经处理过的数据。
其用途在于有效减少存取数据时造成的磁盘读写动作,进而提升数据存取之效能。
所有同时上线的使用者都可以共用此缓冲区的数据。
整个数据快取缓冲区包含两种缓冲区串行,分别是writelist与LRUlist:
●Writelist存放dirtybuffers(注4)之复本,会在适当时机写入磁盘。
●LRUlist包含:
freebuffers,dirtybuffers与pinnedbuffers。
其中freebuffer为空白的缓冲区,随时可存放数据;pinnedbuffer则是目前使用中的缓冲区。
数据快取缓冲区运作原理
当使用者第一次向Oracle9i送出数据查询请求时,Oracle9i会先在数据快取缓冲区内寻找该数据。
如果欲查询的数据恰好已存在于缓冲区内(这样的情况我们称之为cachehit),就直接从内存读出数据。
反之,如果缓冲区内并没有使用者欲查询的数据(此情况称为cachemiss),Oracle9i就会先从磁盘上数据文件读出适当的数据区块,放入缓冲区之后,使用者才从缓冲区读取数据。
在“cachehit”的情况下查询数据的速度要比在”cachemiss”的情况还快很多。
事实上,这就是数据快取缓冲区的主要用途所在。
设定数据快取缓冲区之大小:
Oracle8i的数据快取缓冲区容量由下列公式所决定:
Oracle8i数据快取缓冲区大小=DB_BLOCK_SIZE*DB_BLOCK_BUFFERS
DB_BLOCK_SIZE:
数据区块(datablock)之单位大小。
DB_BLOCK_BUFFERS:
缓冲区数目;每个缓冲区大小相当于一个数据区块之大小。
需注意的是:
Oracle8i内DB_BLOCK_SIZE在数据库建立之后就不能更改。
然而Oracle9i数据库支持多重区块大小—。
除了预设的DB_BLOCK_SIZE之外,DBA也可以另外设定其它大小的数据区块。
因此在Oracle9i数据库中由DB_BLOCK_SIZE所设定的数据区块,我们称为「标准数据区块(standardblock)」,其合理的大小可设定在2k–32k之间。
Oracle9i
的起始参数DB_CACHE_SIZE就是设定以“标准区块”所构成的数据快取缓冲区之容量。
重置日志缓冲区:
纪录Oracle数据库内所有数据异动的详细信息(例如数据异动前后的新旧数据),我们将这些信息的储存地点称为redoentries。
系统也会在适当时机将redoentries内的信息写入磁盘内的文件案(注5),以便资料库毁损时可进行必要的复原(Recovery)动作。
设定重置日志缓冲区的大小:
起始参数文件之LOG_BUFFER参数可用来设定此缓冲区的容量,单位为bytes。
一般来说,如果重置日志缓冲区的容量较大,可减少日志文件读写动作。
重置日志缓冲区的默认值等于操作系统数据区块的四倍。
共享区:
当使用者将SQL指令送至Oracle数据库后,系统将会先解析(parse)语法是否正确。
解析时所需要的系统信息,以及解析后的结果(parsetree与executionplan)将放置在共享区内。
如果不同的使用者执行了相同的SQL指令,就可以共享已解析好的parsetree与executionplan,加速SQL指令的执行速度。
共享区之组成:
共享区内包含数种不同用途的快取缓冲区,主要可分为两类:
●函式快取缓冲区(Librarycache)
包含:
共享SQL区(SharedSQLArea),私有SQL区(PrivateSQLArea),以及PL/SQL程序单元区。
解析完成的parsetree与executionplan就是放在共享SQL区内。
●数据字典缓冲区(Dictionarycache)。
Oracle9i在解析SQL叙述句时所需要的系统信息都是放在此缓冲区内,可能包含:
数据表(视观表)的名称、字段名称与数据型态;数据库使用者之相关系统管理权限,或是对象存取权限伂央C
设定共享区之大小:
起始参数文件内的SHARED_POOL_SIZE可设定共享区之大小,其默认值大小为8M。
Oracle数据库结构:
谈及Oracle数据库结构时,我们应该从两个角度来探讨:
分别是资料库的「逻辑层面」与「实体组成」。
简单的说,「逻辑层面」是由“数据库内部”观看其组成要素,包括:
数据表空间(tablespaces)、区段(segments)、盘区(extents)、数据区块(datablock)、以及纲要物件(Schemaobjects)。
而「实体组成」则是从“操作系统”角度来看Oracle9i数据库的实体构成项目,包括:
资料文件(Datafiles)、重置日志文件(redoligfiles)、控制文件(controlfiles)、密码文件(password)、起始参数文件(initializationparameterfiles)等等。
数据库之逻辑组成:
无论是任何规模的企业,在管理数据库系统时,DBA都应该依据实际系统需求或是未来可能的管理方式,规划出一个或多个数据储存区域。
重点是希望将数据分门别类地妥善存放。
譬如,您可能会希望将公司内会计系统的帐务数据与产品销售纪录分开存放。
Oracle9i数据库允许DBA自行规划各种用途的数据表空间(Tablespace),以便存放不同型态的数据与数据库对象。
举例来说,存放Oracle系统信息的「数据辞典」(datadictionary)可放在SYSTEM数据表空间;应用系统数据可存放在USER数据表空间;而所有数据表的索引(Index)则可单独存放在INDX数据表空间内(SYSTEM为Oracle数据库预设的数据表空间;USER与INDX则是由DBA自行规划建置的)。
一般来说,Oracle9i数据库至少应规划出五个以上的数据表空间,如下图所示:
数据区块(datablock):
Oracle9i数据库有几种数据储存体,其中最小的储存单元就称为「数据区块」(datablock)。
数据区块大小是由起始参数文件的DB_BLOCK_SIZE参数所决定,且在新建Oracle9i数据库之前就必须明确地定义。
实际上,数据区块大小与“操作系统的磁盘读写区块”(O.S.blocks)也有关系,所以您必须将DB_BLOCK_SIZE设定为O.S.blocks的整数倍。
附带一提:
Oracle9i在存取资料时是以datablock为最小读取单位,而不是以O.S.block为单位。
从Oracle9i开始,数据库内可以设定多种数据区块大小。
换句话说,Oracle9i数据库内分为「标准数据区块」与「非标准数据区块」;预设情况下SYSTEM数据表空间就是以「标准数据区块」建立而成。
盘区(extents):
除了数据区块之外,Oracle9i数据库还有所谓的「盘区」(extents)。
虽然数据区块是Oracle9i最小的数据读写单位,但值得注意的是:
Oracle9i在“配置”储存空间时,并不是以数据区块为单位,而是改采「盘区」的方式来配置空间。
那么,使用「盘区」究竟有何好处呢?
当您执行DDL指令建立数据库对象时(例如CREATETABLE指令),Oracle9i会先配置出一连串的数据区块;直到这些数据区块全部存满数据后,下次再配置一连串的数据区块。
这些连续的资料区块就统称为「盘区」。
举例来说,假定您准备在Oracle9i数据库内存放80KB的数据,Oracle9i可以先配置一个「盘区」,其大小可为数据区块(8KB)的5倍;然后视实际需要再配置第二个「盘区」(大小还是40KB)。
如此一来,只要两次的空间配置动作就可以存放80KB的数据了!
试想,如果Oracle9i每次只配置8KB的「数据区块」让您存放数据,总共需要10次空间配置动作才能放满80KB的数据,是不是比较没有效率呢?
由此可见,「盘区」的确有其存在的必要性。
区段(segment):
依照不同的数据处理性质,您可能需要在数据表空间内划分出不同区域,以存放不同数据;我们将这些区域称之为「区段」(segment)。
例如,存放数据的称为「数据区段」、存放数据的称为「索引区段」。
而「区段」其实就是由许多「盘区」组合而成。
除了上述两种「区段」以
外,Oracle9i数据库内还有另外两种区段结构,分别是:
「暂时性区段」(temporarysegment)与「退回区段」(rollbacksegment)。
下图说明了Oracle9i数据库内各逻辑组成要件之间的阶层关系:
从Oracle9i数据库的「逻辑层面」来看,我们知道:
●数据是存放在每个「数据块」内,数据读写动作也将以「数据块」为单位。
●空间配置的动作则是引用「盘区」的概念。
一个「盘区」由一连串的「数据块」所构成。
●依实际数据量多寡,数据(或数据库对象)由多个「盘区」所组成。
●「数据表空间」内可划分不同的「数据段」;而每个「数据段」内又包含许多「盘区」。
●在每个Oracle9i数据库内可规划不同的「数据表空间」,用以存放不同型态的数据。
数据文件:
每个Oracle9i数据库都包含为数不等的实体「数据文件」。
数据库内所有逻辑数据库对象都是存放在数据文件内,如:
数据表、索引等。
一但数据文件被建立后,系统就会在磁盘上配置出适当空间给数据文件案;但尚未存放任何使用者数据。
等到未来使用者将数据存入数据库时,Oracle9i才会在数据文件内配置出「数据区段」,以存放数据。
而这些动作都是由Oracle9i自动完成的。
当然了,如果数据文件剩余空间不足,您就必须调整数据文件大小;或增加新的数据文件。
所以在Oracle9i数据库内,一个数据库对象有可能横跨多个数据文件。
如前所述,Oracle9i数据库内可规划一个以上的「数据表空间」。
但如果由操作系统角度来看,「数据表空间」其实是由一个或数个实体「数据文件」所组成。
换句话说,数据库的所有数据就是位于操作系统的各「数据文件」内。
所以:
●一个「数据文件」只能对应的一个「数据表空间」。
●一个「数据表空间」可包含多个「数据文件」。
重置日志文件:
除了「数据文件」外,最重要的Oracle9i数据库实体文件案就是「重置日志文件」(redologfiles),也就是大家俗称的「交易日志」(transactionlog)。
虽然它与「数据文件」不同,但是彼此间却有密不可分的关系!
简单的说,Oracle9i重置日志文件会负责纪录数据库内任何数据处理情况。
当数据被异动时,所有异动纪录会先保留在内存的重置纪录缓冲区,并在适当时机由LGWR背景处理程序负责写入至硬盘上重置日志文件。
如此一来,所有数据异动情况都会完整地保留下来。
万一您的Oracle9i数据库不小心当机或是遭遇毁损,Oracle9i将凭借重置日志文件内相关纪录将数据复原至最完整的状态—这个动作我们又称为『RollForward』。
重置日志文件的配置方式:
Oracle9i数据库正常运作的先决条件是至少配置两个(组)重置日志文件。
假定目前Oracle9i数据库拥有两个重置日志文件,分别是redo01.ora与redo02.ora。
因为重置日志文件是以循环方式使用,所以当redo01.ora写满后就会轮到redo02.ora—这个动作称为「日志切换」(logswitch)。
理论上,当redo02.ora写满后应该会立刻从redo01.ora重新开始写入动作。
但实际上并非如此—Oracle9i会等到redo01.ora内纪录的数据异动情况真正反应在数据文件之后(才会覆写redo01.ora的资料。
在一个大型在线交易(OLTP)系统下,如果数据交易量十分频繁,建议您不妨配置五个以上重置日志文件。
以免Oracle9i进行「日志切换」时还要等候CKPT处理程序执行「检查点动作」(checkpoint),因而影响系统效能。
在执行关键性任务(mission-critical)的数据库系统中,为了避免硬体问题导致重置日志文件毁损(例如硬盘产生坏轨),我们会考虑建置「多重重置日志文件」(multiplexedredolog)。
所谓的「多重重置日志文件」其实就是在其它硬盘内同时存放多份重置日志文件之复本。
假定原来的重置日志文件为Redo_A01.ora与Redo_A02.ora。
我在第二个磁碟又额外规划了两个重置日志文件—Redo_B01.ora与Redo_B02.ora(分别为Redo_A01.ora与Redo_A02.ora之复本)。
这时候Redo_A01.ora与Redo_B01.ora就构成所谓的「重置日志群组」(redologgroup);而Redo_A01.ora与Redo_B01.ora分别为该群组之「群组成员」(member)。
一但您以「重置日志群组」的方式规划重置日志文件,LGWR会同时将异动纪录写入相同群组的所有成员。
也就是说,LGWR会将数据同时写入Redo_A01.ora与Redo_B01.ora,等到发生「日志切换」动作后,再同时写入Redo_A02.ora与Redo_B02.ora。
可想而知,万一这两颗硬盘其中之一不幸损毁。
重置日志文件将不受任何影响。
尽管「多重重置日志文件」的概念已具备容错功能,但是对于重置日志文件之写入效能却有一定程度的影响!
这也是我们在规划之初就必须考虑的重点之一。
控制文件:
每个Oracle9i数据库也都会有一个「控制文件」,用以纪录与描述资料库的实体结构。
「控制文件」内记录以下重要信息:
●Oracle9i数据库名称与建立时间。
●数据文件与重置日志文件之名称,及其所在位置。
●交易纪录序列码(logsequencenumber)。
每当数据库被启动时,Oracle9i会在执行个体启动后立刻读取控制文件内容,待所有数据库实体组成文件案之所在信息都收集完毕,数据库才会被开启。
为了避免控制文件毁损导致数据库系统停摆,建议您比照「多重重置日志群组」的方式—至少配置两个控制文件,并存放在不同实体硬盘。
起始参数文件:
在启动执行个体之前,Oracle9i必须依照特定参数设定值来配置存储器空间,并启动相关背景处理程序。
而DBA可以事先规划这些参数,并存放在操作系统内的某个文件案。
往后将利用这个文件案来开启相对应的Oracle9i执行个体。
这个文件案就是所谓的「起始参数文件」。
起始参数文件包含以下主要内容:
●系统全域区相关的组态设定
●其它各起始参数之名称与设定值
●控制文件名称与存放路径
●重置日志文件之相关设定
您可以利用任何文字编辑器来建立或修改起始参数文件,通常起始参数文件的名称为init.ora或是init
假定Oracle9i执行个体的名称为ora901,起始参数文件之文件名就可以定为initora901.ora。
以下是一个起始参数文件范例:
#Copyright(c)1991,2001byOracleCorporation
#CacheandI/O
db_block_size=8192
db_cache_size=67108864
#CursorsandLibraryCache
open_cursors=300
#DiagnosticsandStatistics
background_dump_dest=/opt/oracle/admin/ora901/bdump
core_dump_dest=/opt/oracle/admin/ora901/cdump
timed_statistics=TRUE
user_dump_dest=/opt/oracle/admin/ora901/udump
#Distributed,ReplicationandSnapshot
db_domain=.tw
remote_login_passwordfile=EXCLUSIVE
#FileConfiguration
control_files=("/opt/oracle/oradata/ora901/control01.ctl",
"/opt/oracle/oradata/ora901/control02.ctl",
"/opt/oracle/oradata/ora901/control03.ctl")
#MTS
dispatchers="(PROTOCOL=TCP)(SER=MODOSE)",
"(PROTOCOL=TCP)(PRE=oracle.aurora.server.
GiopServer)",
"(PROTOCOL=TCP)(PRE=oracle.aurora.server.
SGiopServer)"
#Miscellaneous
compatible=9.0.0
db_name=ora901
#NetworkRegistration
instance_name=ora901
#Pools
java_pool_size=117440512
large_pool_size=1048576
shared_pool_size=117440512
#ProcessesandSessions
processes=150
#RedoLogandRecovery
fast_start_mttr_target=300
#ResourceManager
resource_manager_plan=SYSTEM_PLAN
#Sort,HashJoins,BitmapIndexes
sort_area_size=524288
#SystemManagedUndoandRollbackSegments
undo_management=AUTO
undo_tablespace=UNDOTBS
除了上述文件案之外,Oracle9i数据库内还包含密码文件(passwordfile)、重置日志封存盘(ArchivedRedologfiles)。
启动与关闭Oracle9i数据库:
在启动Oracle9i数据库之前,首先您必须了解数据库的各种启动状态:
●NOMOUNT
●MOUNT
●OPEN
下表列出不同的启动状态,与其使用时机:
启动状态
说明
NOMOUNT
●仅启动Oracle9i执行个体,不会挂载(mount)Oracle数据库。
●配置系统全域区(SGA),启动各背景处理程序。
●数据库尚无法使用。
●DBA可执行ALTERDATABASE指令将数据库开启至MOUNT或是OPEN状态。
●通常使用于第一次建立数据库,或是需重建控制文件时。
MOUNT
●启动Oracle9i执行个体。
●参数文件开启控制文件。
●参数文件挂载Oracle9i数据库,但尚未开启之。
●参数文件数据库尚无法使用,但是DBA可以进行特殊的管理工作(例如更改数据库内重置日志文件的封存模式)。
OPEN
●启动Oracle9i执行个体。
●参数文件开启控制文件。
●参数文件挂载Oracle9i数据库之后立刻开启。
●参数文件使用者可以存取数据库。
当您的系统内尚未建立任何数据库之前,只能先将Oracle9i执行个体开启至NOMOUNT状态,接着利用CREATEDATABASE指令建立Oracle9i资料库。
待数据库顺利建立时(数据库内相关的信息已纪录至控制文件),才可以执行ALTERDATABASE指令将数据库开启至OPEN状态;或是先将执行个体关闭,再一口气将数据库开启至O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 学习 记录