视图无法编译或物化视图执行任务时报0RA-12011错误的处理

最近用了很多视图,主要就是统计数据用的,建了有十几个物化视图,定在每天夜里执行刷新任务,可是十几个当中有四张始终无法自动刷新,手动编译也会出错,执行任务时会报如下错误:
 
  视图无法编译或物化视图执行任务时报0RA-12011错误的处理_第1张图片

不会是权限问题,也不可能是时间设置的问题,否则不可能其他的都可以正常刷新只有这几个进行出错。后来通过查诊断文件发现原来是因为建立视图的语句过长,据说Oracle对视图语句的限制是 65K,超过了虽然是可以正常创建的,但是无法编译,当然定时刷新也就不可能了。查询步骤如下:
1、查找诊断文件位置,语句如下:
select value from v$diag_info where name='Diag Trace' 
结果:
  视图无法编译或物化视图执行任务时报0RA-12011错误的处理_第2张图片
2、去服务器上按修改时间升序查看最近修改的文档并查看:
通过ls查看:
 
 
找到的文件:
 
 
打开文件查看:
  视图无法编译或物化视图执行任务时报0RA-12011错误的处理_第3张图片
 
3、这样失败原因就一清二楚了,语句过长导致job无法正常执行。
 
原因找到了,那就对其进行解决。因为创建的语句都是我们平时按阅读方便的方式进行书写的,既然过长,那就对SQL进行压缩,去除不必要的空格、命令、换行等,所以我自己写了个正则表达式,依次进行替换就可以达到只有一行的、高度压缩的效果了,经过处理后四个无法过长的语句三个已经压缩到了50K以内了,另外个太大,只有分割成二个视图方才解决。具体替换的正则表达式如下,按顺序执行查找替换就可以了。
我用的是EmEditor,写了个宏命令,直接运行就可以了,命令如下:
document.selection.Replace("^-(.+)","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("\\s+"," ",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("^\\s","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("\\s,",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(",\\n",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("^-(.+)","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("^\\n","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("\\n"," ",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(", ",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(" ,",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace("--\\w+","",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(", ",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
document.selection.Replace(" ,",",",eeFindNext | eeReplaceAll | eeFindReplaceRegExp);
如果换成普通的正则替换的话,麻烦点,如下:
查找正则(不包括左右双引号):"^-(.+)" 替换为(不包括左右双引号):""
查找正则(不包括左右双引号):"\\s+"   替换为(不包括左右双引号):" "
查找正则(不包括左右双引号):"^\\s"   替换为(不包括左右双引号):""
查找正则(不包括左右双引号):"\\s,"   替换为(不包括左右双引号):","
查找正则(不包括左右双引号):",\\n"   替换为(不包括左右双引号):","
查找正则(不包括左右双引号):"^-(.+)" 替换为(不包括左右双引号):""
查找正则(不包括左右双引号):"^\\n"   替换为(不包括左右双引号):""
查找正则(不包括左右双引号):"\\n"    替换为(不包括左右双引号):" "
查找正则(不包括左右双引号):", "     替换为(不包括左右双引号):","
查找正则(不包括左右双引号):" ,"     替换为(不包括左右双引号):","
查找正则(不包括左右双引号):"--\\w+" 替换为(不包括左右双引号):""
查找正则(不包括左右双引号):", "     替换为(不包括左右双引号):","
查找正则(不包括左右双引号):" ,"     替换为(不包括左右双引号):","
 
 
 
 
 

你可能感兴趣的:(正则表达式,DataBase.Oracle)