分类: Oracle
2018-07-11 09:47:27
【摘要】
正常启动一个Oracle实例时,需要在指定的目录下提供一个参数文件,告诉Oracle一些关于实例的配置信息,例如分配多大的内存、控制文件的位置、允许打开的进程数和会话数等等。如果参数文件不存在或损坏,那么可能直接导致实例不可用,因此有必要对参数文件进行备份,保证数据库的安全。
本文转自IT培训机构-学领未来
【正文】
正常启动一个Oracle实例时,需要在指定的目录(UNIX:$ORACLE_HOME/dbs,Windows:%ORACLE_HOME%\database)下提供一个参数文件,告诉Oracle一些关于实例的配置信息,例如分配多大的内存、控制文件的位置、允许打开的进程数和会话数等等。如果参数文件不存在或损坏,那么可能直接导致实例不可用。
对于参数文件不存在或损坏的影响,一般有两种情况:
情况一:实例启动前,参数文件不存在或损坏。
如果没有提供必要的参数文件就启动实例,那么一般会看到相关的错误(ORA-01078、LRM-00109),提示无法打开参数文件。
情况二:实例启动后,参数文件被损坏。
当实例通过参数文件正常启动后,因某些原因导致参数文件丢失或损坏,实例可以正常运行,但无法查看、修改参数。
Oracle的参数文件可以在系统层面进行备份,利用cp等命令将参数文件拷贝到备份服务器等地方。
也可以通过Oracle的RMAN工具进行备份,如:
RMAN> backup spfile;
启动 backup 于 01-7月 -18
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=159 实例=orcl11g1 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 01-7月 -18
通道 ORA_DISK_1: 已完成段 1 于 01-7月 -18
段句柄=+FRA/orcl11g/backupset/2018_07_01/nnsnf0_tag20180701t142151_0.261.980346113 标记=TAG20180701T142151 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 01-7月 -18
只要备份时包含了1号数据文件,RMAN会自动将控制文件和参数文件进行备份,如:
RMAN> backup datafile 1;
启动 backup 于 01-7月 -18
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=27 实例=orcl11g1 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00001 名称=+DATA/orcl11g/datafile/system.256.977265057
通道 ORA_DISK_1: 正在启动段 1 于 01-7月 -18
通道 ORA_DISK_1: 已完成段 1 于 01-7月 -18
段句柄=+FRA/orcl11g/backupset/2018_07_01/nnndf0_tag20180701t144228_0.264.980347349 标记=TAG20180701T144228 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:15
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 01-7月 -18
通道 ORA_DISK_1: 已完成段 1 于 01-7月 -18
段句柄=+FRA/orcl11g/backupset/2018_07_01/ncsnf0_tag20180701t144228_0.265.980347365 标记=TAG20180701T144228 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 01-7月 -18
另外,如果启用了控制文件自动备份,控制文件和参数文件在适当时间点会自动备份。
当实例启动前,参数文件不存在或损坏,那么需要先使用备份进行恢复。因为没有涉及到重做日志,准确的说应该是还原参数文件。根据备份方式的不同,恢复的方式也有所不同,其目的都是将原来的参数文件放回指定位置。
对于在系统层面的备份,只需要将备份拷贝回原来的文件即可。
如果是通过RMAN工具进行的备份,则需要利用RMAN进行恢复,具体步骤如下:
在RMAN下启动实例到NOMOUNT状态,如:
RMAN> startup nomount;
说明:在没有参数文件的时,可以通过RMAN工具利用Oracle内置的参数文件启动一个中间实例(SID为DUMMY)来完成恢复。
执行restore spfile from [autobackup|’备份集路径’],如:
RMAN> restore spfile from autobackup;
关闭实例后,以还原的参数文件启动实例,如:
RMAN> shutdown immediate;
RMAN> startup;
在有备份的情况下,当发现参数文件丢失或损坏时,实例处于正常运行状态,那么还原起来就简单多了,只需从3.1.2开始执行即可,但如果实例是通过spfile启动的,还需要添加”to ‘恢复路径’”来指定还原的路径,如:
RMAN> restore spfile to ‘/home/oracle/spfileorcl11g.ora’ from autobackup;
最后将还原出来的参数文件放回到指定位置即可。
在没有备份的情况下,可直接从内存中创建一个spfile参数文件,但这有个问题,创建的spfile文件名称不能和已存在的相同,如:
SQL> CREATE SPFILE FROM MEMORY;
CREATE SPFILE FROMMEMORY
*
ERROR at line 1:
ORA-32002: cannotcreate SPFILE already being used by the instance
这时需创建一个不同名称的spfile,然后再改成正确的spfile名称,如:
SQL> create spfile ='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfile_tmp.ora' from memory;
File created.
最后把刚才创建的spfile改成正确的名称spfile.ora,如:
[oracle@pri dbs]$mv spfile_tmp.ora spfileorclpri.ora
备份大于一切。不论是参数文件还是其它数据库文件,我们都应该对其进行有效的备份,并定期进行恢复演练,以保证在出现问题时,还有办法对其进行还原。