1、起因
客户的12C RAC生产环境上,有人把Oracle数据文件创建到了其中1个节点的的本地磁盘上,导致这个查询只在那个节点能查询到,在另一个节点查询就报错。
数据库是Oracle 12c的版本,可以支持在线移动数据文件(如果是12C以前的版本,基本就得把数据文件offline或者停库修改位置了)这是个新特性,之前我也没有用过,于是我直接执行了如下的SQL
alter database move datafile '/u01/app/oracle/product/12.2/db1/dbs/xxxx.dbf' to '+DATA';
把数据文件移动到了ASM存储上.
本以为大功告成的我,第2天又接到了开发人员的反馈,在PLSQL上查询,报这个错误
反馈的结果就是还有问题,一查表就报错,我在后台用sys查2节点发现没有问题,在1节点查询还是有问题。这就十分奇怪了。
2、问题处理
顺着报错信息,直接查MOS吧,
ORA-01157 when running query on dba_datafiles on a particular instance (of RAC database) for a file moved from Filesystem to ASM using “alter database move datafile” command (which is a 12c new feature).
一样的报错,也是发生在执行了alter database move datafile之后
SMON: following errors trapped and ignored:
ORA-00604: error occurred at recursive SQL level 1
ORA-01157: cannot identify/lock data file 291 - see DBWR trace file
ORA-01110: data file 291: '<Full Path of Datafile>'
1.A new datafile was added by mistake in the dbs directory instead of ASM.
2.This datafile was later moved to ASM using an “alter database move datafile” command.
这属于一个已知的问题,需要按如下操作执行,就可以恢复(下面的命令在有问题的节点执行,就是把文件建到本地的那个节点)。
$ sqlplus / as sysdba
alter system check datafiles;
alter system flush shared_pool;
实测有效,仅做记录。
就是flush shared_pool可能会影 响
参考依据
ORA-01157 when running query on dba_datafiles on a particular instance in RAC for a file moved from Filesystem to ASM (Doc ID 2499264.1)
也欢迎关注我的公众号【徐sir的IT之路】,一起学习!
————————————————————————————
公众号:徐sir的IT之路
优快云 :https://blog.youkuaiyun.com/xxddxhyz?type=blog
墨天轮:https://www.modb.pro/u/3605
PGFANS:https://www.pgfans.cn/user/home?userId=5568
————————————————————————————