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.数据库名
04.恢复数据库时所需要的同步信息
记录控制文件名及路径的参数为: CONTROL_FILES
总结:
01.二进制文件
02.记录了数据库当前实例的结构和行为,数据文件日志文件的信息,维护数据库一致性
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
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
或者:
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:只要控制文件的块头
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方式打开。
8.控制文件的重建
重建数据文件步骤
01.启动数据库mount状态
startup nomount
02.创建控制文件
a.noresetlogs
b.resesetlogs
03.打开数据库
04.添加临时表空间
查看临时文件
select * from dba_temp_files;
注意:
如果使用resetlogs打开数据库,就需要对DB做一次备份。
resetlogs 命令表示一个数据库逻辑生存期的一个结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令时,SCN不会被重置,
不过oracle会重置日志序列号,而且会重置联机重做日志内容。
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)
控制文件将内部数据记录分为两类:循环重用记录 和 循环重用记录。
01.循环重用记录包含可以从控制文件中删除的信息,如:RMAN
备份记录,归档日志历史信息,循环重用记录可以被删除,并且不会影响产品数据库。
02.非循环重用记录是那些不能被删除的记录,非循环重用记录包括数据文件列表和日志文件列表。
我们可以通过重建控制文件或者设置control_file_record_keep_timp=0来重用这些记录,默认7天。
select RESETLOGS_ID,SEQUENCE# from v$archived_log order by 1;
execute sys.dbms_backup_restore.resetcfilesection(11); 注:并没有删除实际的物理归档文件。
rman target /
rman> catalog start with '归档文件路径';
11g安装后默认有两个控制文件
ASM默认只有一个控制文件
01、FS文件系统
002、拷贝一个新的控制文件
004、重启数据库,完成工作
步骤:
> create pfile='/oracle/pfile.bak' from spfile;
> show parameter control 查看控制文件路径
> shutdown immediate ;
> exit
vi /oracle/pfile.bak
>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>';得到建立语句
原文链接:https://www.f2er.com/oracle/206930.html