http://blog.itpub.net/9240380/
问题现象:
同事在QQ聊天时,提出了如下问题:
同事
RMAN> restore spfile from '/u01/app/oracle/product/11.2.0/db_1/dbs/0gph36hl_1_1';
Starting restore at 28-AUG-14
using channel ORA_DISK_1
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/app/oracle/product/11.2.0/db_1/dbs/0gph36hl_1_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/28/2014 14:16:06
ORA-19870: error while restoring backup piece /u01/app/oracle/product/11.2.0/db_1/dbs/0gph36hl_1_1
ORA-32015: unable to restore SPFILE
ORA-17502: ksfdcre:4 Failed to create file +DGDATA/kevy/parameterfile/spfile.272.849898697
ORA-15046: ASM file name '+DGDATA/kevy/parameterfile/spfile.272.849898697' is not in single-file creation form
同事
恢复spfile恢复不出来
同事
谁帮看看
测试问题:
1,查看spfile路径
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /11204rdbms/product/11.2.0/db_
1/dbs/spfileora11204.ora
2,备份数据库spfile
-bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Aug 28 03:51:14 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11204 (DBID=1387584650)
RMAN> backup spfile format '+DATA/ora11204/spfilebak_%u';
Starting backup at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-AUG-14
channel ORA_DISK_1: finished piece 1 at 28-AUG-14
piece handle=+DATA/ora11204/spfilebak_02ph242h tag=TAG20140828T035143 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
Finished backup at 28-AUG-14
Starting Control File and SPFILE Autobackup at 28-AUG-14
piece handle=/11204rdbms/product/11.2.0/db_1/dbs/c-1387584650-20140828-00 comment=NONE
Finished Control File and SPFILE Autobackup at 28-AUG-14
3,删除当前spfile
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, Data Mining and Real Application Testing options
-bash-3.2$ mv /11204rdbms/product/11.2.0/db_1/dbs/spfileora11204.ora /11204rdbms/product/11.2.0/db_1/dbs/spfileora11204.ora.orig
-bash-3.2$
4,恢复spfile
启动数据库提示找不到spfile
-bash-3.2$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 28 03:58:02 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATA/ora11204/spfileora11204.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora11204/spfileora11204.ora
ORA-15056: additional error message
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora11204/spfileora11204.ora
ORA-15173: entry 'spfileora11204.ora' does not exist in directory 'ora11204'
ORA-06512: at line 4
SQL> exit
Disconnected
5,数据库未启动情况不能恢复spfile
-bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Aug 28 03:58:44 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN> restore spfile from '+DATA/ora11204/spfilebak_02ph242h';
Starting restore at 28-AUG-14
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/28/2014 03:59:10
RMAN-12010: automatic channel allocation initialization failed
RMAN-06403: could not obtain a fully authorized session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
6,手工创建最简单的pfile
-bash-3.2$ pwd
/11204rdbms
-bash-3.2$ env|grep SID
ORACLE_SID=ora11204
-bash-3.2$ more initora11204.ora
db_name=ora11204
7,使用上述的手工spfile启动数据库到nomount
-bash-3.2$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 28 04:05:10 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/11204rdbms/initora11204.ora'
ORACLE instance started.
Total System Global Area 217157632 bytes
Fixed Size 2251816 bytes
Variable Size 159384536 bytes
Database Buffers 50331648 bytes
Redo Buffers 5189632 bytes
SQL>
8,在RMAN界面下恢复spfile
-bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Aug 28 04:06:23 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11204 (not mounted)
RMAN> restore spfile to '/11204rdbms/product/11.2.0/db_1/dbs/spfileora11204.ora' from '+DATA/ora11204/spfilebak_02ph242h';
Starting restore at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP +DATA/ora11204/spfilebak_02ph242h
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 28-AUG-14
9,关闭数据库
SQL> shutdown abort
ORACLE instance shut down.
10,启动数据库
SQL> startup
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 553650072 bytes
Database Buffers 1577058304 bytes
Redo Buffers 4923392 bytes
Database mounted.
Database opened.
11,确认spfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /11204rdbms/product/11.2.0/db_
1/dbs/spfileora11204.ora
12,备份spfile
-bash-3.2$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Aug 28 04:11:00 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11204 (DBID=1387584650)
RMAN> backup spfile format '+DATA/ora11204/spfilebak_%u_2';
Starting backup at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=33 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-AUG-14
channel ORA_DISK_1: finished piece 1 at 28-AUG-14
piece handle=+DATA/ora11204/spfilebak_04ph257v_2 tag=TAG20140828T041142 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:12
Finished backup at 28-AUG-14
Starting Control File and SPFILE Autobackup at 28-AUG-14
piece handle=/11204rdbms/product/11.2.0/db_1/dbs/c-1387584650-20140828-01 comment=NONE
Finished Control File and SPFILE Autobackup at 28-AUG-14
13,关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
14,通过rman把spfile存储到asm中
RMAN> restore spfile to '+DATA/ora11204/spfile.ora' from '+DATA/ora11204/spfilebak_04ph257v_2';
Starting restore at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP +DATA/ora11204/spfilebak_04ph257v_2
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 28-AUG-14
发现spfile还是在文件系统中,并没有还原到ASM上
15,查阅官方文档,发现数据库不能覆盖正在使用的SPFILE,所以没办法移动文件
|
SPFILE [TO [PFILE]'filename']
|
Restores a primary or standby server parameter file to the location from which it was backed up (default), or to a different location specified by the TO clause. RMAN cannot overwrite a server parameter file currently in use by the target database.
Specify UNTIL or TAG options of RESTORE to restore older versions of the server parameter file. By default RMAN restores the most current server parameter file.
If the server parameter file is lost, connect to the target (and catalog if used) and then run SET DBID. Run STARTUP FORCE NOMOUNT before running RESTORE SPFILE (with FROM AUTOBACKUP if in NOCATALOG mode). Then run STARTUP FORCE to restart the database with the restored server parameter file.
See Also: "Restrictions and Usage Notes for the SET DBID Command"
|
16,尝试恢复spfile到指定路径的pfile
RMAN> restore spfile to pfile '/11204rdbms/product/11.2.0/db_1/dbs/zxy_pfile.ora' from '+DATA/ora11204/spfilebak_04ph257v_2';
Starting restore at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP +DATA/ora11204/spfilebak_04ph257v_2
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 28-AUG-14
17,通过上述的pfile创建间接生成在ASM中的spfile
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount pfile
SP2-0714: invalid combination of STARTUP options
SQL> startup nomount pfile=''/11204rdbms/product/11.2.0/db_1/dbs/zxy_pfile.ora'
LRM-00109: could not open parameter file ''/11204rdbms/product/11.2.0/db_1/dbs/zxy_pfile.ora'
ORA-01078: failure in processing system parameters
SQL> startup nomount pfile='/11204rdbms/product/11.2.0/db_1/dbs/zxy_pfile.ora'
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 553650072 bytes
Database Buffers 1577058304 bytes
Redo Buffers 4923392 bytes
SQL> create spfile='+DATA/ora11204/ora11204_spfile.ora' from pfile='/11204rdbms/product/11.2.0/db_1/dbs/zxy_pfile.ora'
2 ;
File created.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
还是不成功
SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATA/ora11204/spfileora11204.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora11204/spfileora11204.ora
ORA-15056: additional error message
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora11204/spfileora11204.ora
ORA-15173: entry 'spfileora11204.ora' does not exist in directory 'ora11204'
ORA-06512: at line 4
18,第3次尝试其它方法还原spfile到ASM
18.1,查看spfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /11204rdbms/product/11.2.0/db_
1/dbs/spfileora11204.ora
SQL>
18.2,根据spfile生成pfile
SQL> create pfile='/11204rdbms/ora11204pfile.ora' from spfile;
File created.
18.3,移动spfile到asm
SQL> create spfile='+DATA' from pfile='/11204rdbms/ora11204pfile.ora';
File created.
18.4,查看最新生成的asm spfile
ASMCMD> pwd
+data/ora11204/parameterfile
ASMCMD> ls
spfile.268.856758321
spfile.269.856759467
spfile.270.856760561
18.5查看initora初始化参数文件,你会发现仍指向旧的位置
-bash-3.2$ pwd
/11204rdbms/product/11.2.0/db_1/dbs
-bash-3.2$ more initora11204.ora
SPFILE='+DATA/ora11204/spfileora11204.ora'
18.6,修正指向新的ASM位置
-bash-3.2$ more initora11204.ora
SPFILE='+data/ora11204/parameterfile/spfile.270.856760561'
18.7,删除如下的spfile
-bash-3.2$ pwd
/11204rdbms/product/11.2.0/db_1/dbs
-bash-3.2$ ll
total 28824
-rw-r----- 1 oracle11204 asmadmin 9830400 Aug 28 03:52 c-1387584650-20140828-00
-rw-r----- 1 oracle11204 asmadmin 9830400 Aug 28 04:12 c-1387584650-20140828-01
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28395
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28424
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28426
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28531
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28539
drwxr-x--- 2 oracle11204 asmadmin 4096 Mar 26 01:27 core_28544
-rw-rw---- 1 oracle11204 asmadmin 1544 Mar 25 05:58 hc_ora11204.dat
-rw-r--r-- 1 oracle11204 oinstall 2851 May 15 2009 init.ora
-rw-r----- 1 oracle11204 oinstall 59 Aug 28 05:06 initora11204.ora
-rw-r----- 1 oracle11204 asmadmin 24 Mar 25 06:00 lkORA11204
-rw-r----- 1 oracle11204 asmadmin 2560 Aug 28 04:35 newly_spfile.ora
-rw-r----- 1 oracle11204 oinstall 1536 Mar 25 06:02 orapwora11204
-rw-r----- 1 oracle11204 asmadmin 9748480 Aug 28 04:12 snapcf_ora11204.f
-rw-r----- 1 oracle11204 asmadmin 2560 Aug 28 04:55 spfileora11204.ora
-rw-r--r-- 1 oracle11204 asmadmin 611 Aug 28 04:41 zxy_pfile.ora
-bash-3.2$ mv spfileora11204.ora spfileora11204.ora.orig
18.8,重启数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 553650072 bytes
Database Buffers 1577058304 bytes
Redo Buffers 4923392 bytes
Database mounted.
Database opened.
18.9,查看spfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/ora11204/parameterfile/s
pfile.270.856760561
19,备份spfile到文件系统
RMAN> backup spfile format '/11204rdbms/spfilebackup_%u';
Starting backup at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-AUG-14
channel ORA_DISK_1: finished piece 1 at 28-AUG-14
piece handle=/11204rdbms/spfilebackup_06ph290t tag=TAG20140828T051612 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 28-AUG-14
Starting Control File and SPFILE Autobackup at 28-AUG-14
piece handle=/11204rdbms/product/11.2.0/db_1/dbs/c-1387584650-20140828-02 comment=NONE
Finished Control File and SPFILE Autobackup at 28-AUG-14
20,关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
21,手工删除asm spfile
ASMCMD> cd +DATA/ora11204/parameterfile/
ASMCMD> ls
spfile.268.856758321
spfile.269.856759467
spfile.270.856760561
ASMCMD> rm spfile.270.856760561
ASMCMD> ls
spfile.268.856758321
spfile.269.856759467
22,启动提示找不到spfile
SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+data/ora11204/parameterfile/spfile.270.856760561'
ORA-17503: ksfdopn:2 Failed to open file +data/ora11204/parameterfile/spfile.270.856760561
ORA-15056: additional error message
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora11204/parameterfile/spfile.270.856760561
ORA-15173: entry 'spfile.270.856760561' does not exist in directory 'parameterfile'
ORA-06512: at line 4
23,手工创建pfile
-bash-3.2$ more initora11204.ora
db_name=ora11204
24,采用手工spfile启动数据库到nomount
SQL> startup nomount pfile='/11204rdbms/initora11204.ora'
ORACLE instance started.
Total System Global Area 217157632 bytes
Fixed Size 2251816 bytes
Variable Size 159384536 bytes
Database Buffers 50331648 bytes
Redo Buffers 5189632 bytes
25,在rman恢复spfile
RMAN> restore spfile from '/11204rdbms/spfilebackup_06ph290t';
Starting restore at 28-AUG-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /11204rdbms/spfilebackup_06ph290t
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/28/2014 05:23:42
ORA-19870: error while restoring backup piece /11204rdbms/spfilebackup_06ph290t
ORA-32015: unable to restore SPFILE
ORA-17502: ksfdcre:4 Failed to create file +DATA/ora11204/parameterfile/spfile.270.856760561
ORA-15046: ASM file name '+DATA/ora11204/parameterfile/spfile.270.856760561' is not in single-file creation form
26,根据startup提示报错指定恢复spfile到目标地,同样报错
RMAN> restore spfile to '+data/ora11204/parameterfile/spfile.270.856760561' from '/11204rdbms/spfilebackup_06ph290t';
Starting restore at 28-AUG-14
using channel ORA_DISK_1
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /11204rdbms/spfilebackup_06ph290t
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/28/2014 05:24:50
ORA-19870: error while restoring backup piece /11204rdbms/spfilebackup_06ph290t
ORA-32015: unable to restore SPFILE
ORA-17502: ksfdcre:4 Failed to create file +DATA/ora11204/parameterfile/spfile.270.856760561
ORA-15046: ASM file name '+DATA/ora11204/parameterfile/spfile.270.856760561' is not in single-file creation form
27,查看未恢复前的asmcmd中的信息
ASMCMD> pwd
+data
ASMCMD> ls
ORA11204/
28,不指定目标地,仅指定磁盘组名称,还原成功
RMAN> restore spfile to '+data' from '/11204rdbms/spfilebackup_06ph290t';
Starting restore at 28-AUG-14
using channel ORA_DISK_1
channel ORA_DISK_1: restoring spfile from AUTOBACKUP /11204rdbms/spfilebackup_06ph290t
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 28-AUG-14
29,恢复spfile后asmcmd信息,可见多了db_unknown目录
ASMCMD> ls
ORA11204/
ASMCMD> ls
DB_UNKNOWN/
ORA11204/
30,如下为恢复出来的spfile
ASMCMD> pwd
+data/DB_UNKNOWN/parameterfile
ASMCMD> ls
SPFILE.270.856763209
31,关闭数据库
SQL> shutdown abort
ORACLE instance shut down.
32,调整$ORACLE_HOME/dbs/initora11204.ora
-bash-3.2$ pwd
/11204rdbms/product/11.2.0/db_1/dbs
-bash-3.2$ more initora11204.ora
SPFILE='+data/ora11204/parameterfile/spfile.270.856760561'
-bash-3.2$ more initora11204.ora
SPFILE='+data/DB_UNKNOWN/parameterfile/SPFILE.270.856763209'
33,启动数据库
SQL> startup
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 553650072 bytes
Database Buffers 1577058304 bytes
Redo Buffers 4923392 bytes
Database mounted.
Database opened.
34,查看spfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/db_unknown/parameterfile
/spfile.270.856763209
测试结论
1,spfile可以在文件系统及asm之间自由移动
2,spfile由文件系统移动到asm一定要及时调整$ORACLE_HOME/dbs/initora11204.ora内容
指向最新的spfile文件
3,如果spfile是存储在asm,一旦损坏,恢复时,只需指定到磁盘组即可,最终产生的spfile文件名
由asm内部动态生成,并且最新生成的文件名称和原来的spfile名称不同