7 x 24 在线支持!
Oracle 在drop一个alias后数据库启动时ORA-01157: 无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
ORA-01157: 无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件
ORA-01157 oerr ora 1157 01157, 00000, "cannot identify/lock data file %s - see DBWR trace file" // *Cause: The background process was either unable to find one of the data // files or failed to lock it because the file was already in use. // The database will prohibit access to this file but other files will // be unaffected. However the first instance to open the database will // need to access all online data files. Accompanying error from the // operating system describes why the file could not be identified. // *Action: Have operating system make file available to database. Then either // open the database or do ALTER SYSTEM CHECK DATAFILES.
适用于:
Oracle Server – Enterprise Edition – 版本 10.2.0.1 到 10.2.0.3 [Release 10.2]
本文信息适用于任何平台。
此问题可能出现在任何平台。
症状
从ASM实例中删除数据文件的Alias 导致使用该Alias的RDBMS实例在下一次启动失败,显示ORA-01157。
原因
你不应当drop Alias,因为数据库实例通过数据文件的别名来引用它,一旦创建了别名就不再使用系统生成名称。
从RDBMS 实例中:
Create TABLESPACE test DATAFILE ‘+DG1/ORCL/DATAFILE/test’ SIZE 50m;
ALTER TABLESPACE test ADD DATAFILE ‘+DG1/ORCL/DATAFILE/test2’ size 49m;
从ASM 实例中:
ASMCMD> cd +DG1/ORCL/DATAFILE
ASMCMD> ls
SYSAUX.257.627668821
SYSTEM.256.627668819
UNDOTBS1.258.627668821
USERS.259.627668821
ASMCMD> pwd
+DG1/ORCL/DATAFILE
ASMCMD>
从RDBMS实例中:
SQL>Create TABLESPACE test DATAFILE ‘+DG1/ORCL/DATAFILE/test’ SIZE 50m;
从ASM实例中:
ASMCMD> ls
SYSAUX.257.627668821
SYSTEM.256.627668819
TEST.265.627767963
UNDOTBS1.258.627668821
USERS.259.627668821
test
ASMCMD>
从RDBMS实例中:
ALTER TABLESPACE test ADD DATAFILE ‘+DG1/ORCL/DATAFILE/test2’ size 49m;
从ASM 实例中:
ASMCMD> ls
SYSAUX.257.627668821
SYSTEM.256.627668819
TEST.265.627767963
TEST.266.627768241
UNDOTBS1.258.627668821
USERS.259.627668821
test
test2
ASMCMD>
SQL> select name from v$asm_alias;
NAME
————————————————
ORCL
DATAFILE
SYSTEM.256.627668819
SYSAUX.257.627668821
UNDOTBS1.258.627668821
USERS.259.627668821
TEST.265.627767963
test
TEST.266.627768241
test2
可以从asmcmd 的输出以及查询v$asm_alias 看出,使用绝对路径添加一个数据文件会为其创建别名和系统生成名称。
你尝试(从asm实例中)删除别名:
SQL>ALTER DISKGROUP dg1 DROP ALIAS ‘+DG1/ORCL/DATAFILE/test2‘;
Diskgroup altered.
SQL> select name from v$asm_alias;
NAME
————————————————
ORCL
DATAFILE
SYSTEM.256.627668819
SYSAUX.257.627668821
UNDOTBS1.258.627668821
USERS.259.627668821
TEST.265.627767963
test
TEST.266.627768241
Here Alias “+DG1/ORCL/DATAFILE/test2” is removed.
现在当你关闭数据库并重启它时会得到以下错误:
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size 1262284 bytes
Variable Size 209718580 bytes
Database Buffers 230686720 bytes
Redo Buffers 2928640 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 – see DBWR trace file
ORA-01110: data file 6: ‘+DG1/orcl/datafile/test2’
所以你不应该drop Alias,因为数据库实例通过数据文件的别名来引用它,一旦别名创建就不会使用系统生成名称。
解决方案
在这种情况下,你尝试(从ASM实例)添加回相同的别名。没有明确的方法来找出被drop的别名所属的数据文件。我们可以通过比较在DBA_DATA_FILES视图(RDBMS)和v$asm_alias中数据文件名来完成。系统生成数据文件名在v$asm_alias而不在dba_data_files就是被drop的别名。
SQL>ALTER DISKGROUP dg1 ADD ALIAS ‘+DG1/ORCL/DATAFILE/test2’ FOR ‘+DG1/ORCL/DATAFILE/TEST.266.627768241’;
Diskgroup altered.
Then shutdown and startup RDBMS instance, it opens normally:
SQL> startup
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size 1262284 bytes
Variable Size 213912884 bytes
Database Buffers 226492416 bytes
Redo Buffers 2928640 bytes
Database mounted.
Database opened.