怎样正确显示oracle数据库异常种类异常行数

2011年9月 Oracle大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
怎样正确显示oracle异常行数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2562)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'oracle统计用户下面所有的表,并显示每个表的行数',
blogAbstract:'declare& t_count&& number(10);& t_str VARCHAR2(500);& cursor t_tables is select table_name from user_begin& for t_row in t_tables loop&&& t_str := \'select count(*) from \'|| t_row.table_&&& execute immediate t_str into t_&&& dbms_output.put_line( t_row.table_name || \'=\' || to_char(t_count));',
blogTag:'',
blogUrl:'blog/static/6',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/6',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}教你怎样用Oracle方便地查看报警日志错误
投稿:hebedich
字体:[ ] 类型:转载 时间:
由于报警日志文件很大,而每天都应该查看报警日志(查看有无“ORA-”,Error”,“Failed”等出错信息),故想找到一种比较便捷的方法,查看当天报警日志都有哪些错误。
在网上查了几天的资料,尝试综合清除告警日志内容及建外部表的方式来解决这一问题。
一:备份并清除告警日志内容
将每天的告警日志备份好,然后进行清除。
1:备份报警日志
在$ORACLE_HOME/SID/bdump/&& 目录下,
按日期备份alert_ORACLE_你的实例名.LOG这个文件,如:alert_ORACLE_orcl__bak.LOG。
2:清除日志内容
打开报警日志文件,用true & 文件名 可清除掉里面的内容
具体示例:
假如,我现在第一次进行该设置,我先把现有的告警日志进行备份,如:
--备份文件名称:今天16点24分前的告警日志信息
[oracle@rac2 bdump]$ cp alert_orcl2.log alert_orcl2_before__bak.log
-清空报警日志
[oracle@rac2 bdump]$ true & alert_orcl2.log
现在告警日志是空的。
切换下归档日志,检查报警日志里是否出现了新内容:
SQL& alter s
System altered.
则现在alert_orcl2.log记录的是日16点24分后至你下次对报警日志进行备份,截取前的信息。
二:建外部表查看报警日志错误
&如果已建立了一个用户,并赋相应的权限,所以直接建立目录对象并建立外部表就可以了。
1.建立目录对象
SQL& conn test / 123Connected.
SQL& create directory bdump as '/oracle/u01/app/oracle/admin/db2/bdump';
Directory created.
2.建立外部表
SQL& create table alert_log(
text varchar2(400)
)organization external
(type oracle_loader
default directory bdump
access parameters
(records delimited by newline
)location('alert_db2.log')
3.测试首先查看能否查到alert_db2.log的内容
SQL& select * from alert_log where rownum & 10;
--------------------------------------------------------------------------------
Thu Jun 11 00:51:46 2009
Starting ORACLE instance (normal)
Cannot determine all dependent dynamic libraries for /proc/self/exe
Unable to find dynamic library libocr10.so in search paths
RPATH = /ade/aime1_build2101/oracle/has/lib/:/ade/aime1_build2101/oracle/lib/:/a
de/aime1_build2101/oracle/has/lib/:
LD_LIBRARY_PATH is not set!
The default library directories are /lib and /usr/lib
Unable to find dynamic library libocrb10.so in search paths
Unable to find dynamic library libocrutl10.so in search paths
9 rows selected.
然后我们测试查报警信息'ORA-%'
SQL& select * from alert_log where text like 'ORA-%';
--------------------------------------------------------------------------------
ORA-00202: control file: '/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2
ORA-27037: unable to obtain file status
ORA-205 signalled during: ALTER DATABASE
ORA-00301: error in adding log file '/home/oracle/oracle/oradata/testdb/redo01.l
og' - file cannot be created
ORA-27040: file create error
ORA-1501 signalled during: CREATE DATABASE db2
ORA-00200: control file could not be created
--------------------------------------------------------------------------------
ORA-00202: control file: '/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2
ORA-27038: created file already exists
ORA-1501 signalled during: CREATE DATABASE db2
ORA-00200: control file could not be created
ORA-00202: control file: '/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2
ORA-27038: created file already exists
ORA-1501 signalled during: CREATE DATABASE db2
&--假如,你的报警日志文件只包含今天的信息(可以通过备份并清除告警日志内容实现),则通过外部表可以查到当天产生了哪些错误。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具怎样正确显示oracle异常行数
& 在oracle中的存储过程中,使用的EXCEPTION并用WHEN OTHERS THEN进行捕获,但是捕获了后就没有办法知道出错具体出在哪一行,无法更正是哪一行报出的异常,是否有好的解决方法。
------解决方法--------------------------------------------------------
1、用PL/SQL里面选择TEST-&F9(开始测试)-&打断点-&选择执行到下一断点处。
2、使用DBMS_OUTPUT.PUT_LINE();每个SQL后面都加一个,结束后看看打印到那个就没了,对应的那个& SQL就是出问题的地方。
我通常写存储过程都用同一个EXCEPTION
WHEN OTHERS THEN
& DBMS_OUTPUT.PUT_LINE(SQLERRM);
& P_ERR_LOG(SQLERRM,'PROCEDURE_NAME',SYSDATE);
& ROLLBACK;
P_ERR_LOG是个存储过程,参数按顺序为:
错误信息、出错过程名称、时间
然后把信息存入一张日志表中。
------解决方法--------------------------------------------------------
& WHEN OTHERS THEN
& DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
& DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_CALL_STACK);
这样就能把错误的详细信息打印出来了
------解决方法--------------------------------------------------------
可以定义一个变量stmt_no,在每句前面为此变量赋值,如果出现exception,则stmt_no就是对应值的下一句,下面是Oracle给出的例子:
CREATE OR REPLACE PROCEDURE loc_var AS
& stmt_no NUMBER;
& name& VARCHAR2(100);
& stmt_no := 1;& -- designates 1st SELECT statement
& SELECT table_name INTO name
& FROM user_tables
& WHERE table_name LIKE 'ABC%';
& stmt_no := 2;& -- designates 2nd SELECT statement
& SELECT table_name INTO name
& FROM user_tables
& WHERE table_name LIKE 'XYZ%';
& WHEN NO_DATA_FOUND THEN
& DBMS_OUTPUT.PUT_LINE
& ('Table name not found in query ' || stmt_no);
CALL loc_var();
------解决方法--------------------------------------------------------
#4的做法是客户的1997版代码标准;
还有一种是尽量把逻辑写细到一个个小的procedure,然后用一个main procedure在包内调用,每次调用后将计数器加1,然后将该数字保存到一个专门的表中,知道最后一步成功后再将计数器置1,这样也容易知道错误位置,再次运行时可以从错误位置直接启动,restartbility非常好。这种写法是目前客户公司的2008版的代码标准。
如异常没有得到解决,请继续查看以下解决方法:
暂无相关解决方法。
热点异常解决方法
最新异常解决方法
随机异常解决方法

我要回帖

更多关于 oracle 异常处理 的文章

 

随机推荐