13oracle 参数文件、控制文件
13oracle 参数文件、控制文件 1.Oracle Parameter参数文件介绍 Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件,可以分为两咱类型。 它们是在数据库实例启动时加载的,决定了数据库的物理结构、内存、数据库的限制及系统大量 的默认值,数据库的各种物理属性、指定数据库控制文件名和路径等信息,是进行数据库设计和 性能高优的重要文件。
pfile: 初始化参数文件(Initializtion Parameters Files) 在Oracle9i之前,Oracle一直采用Pfile方式存储初始化参数,该文件为文本文件。 spfile: 服务器参数文件(Server Parameter Files) 从Oracle9i开始,Oracle引入了Spfile文件,该文件为二进制格式,不能通过手工修改。
Oracle的参数文件分为spfile二进制文件和pfile文本文件, 现在的数据库一般都是使用spfile二进制文件作为启动Oracle的参数文件, 对于spfile和pfile之间的区别: 01)spfile是二进制文件(可以通过string spfile.ora进行二进制的文件查看) 不可以使用文本编辑器修改,只能在sqlplus中使用命令动态修改参数。对于pfile文件是文本文件 ,可以直接使用文本编辑器进行修改,重启数据库后生效。 02) spfile必存储在服务端,一般在$ORACLE_HOME/dbs目录下面,对于pfile则是可以存储在客户端, 可以通过客户端的pfile启动数据库。 03)spfile和pfile之间可以动态转化,在sql命令下(不管是否已经启动数据库实例) pfile > spfile: sql> create spfile='spfile路径.ora' from pfile='pfile路径.ora' 或者: sql> create spfile from pfile='pfile路径.ora';
spfile > pfile: sql> create pfile='/oracle/inittest.ora' from spfile;
04)如果启动数据库start不指定参数文件(如sid是orcl),则会在$ORACLE_HOME/dbs目录下依次寻找 参数文件: spfile.ora > init.ora spfile<sid>.ora > spfile.ora > init<sid>.ora
unix: $ORACLE_HOME/dbs windows: %ORACLE_HOME%database
05) 我们可以指定参数文件来启动数据库(这里只能通过 pfile文件,不能是spfile文件) sql> startup pfile='/oracle/inittest.ora' 06)对于参数文件中没有指定的参数,均是采用相关参数的默认值。
spfile参数修改的命令含义: ---修改 alter system | session set parameter_name=values scope=memory | spfile | both sid='<sid>'|'*'; ---重置成默认参数 alter system reset parameter_name scope=spfile sid='<sid>'|'*'; 注: system ---v$parameter中列issys_modifiable为非flase的项可以被 alter session修改 session --- v$parameter中列isses_modifiable为非flase的项可以被 alter system修改 memory ---对当前实例生效,重启后失效 spfile ---对当前实例无效只对spfile生效,重启后生效 both ---对当前实例生效,重启后生效。 sid ---当前实例 * --- 所有实例 v$parameter: 优先级: ISINSTANCE_MODIFIABLE > ISSYS_MODIFIABLE > ISSES_MODIFIABLE
显示系统的隐藏参数 select ksppinm,ksppstvl from x$ksppi a,x$ksppcv b where a.indx=b.indx
4.控制文件的作用 4.1控制文件作用 control file 是一个较小的二进制文件,描述数据库结构,包括: 01.数据库建立时期 02.数据库名 03.数据库中所有数据文件和日志文件的文件名及路径 04.恢复数据库时所需要的同步信息 05.在打开和存取数据库进都需要访问该文件 记录控制文件名及路径的参数为: CONTROL_FILES
总结: 01.二进制文件 02.记录了数据库当前实例的结构和行为,数据文件日志文件的信息,维护数据库一致性 03.参数文件中定义了控制文件的位置和大小 04.很小的二进制文件,一般不超过100m 05.mount阶段open以后,一直在用 06.一套控制文件只能连接一个database 07.分散放置,至少一份,最多8份
4.2 控制文件的相关视图: 01. v$controlfile ----列出实例的所有控制文件的名字和状态 02. v$parameter ----列出所有参数的位置和状态(where name='control_files') 03. v$controlfile_recode_section ----提供控制文件的记录部分信息 04. show parameter control file -----列出控制文件的名字、状态、和位置
select * from v$controlfile; select name,type,value from v$parameter where name like '%control%'; select * from v$controlfile_recode_section; 查看控制文件中关于数据文件中的数据记录信息:(注意:DATAFILE一定要大写,否则会提示“末选定行”)
总结: control file 丢失(不是全部丢失),系统还可以checkpoint和switch logfile的 control file不一致,oracle马上挂掉。 control file破坏掉后,Oracle还是能够坚持一阵子,select update都没有问题,checkpoint的时候就会挂掉。
control_file_record_keep_time:
oracle基于RMAN的备份方式,可分为以catalog和nocatalog的两种方式进行备份管理,其中,catalog的方式需要 一个catlog目录数据库,这个数据库一般运行在另一台服务器上,这种方式可以用于用户有多个oracle数据库环境 同时对数据库的备份信息也可以长久的保存,也就是RMAN把对数据库A的备份恢复记录保留在catalog目录数据库中。
而基于nocatalog的备份方式,是将RMAN的备份信息放在控制文件中,由于控制文件的大小不能无限增大,所以在控制 文件中只能保留一段时间的备份恢复信息,而这个时间的控制,由一个参数为参考依据,这个参数就是 control_file_record_keep_time,通过在sqlplus中 show parameter control_file_record_keep_time可以查到这个 参数的值,默认为7天
sql> show parameter control_file_record_keep_time
5. 如何查看控制文件的内容 01 用操作系统命令查看 strings control.ctl 02、用数据库命令 alter database backup controlfile to filename; 注:filename 是一个文件的路径 03、用数据trace alter database backup controlfile to trace 注:trace 完后去那里找相应文件 a. show parameter dump 查看 background_dump_dest 的值的路径下,最后一个日期 b. > oradebug setmypid > oradebug tracefile_name 使用这两个命令后的trace文件都在这个文件下 或者: alter database backup controlfile to trace as filename 注:filename 是一个文件的路径 04、使用dump dump controlfile
> oradebug setmypid > oradebug tracefile_name > alter system set events 'immediate trace name controlf level 3'; 注: level level 1:只要控制文件的块头 level 2:只要控制文件的内容 level 3:要控制文件块头,要文件内容 level 10:要控制文件全部内容 level 12:要控制文件所有内容
6. 控制文件中关于Resetlogs和NoResetlogs的分析 NoResetlogs :日志文件没坏,用这方式 Resetlogs :日志文件坏了用这方式,会重置日志文件序列号,以前的日志文件全部不能用。
什么时候用RESETLOGS和NORESETLOGS几种情况 01.第一种情况 假设仅仅控制文件丢失,而其它文件没有丢失(主要是归档和redo),那么恢复的时候如果选择从备份中恢复控制文件。 恢复后,控制文件会去读取数据文件中与checkpoint scn对应的RBA信息来确定从那个序列的归档日志开始恢复,但打开 的时候还要以resetlogs方式打开,这样要重置归档日志的sequence,也就是说,如果你恢复时候使用了备份控制文件, 那么打开数据库必然要resetlogs的。 不完全恢复时是必须RESETLOGS,但是完全恢复时如果使用备份控制文件来恢复,那么使用RESETLOGS一样可以完全恢复。 但是丢失控制文件也可以不使用resetlogs方式打开数据库,这样也就可以避免重置日志序列号带来的不变,详情请见 第四种情况。
02.第二种情况 不完全恢复,不管是要什么样的不完全恢复,SCN,TIME,跨越REDO,都必须使用RESETLOGS.
03.第三种情况 丢失REDOLOG,这就理需要resetlogs了,因为resetlogs能够重建REDOLOG,如果你的REDOLOG、控制文件、数据文件丢失 的话,需要先恢复数据文件,然后 restore database ; recover database; alter database open resetlogs; 注意,这时候做的是不完全恢,因为REDO没有了,在recover过程中可能会报错然后自动退出RMAN,无视, alter database open resetlogs即可。
04.第四种情况 没有丢失控制文件及各种日志、仅丢失了数据文件、这种问题比较常见,有可能磁盘损坏造成数据文件丢失,等磁盘故障 排除后,需要恢复,此时的恢复就很简单了, restore database; recover database; alter database open; 就一切ok,也就是说,在不使用备份控制文件恢复的情况下,是可以使用noresetlogs方式打开数据库的。前提有一,不能 丢失日志文件。假若丢失了控制文件和数据文件,但还是想以noresetlogs打开的话,就必须手动以noresetlogs方式重建控 制文件,而且redolog的状态都必须正常,否则无法使用noresetlogs方式打开。
7.控制文件内容深入解析 8.控制文件的重建 重建数据文件步骤 01.启动数据库mount状态 startup nomount 02.创建控制文件 a.noresetlogs 在数据库控制文件里有步骤 b.resesetlogs
03.打开数据库 04.添加临时表空间
查看临时文件 select * from dba_temp_files;
注意: 如果使用resetlogs打开数据库,就需要对DB做一次备份。
resetlogs 命令表示一个数据库逻辑生存期的一个结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令时,SCN不会被重置, 不过oracle会重置日志序列号,而且会重置联机重做日志内容。
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)
8.2 不重建控制文件的情况,清理控制文件中的记录 控制文件将内部数据记录分为两类:循环重用记录 和 循环重用记录。 01.循环重用记录包含可以从控制文件中删除的信息,如:RMAN 备份记录,归档日志历史信息,循环重用记录可以被删除,并且不会影响产品数据库。 02.非循环重用记录是那些不能被删除的记录,非循环重用记录包括数据文件列表和日志文件列表。
我们可以通过重建控制文件或者设置control_file_record_keep_timp=0来重用这些记录,默认7天。
01.手工清理控制文件(清理归档文件) select RESETLOGS_ID,SEQUENCE# from v$archived_log order by 1; execute sys.dbms_backup_restore.resetcfilesection(11); 注:并没有删除实际的物理归档文件。
将归档文件注册到控制文件 rman target / rman> catalog start with '归档文件路径';
9.控制文件的镜像添加 -FS/ASM 11g安装后默认有两个控制文件 ASM默认只有一个控制文件
01、FS文件系统 001、备份信息,关闭数据库 002、拷贝一个新的控制文件 003、生成并修改初始化参数文件,添加新的控制文件 004、重启数据库,完成工作
步骤: > create pfile='/oracle/pfile.bak' from spfile; > show parameter control 查看控制文件路径 > shutdown immediate ; > exit 拷贝一个控制文件,重命名为控制文件3 vi /oracle/pfile.bak .control_file参数,添加新的控制文件3 >startup mount pfile='/oracle/pfile.bak' > create spfile from pfile='/oracle/pfile.bak' > shutdown immediate ; > exit > sqlplus "/as sysdba" > startup >show parameter control;
02、ASM文件系统 001、停止数据库 002、在nomount模式下设置控制文件参数 003、使用RMAN进行新的控制文件创建镜像 004、重启数据库并检查。
步骤: > create pfile='/oracle/pfile.asm' from spfile; > show parameter control_files > shutdown immediate ; > startup nomount; > alter system set control_files='+SYSTEM/itpuxdb/control/current.序列号',‘dgdata1’,'dgdata2' scope=spfile;
rman target / rman> restore controlfile from '+SYSTEM/itpuxdb/control/current.序列号' ---恢复数据文件
sqlplus "/as sysdba" > shutdown immediate; > startup > show parameter control_files
10.控制文件的备份 01.热备 alter database backup controlfile to '/oracle/control.bak'; alter database backup controlfile to trace as '/oracle/control.bak';
02.RMAN backup current controlfile; backup database include current controlfile; configure controlfile autobackup on ;
11.控制文件的恢复 01.恢复思路 控制文件的恢复管理过程 控制文件版本不一致的问题 用新的版本的控制文件覆盖旧版本的控制文件 直接修改参数control_file
控制文件丢失如何恢复? 归档模式下 当归档日志全的时候,先做全备,然后使用备份的控制文件恢复即可。 当归档日志不全的时候,先全备,然后建立新的控制文件即可。 非归档模式下 先做全备,然后建立新的控制文件即可
用控制文件语句进行恢复 数据库处于mount及open状态 执行alter database backup controlfile to trace as '<dir>';得到建立语句 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |