




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle程序员面试分类模拟42简答题1.
$ORACLE_HOME和$ORACLE_BASE的区别是什么?正确答案:ORACLE_BASE是Oracle软件的根目录,下面一般包括admin、c(江南博哥)fgtoollogs、diag、fast_recovery_area和product等目录。ORACLE_HOME下则是Oracle的命令、连接库、安装助手、LISTENER等一系列的内容。ORACLE_HOME是Oracle产品的目录。
ORACLE_HOME比ORACLE_BASE目录要更深一些。也就是说:ORACLE_HOME=$ORACLE_BASE/product/version。如果装了2个版本的Oracle,那么ORACLE_BASE可以是一个,但ORACLE_HOME是2个。需要注意的是,ORACLE_HOME变量的最后是没有反斜杠“/”的。
2.
DATABLOCK,EXTENT和SEGMENT的区别是什么?正确答案:DATABLOCK是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的DATABLOCK就组成了EXTENT。一个数据库对象拥有的所有EXTENT被称为该对象的SEGMENT。
3.
内存结构主要由什么组成?正确答案:Oracle内存结构主要分共享内存区与非共享内存区,共享内存区主要包含SGA(SystemGlobalArea,系统全局区),非共享内存区主要由PGA(ProgramGlobalArea,程序全局区)组成,如图所示。
Oracle实例结构
(1)SGA介绍
SGA(SystemGlobalArea,系统全局区)是Oracle实例的基本组成部分,是Oracle为一个实例分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息,包括数据维护、SQL语句分析、Redo日志管理等。SGA是实例的主要部分,它在实例启动时分配。
SGA是动态的,由参数SGA_MAX_SIZE决定。查看当前系统的SGA可以使用的最大内存大小的命令是:SHOWPARAMETERSGA_MAX_SIZE。修改SGA最大内存大小的命令是:ALTERSYSTEMSETSGA_MAX_SIZE=1200MSCOPE=SPFILE。因为实例内存的分配是在数据库启动时进行的,所以,要让修改生效,必须重启数据库。当Oracle运行在32位Linux上时,其默认SGA无法超过1.7GB。
在Oracle10g中引入了ASMM(AutomaticSharedMemoryManagement,自动共享内存管理),DBA只需设置SGA_TARGET,Oracle就会自动地对共享池、数据缓冲区、Redo日志缓冲区、大池、Java池和流池进行自动调配,取消自动调配的方法为设置SGA_TARGET为0。
需要注意的是,Oracle分配内存的单位是granule,即粒度。最小的粒度为4MB,设置大小不到一个粒度按一个粒度计算。在32位操作系统的平台上,粒度的最大值为16MB。粒度的大小在数据库实例周期内不能被修改。按照粒度为单位分配的组件包括SharedPool、BufferCache(以及不同大小块的BufferCache)、RedoLogBuffer、JavaPool、StreamsPool和LargePool。粒度的大小参考下表。
通过视图V$SGAINFO可以查询当前SGA分配的粒度大小,如下:
下面将对SGA的各个组成部分进行介绍。
1)共享池(SharedPool):缓存了各用户间可共享的各种结构,例如,缓存最近被执行的SQL语句和最近被使用的数据定义。共享池主要包括:库缓存(LibraryCache)、数据字典缓存(DataDictionaryCache)、保留池(ReservedPool)和结果缓存(ResultCache)。
①库缓存(LibraryCache)是存放用户SQL命令、解析树和执行计划的区域。对于库缓存来说,具体包含以下几个部分:
共享SQL区(SharedSQLArea):保存了SQL语句文本,编译后的语法分析树及执行计划。查看共享SQL区的使用率命令为:SELECT(SUM(PINS-RELOADS))/SUM(PINS)”LIBRARYCACHE”FROMV$LIBRARYCACHE;。
私有SQL区(PrivateSQLArea):包含当前会话的绑定信息以及运行时内存结构。每个发出SQL语句的会话,都有一个PrivateSQLArea。当多个用户执行相同的SQL语句,此SQL语句保存在共享SQL区。若是共享服务器模式,则PrivateSQLArea位于SGA的SharePool或LargePool中。若是专用服务器模式,则PrivateSQLArea位于PGA中。
共享PL/SQL区(SharedPL/SQLArea):保存了分析与编译过的PL/SQL块(存储过程、函数、包、触发器和匿名PL/SQL块)。
控制结构区(ControlStructureArea):保存锁等控制信息。
②数据字典缓存(DataDictionaryCache)存放数据库运行的动态信息,例如表和列的定义,数据字典表的权限。查看数据字典缓冲区使用率的SQL为:“SELECT(SUM(GETS-GETMISSES-USAGE-FIXED))/SUM(GETS)"DATADICTIONARYCACHE"FROMV$ROWCACHE;”。
③保留池(ReservedPool)也称为保留区域(ReservedArea),是指SharedPool中配置的一个内存保留区域,这个保留区域用做当在普通的SharedPool列表中的空间不能用来满足LargeRequest的内存分配请求而分配大块的连续内存块。当一个内存请求大于隐含参数“_SHARED_POOL_RESERVED_MIN_ALLOC”(默认:4400bytes,如果系统经常出现ORA-04031错误,基本上都是请求大于4400的内存块,那么就可能需要增加SHARED_POOL_RESERVED_SIZE参数设置)的值时就是一个LargeRequest,反之当内存请求小于“_SHARED_POOL_RESERVED_MIN_ALLOC”时就是一个SmallRequest。另外关于ReservedPool还有两个参数需要关注一下,一个是SHARED_POOL_RESERVED_SIZE,另外一个是隐含参数“_SHARED_POOL_RESERVED_PCT”(默认:5%)。通过SHARED_POOL_RESERVED_SIZE可以为ReservedPool指定一个大小,也可以通过“_SHARED_POOL_RESERVED_PCT”来为SharedPool指定一个比例。如果这两个参数同时设置了,那么就会以“_SHARED_POOL_RESERVED_PCT”为准。参数SHARED_POOL_RESERVED_SIZE的缺省值是SHARED_POOL_SIZE的5%,最小值为5000bytes,最大不得超过SHARED_POOL_SIZE的50%。通过视图V$SHARED_POOL_RESERVED可以查到保留池的统计信息。其中字段REQUEST_MISSES记录了没有立即从空闲列表中得到可用的大内存段请求次数,这个值理想状态下要为0。当REQUEST_FAILURES大于0时,则需要增加SHARED_POOL_SIZE和SHARED_POOL_RESERVED_SIZE的空间。当REQUEST_MISS等于0,或是FREE_MEMORY大于等于SHARED_POOL_RESERVED_SIZE的空间时,则增加SHARED_POOL_RESERVED_SIZE的空间。MAX_USED_SPACE字段可以用来判断保留池的大小是否合适。保留区使用SharedPool的LRU链表来管理内存块。可以通过如下的SQL语句来查询保留池的命中率(HitRatio),杳询语句如下:
以上结果应该都要小于1%,如果大于1,那么应该考虑加大SHARED_POOL_RESERVED_SIZE。
结果缓存(ResultCache)是存放SQL查询结果和PL/SQL函数查询结果的区域。
共享池的大小由参数SHARED_POOL_SIZE决定。只要将初始化参数STATISTICS_LEVEL设置为TYPICAL(默认值)或ALL,就能启动对SharedPool的建议功能,若设置为BASIC,则关闭建议功能。使用如下的SQL语句可以查询到Oracle所建议的SharedPool的大小:
第一列表示Oracle所估计的SharedPool的尺寸值,其他列表示在该估计的SharedPool大小下所表现出来的指标值。可以主要关注ESTD_LC_TIME_SAVED_FACTOR列的值,当该列值为1时,表示再增加SharedPool的大小对性能的提高没有意义。对于上例来说,当SharedPool为200MB时,达到最佳大小。对于设置比200MB更大的SharedPool来说,就是浪费空间,没有更多的好处了。
2)数据缓冲区(DatabaseBufferCache):也称为数据库缓冲区高速缓存,用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能,是数据库实例的重要组成部分。参数DB_CACHE_SIZE可指定数据缓冲区的大小,需要在参数文件中静态修改。Oracle在处理某个查询时,服务器进程会在BufferCache中查找它所需的所有数据块。如果未在BufferCache中找到所需要的数据块,那么服务器进程会从数据文件中读取所需的数据块,并在BufferCache中添加一个副本。因为关于同一数据块的后续请求可能会在内存中找到该数据块,因此,这些请求可能不需要进行物理读操作。BufferCache中的内存块有4种状态:
①Pinned:当前块正在被某个进程读取到Cache或正写到磁盘,即当前正在被访问的数据块,可防止多个会话同时对同一数据块进行写操作。此时,其他会话正等待访问该块。
②Clean:服务器进程从数据文件中读入的Block且还没有被其他进程所修改或者后台进程DBWn将DirtyBuffer写入到数据文件中的Buffer,该Buffer中的内容与数据文件中的Block一致。该状态的数据块是可以立即被移出的候选数据块。
③Free/Unused:Buffer内为空,为实例刚启动时的状态。BufferCache初始化时或者在执行altersystemflushbufier_cache以后的Buffer,该Buffer中没有存放任何内容。此状态与“clean”状态非常相似,不同之处在于“free/unused”状态的缓冲区尚未使用。
④Dirty:脏数据,数据块已被修改,需要先被DBWn刷新到磁盘,才能执行过期处理(移出缓冲区)。在该状态下,该Buffer的内容与数据文件中Block的内容不一致。
DatabaseBufferCache中数据块的状态转变如图所示。
DatabaseBufferCache中数据块的状态转变
数据库高速缓冲区的主要功能是用来暂时存放最近读取白数据库中的数据,也就是数据文件(DataFile)内的数据,而数据文件是以数据块(Block)为单位,因此,数据库高速缓冲区中的大小是以块为基数。当用户通过应用程序第一次向Oracle数据库发出查询请求时,Oracle会先在BufferCache内寻找该数据,如果有该请求所需要的数据,那么就直接从BufferCache传回给用户,这称为缓存命中(CacheHit),这样就可以减少硬盘上的I/O次数。如果Oracle发现用户要的数据并不在BufferCache里,就称为缓存失误(CacheMiss),Oracle会从数据库中读取所需要的数据块,先放入BufferCache中,再传送给用户。该区域内的数据块通过LRU(LeastRecentlyUsed,最近最少使用)算法管理。LRU将BufferCache中的所有的Clean和Free状态的Buffer按照它们被读取的频率连接起来(冷端:最少使用的;热端:最常被使用的;在服务器进程将磁盘的Block读取到BufferCache时,会先覆盖冷端的Buffer)。
BufferCache可以分为多个缓冲池:
①回收池(RecyclePool):放到回收池中的数据,只要空间不够用,它们马上就会被释放出来,即回收池中的数据会最先被替换出内存,很少使用的数据放在该区。被放在回收池中的数据块不会被反复使用。也就是说,这些数据块只在事务(Transaction)还存在时才会被用到,一旦事务结束,就会被释放出来。回收池的大小最好是默认池的1/2,通过DB_RECYCLE_CACHE_SIZE参数指定回收池的大小。该缓存不参与ASMM的动态管理,不能自动调整大小。默认未启用,大小为0。手工修改指定值后,DefaultPool的空间将被相应的减少。
②保留池(KeepPool):当数据被放到保留池里时,就代表这个数据是需要常常被重复使用的。保留池中的数据不会被替换出去,可以将常用的小表放置在该区可以降低I/O操作。可以通过DB_KEEP_CACHE_SIZE参数指定保留池的火小。该区域的大小不会被ASMM自动调节。默认未启用,大小为0,当手工修改指定该值后,DefaultPool的空间将被相应的减少。
③默认池(DefaultPool):当没有指定对象存储的缓冲池时,数据就会放在默认池中,相当于一个没有Keep与Recycle池的实例的BufferCache。也就是说,放在默认池的数据利用的是LRU机制。通过DB_CACHE_SIZE参数指定默认池的大小。
BUFFER_POOL子句可以在对象的STORAGE子句中为对象指定使用具体的BufierPool。如果现有对象没有明确指定BufferPool,那么默认都指定为DefaultBufferPool。可以使用CREATE或ALTER语句指定对象存储的绣冲油:
在同一个数据库中,支持多种大小的数据块缓存。通过DB_nK_CACHE_SIZE参数指定,如:
①DB_CACHE_SIZE(指定标准块(这里为8K)的缓存区)。
②DB_2K_CACHE_SIZE(指定块大小为2K的缓存区)。
③DB_41K_CACHE_SIZE(指定块大小为4K的缓存区)。
④DB_16K_CACHE_SIZE(指定块大小为16K的缓存区)。
⑤DB_3ZK_CACHE_SIZE(指定块大小为32K的缓存区)。
标准块缓冲区大小由DB_CACHE_SIZE指定。如标准块为nK,则不能通过DB_nK_CACHE_SIZE来指定标准块缓冲区的大小,应由DB_CACHE_SIZE指定。
当数据库高速缓冲区需要读取或写回数据到数据文件中时,都需要通过DBWn这个后台进程来协助处理,而参数DB_WRITER_PROCESSES主要设置要由几个DBWn来协助处理。在此建议不要超过系统CPU的个数,如果设置的值超过了CPU的个数,那么超过的那些是无法起作用的。
当参数DB_CACHE_ADVICE设置为ON(当STATISTICS_LEVEL为TYPICAL或ALL时,DB_CACHE_ADVICE参数值默认为ON)时,表示开启DB_CACHE_ADVICE功能。当开启参数DB_CACHE_ADVICE后,经过一段时间,Oracle就会自动收集足够的相关统计数据,并预测出DB_CACHE_SIZE在不同大小情况下的性能数据,而这些数据就是通过V$DB_CACHE_ADVICE视图来显示的,因此,可以根据这些数据对DB_CACHE_SIZE做相关的调整,以达到最佳情况。
查询视图V$DBCACHE_ADVICE如下:
由以上结果可以知道,当ESTD_PHYSICAL_READ_FACTOR为1时,最佳的DB_BUFFER_SIZE是48,因为在这之后再进行调整对降低I/O的影响有限,所以该系统最佳的BufferCache的大小为48M。
3)Redo日志缓冲区(RedoLogBuffer):对数据库进行修改的任何事务(Transaction)在记录到Redo日志文件之前都必须首先放到Redo日志缓冲区中。Redo日志缓冲区中的内容将被后台进程LGWR写入联机Redo日志文件(OnlineRedoLogFiles)中。Redo日志缓冲区是一个循环缓存区,在使用时从顶端向底端写入数据,然后再返回到缓冲区的起始点循环写入。Oracle中所有的DML和DDL操作都会记录日志,即便没有提交的DML操作也会记录日志,在指定了NOLOGGING时,也会记录一些日志。Redo日志缓冲区大小由参数LOG_BUFFER决定,需要在参数文件中静态修改。服务器进程(ServerProcess)及后台进程(BackgroundProcess)对Oracle的变更记录会写到Redo日志缓冲区,这些变更的数据都在内存中的Redo日志缓冲区中以RedoEntry(重做条目,也可称为RedoRecord)的方式存储。RedoEntry是Oracle从用户会话占用的内存里将这些变更的记录复制到Redo日志缓冲区内,其在内存中是一段连续的内存块,Oracle利用后台进程LGWR在适当的时机将Redo日志缓冲区中的信息(也就是RedoEntry)写回到联机Redo日志文件内,当万一数据库崩溃时,可以进行必要的恢复。后台进程LGWR将RedoEntry写回到联机Redo日志文件的时机包括:①用户发出提交命令(COMMIT);②每隔3s;③Redo日志缓冲区空间剩余不到2/3;④Redo日志缓冲区内的数据达到1MB;⑤在发生联机Redo日志切换(LogSwitch)时;⑥在DBWn进程将修改的缓冲区写入磁盘时(如果相应的Redo日志数据尚未写入磁盘)。
4)大池(LargePool):SGA中一个可选的内存区域,大池用来分配大块的内存,处理比共享池更大的内存,用来缓解SharedPool的负担。大池主要用在3种情况下,①若是共享服务器模式时,则在LargePool中分配UGA,若LargePool没有分配则在SharedPool中分配。若是专用服务器(多线程服务器MTS,Multi-ThreadedServer)连接,则UGA在PGA中创建。②语句的并行查询(ParallelExecuteionofStatements),允许进程间消息缓冲区的分配,用来协调并行查询服务器。③恢复管理器RMAN,用于RMAN磁盘I/O缓冲区。大池的大小由参数LARGE_POOL_SIZE决定,可以动态修改。大池也使用共享池的闩锁机制,但和共享池不同的是,大池并不使用LRU机制,而是使用LargeMemoryLatch的保护,因此,大池中缓冲区内的数据不会被置换出来。大池内的数据会利用用户的会话来控制分配和释放大池的空间。如果大池的空间不足,那么也会出现ORA-04031错误。
①Java池(JavaPool):为Java命令的语法分析提供服务。Java池也是SGA中的一块可选内存块,大小由参数JAVA_POOL_SIZE决定。在Oracle10g以后,提供了一个新的Java池的建议功能,以辅助调整Java池的大小,而建议的统计数据可以通过视图V$JAVA_POOL_ADVICE来查询。
②流池(StreamsPool):被Oracle流所使用,主要提供专门的Streams复制功能,流池是可选用内存块,它也属于SGA中的可变区域。参数STREAMS_POOL_SIZE可以指定流池的大小。如果设置为0,那么当第一次使用Streams复制功能时,Oracle会自动建立此块区域,而自动建立的大小为共享池大小的10%。Oracle也提供了一个流池的建议功能,来协助调整流池的大小,而建议的统计数据可以通过视图V$STREAMS_POOL_ADVICE来查询。
(2)PGA介绍PGA(ProgramGlobalArea,程序全局区)是单个Oracle进程使用的内存区域,为每个连接到Oracle数据库的用户进程保留的内存,不属于实例的内存结构。它含有单个进程工作时需要的数据和控制信息。PGA是非共享的,只有服务进程本身才能够访问它自己的PGA区。PGA在进程创建时分配,进程结束时释放。PGA的内容随服务器的模式(专用模式/共享服务器模式)不同而不同。PGA的大小由参数PGA_AGGREGATE_TARGET决定,可动态修改。PGA结构如图所示。
PGA结构
PGA有如下几个组件:
1)PrivateSQLArea(私有SQL区):参考SharedPool部分的介绍。
2)CursorandSQLAreas(游标和SQL区):OraclePro*C程序(Pro*C是Oracle提供的应用程序专用开发工具,它以C语言为宿主语言,能在C程序中嵌入SQL语句,进行数据库操作)的应用程序开发人员或Oracle调用接口(OracleCallInterface,OCI)程序可以显式打开游标或处理私有SQL区。
3)SessionMemory(会话内存):保存会话的变量(例如,登录信息)及其他与会话相关的信息。在共享服务器模式下,SessionMemory是共享的。
4)WorkArea(工作区):PGA的一大部分被分配给WorkArea,用来执行如下操作:
①基于排序的操作,GROUPBY、ORDERBY、ROLLUP和窗口函数。由于排序需要内存空间,Oracle利用该内存排序数据,这部分空间称为排序区。排序区存在于请求排序的用户进程的内存中,该空间的大小为适应排序数据量的大小,可增长,但受参数SORT_AREA_SIZE所限制。
②HASH连接,大小受参数HASH_AREA_SIZE所限制。
③位图合并,大小受参数BITMAP_MERGE_AREA_SIZE所限制。
④位图创建,大小受参数CREATE_BITMAP_AREA_SIZE所限制。
⑤批量装载操作使用的写缓存。
PGA和SGA最明显的差别在于,PGA不是共享内存,是私有不共享的。用户对数据库发起的无论查询还是更新的任何操作,都是在PGA先预处理,然后接下来才进入实例区域,由SGA和系列后台进程共同完成用户发起的请求。PGA起到的具体作用主要有三点:第一,保存用户的连接信息,如会话属性、绑定变量等;第二,保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存在这个会话区内;第三,当发起的指令需要排序的时候,PGA正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存PGA区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。
(3)UGA介绍UGA(UserGlobalArea)保存了会话信息,会话总能访问这部分内存。UGA的位置取决于会话连接到Oracle的方式。如果是专用服务器连接,那么UGA在PGA中创建;如果是共享服务器连接,那么UGA在SGA的LargePool中创建,若LargePool没有分配则在SharedPool中分配。
PGA和UGA两者间的区别跟一个进程和一个会话之间的区别是类似的。尽管进程和会话之间一般都是一对一的关系,但实际上比这个更复杂。一个很明显的情况是MTS配置,会话往往会比进程多得多。在这种配置下,每一个进程会有一个PGA,每一个会话会有一个UGA。PGA所包含的信息与会话是无任何关联的,而UGA包含的信息是以特定的会话为基础的。
(4)自动PGA内存管理(AutomaticPGAMemoryManagement)若设置参数PGA_AGGREGATE_TARGET为非0,则启用自动PGA内存管理,并忽略所有*_AREA_SIZE的设置,例如SORT_AREA_SIZE、HASH_AREA_SIZE等。默认为启用PGA的自动管理,Oracle根据SGA的20%来动态调整PGA中专用于WorkArea部分的内存大小,最小为10MB。
如果设置参数WORKAREA_SIZE_POLICY为MANUAL(默认值是AUTO),就代表此数据库的PGA管理模式属于手动管理模式,且在此模式下必须设置SORT_AREA_SIZE、HASH_AREA_SIZE等相关参数。
当自动PGA内存管理功能打开后,可以从V$PGA_TARGET_ADVICE中得到相关的指导数据,进而评估PGA_AGGREGATE_TARGE是否需要调整。该视图的ESTD_OVERALLOC_COUNT列表示需要额外分配的PGA内存,如果此数值不是0,就表示PGA_AGGREGATE_TARGE设置得太小,需要调整。
从上面的查询中可以看出当设置PGA的大小为228MB时,可以消除PGA过载的情形。
(5)SHOW
SGA和V$SGA的结果区别SHOWSGA的结果比V$SGA的结果多一行“TotalSystemGlobalArea”数据。其实,SHOWSGA的结果来源于V$SGA视图。运行命令“vi$ORACLE_HOME/bin/sqlolus”打开sqlplus文件,匹配SGA可以发现这么一行代码:
该行代码的结果和执行showsga可以得到一样的结果,如下:
在以上结果中,各部分的含义如下:
1)TotalSystemGlobalArea:显示目前此SGA的大小,包括FixedSize、VariableSize、Databasebuffers和RedoBuffers的大小总和。
2)FixedSize:这里存储了SGA各部分组件的相关信息,主要是作为引导SGA创建的区域,Oracle通过这个区找到SGA其他区,类似一个SGA各个组件的索引。这部分是Oracle内部使用的一个区,包括了数据库与实例的控制信息、状态信息、字典信息等。当实例被打开时,此块区域就被固定住而不能做任何变动,此区域也可称为FixedSGA。不同平台和不同版本下这部分的大小可能不一样。
3)VlariableSize:包括SharedPool、JavaPool、LargePool、StreamsPool、游标区和其他结构。由于这些内存块都是可动态分配的,所以统称为VariableSize。
4)DatabaseBuffers:显示数据库高速缓冲区的大小,是SGA中最大的地方,决定数据库性能。为DB_CACHE_SIZE、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE、DB_NK_CACHE_SIZE的总大小,当然这是SGA_TARGET为0的情况,也就是手动SGA管理模式下,如果是自动SGA管理(SGA_TARGET>0),那么这个值根据SGA的分配情况自动进行调整。
5)RedoBuffers:显示Redo日志缓冲区的大小,这部分是实际分配的RedoLogBuffer的大小,由初始化参数LOG_BUFFER根据SGA的最小分配单位granule向上取整得到。
(6)和内存相关的比较有用的视图
1)V$SGASTAT主要记录了有关SGA的统计信息以及内存分配的情况,对于发生ORA-04031错误有很重要的参考价值。其中的信息由3个字段组成,依序是:Name(SGA内存块的名称)、Bytes(内存块的大小)、Pool(内存所属的内存块)。
以下的语句可查询内存块还剩余多少使用空间:
以下的语句可查询共享池的使用情况比率:
2)V$SGA_DYNAMIC_COMPONENTS记录了SGA内各个组件的情况,包括SGA的各个内存块的放大和缩小情况,且所提供的信息是经过统计的。
3)V$LIBRARYCACHE的内容包含了关于库缓存的性能统计信息,对于共享池的性能优化有很大帮助。此视图中必须特别注意PIN和GET的命中率或未命中率,当命中率小于99%或未命中率大于1%时,说明HardParse过多,可能需要加大共享池或是使用绑定变量等优化的动作。
4.
什么是高可用?正确答案:高可用(HighAvailability,HA)也可以称为高可用性或高可用环境。HA是分布式系统架构设计中必须考虑的因素之一。HA通常是指通过设计来减少系统不能提供服务的时间。假设系统一直能够提供服务,那么这时就可以称系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,那么可以称系统的可用性是99%。很多公司(例如百度、京东等)的高可用目标都是4个9,也就是99.99%。
百度的搜索首页是业内公认高可用保障非常出色的系统,甚至人们会通过能不能访问来判断“网络的连通性”。百度高可用的服务给人留下了“网络通畅,百度就能访问”,“百度打不开,应该是网络连不上”的印象,这可以说是对百度HA最高的褒奖了。
众所周知,单点是系统高可用的最大的风险和敌人,应该尽量在系统设计的过程中避免单点。在方法论上,高可用保证的原则是“集群化”,或者称为“冗余”。只有一个单点,如果挂机服务会受影响;如果有冗余备份,那么挂了还有其他备份能够继续提供服务。RAC提供了实例级别的冗余,DG提供了数据存储级别的冗余。
若要保证系统高可用,则架构设计的核心准则是:冗余。有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。
OracleFailsafe、OPS、DG(DataGuard)、RAC和OGG均为Oracle公司提供的高可靠性解决方案,但是这几种方案之间却存在着很大区别,本书主要介绍RAC、OPS、DG和OGG。
5.
OGG的告警日志文件的位置在哪里?正确答案:OGG的告警日志文件为:$OGG_HOME/ggserr.log,如下:
6.
什么是AWR?正确答案:AWR(AutomaticWorkloadRepository,自动负载信息库)是Oracle10g引入的一个重要组件。在AWR里面存储着近一段时间内(Oracle10g默认是7天,Oracle11g及其之后的版本默认是8天)数据库活动状态的详细信息。
AWR报告是对AWR视图进行查询而得到的一份自动生成的报告,它用于显示两个快照或者两个时间点之间捕提到的数据。AWR报告其实就是一张数据库健康体检表,它显示了数据库健康的各项指标。通过AWR报告,DBA可以容易地获知数据库最近的活动状态,数据库的各种性能指标的变化趋势曲线,数据库最近可能存在的异常,分析数据库可能存在的性能瓶颈,从而对数据库进行优化。AWR使用几个表来存储采集的统计数据,所有的表都存储在新的名称为SYSAUX的特定表空间中的SYS模式下,并且以WRM$*和WRH$*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。H代表“历史数据(Historical)”,M代表“元数据(Metadata)”。在这些表上构建了几种带前缀DBA_HIST_*的视图,这些视图可以用来编写自己的性能诊断工具。视图的名称直接与表相关;例如,视图DBA_HIST_SYSMETRIC_SUMMARY是在WRH$_SYSMETRIC_SUMMARY表上构建的。AWR报告所有的数据来源于AWR视图,即以DBA_HIST开头的所有系统表。
AWR的前身是Statspack,Statspack在Oracle10g和Oracle11g中也有提供,同时和AWR一起进行了同步更新,而且Statspack是公开源代码的,因此,关于Statspack的资料和源代码,都是理解AWR的一个有用的辅助工具。
AWR主要是由MMON(ManageabilityMonitorProcess,可管理性监视器进程)和它的slave进程(Mnnn)来维护的。MMON执行很多关于AWR的任务和各种与可管理性相关的后台任务,具体包括以下功能:
1)启动slave进程Mnnn去做AWR快照。
2)当某个测量值(metrics)超过了其度量阀值(thresholdvalue)时发出alert告警。
3)为最近改变过的SQL对象捕获指标信息。
若系统不能自动生成AWR快照,则可以从以下几个方面去检查:
①参数STATISTICS_LEVEL的值必须设置为TYPICAL或者ALL。
②在“SELECTSNAP_INTERVALFROMDBA_HIST_WR_CONTROL;”的查询结果中,SNAP_NTERVAL的值不能无穷大,一般为1h,可以通过执行如下的SQL语句来修改自动生成AWR快照的时间间隔:EXECDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(NTERVAL=>60);。
③在SQL语句“SELECTD.rNSTANCE_NUMBER,(SYSDATE-D.END_INTERVAL_TIME)INTERVALFROMDBA_HIST_SNAPSHOTDWHERED.SNAP_ID=(SELECTMAX(SNAP_ID)FROMDBA_HIST_SNAPSHOT);”的查询结果中,NTERVAL列的值需大于0,若小于0,则可以手动生成几次快照来解决这个问题,SQL语句为:EXECDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();。需要注意的是,在RAC环境下该命令会对数据库的所有节点都生成一次快照。
④检查MMON进程是否HANG住,若MMON进程暂停,则AWR不可用。
7.
什么是细粒度审计?正确答案:从Oracle9i开始,引入了细粒度的对象审计,使得审计变得更为关注某个方面,并且更为精确。细粒度的审计可以在访问某些行和列时审计对表的访问,从而极大地减少审计表的记录数量。使用标准的审计,可以发现访问了哪些对象以及由谁访问,但是无法知道访问了哪些行或列。细粒度审计被称为FGA(Fine-GrainedAudit),由DBMS_FGA的PL/SQL程序来实现。
8.
Logdump工具的作用是什么?正确答案:Logdump(LogFileDumpUtility)是一个OGG自带的trail文件分析工具,而且能加深对OGG工作原理的理解,非常值得花时间来研究它。Logdump组件默认在安装目录,是个可执行文件。直接输入logdump按<Enter>键即可进入Logdump界面。进入Logdump命令行之后,可以直接输入help即可看到每一条命令,其中常用的命令如下:
(1)USERTOKEN:用来显示trail文件的一些标记信息。
(2)GGSTOKEN:显示OGG的一些标记信息。
(3)HEADERTOKEN:显示头部的标记信息。
(4)GHDRON:用来打开记录的头部信息。
(5)POSITIONFIRST|LAST|FORWARD|REVERSE:其中POSFOR|REV用于指定在trail文件中读的方向(向上|向下)。
(6)COUNTDETAIL:会显示当前TRAIL文件总的记录数量。
9.
数据库恢复过程有什么流程吗?正确答案:基本过程是,参数文件(PFILE、SPFILE)→控制文件→还原数据文件→恢复数据文件→打开数据库,详细过程可以参考随书提供的pdf里的附录中的Oracle恢复流程图。
10.
sqlnet.ora文件的作用是什么?正确答案:sqlnet.ora文件的作用类似于Linux系统的nsswitch.conf文件,通过该文件来决定如何查找一个连接中出现的连接字符串。例如,在客户端输入命令:sqlplussys/oracle@orcl,而sqlnet.ora的配置如下:
那么,客户端就会首先在tnsnames.ora文件中查找orcl的记录。若没有相应的记录,则尝试把orcl当作一个主机名,通过网络的途径去解析它的IP地址,然后去连接这个IP上GLOBAL_DBNAME为orcl的实例。
如果sqlnet.ora文件的配置如下:
那么客户端就只会从tnsnames.ora查找orcl的记录。
11.
OSI七层模型是什么?正确答案:OSI(OpenSystemlnterconnection,开放系统互连)七层网络模型称为开放式网络互联参考模型。它是国际标准组织制定的一个指导信息互联、互通和协作的网络规范。开放是指只要遵循OSI标准,位于世界上任何地方的任何系统之间都可以进行通信,开放系统是指遵循互联协议的实际系统,如电话系统。从逻辑上可以将其划分为七层模型,由下至上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中,上三层称为高层,用于定义应用程序之间的通信和人机界面;下四层称为底层,用于定义数据如何进行端到端的传输(end-to-end),物理规范以及数据与光电信号间的转换。下图所示为其分层示例图。
分层示例图
具体而言,从上往下每一层的功能如下:
(1)应用层应用层也称为应用实体,一般是指应用程序,该层主要负责确定通信对象,并确保有足够的资源用于通信。常见的应用层协议有FTP、HTTP、SNMP等。
(2)表示层表示层一般负责数据的编码以及转化,确保应用层能够正常工作。该层是界面与二进制代码间互相转化的地方,同时该层负责进行数据的压缩、解压、加密、解密等,该层也可以根据不同的应用目的将数据处理为不同的格式,表现出来就是各种各样的文件扩展名。
(3)会话层会话层主要负责在网络中的两个节点之间建立、维护、控制会话,区分不同的会话,以及提供单工(Simplex)、半双工(Halfduplex)、全双工(Fullduplex)3种通信模式的服务。NFS、RPC、XWindows等都工作在该层。
(4)传输层传输层是OSI模型中最重要的一层,它主要负责分割、组合数据,实现端到端的逻辑连接。数据在上三层是整体的,到了这一层开始被分割,这一层分割后的数据被称为段(Segment)。三次握手(Three-wayhandshake)、面向连接(Connection-Oriented)或非面向连接(Connectionless-Oriented)的服务、流量控制(Flowcontrol)等都发生在这一层。工作在传输层的一种服务是TCP/IP中的TCP(传输控制协议),另一项传输层服务是IPX/SPX协议集的SPX(序列包交换)。常见的传输层协议有TCP、UDP、SPX等。
(5)网络层网络层是将网络地址翻译为物理地址,并决定将数据从发送方路由到接收方,主要负责管理网络地址、定位设备、决定路由,路由器就工作在该层。上层的数据段在这一层被分割,封装后称为包(Packet)。包有两种:一种为用户数据包(Datapackets),是上层传下来的用户数据:另一种为路由更新包(Routeupdatepackets),是直接由路由器发出来的,用来和其他路由器进行路由信息的交换。常见的网络层协议有IP、RIP、OSPF等。
(6)数据链路层数据链路层为OSI模型的第二层,控制物理层与网络层之间的通信,主要负责物理传输的准备,包括物理地址寻址、CRC校验、错误通知、网络拓扑、流量控制、重发等。MAC地址和交换机都工作在这一层。上层传下来的包在这一层被分割封装后称为帧(Frame)。常见的数据链路层协议有SDLC、STP、帧中继、HDLC等。
(7)物理层物理层是实实在在的物理链路,它规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。它为上层协议提供了一个传输数据的物理媒体,负责将数据以比特流的方式发送、接收。常见的物理媒体有双绞线、同轴电缆等。属于物理层相关的规范有EINTIARS-232、EIA/TIARS-449、RJ-45等。
12.
常用的网络安全防护措施有哪些?正确答案:计算机网络由于分布式特性,使得它容易受到来自网络的攻击。网络安全是指“在一个网络环境里,为数据处理系统建立和采取的技术与管理的安全保护,利用网络管理控制和技术措施保护计算机软件、硬件数据不因为偶然或恶意的原因而遭到破坏、更改和泄露”。常见的网络安全防护措施有加密技术、验证码技术、认证技术、访问控制技术、防火墙技术、网络隔离技术、入侵检测技术、防病毒技术、数据备份与恢复技术、VPN技术、安全脆弱性扫描技术、网络数据存储、备份及容灾规划等。
(1)加密技术数据在传输过程中有可能因攻击者或入侵者的窃听而失去保密性。加密技术是最常用的保密安全手段之一,它对需要进行伪装的机密信息进行变换,得到另外一种看起来似乎与原有信息不相关的表示。合法用户可以从这些信息中还原出原来的机密信息,而非法用户如果试图从这些伪装后的信息中分析出原有的机密信息,要么这种分析过程根本是不可能实现的,要么代价过于巨大,以至于无法进行。
(2)验证码技术普遍的客户端交互,如留言本、会员注册等仅是按照要求输入内容,但网络上有很多非法应用软件,如注册机,可以通过浏览Internet,扫描表单,然后在系统上频繁注册,频繁发送不良信息,造成不良的影响,或者通过软件不断地尝试,盗取用户密码。而通过使用验证码技术,使客户端输入的信息都必须经过验证,从而可以有效解决别有用心的用户利用机器人(或恶意软件)自动注册、自动登录、恶意增加数据库访问、用特定程序暴力破解密码等问题。
所谓验证码是指将一串随机产生的数字或符号生成一幅图片,图片里加上一些干扰像素,由用户肉眼极易识别其中的验证码信息,输入表单提交网络应用程序验证,验证成功后才能使用某项功能。放在会员注册、留言本等所有客户端提交信息的页面,要提交信息,必须要输入正确的验证码,从而可以防止不法用户用软件频繁注册、频繁发送不良信息等。
使用验证码技术必须保证所有客户端交互部分都输入验证码,测试提交信息时不输入验证码,或者故意输入错误的验证码,如果信息都不能交,说明验证码有效,同时在验证码输入正确下提交信息,如果能提交,说明验证码功能已完善。
(3)认证技术认证技术是信息安全的一项重要内容,很多情况下,用户并不要求信息保密,只要确认网络服务器或在线用户不是假冒的,自己与他们交换的信息未被第三方修改或伪造,且网上通信是安全的。
认证是指核实真实身份的过程,是防止主动攻击的重要技术之一,是一种可靠地证实被认证对象(包括人和事)是否名副其实或者是否有效的过程,因此也称为鉴别或验证。认证技术的作用主要是通过一定的手段在网络上弄清楚对象是谁,具有什么样的特征(特征具有唯一性)。认证可以是某个个人、某个机构代理、某个软件(如股票交易系统),这样可以确定对象的真实性,防止假冒、篡改等行为。
(4)访问控制技术网络中拥有各种资源,通常可以是被调用的程序、进程,要存取的数据、信息,要访问的文件、系统,或者是各种各样的网络设备,如打印机、硬盘等。网络中的用户必须根据自己的权限范围来访问网络资源,从而保证网络资源受控地、合法地使用。
访问控制是在身份认证的基础上针对越权使用资源的防范(控制)措施,是网络安全防范和保护的主要策略。其主要任务是防止网络资源被非法使用、非法访问和不慎操作所造成破坏。它也是维护网络系统安全、保护网络资源的重要手段。
实现访问控制的关键是采用何种访问控制策略。目前主要有3种不同类型的访问控制策略:自主访问控制(DAC)、强制访问控制(MAC)和基于角色的访问控制(RBAC)。目前DAC应用最多,主要采用访问控制表(ACL)实现,如ApacheWeb服务器、JDK开发平台都支持ACL。
此外,在路由器的许多其他配置任务中都需要使用访问控制列表,如网络地址转换、按需拨号路由、路由重分布、策略路由等很多场合都需要访问控制列表。访问控制列表从概念上来讲并不复杂,复杂的是对它的配置和使用,许多初学者往往在使用访问控制列表时出现错误。
除了上述提及的网络安全技术外,其他常见的安全技术还有防火墙技术、网络隔离技术、入侵检测技术、防病毒技术、数据备份与恢复技术、VPN(VirtualPrivateNetwork,虚拟专用网络)技术、安全脆弱性扫描技术、物理安全技术、虚拟网络技术、漏洞扫描技术、主机防护技术、安全评估技术、安全审计技术、加强行政管理、完善规章制度、严格选任人员和法律介入等。但是没有一种安全技术可以完美解决网络上的所有安全问题,各种安全技术必须相互关联,相互补充,形成网络安全的立体纵深,多层次防御体系。
13.
内存管理有哪几种方式?正确答案:常见的内存管理方式有块式管理、页式管理、段式管理和段页式管理。最常用的是段页式管理。
(1)块式管理把主存分为一大块一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程序片段载入主存,就算所需的程序片段只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但优点是易于管理。
(2)页式管理用户程序的地址空间被划分成若干个固定大小的区域,这个区域被称为“页”,相应地,内存空间也被划分为若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,从而实现了离散分配。这种方式的优点是页的大小是固定的,因此便于管理;缺点是页长与程序的逻辑大小没有任何关系。这就导致在某个时刻一个程序可能只有一部分在主存中,而另一部分则在辅存中。这不利于编程时的独立性,并给换入换出处理、存储保护和存储共享等操作造成麻烦。
(3)段式管理段是按照程序的自然分界划分的并且长度可以动态改变的区域。使用这种方式,程序员可以把子程序、操作数和不同类型的数据和函数划分到不同的段中。这种方式将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
分页对程序员而言是不可见的,而分段通常对程序员而言是可见的,因而分段为组织程序和数据提供了方便,但是对程序员的要求也比较高。
分段存储主要有如下优点:
1)段的逻辑独立性不仅使其易于编译、管理、修改和保护,也便于多道程序共享。
2)段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。
3)方便分段共享,分段保护,动态链接,动态增长。
分段存储的缺点为:
1)由于段的大小不固定,因此存储管理比较麻烦。
2)会生成段内碎片,这会造成存储空间利用率降低。而且段式存储管理比页式存储管理方式需要更多的硬件支持。
正是由于页式管理和段式管理都有各种各样的缺点,因此,为了把这两种存储方式的优点结合起来,才引入了段页式管理。
(4)段页式管理段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。
1)用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。
2)用分页方法来分配和管理内存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。
14.
如何在AWR中查看每秒执行事务的个数?正确答案:该题考查的是对AWR报告的熟悉程度。AWR中每秒事务数在LoadProflle部分的最后,负载较低的数据库每秒执行事务的个数可能小于1,而对于一些负载比较大的场景,每秒可能会有50、1000、甚至高达10000的事务,所以,这个只与具体的场景有关。下图给出了某个AWR中每秒的事务数,可以看到该系统的每秒事务数为1.18。
AWR中每秒的事务数
15.
审计中BYACCESS和BYSESSION的区别是什么?正确答案:BYACCESS表示每一个被审计的操作都会生成一条AUDITTRAIL,而BYSESSION表示一个会话里面同类型的操作只会生成一条AUDITTRAIL,默认为BYSESSION。
16.
如何将文本文件或Excel中的数据导入数据库?正确答案:有多种方式可以将文本文件的数据导入到数据库中,例如,利用PLSQLDeveloper软件进行复制粘贴,利用外部表,利用SQL*Loader等方式。至于Excel中的数据可以另存为csv文件(csv文件其实是逗号分隔的文本文件),然后导入到数据库中。
下面简单介绍一下SQL*Loader的使用方式。
SQL*Loader是一个Oracle工具,能够将数据从外部数据文件装载到数据库中。SQL*Loader必须包含一个控制文件,该控制文件是SQL*Loader的中枢核心,控制文件能够控制外部数据文件中的数据如何映射到Oracle的表和列。通常与SPOOL导出文本数据方法配合使用。SQL*Loader能够接收多种不同格式的数据文件。文件可以存储在磁盘或磁带上,或记录本身可以被嵌套到控制文件中。记录格式可以是定长的或变长的,定长记录是指这样的记录:每条记录具有相同的固定长度,并且每条记录中的数据域也具有相同的固定长度、数据类型和位置。
SQL*Loader的数据导入比较专业,有各种参数及选项可供选择,经常是作为数据仓库中大型数据的导入方法选择。
SQL*Loader的优点:
1)可将导入命令写入BAT文件直接批量处理。
2)导入处理比较专业,提供各种参数选择。
3)无需操作Oracle所在服务器。
SQL*Loader也有缺点,例如,Excel文件需要另存为txt或csv格式才能导入到数据库中。
总的来说这种方法是最值得采用的,可以自动建立操作系统的批处理文件执行SQL*Loader命令,将数据导入原始接收表,并在数据库中设置触发器进行精细操作。
SQL*Loader有两种使用方法:
1)只使用一个控制文件,在这个控制文件中包含数据。
2)使用一个控制文件和一个数据文件。
SQL*Loader工具使用的命令为sqlldr,其常用参数的含义见表1。
下面给出SQL*Loader控制文件的一个示例:
其中,CHARACTERSET指定文件的编码格式,infile指定导入的文件。
接下来就是执行导入命令了,如下:
当要加载的数据文件比较大的时候该如何提高SQL*Loader的性能呢?可以从以下几个方面考虑:
1)ROWS的默认值为64,可以根据需要指定更合适的ROWS参数来指定每次提交记录数。
2)米用DIRECT=TRUE导入可以跳过数据库的相关逻辑,直接将数据导入到数据文件中,可以提高导入数据的性能。
3)通过指定UNRECOVERABLE选项,可以写少量的日志,从而提高数据加载的性能。不过,推荐在加载完成后立即对数据库或至少对表空间备份。
当加载大量数据时,最好抑制日志的产生:
将表修改为NOLOGGING,可以只产生少量的Redo日志,从而提高导入效率。在CONTROL文件中的loaddata前边加一行:UNRECOVERABLE,此选项必须要与DIRECT共同使用。对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务:
表2给出在使用SQL*Loader的过程中,一些常用的需求实现方法。
表3给出了在使用SQL*Loader的过程中,常遇到的错误及其解决方法。
关于SQL*Loader还有很多参数本书不再详述,具体可以参考官方文档。有关如何导出数据到Excel中,本书也不再详述。
17.
如何查看过去某一段时间数据库系统的会话是否有问题?正确答案:可以通过DBA_HIST_ACTIVE_SESS_HISTORY视图来进行查询,首先查询指定时间段的等待事件,下例中的SQL语句查询的是2016年5月10号下午17点30分到19点30分这段时间内数据库的等待事件和SQL的执行情况,其中,COUNTS列的值比较大的就是SQL执行时间较长的,需要特别关注:
下面的SQL语句可以查询到具体SQL的扫描操作,初步预估SQL问题:
根据以上的SQL语句可以知道,对表做的是否是全表扫描以及当时会话的等待事件是什么,然后就可以根据等待事件进行SQL分析了。
如下的SQL语句可以查询某一段时间内,会话所持有的锁信息:
如下的SQL语句可以查询系统问题时间段内的会话详情:
18.
笛卡尔积是什么?正确答案:笛卡尔积是把表中所有的记录做乘积操作,生成大量的结果,而通常结果中可用的值有限。笛卡尔积出现的原因多种多样,通常是由于连接条件缺失造成的,对笛卡尔积的使用,需要注意以下几点:
1)笛卡尔积会在下面条件下产生:
①省略连接条件或连接条件缺失。
②连接条件无效,例如:表A和表B进行连接,但连接条件为A.ID=A.ID,这里的连接条件无效。
③统计信息不准确,例如:表A有1000W的数据量,但是在统计信息中记录的是0行,这种情况下表的连接易形成笛卡尔积。
2)由于笛卡尔积中的所有表中的所有行互相连接,所以,形成笛卡尔积的结果集的记录数是组成它的各个子集的乘积。
3)为了避免笛卡尔积,需要在WHERE字句中加入有效的连接条件。
4)默认情况下,查询会返回全部行,包括重复行。
下面举一个例子说明什么是笛卡尔积。在数据库中,SCOTT.EMP表中有14行记录,SCOTT.DEPT表中有4行记录,假设没有连接条件的话,SCOTT.EMP表中的每一行都和SCOTT.DEPT表中的每一行组合成新的一行,从而形成笛卡尔积,因此,共有14*4=56行记录,如下:
19.
如何备份控制文件?正确答案:备份控制文件可以在线进行,如备份为一个二进制的文件:
备份为文本文件方式:
RMAN备份控制文件:
设置RMAN自动备份控制文件:
20.
RAC中的PublicIP、PrivateIP、VirtualIP、SCANIP、GNSVIP及HAIP的作用分别是什么?正确答案:从Oracle11g开始,安装RAC至少需要7个IP地址,两块网卡(一块公网网卡,一块私网网卡),其中public、vip和scan都在同一个网段,使用的是公网网卡,private在另一个网段,使用的是私网网卡。主机名不能包含下横线,如:RAC01是不允许的。通过执行ifconfig-a检查两个节点的网络设备名称是否一致。另外,在配置了/etc/hosts文件后,在安装RAC之前,公网、私网共4个IP可以ping通,其他3个IP不能ping通才是正常的。在安装RAC时,其IP地址的规划类似于下表。
IP地址的规划
其在/etc/hosts文件中的配置如下:
下面分别介绍一下RAC环境中的几种IP及其作用。
(1)PublicIPPublicIP称为公网IP,它是网卡上的真实IP。每个节点在安装Oracle软件之前都需要事先配置PublicIP。Oracle通过PublicIP对外提供网络服务。如果RAC中PublicIP所在的网卡设备故障,那么该节点将无法继续对外提供服务,所以,建议通过开启操作系统层面的多网卡绑定技术来实现IPFailover。如果是双节点RAC环境,那么需要在tnsnames.ora文件中写入对应两个节点的PublicIP、端口号以及通信协议。如果没有开启负载均衡功能(软/硬件),那么当tnsnames.ora文件中第一个ADDRESS对应的主机故障或关机,那么在客户端连接时,Oracle会等待一个网络超时,然后继续连接第二个ADDRSS对应的数据库实例。即使RAC一个节点依然可以对外提供服务,用户每次连接都需要等待几秒钟。网络超时会让用户体验相当不好。所以,在OraclelOgRAC中VIP(VirtualIP)的出现完美地解决了这个问题。
(2)PrivateIP对于Oracle集群,私网通信是非常重要的,因为节点和节点之间的通信绝大部分都是要通过私网来实现的。私网通信基本上可以分为两种:第一种是集群层面之间的通信;第二种是数据库实例之间的通信。第一种通信(例如:节点间的网络心跳)的主要特点是持续存在、实时性要求高,但是数据量比较小,所以通过TCP/IP协议传递就可以了。第二种通信是缓存融合(CacheFusion)造成的实例之间的数据传输,其特点是数据量很大,而且速度要求非常高,TCP/IP协议此时已经不能满足要求了,所以需要使用UDP或者RDS,同时Oracle也一直建议用户对集群的私网进行高可用性和负载均衡的配置。
与PublicIP一样,PrivateIP称为私网IP或心跳IP,它也是网卡上的真实IP,每个节点在安装Oracle集群软件之前都需要事先配置PrivateIP。PrivateIP用于集群间多节点心跳同步和CacheFusion等任务,在Oracle12c中还需要担任FlexASM的任务。当然,如果不设置PrivateIP而是由PublicIP也可以去完成这些任务。但是,这样做只会使PublicIP所在网卡负载过大,一旦网卡设备发生故障,集群将会分裂去除一部分节点保证一致性,使RAC性能不稳定。对于Oracle10g和11gR1版本的集群,Oracle并不提供私网的高可用性和负载均衡特性,而是建议用户在操作系统层面配置(例如Linuxbonding、AIXetherchannel等),从而开启操作系统层面的多网卡绑定技术实现IPFailover。从Oracle版本开始推出的HAIP技术提供了私网的高可用性和负载均衡特性,从而替代了操作系统层面的网卡绑定技术,功能更强大更兼容。
(3)VirtuaIIP(VIP)
VIP是Oracle10gRAC的新特性,称为虚拟IP。VIP是在PublicIP所在的网卡上由Oracle集群软件虚拟出来的一个IP,需要和PublicIP设置在同一个子网网段中。Oracle集群软件安装之前只需定义好(/etc/hosts文件)即可,而无需事先配置。在正常情况下,VIP和PublicIP的功能是一模一样的。后台进程PMON对每个节点的VIP所在的监听器注册实例信息,本地监听器中会看到两个地址host,一个是PublicIP,一个是VIP。当节点故障时,Oracle集群软件会把VIP自动飘逸到其他节点上,但是本地监听器却没有飘逸到其他节点上。客户端tnsnames.ora文件中host选项不再需要配置PublicIP而选择配置VIP,这样
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国草本植物行业市场现状供需分析及投资评估规划分析研究报告
- 工业园区污水处理站2025年污水处理站运行优化初步设计评估报告
- 输液急救知识试题及答案
- 企业管理合同协议书
- 新疆中考道法试题研析题及答案
- 2025年肿瘤早筛技术在癌症患者心理支持体系中的构建策略
- 奥迪家用车性能测试题及答案
- 山东省自考本试题及答案
- 同课异构试题及答案
- 园本课程试题及答案
- DBJ41-T311-2025 《人民防空节镍型不锈钢防护设备选用与安装技术标准》
- 国家开放大学《Web开发基础》形考任务实验1-5参考答案
- 大数据与法律检索-湖南师范大学中国大学mooc课后章节答案期末考试题库2023年
- FIDIC银皮书(中英文对照)
- 癫痫护理查房.ppt课件
- 军事地形学地形图基本知识
- 固体火箭发动机制造工艺
- 试卷密封线模板
- 广告牌钢结构设计计算书(共39页).doc
- 外贸委托付款协议书模板(中英文版)
- GST可视对讲系统调试手册
评论
0/150
提交评论