您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 体系结构和数据库原理
物理结构:数据文件,日志文件,控制文件,参数文件数据文件(datafile)是物理存储oracle数据库数据的文件。其特点如下:1.每一个数据文件只与一个数据库相联系。2.数据文件一旦建立则不能修改其大小。3.一个表空间可包含一个或多个数据文件。日志文件(LogFile)记录所有对数据库数据的修改,以备恢复数据时使用。其特点如下:1.没个数据库至少包含两个日志文件组。2.日志文件组以循环方式进行写操作。3.每一个日志文件成员对应一个物理文件。1。查询正在工作的日志组select*fromv$log;其中status列值为current的当前正在使用的日志文件组,inactive表示没有使用的组。ARCHIVED列值为YES表示已经归档,no表示未归档。SEQUENCE列值表示日志序列号,每进行一次日志切换就+1。这是我的查询结果:GROUP#THREAD#SEQUENCE#BYTESMEMBERSARCHIVEDSTATUSFIRST_CHANGE#FIRST_TIME--------------------------------------------------------------------------------------------------1117524288001YESINACTIVE9866722010-10-212118524288001NOCURRENT10268332010-10-253116524288001YESINACTIVE9540692010-10-21然后进行强制日志切换,ALTERSYSTEMSWITCHLOGFILE;GROUP#THREAD#SEQUENCE#BYTESMEMBERSARCHIVEDSTATUSFIRST_CHANGE#FIRST_TIME--------------------------------------------------------------------------------------------------1117524288001YESINACTIVE9866722010-10-212118524288001YESACTIVE10268332010-10-253119524288001NOCURRENT10482632010-10-25可以看到现在进行归档的日志文件组是3#组,而且SEQUENCE#号增加了1(18-19),同时你可以看到STATUS列值2#GROUP对应的值变成了ACTIVE,该值表示不在使用但是归档还没完成的组。2。不断进行日志切换,三个日志文件组全部换完又要回到第一个日志组,这里就出现一个问题:第一个日志文件组的内容会被覆盖。这里涉及到一个知识点:数据库的归档模式。oracle数据库拥有2种归档模式,ARCHIVELOG和NOARCHIVELOG。刚才我们的实验环境是在ARCHIVELOG下进行,所以它切换到第一组覆盖的时候,它原本第一组日志的内容就将被归档到磁盘中。这样相对于数据库恢复来说是很有必要的。查看你的数据库的归档模式2种方法:1.selectname,log_modefromv$database;2.连接到sqlplus,然后执行SQLARCHIVELOGLIST;SQLarchiveloglist数据库日志模式存档模式自动存档启用存档终点USE_DB_RECOVERY_FILE_DEST最早的联机日志序列16下一个存档日志序列18当前日志序列18通过语句:selectrecid,stamp,namefromv$archived_log;可以查看归档日志的信息。如果你的database正处在NOARCHIVELOG下,那么你的数据库是很不安全的,因为它会丢失日志信息。这里有个方法可以让你的数据库从NOARCHIVELOG下转变成ARCHIVELOG模式。SQLshutdownimmediate;SQLstartupmount;SQLalterdatabasearchivelog;SQLalterdatabaseopen;SQLarchivelogstart;顺便提下关闭归档模式的步骤SQLstartupmount;SQLalterdatabasenoarchivelog;SQLalterdatabaseopen;、注意:9i和10g的区别=》9i中需要修改初始化参数log_archive_start=true而10g中已经废弃该参数3。对日志文件组的一些管理a.增加或者删除日志文件组。增加:alterdatabaseaddlogfilegroupnumber('xxx\xx\xx.log','xxx2\xxx\xx2.log'....)注意这里的日志别放在一个磁盘下;一开始增加的日志文件,日志序列为0,状态为UNUSED,因为没有使用过,进行切换后,就可以正常使用了。删除:alterdatabasefroplogfilegroupnumber;执行完命令后,请去相应目录下删除对应物理文件。不能删除仅有的2个文件组;不能删除正在活动的文件组;不能删除还没有归档的文件组。b.增加或删除文件日志组的日志成员增加:alterdatabaseaddlogfilemember'xxxx\xxx\xx.log'togroupnumber;删除:alterdatabasedroplogfilemember'xxxx\xxx\xx/log',同样执行完后请去目录下删除相应文件,注意这里不能删除日志组中唯一的日志文件,可以使用删除组的方法直接删除组;不能删除没有归档或者还在活动的日志;也不能删除刚增加,一次还没用过的日志成员。c.移动你的日志文件移动你的日志文件或者修改它的名字可以用下面的方法:alterdatabaserenamefile'xxx\xxxx\xx.log'to'xxxx\xxx\xx.log';注意2点:一不能移动正在使用的文件;二确保执行命令前把目标文件已经移动到新目录下了。d.清除日志文件数据这里的清除是说删除日志文件内的内容。主要用于数据库无法进行有效恢复的时候。比如你标识为current的日志文件组所有文件都坏了;又或者有2个日志文件组,每组一个成员,一组日志文件坏掉了,这时候需要清除的时候增加UNARCHIVED选项,不进行归档。具体方法:SQLALTERDATABASECLEARLOGFILE'XXX\XXX\XX.LOG';ORALTERDATABASECLEARUNARCHIVEDLOGFILEGROUPNUMBER;SQLRECOVERDATABASEUNTILCANCEL;SQLALTERDATABASEOPENRESETLOGS;这里再提一个检查点的小问题。检查点其实是一个后台进程,用来保证所有修改过的数据库缓冲区的东西都写入数据库文件。它由参数LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL来决定。检查点完成后,系统将更新数据库头和控制文件,也保证数据库的同步。这里主要体现在一个系统改变号上SCN(也叫检查点号)。它分别出现在v$log表的FIRST_CHANGE#列和V$DATAFILE的CHECKPOINT_CHANGE#列还有V$DATABASE的CHECKPOINT_CHANGE#上。只要说明三个值相同,那么数据库就没有不同步的现象。否则就要进行介质恢复。这里可以通过日志切换改变新的检验点号。当然引起SCN改变的情况还有很多。控制文件:SQLselect*fromv$controlfile;控制文件是一个二进制的文件,用于描述数据物理结构,它包含如下内容:1.数据库名称及数据库唯一标识2.数据库创建时间3.数据文件和日志文件的标识,包括名称和路径4.数据库恢复需要的同步信息5.决定数据库规模的最大化参数,比如MAXLOGFILE、MAXLOGMEMBERS等....以上信息都可以在数据字典v$databaseselectdbidas数据库标识,nameas数据库名,createdas创建时间,CHECKPOINT_CHANGE#as同步SCNfromv$database;数据库标识数据库名创建时间同步SCN---------------------------------------1259924187ORCL2010-10-11930423对于控制文件本身的信息,可以通过V$CONTROLFILE来查select*fromv$controlfile;selectvaluefromv$parameterwherename='control_files';对于控制文件里面的内容信息,可以通过v$controlfile_record_section来查看。由于控制文件的重要,我们有必要在不同的磁盘不同地方镜像出几份控制文件(windows下默认几个控制文件在一个目录下),手工镜像控制文件的主要方法如下:1.修改参数文件内部的指数control_files在Oracle数据库系统中,是通过这个初始化参数来打开控制文件的。即这个初始化参数中指定有多少个控制文件,分别存放在那里,到时候数据库就会更新多少控制文件。不过需要注意的是,一般数据库在使用时,只打开一个控制文件,并且你一定要包含全部的老控制文件和新的控制文件,要绝对路径。2.关闭数据库(shutdown)以及相关服务。这个初始化参数设置以后,还需要关闭数据库以及相关服务后才能够进行下一步的操作。3.复制控制文件并改名。为了确保所有控制文件能够互为镜像,完全相同,最好能够在关闭数据库的情况下,将原先的控制文件复制到一个新的位置,然后进行重命名。注意这里的位置与控制文件的名字,必须同第一步指定的路径与名字相同。4.重启服务和数据库5.查看是否有效select*fromv$controlfile;大概就介绍物理结构到这,这三者之间关系就是参数文件v$parameter==》控制文件v$controlfile==》(数据文件v$datafile+日志文件v$log)系统全局区:共享池,数据缓冲池(v$sgainfo),日志缓冲池共享池是系统全局区(SGA)保留的区,用于存储如SQL、PL/SQL存储过程及包、数据字典、锁、字符集信息、安全属性等。共享池包含有:1)库高速缓存(LibraryCache);2)字典高速缓冲区(DictionaryCache)。库高速缓存(LibraryCache)该区包含有:1)共享SQL区(SharedPoolArea);2)私有SQL区(PrivateSQLArea);3)PL/SQL存储过程及包(PL/SQLProcedureandPackage);4)控制结构(ControlStructure)。也就是说该区存放有经过语法分析并且正确的SQL语句,并随时都准备被执行。字典高速缓冲区(DataDictionaryCache)又称为数据字典缓存区或数据行缓存区,用来存储经常使用的数据库中的对象定义信息,其中包括数据库文件,表,索引,列,用户,权限以及其他对象信息。数据缓冲存储区主要用来存储经常使用的数据。这些数据既可以是从数据文件中读出来的数据,也可以使已经写到数据文件中的数据。当系统处理某个查询语句时,服务器经常在数据缓冲存储区中查到需要的数据。如果在数据缓冲存储区中没有找到所需要的数据,那么服务器进程从数据文件读取所需要的数据,并且把这些数据的拷贝存放在数据缓冲存储区中。如果以后再需要这些数据,那么服务器进程就可以在数据缓冲存储区中直接找到需要的数据,不必再请求物理的数据读取操作。因此,使用数据缓冲存储区可以提高查询语句的处理效率。日志缓冲区记录了服务器进程对数据文件所作的改变,以及数据改变的位置。日志缓冲区是由系统连续使用和记录的。如果日志缓冲区被填写满了,那么需要把这些日志缓冲区中的内容写到日志文件中,然后再重新开始记录服务器进程对数据的任何改变。进程:用户进程,服务器进程,后台进程每当数据库启动的时
本文标题:体系结构和数据库原理
链接地址:https://www.777doc.com/doc-4947721 .html