Oracle诊断案例
- 格式:doc
- 大小:231.50 KB
- 文档页数:45
案例1ORACLEANALYZE命令的使用ORACLEANALYZE命令是Oracle数据库中一种用于调优和优化数据库性能的工具。
它能够收集数据库对象的统计信息、诊断性能问题并提供解决方案。
在本文中,我们将讨论ORACLEANALYZE命令的使用以及相关的案例。
首先,ORACLEANALYZE命令可以通过以下方式使用:```ANALYZE TABLE table_name [PARTITION partition_name][ESTIMATE [SAMPLE] statistics_sample_size [PERCENT] [FOR PARTITION (partition)][DELETESTATISTICS][FORCE];```ORACLEANALYZE命令的功能主要有两个方面:统计信息收集和性能问题诊断。
1. 统计信息收集:通过使用ORACLEANALYZE命令,可以收集数据库对象的统计信息,例如表、索引和分区等。
统计信息对于查询优化和执行计划的选择非常重要。
通过收集统计信息,我们可以使Oracle优化器更准确地评估查询的成本,并选择效率最高的执行计划。
2. 性能问题诊断:ORACLEANALYZE命令还可以诊断性能问题,并提供相应的解决方案。
它可以识别出表和索引的性能问题,例如表中的高聚簇因子(cluster factor)或者索引的低选择性(selectivity)。
此外,ORACLEANALYZE命令还可以检测到过时的统计信息,以及需要重新收集统计信息的对象。
下面以一个具体的案例来说明ORACLEANALYZE命令的使用。
假设我们有一个名为"orders"的表,用于存储订单信息。
这个表有一个名为"order_date"的列,我们希望通过ORACLEANALYZE命令收集该列的统计信息,并对性能进行诊断。
首先,我们可以使用以下命令来收集统计信息:```ANALYZE TABLE orders ESTIMATE STATISTICS SAMPLE 10 PERCENT FOR COLUMNS (order_date);```上述命令中,我们使用了"ESTIMATE STATISTICS"子句来指定要收集统计信息,"SAMPLE 10 PERCENT"表示我们希望对10%的数据样本进行统计。
问题描述:这是帮助一个公司的诊断案例.应用是个后台新闻发布系统.症状是,通过连接访问新闻页是极其缓慢通常需要十数秒才能返回.这种性能是用户不能忍受的.操作系统:sunos 5.8数据库版本:8.1.71.检查并跟踪数据库进程诊断时是晚上,无用户访问在前台点击相关页面,同时进行进程跟踪查询v$session视图,获取进程信息sql> select sid,serial#,username from v$session; sid serial# username---------- ---------- ------------------------------ 1 1 2 1 3 1 4 1 5 1 6 1 7 284 iflow 11 214 iflow 12 164 sys 16 1042 iflow10 rows selected.启用相关进程sql_tracesql> exec dbms_system.set_sql_trace_in_session(7,284,true)pl/sql procedure successfully completed.sql> exec dbms_system.set_sql_trace_in_session(11,214,true)pl/sql procedure successfully completed.sql> exec dbms_system.set_sql_trace_in_session(16,1042,true)pl/sql procedure successfully completed.sql> select sid,serial#,username from v$session; sid serial# username---------- ---------- ------------------------------ 1 1 2 1 3 1 4 1 5 1 6 1 7 284 iflow 11 214 iflow 12 164 sys 16 1042 iflow10 rows selected.等候一段时间,关闭sql_tracesql> exec dbms_system.set_sql_trace_in_session(7,284,false)pl/sql procedure successfully completed.sql> exec dbms_system.set_sql_trace_in_session(11,214,false)pl/sql procedure successfully completed.sql> exec dbms_system.set_sql_trace_in_session(16,1042,false)pl/sql procedure successfully completed.2.检查trace文件检查发现以下语句是可疑的********************************************************************************selectauditstatus,categoryid,auditlevel from categoryarticleassign a,category b where b.id=a.categoryid and articleid= 20030700400141 and auditstatus>0call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------parse 1 0.00 0.00 0 0 0 0execute 1 0.00 0.00 0 0 0 0fetch 1 0.81 0.81 0 3892 0 1------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.81 0.81 0 3892 0 1********************************************************************************这里显然是根据articleid进行新闻读取的.非常可疑的是query读取有3892这个内容引起了我的注意.如果遇见过类似的问题,大家在这里就应该知道是怎么回事情了.如果没有遇见过的朋友,能在这里思考一下再往下看.misses in library cache during parse: 1optimizer goal: chooseparsing user id: 41 rows row source operation------- --------------------------------------------------- 1 nested loops 2 index range scan (object id 25062) 1 table access by index rowid category 2 index unique scan (object id 25057)********************************************************************************selectauditstatus,categoryid from categoryarticleassign where articleid=20030700400138 and categoryid in (63, 138,139,140,141,142,143,144,168,213,292,341,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,383,460,461,462,463,621,622,626,629,631,634,636,643,802,837,838,849,850,851,852,853,854, 858,859,860,861,862,863,-1)call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------parse 1 0.00 0.00 0 0 0 0execute 1 0.00 0.00 0 0 0 0fetch 1 4.91 4.91 0 2835 7 1------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 4.91 4.91 0 2835 7 1misses in library cache during parse: 1optimizer goal: chooseparsing user id: 41 rows row source operation------- --------------------------------------------------- 1 table access full categoryarticleassign我们注意到,这里有一个全表扫描存在********************************************************************************3.登陆数据库,检查相应表结构sql> select index_name,table_name,column_name from user_ind_columns 2 where table_name=upper(categoryarticleassign);index_name table_name column_name ------------------------------ ------------------------------ -------------------- idx_articleid categoryarticleassign articleidind_articleid_categ categoryarticleassign articleid ind_articleid_categ categoryarticleassign categoryid idx_sortid categoryarticleassign sortid pk_categoryarticleassign categoryarticleassign articleid pk_categoryarticleassign categoryarticleassign categoryid pk_categoryarticleassign categoryarticleassign assigntype idx_cat_article categoryarticleassign auditstatus idx_cat_article categoryarticleassign articleid idx_cat_article categoryarticleassign categoryid idx_cat_article categoryarticleassign assigntype 11 rows selected.我们注意到,idx_articleid索引在以上查询中都没有被用到.检查表结构:sql> desc categoryarticleassign name null? type ----------------------------------------- -------- ---------------------------- categoryid not null number articleid not null varchar2(14) assigntype not null varchar2(1) auditstatus not null number sortid not null number unpass varchar2(255)问题发现:因为articleid是个字符型数据,查询中给入的articleid= 20030700400141 是个数字值oracle发生潜在的数据类型转换,从而导致了索引失效sql> select auditstatus,categoryid 2 from 3 categoryarticleassign where articleid=20030700400132;auditstatus categoryid ----------- ---------- 9 94 0 383 0 695 elapsed: 00:00:02.62execution plan---------------------------------------------------------- 0 select statement optimizer=choose (cost=110 card=2 bytes=38) 1 0 table access (full) of categoryarticleassign (cost=110 card=2 bytes=38)4.解决方法简单的在参数两侧各增加一个,既可解决这个问题.对于类似的查询,我们发现query模式读取降低为2几乎不必花费cpu时间了********************************************************************************select unpass from categoryarticleassign where articleid=20030320000682 and categoryid=113 call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- ----------parse 1 0.00 0.00 0 0 0 0execute 1 0.00 0.00 0 0 0 0fetch 1 0.00 0.00 0 2 0 0------- ------ -------- ---------- ---------- ---------- ---------- ----------total 3 0.00 0.00 0 2 0 0misses in library cache during parse: 1optimizer goal: chooseparsing user id: 20 rows row source operation------- --------------------------------------------------- 0 table access by index rowid categoryarticleassign 1 index range scan (object id 3080)********************************************************************************至此,这个问题得到了完满的解决.--******************************************************************************************************问题说明:非常多时候在我们进行数据库操作时比如drop user,drop table等,经常会遇见这样的错误ora-00604: error occurred at recursive sql level 1 .这样的提示,非常多时候是没有丝毫用处的.本案例就这一类问题提供一个思路及方法供大家参考.1. drop user出现问题报出以下错误后退出ora-00604: error occurred at recursive sql level 1ora-00942: table or view does not exist .关于recursive sql 错误我们有必要做个简单说明.我们知道,当我们发出一条简单的命令以后oracle数据库要在后台解析这条命令,并转换为oracle数据库的一系列后台操作. 这些后台操作统称为递归sql比如create table这样一条简单的ddl命令oracle数据库在后台,实际上要把这个命令转换为对于obj$,tab$,col$等底层表的插入操作.oracle所作的工作可能比我们有时候想的要复杂的多.2.跟踪问题我们知道oracle提供sql_trace的功能能用于跟踪oracle数据库的后台递归操作.通过跟踪文件,我们能找到问题的所在以下是格式化(tkprof)后的输出:********************************************************************************the following statement encountered a error during parse:delete from sdo_geom_metadata_table where sdo_owner = wapcommerror encountered: ora-00942********************************************************************************oracle把错误信息首先呈现出来我们看到ora-00942错误是由于sdo_geom_metadata_table表/视图不存在所致问题由此能定位对于这一类的错误,定位问题以后解决的方法就要依据具体问题原因而定了。
oracle报错处理案例Oracle数据库在运行过程中可能会遇到各种错误,下面列举几个报错案例以及相应的解决思路:1、ORA-00701: 这个错误通常与内部错误或者核心对象有关。
根据2021年的信息,处理ORA-00701的一个解决方案是将数据库启动到升级模式(upgrade mode)进行修复,或者配置特定的事件(如event 38003),以便让Oracle跳过某些验证步骤。
在某些情况下,可能需要重建受影响的核心对象。
2、数据库无法打开并开始crash recovery:当数据库因异常关闭(如服务器断电)后,重启时可能会出现类似"alter database open... crash recovery"的情况。
此时,Oracle会自动尝试执行恢复过程来确保数据一致性。
DBA需要监控redo日志应用情况和归档日志状态,确保所有必需的redo已成功应用,以完成数据库的正常恢复开放。
3、ORA-00235:这个错误在官方文档中没有明确记录,但根据历史资料中的案例,它可能与备份或RMAN操作期间的同步恢复目录有关。
解决方案可能涉及检查并协调任何冲突的RMAN任务、确保恢复目录的一致性,或者重新同步恢复目录信息。
4、服务器断电导致的数据恢复:在服务器意外断电后,Oracle数据库可能无法正常启动。
在这种情况下,数据恢复工作包括检查物理文件的完整性、评估控制文件、联机重做日志文件和数据文件的状态,并使用RMAN或其他工具进行介质恢复或不完全恢复操作。
如果数据文件损坏严重,可能还需要从最近的有效备份和归档日志中恢复。
在实际处理Oracle数据库错误时,关键在于理解错误的具体含义、分析错误产生的上下文环境,并按照Oracle官方提供的最佳实践和建议步骤进行操作。
同时,维护详细的日志记录和定期备份也是避免数据丢失和快速恢复服务的关键措施。
oracle19c 查询实例-回复如何在Oracle 19c中进行查询实例。
在本文中,我将向您介绍Oracle 19c数据库中的查询实例。
Oracle 19c 是一款功能强大的关系型数据库管理系统,提供了多种查询和数据操作功能,以帮助用户有效地管理和检索数据。
步骤1:连接到Oracle 19c数据库首先,我们需要通过使用适当的凭据连接到Oracle 19c数据库。
我们可以使用Oracle SQL开发者或类似的工具来连接数据库。
在获取凭据后,我们可以使用以下命令连接到数据库:sqlplus username/password@hostname:port/service_name其中,username是数据库用户的名称,password是用户的密码,hostname是数据库服务器的主机名,port是数据库监听的端口号,而service_name是数据库的服务名。
步骤2:选择要查询的表一旦成功连接到数据库,我们需要选择要查询的表。
表是Oracle数据库中存储数据的组织形式。
我们可以使用以下命令选择要查询的表:SELECT * FROM table_name;其中,table_name是数据库中的表名称。
这将返回表中的所有行和列。
步骤3:编写基本查询语句一旦选择了要查询的表,我们可以编写基本的查询语句来检索所需的数据。
查询语句使用SQL(结构化查询语言)编写,以在数据库中执行特定的操作。
以下是一个示例查询语句:SELECT column1, column2 FROM table_name WHERE condition;其中,column1和column2是要从表中检索的列的名称,table_name 是要查询的表名称,而condition是一个可选的条件,用于过滤查询结果。
步骤4:使用其他查询操作符和函数在Oracle 19c中,我们可以使用多种查询操作符和函数来执行复杂的数据检索操作。
以下是一些常用的查询操作符和函数:- 比较操作符:比较操作符(例如=、>、<等)可用于比较列的值。
ORACLE数据库常见问题诊断方法(分布式事务篇)对于数据库服务端到服务端的访问(如DBLINK、复制、快照等),由于网络等原因可能会产生一个节点的事务无法恢复,与之相关的另一个节点的数据库事务挂起,因而产生分布式数据库事务问题。
一、诊断分布式事务1)检查alert<sid>.log文件,发现相应的错误确保网络正常,并检查DBLINK是”valid”和可操作的2)SELECT * FROM V$DBLINK 或GV$DBLINGK3)查找悬挂的事务( DBA_2PC_PENDING)SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, HOST, COMMIT#FROM DBA_2PC_PENDINGLOCAL_TRAN_ID 是本机的事务号(报告错误的机器),如果 LOCAL_TRAN_ID = GLOBAL_TRAN_ID, 即分布式事务来源于本机,也可以从本机的alert<sid>.log中得到 LOCAL_TRAN_ID 。
二、检查其它节点的事务(DBA_2PC_NEIGHBORS)1)执行下列命令:SELECT LOCAL_TRAN_ID, IN_OUT, DATABASE, INTERFACEFROM DBA_2PC_NEIGHBORS2)在init<sid>.ora中检查参数COMMIT_POINT_STRENGTH该参数应有较大值(最好最大值)三、通过DBA_2PC_PENDING字典表检查事务的状态1)如果状态是 commit,则本地数据库提交成功,即不必在本数据库实施COMMIT FORCE或ROLLBACK FORCE。
如果状态是 not commited(prepared),则必需在本数据库实施COMMIT FORCE或ROLLBACK FORCE,SCN号可在DBA_2PC_PENDING字典表中找到。
常见错误:ORA—00001:违反唯一约束条件(主键错误)ORA—00028:无法连接数据库进程ORA—00900:无效sql语句ORA-00904:字段名写错或是建表时最后一个字段有逗号ORA—00907:缺少右括号ORA—00911:无效字符ORA-00917:缺少逗号ORA-00918:未明确定义列ORA-00922:丢失或无效的选项(表名等可能有空格)ORA—00923:未找到FROM关键字ORA—00926:缺少valueORA-00933: SQL命令未正确结束ORA—00936:缺少表达式ORA-00937:不是单组分组函数ORA—00942:表或视图不存在ORA-00947:没有足够的值(一般是插入语句出现的错,插入值的数量与字段不符)ORA-00979:不是group by的表达式ORA-01009:缺少法定参数(eg:sql做参数时,且sql语句为空时,报错)ORA—01098:数据库无法关闭及启动ORA-01400:无法将null值插入ORA—01401:插入的值对于列过大ORA-01476:sql中存在除数为零ORA-01579:恢复过程中出现写错误ORA—01580: 创建控制备份文件时出错ORA-01581: 尝试使用已分配的回退段()新区()ORA—01582: 无法打开要备份的控制文件ORA-01583:无法获得要备份的控制文件的块大小ORA—01584:无法获得要备份的控制文件的文件大小ORA-01585:标识备份文件时出错ORA-01586: 无法打开要备份的目标文件ORA—01587:复制控制文件的备份文件时出错ORA—01588: 要打开数据库则必须使用RESETLOGS 选项ORA—01589:要打开数据库则必须使用RESETLOGS 或NORESETLOGS 选项ORA-01590:段可用列表数() 超出最大数ORA—01591: 锁定已被有问题的分配事务处理挂起ORA—01592:将第7 版回退段()转换为Oracle 8 版格式时出错ORA-01593:回退段最佳大小(blks) 小于计算的初始大小(blks)ORA-01594: 尝试放回已释放的回退段() 区()ORA—01595:释放区() 回退段()时出错ORA-01596:无法在参数中指定系统ORA-01597: 无法改变联机或脱机系统回退段ORA-01598: 回退段'’未联机ORA—01599:无法获得回退段(), 高速缓存空间已满ORA—01600:至多只有一个”"在子句"”()中ORA-01601: 子句""()中的存储桶大小非法ORA-01603:子句””()中的分组大小非法ORA-01604:子句”"()中的编号范围非法ORA-01605:子句"”()中缺少编号ORA-01606:gc_files_to_locks 不同于另一已安装例程的参数ORA—01608: 无法将回退段’'联机,其状态为()ORA—01609:日志是线程的当前日志- 无法删除成员ORA-01610: 使用BACKUP CONTROLFILE 选项的恢复必须已完成ORA—01611: 线程编号无效—必须介于1 和之间ORA-01612:线程已经启用ORA-01613: 线程只有日志- 要求至少启用2 个日志ORA-01614: 线程正忙- 无法启用ORA—01615:线程已安装—无法禁用ORA—01616: 线程已打开- 无法禁用ORA-01617: 无法安装: 不是有效的线程编号ORA-01618:线程未启用- 无法安装ORA-01619:线程已由另一例程安装ORA—01620: 没有可用于安装的公用线程ORA-01621: 数据库打开时无法重命名当前日志的成员ORA-01622:必须指定线程编号- 没有特定默认值ORA-01623:日志是线程的当前日志- 无法删除ORA—01624: 线程的紧急恢复需要日志ORA—01625:回退段’'不属于此例程ORA-01626: 回退段号'’无法处理更多事务处理ORA—01627:回退段号'’未联机ORA-01628:已达到max #extents ()(回退段)ORA—01629:已达到max # extents (),此时正在保存表空间的撤消ORA—01630: 表空间中的temp 段达到max # extents()ORA-01631:表。
flinkcdc oracle 测试案例Flink CDC(Change Data Capture)是一种用于实时数据同步和流式数据处理的开源技术,它可以捕获数据库中的变化,并将这些变化作为数据流进行处理。
本文将以Flink CDC与Oracle数据库的测试案例为题,介绍一些常见的测试场景和案例。
1. 测试CDC连接Oracle数据库在这个测试案例中,我们将测试Flink CDC与Oracle数据库的连接是否正常。
通过配置正确的数据库连接信息和表名,运行CDC作业,并观察是否可以成功捕获变化数据并进行处理。
2. 测试CDC捕获新增数据在这个测试案例中,我们将在Oracle数据库中插入一些新的数据,并观察Flink CDC是否可以及时捕获到这些新增数据,并将其作为数据流进行处理。
3. 测试CDC捕获更新数据在这个测试案例中,我们将在Oracle数据库中更新一些已有的数据,并观察Flink CDC是否可以及时捕获到这些更新数据,并将其作为数据流进行处理。
4. 测试CDC捕获删除数据在这个测试案例中,我们将在Oracle数据库中删除一些已有的数据,并观察Flink CDC是否可以及时捕获到这些删除数据的变化,并将其作为数据流进行处理。
5. 测试CDC处理数据在这个测试案例中,我们将使用Flink CDC捕获到的变化数据,进行一些数据处理操作,比如数据清洗、数据过滤、数据转换等,并观察处理结果是否符合预期。
6. 测试CDC数据写入外部系统在这个测试案例中,我们将使用Flink CDC捕获到的变化数据,将其写入到外部系统,比如Kafka、HDFS等,并观察数据写入是否成功,并且数据是否与源数据保持一致。
7. 测试CDC的容错和恢复能力在这个测试案例中,我们将模拟Flink CDC的异常情况,比如网络中断、数据库故障等,观察CDC作业的容错和恢复能力,以及是否可以正确处理数据流的连续变化。
8. 测试CDC的性能和吞吐量在这个测试案例中,我们将对Flink CDC进行性能测试,包括数据捕获的延迟、数据处理的吞吐量等指标,以评估CDC作业的性能和效率。
oracle数据库应用案例
以下是一些常见的Oracle数据库应用案例:
1. 企业级应用:许多大型企业使用Oracle数据库来支持企业资源规划(ERP)系统、客户关系管理(CRM)系统和供应链管理系统等重要业务应用。
2. 金融领域:银行和金融机构经常使用Oracle数据库来管理大量的交易数据、客户账户信息和风险分析等。
3. 电信行业:电信运营商使用Oracle数据库来管理用户资料、通信记录和计费信息等。
4. 零售业:零售业公司使用Oracle数据库来管理存货、销售数据、订单处理和供应链信息等。
5. 健康保健:医院和保健机构使用Oracle数据库来管理患者记录、医疗图像和诊断数据等。
6. 教育部门:大学和学校使用Oracle数据库来管理学生信息、教职工信息和学术研究数据等。
7. 公共部门:政府和政府机构使用Oracle数据库来管理公
民信息、税务数据和人口统计数据等。
Oracle错误代码案例总结及解决方案随着Oracle数据库的使用,难免会遇到一些错误代码。
本文将介绍一些常见的Oracle错误代码以及解决方案。
这个错误通常是由于输入的用户名或密码不正确造成的。
解决办法是验证用户名和密码是否正确,并确保数据库实例启动。
这个错误通常是由于在SQL查询中引用了一个不存在的列或表名造成的。
解决办法是检查查询中的列名或表名是否正确,如果需要,可以使用引号将其括起来。
这个错误通常是由于连接描述符无法被解析造成的。
解决办法是检查tnsnames.ora文件中的连接描述符是否正确,并确保listener服务正在运行。
这个错误通常是由于在数值比较中使用了无效的字符造成的。
解决办法是检查数据类型是否正确,并确保传入的值是有效的数字。
这个错误通常是由于SQL语句缺少了必要的结束符号造成的。
解决办法是确保每条SQL语句以分号结尾,并检查语法是否正确。
这个错误通常是由于插入或更新操作违反了表的完整性约束条件造成的。
解决办法是确保插入或更新的值符合表的约束条件,并确保触发器、外键等相关对象正确配置。
这个错误通常是由于在更新语句的THEN子句中没有包含所有列造成的。
解决办法是确保更新语句中的THEN子句包含所有需要更新的列。
这个错误通常是由于在SQL语句中缺少需要的表达式造成的。
解决办法是确保SQL语句中的所有操作数都是有效的,并检查语法是否正确。
这个错误通常是由于插入或更新操作违反了UNIQUE约束条件造成的。
解决办法是确保插入或更新的值不会违反UNIQUE约束条件,并确保索引、触发器等相关对象正确配置。
这个错误通常是由于读取的数据已被其他会话修改或删除造成的。
解决办法是增加undo表空间的大小,或调整事务隔离级别以减少读取之间的时间差。
总结:本文介绍了一些常见的Oracle错误代码以及解决方案,包括无效的用户名/密码、无效的标识符、无法解析指定的连接标识符、无效数字、SQL命令未正确结束、违反完整性约束条件、缺失表达式、UNIQUE约束条件违背和快照过旧等。
oracle数据库故障处理案例Oracle数据库是一种常见的关系数据库管理系统,它在企业应用中被广泛使用。
然而,由于各种原因,Oracle数据库可能会遇到各种故障和问题。
本文将列举一些常见的Oracle数据库故障处理案例,并提供解决方案。
1. 数据库无法启动:在某些情况下,Oracle数据库可能无法启动。
这可能是由于数据库文件损坏、数据库实例配置错误、内存不足等原因引起的。
解决此问题的方法包括修复数据库文件、重新配置数据库实例和增加内存容量。
2. 数据库性能下降:当Oracle数据库的性能下降时,可能会导致应用程序变慢或无响应。
这可能是由于数据库表空间过度使用、索引失效、SQL语句优化不当等原因引起的。
解决此问题的方法包括清理表空间、重新创建索引和优化SQL语句。
3. 数据库连接问题:有时候,应用程序无法连接到Oracle数据库。
这可能是由于网络问题、数据库实例未启动、监听器配置错误等原因引起的。
解决此问题的方法包括检查网络连接、启动数据库实例和检查监听器配置。
4. 数据库备份和恢复:数据库备份和恢复是保证数据安全和可用性的关键。
当数据库发生故障或数据丢失时,需要进行数据库恢复。
解决此问题的方法包括使用RMAN工具进行备份和恢复、使用闪回5. 数据库锁定和死锁:在多用户环境下,可能会发生数据库锁定和死锁问题。
这可能是由于事务并发操作引起的。
解决此问题的方法包括查找锁定和死锁的相关会话、释放锁定和解决死锁。
6. 数据库日志文件满:Oracle数据库的日志文件用于记录数据库操作和恢复信息。
当日志文件满时,可能会导致数据库无法继续进行操作。
解决此问题的方法包括增加日志文件大小、清理旧的日志文件和优化日志文件切换策略。
7. 数据库表空间不足:Oracle数据库的表空间用于存储数据和索引。
当表空间不足时,可能会导致无法插入新数据或创建新索引。
解决此问题的方法包括增加表空间大小、清理无效数据和重新分配表空间。
Oracle_AWR_报告分析实例讲解Oracle AWR(Automatic Workload Repository)报告是一个用于性能优化的强大工具。
它会收集数据库实例的性能指标,以便分析和诊断数据库性能问题。
在本文中,将介绍一个实例,展示如何使用AWR报告进行性能分析。
首先,要生成AWR报告,需要运行ADDM(Automatic Database Diagnostic Monitor)分析。
在数据库服务器上登录SQL*Plus,运行以下命令:```BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(;END;```该命令会为当前数据库实例创建一个AWR快照。
快照会记录数据库的性能指标,例如CPU利用率、内存使用情况、IO操作等。
完成数据收集后,可以使用以下命令来生成AWR报告:``````这会生成一个HTML格式的AWR报告文件。
在浏览器中打开报告文件,可以查看数据库的性能分析结果。
现在我们来分析一个实际的AWR报告。
在报告的开头,会显示数据库实例的基本信息,包括名称、版本、开始和结束时间等。
下面会列出主要的性能指标,例如数据库负载、并发会话、IO等。
在报告的摘要部分,会列出性能问题的概要。
这里会显示数据库实例的主要问题,例如高负载、慢查询、内存不足等。
这是一个非常有用的指标,可以帮助我们快速定位性能问题的症结所在。
在AWR报告的后半部分,会有详细的性能指标分析。
例如,会列出最耗费CPU资源的SQL语句,以及它们的执行次数和执行时间。
这可以帮助我们找到哪些SQL语句需要进行优化,以减少数据库负载和响应时间。
此外,报告还会列出IO操作的统计信息,例如读写请求、平均响应时间等。
这可以帮助我们定位潜在的IO瓶颈,以优化数据库的IO性能。
在AWR报告中还有其他许多详细的性能指标,例如死锁、PGA和SGA 内存的使用等。
可以根据具体的需求来分析这些指标。
总结起来,AWR报告是一个非常有用的性能分析工具,可以帮助我们快速发现和解决数据库性能问题。
ORACLE数据库性能诊断分析背景:新疆结算反映前台操作非常慢,持续近半个月左右了,最近特别慢,通过AWR报表介入分析调查,主要是发现三个问题,提出4点建议如下。
其中建议1还没实施,建议2,3,4已经实施,实施完毕后系统有了比较大的提升,局方反映不觉的卡了,后续下周继续观察。
一.发现系统存在严重的IO瓶颈等待事件都是和IO相关的。
这个Av Rd(ms) 项表示,平均一次物理读花费的时间(单位为毫秒)有一种说法,AV RD(MS)一般来说,大于7说明系统有严重的IO问题,其中BOSSWG_PERF_DATA居然达到了47,说明当前的存储IO存在瓶颈。
建议1:希望能尽快更换好的存储,改善糟糕的IO能力。
此外在接下来的几个图中可以分析到,XJ_CTNBC_DATA_001,INFO_HB_5030090000004, DATA_UPDATE_NOIFY,NE_PERF_MSG_REAL,NE_ALARM_LIST,DATA_MSG_FILELIST这6个物理对象被访问很频繁。
建议2:对涉及到这6个表的代码做检查,另外争取能对这XJ_CTNBC_DATA_001,INFO_HB_5030090000004, DATA_UPDATE_NOIFY, NE_PERF_MSG_REAL,NE_ALARM_LIST, DATA_MSG_FILELIST 这6个表做瘦身。
方法:在不能建分区的情况下,先采delete部分数据,然后alter table XXX move ; 然后再rebuild所有索引的方法来进行瘦身。
这点目前也已基本做完,又有了一定的提升。
二.对SQL语句进行优化,对频繁访问对象进行瘦身同时也是CPU排名的前几名如下语句是执行频率超高的语句建议3:重点分析这三段代码(思路为索引和瘦身)b7yp8zh72tjmfbeginPKP_XJ_BUSI_MONITOR_UPDATE.UPDATE_XJ_CTNBC_DATA_001_HOUR('101, 104, 106, 108, 109, 110, 112'); end;f8wqpy51v6mfySELECT COUNT(*) FROM XJ_CTNBC_DATA_001 WHERE BUSI_CLASS = :B3 AND STAT_DATE = :B2 AND SOURCE_ID = :B1cqpqvrzhntqj5SELECT TICKET_CNT FROM XJ_CTNBC_DATA_001 WHERE BUSI_CLASS = :B3 AND SOURCE_ID = :B2 AND STAT_DATE = :B1chrkhspfq9xnuSELECT F.NE_NAME, F.NE_FLAG FROM NET_ELEMENT F WHERE F.NE_ID = :B1方法:1.组合索引create index idx_union_xj_ctnbcon XJ_CTNBC_DATA_001 (BUSI_CLASS,STAT_DATE,SOURCE_ID);create index idx_neid_name_flag on net_element (ne_id,ne_name,ne_flag);2.delete 部分数据,然后重组表如下alter table XJ_CTNBC_DATA_001 move;alter index 这个表的索引rebuild;这些基本已经完成,收效比较明显。
dba 案例DBA(数据库管理员)案例通常涉及数据库的管理、维护、诊断和恢复等方面。
以下是一个典型的DBA案例:假设某企业拥有一台Oracle数据库,数据库管理员(DBA)负责监控和维护数据库。
在某一天,DBA发现数据库性能下降,查询响应时间变长,于是开始进行故障排查。
1. 分析现象:DBA首先查看数据库的性能指标,如CPU利用率、内存使用情况、I/O吞吐量等,发现并无明显异常。
然而,在检查数据库日志时,发现有大量ORA错误日志,提示可能存在数据文件损坏。
2. 诊断问题:DBA根据日志信息,定位到可能损坏的数据文件,并使用Oracle提供的诊断工具,如ADMIN_EXPORT和ADMIN_IMPORT 等,对损坏的数据文件进行诊断。
诊断结果显示,数据文件存在物理损坏。
3. 制定恢复方案:DBA根据诊断结果,制定数据文件恢复方案。
在此案例中,可以选择以下几种方法:-手动恢复:通过Oracle的备份和恢复工具,如RMAN(远程管理工具),手动恢复损坏的数据文件。
-自动恢复:如果数据库配置了自动备份和恢复机制,可以触发自动恢复过程。
-紧急恢复:在数据文件无法恢复的情况下,可以选择紧急恢复,通过重建数据文件或使用备用数据文件等方式,尽快恢复数据库正常运行。
4. 实施恢复:DBA根据恢复方案,执行数据文件恢复操作。
在此过程中,需要密切关注数据库的运行状况,确保恢复成功。
5. 验证恢复结果:恢复完成后,DBA需要对数据库进行验证,确保数据完整性和正确性。
可以使用Oracle提供的数据校验工具,如ANALYZE TABLE、CHECK TABLE等,对数据库进行校验。
6. 优化数据库:为了防止类似问题再次发生,DBA需要对数据库进行优化。
这包括调整数据库参数、优化表结构和索引、调整查询性能等。
通过以上步骤,DBA成功解决了数据库性能下降的问题,确保了企业数据的稳定和安全性。
需要注意的是,这里提供的案例仅供参考,实际工作中的DBA案例可能涉及更多技术和工具,具体操作需要根据实际情况进行。
Oracle诊断案例Spfile案例一则数据库教程电脑资料 oracleOracle诊断案例-Spfile案例一则link:.eygle./case/spfile.htm情况说明:系统:SUN Solaris8数据库版本:9203问题描述:工程人员报告,数据库在重新启动时无法正常启动.检查发现UNDO表空间丢失.问题诊断及解决过程如下:1. 登陆系统检查alert.log文件检查alert.log文件是通常是我们诊断数据库问题的第一步SunOS 5.8login: rootPassword:Last login: Thu Apr 1 11:39:16 from 10.123.7.162Sun Microsystems Inc. SunOS 5.8 Generic Patch October xx You have new mail.# su - oraclebash-2.03$ cd $ORACLE_BASE/admin/*/bdumpbash-2.03$ vi *.log"alert_gzhs.log" 7438 lines, 283262 charactersSat Feb 7 20:30:06 xxStarting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0S scheme 3Using log_archive_dest parameter default value LICENSE_MAX_USERS = 0SYS auditing is disabledStarting up ORACLE RDBMS Version: 9.2.0.3.0. System parameters with non-default values:processes = 150timed_statistics = TRUEshared_pool_size = 1157627904large_pool_size = 16777216java_pool_size = 637534208control_files = /u01/oradata/gzhs/control01.ctl, /u02/oradata/gzhs/control02.ctl,/u03/oradata/gzhs/control03.ctldb_block_size = 8192db_cache_size = 2516582400patible = 9.2.0.0.0log_archive_start = TRUElog_archive_dest_1 = LOCATION=/u06/oradata/gzhs/arch log_archive_format = %t_%s.dbfdb_file_multiblock_read_count= 16fast_start_mttr_target = 300undo_management = AUTOundo_tablespace = UNDOTBS1undo_retention = 10800remote_login_passwordfile= EXCLUSIVEdb_domain =instance_name = gzhsdispatchers = (PROTOCOL=TCP) (SERVICE=gzhsXDB)job_queue_processes = 10hash_join_enabled = TRUEbackground_dump_dest = /oracle/admin/gzhs/bdump user_dump_dest = /oracle/admin/gzhs/udumpcore_dump_dest = /oracle/admin/gzhs/cdumpsort_area_size = 524288db_name = gzhsopen_cursors = 300star_transformation_enabled= FALSEquery_rewrite_enabled = FALSEpga_aggregate_target = 838860800aq_tm_processes = 1PMON started with pid=2DBW0 started with pid=3LGWR started with pid=4CKPT started with pid=5SMON started with pid=6"alert_gzhs.log" 7438 lines, 283262 charactersUSER: terminating instance due to error 30012Instance terminated by USER, pid = 26433ORA-1092 signalled during: ALTER DATABASE OPEN... Thu Apr 1 11:11:08 xxStarting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0S scheme 3Using log_archive_dest parameter default value LICENSE_MAX_USERS = 0SYS auditing is disabledStarting up ORACLE RDBMS Version: 9.2.0.3.0. System parameters with non-default values:processes = 150timed_statistics = TRUEshared_pool_size = 1157627904large_pool_size = 16777216java_pool_size = 637534208control_files = /u01/oradata/gzhs/control01.ctl,/u02/oradata/gzhs/control02.ctl,/u03/oradata/gzhs/control03.ctldb_block_size = 8192db_cache_size = 2516582400patible = 9.2.0.0.0log_archive_start = TRUElog_archive_dest_1 = LOCATION=/u06/oradata/gzhs/arch log_archive_format = %t_%s.dbfdb_file_multiblock_read_count= 16fast_start_mttr_target = 300undo_management = AUTOundo_tablespace = UNDOTBS1undo_retention = 10800remote_login_passwordfile= EXCLUSIVEdb_domain =instance_name = gzhsdispatchers = (PROTOCOL=TCP) (SERVICE=gzhsXDB) job_queue_processes = 10hash_join_enabled = TRUEbackground_dump_dest = /oracle/admin/gzhs/bdump user_dump_dest = /oracle/admin/gzhs/udumpcore_dump_dest = /oracle/admin/gzhs/cdumpsort_area_size = 524288db_name = gzhsopen_cursors = 300star_transformation_enabled= FALSEquery_rewrite_enabled = FALSEpga_aggregate_target = 838860800aq_tm_processes = 1PMON started with pid=2DBW0 started with pid=3LGWR started with pid=4CKPT started with pid=5SMON started with pid=6RECO started with pid=7CJQ0 started with pid=8Thu Apr 1 11:11:13 xxstarting up 1 shared server(s) ...QMN0 started with pid=9Thu Apr 1 11:11:13 xxstarting up 1 dispatcher(s) for work address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...ARCH: STARTING ARCH PROCESSESARC0 started with pid=12ARC0: Archival startedARC1 started with pid=13Thu Apr 1 11:11:13 xxARCH: STARTING ARCH PROCESSES PLETE Thu Apr 1 11:11:13 xxARC0: Thread not mountedThu Apr 1 11:11:13 xxARC1: Archival startedARC1: Thread not mountedThu Apr 1 11:11:14 xxALTER DATABASE MOUNTThu Apr 1 11:11:18 xxSuessful mount of redo thread 1, with mount id 1088380178. Thu Apr 1 11:11:18 xxDatabase mounted in Exclusive Mode.Completed: ALTER DATABASE MOUNTThu Apr 1 11:11:27 xxalter database openThu Apr 1 11:11:27 xxBeginning crash recovery of 1 threadsThu Apr 1 11:11:27 xxStarted first pass scanThu Apr 1 11:11:28 xxCompleted first pass scan1 redo blocks read, 0 data blocks need recoveryThu Apr 1 11:11:28 xxStarted recovery atThread 1: logseq 177, block 2, s 0.33104793Recovery of Online Redo Log: Thread 1 Group 3 Seq 177 Reading mem 0Mem# 0 errs 0: /u01/oradata/gzhs/redo03.logThu Apr 1 11:11:28 xxCompleted redo applicationThu Apr 1 11:11:28 xxEnded recovery atThread 1: logseq 177, block 3, s 0.331247940 data blocks read, 0 data blocks written, 1 redo blocks read Crash recovery pleted suessfullyThu Apr 1 11:11:28 xxLGWR: Primary database is in CLUSTER CONSISTENT modeThread 1 advanced to log sequence 178Thread 1 opened at log sequence 178Current log# 1 seq# 178 mem# 0:/u01/oradata/gzhs/redo01.logSuessful open of redo thread 1.Thu Apr 1 11:11:28 xxARC0: Evaluating archive log 3 thread 1 sequence 177 Thu Apr 1 11:11:28 xxARC0: Beginning to archive log 3 thread 1 sequence 177Creating archive destination LOG_ARCHIVE_DEST_1:'/u06/oradata/gzhs/arch/1_177.dbf'Thu Apr 1 11:11:28 xxSMON: enabling cache recoveryARC0: Completed archiving log 3 thread 1 sequence 177Thu Apr 1 11:11:28 xxErrors in file/oracle/admin/gzhs/udump/gzhs_ora_27781.trc:ORA-30012: \263\267\317\373\261\355\277\325\274\344'UNDOTBS1'\262\273\264\346\324\332\273\362\300\340\320\315\262\273\325\375\310\267Thu Apr 1 11:11:28 xxError 30012 happened during db open, shutting down database USER: terminating instance due to error 30012Instance terminated by USER, pid = 27781ORA-1092 signalled during: alter database open...:q.............在警报日志末尾显示了数据库在Open状态因为错误而异常终止.2. 尝试重新启动数据库bash-2.03$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.3.0 - Production on 星期四 4月 1 11:43:52 xxCopyright (c) 1982, xx, Oracle Corporation. All rights reserved.已连接到空闲例程,SQL> startupORACLE 例程已经启动。
Oracle诊断事件列表ORA-12000: 实体化视图日志已经存在于表 '' 上ORA-12001: 无法创建日志: 表 '' 已经具有触发器ORA-12002: 表 ""."" 上不存在任何实体化视图日志ORA-12003: 实体化视图 ""."" 不存在ORA-12004: REFRESH FAST 不能用于实体化视图 "".""ORA-12005: 不能安排过去时间的自动刷新ORA-12006: 具有相同 的实体化视图已经存在ORA-12007: 实体化视图重新使用的参数不一致ORA-12008: 实体化视图的刷新路径中存在错误ORA-12009: 实体化视图不能包含 long 列ORA-12010: 不能在 SYS 拥有的表上创建实体化视图日志ORA-12011: 无法执行作业ORA-12012: 自动执行作业出错ORA-12013: 可更新实体化视图必须足够简单, 以进行快速刷新ORA-12014: 表 '' 不包含主键约束条件ORA-12015: 不能从复杂查询中创建一个可快速刷新的实体化视图ORA-12016: 实体化视图并未包含所有主键列ORA-12017: 不能将主键实体化视图 '' 更改为 rowid 实体化视图ORA-12018: 在创建 ""."" 的代码时出现以下错误ORA-12019: 主表与远程对象同义ORA-12020: 实体化视图未注册ORA-12021: 实体化视图 ""."" 已损坏ORA-12022: ""."" 上的实体化视图日志已具有 rowidORA-12023: 实体化视图 ""."" 上缺少索引ORA-12024: ""."" 上的实体化视图日志没有主键列ORA-12025: ""."" 上的实体化视图日志已有主键ORA-12026: 检测到无效的过滤器列ORA-12027: 过滤器列重复ORA-12028: 主体站点不支持实体化视图类型ORA-12029: LOB 列不能用作过滤器列ORA-12030: 不能创建可快速刷新的实体化视图ORA-12031: 不能使用 ""."" 上实体化视图日志中的主键列ORA-12032: 不能使用 ""."" 上实体化视图日志中的 rowid 列ORA-12033: 不能使用 ""."" 上实体化视图日志中的过滤器列ORA-12034: ""."" 上的实体化视图日志比上次刷新后的内容新ORA-12035: 无法使用 ""."" 上的实体化视图日志ORA-12036: 可更新的实体化视图日志非空, 请刷新实体化视图ORA-12037: 未知的导出格式ORA-12038: 文字字符串具有意外的长度ORA-12039: 无法使用本地回退段 ""ORA-12040: 主体站点不支持主体回退段选项ORA-12041: 无法记录索引表 ""."" 的 ROWIDORA-12042: 在单一进程模式下无法更改 job_queue_processes ORA-12043: CREATE MATERIALIZED VIEW 选项无效ORA-12044: CREATE MATERIALIZED VIEW LOG 选项无效ORA-12045: ALTER MATERIALIZED VIEW LOG 选项无效ORA-12046: 无法将信任的约束条件用于刷新远程 MVORA-12047: PCT FAST REFRESH 不能用于实体化视图 ""."" ORA-12048: 刷新实体化视图 ""."" 时出错ORA-12051: ON COMMIT 属性与其它选项不兼容ORA-12052: 无法快速刷新实体化视图 .ORA-12053: 这不是一个有效的嵌套实体化视图ORA-12054: 无法为实体化视图设置 ON COMMIT 刷新属性ORA-12055: 实体化视图定义与现有实体化视图具有循环相关性ORA-12056: 无效的 REFRESH 方法ORA-12057: 实体化视图 ""."" 无效, 必须进行完全刷新ORA-12058: 实体化视图不能使用预建表ORA-12059: 预建表 ""."" 不存在ORA-12060: 预建表的形式与定义查询不匹配ORA-12061: 无效的 ALTER MATERIALIZED VIEW 选项ORA-12062: 接收到的事务处理在来自站点的事务处理序列之外ORA-12063: 无法从站点应用事务处理ORA-12064: 无效的刷新序列号:ORA-12065: 未知的刷新组标识符ORA-12066: CREATE MATERIALIZED VIEW 命令无效ORA-12067: 不允许刷新组为空ORA-12068: 用于实体化视图 ""."" 的可更新实体化视图日志不存在ORA-12069: 无效的脱机实例化对象ORA-12070: 无法对实体化视图 ""."" 进行脱机实例化ORA-12071: ""."" 的定义查询对脱机实例化无效ORA-12072: 无法创建 ""."" 的可更新实体化视图日志数据ORA-12073: 无法处理请求ORA-12074: 无效的内存地址ORA-12075: 无效的对象或字段ORA-12076: 无效的阈值ORA-12077: 临时可更新实体化视图日志不存在ORA-12078: 对刷新组 ID 的快速刷新失败ORA-12079: 实体化视图选项要求 COMPATIBLE 参数为或更大的值ORA-12081: 不允许对表 ""."" 进行更新操作ORA-12082: ""."" 不能是索引表ORA-12083: 必须使用 DROP MATERIALIZED VIEW 来删除 ""."" ORA-12084: 必须使用 ALTER MATERIALIZED VIEW 来更改 ""."" ORA-12085: ""."" 上的实体化视图日志已有对象 IDORA-12086: 表 ""."" 不是对象表ORA-12087: 在 "" 拥有的表上不允许联机重新定义ORA-12088: 不能联机重新定义具有不受支持数据类型的表 ""."" ORA-12089: 不能联机重新定义无主键的表 "".""ORA-12090: 不能联机重新定义表 "".""ORA-12091: 不能联机重新定义具有实体化视图的表 ""."" ORA-12092: 不能联机重新定义复制的表 "".""ORA-12093: 中间表 ""."" 无效ORA-12094: 联机重新定义过程中出错ORA-12096: ""."" 上的实体化视图日志中存在错误ORA-12097: 刷新时主表发生更改, 请重新刷新ORA-12098: 无法为实体化视图加注释ORA-12099: 不要进入快速表扫描 (kdst) 模式ORA-12100: ""."" 上的实体化视图日志已经有序列ORA-12150: TNS: 无法发送数据ORA-12151: TNS: 从网络层收到错误的包类型ORA-12152: TNS: 无法发送中断消息ORA-12153: TNS: 未连接ORA-12154: TNS: 无法解析指定的连接标识符ORA-12155: TNS: 在 NSWMARKER 包中收到错误的数据类型ORA-12156: TNS: 试图从错误状态中重置线路ORA-12157: TNS: 内部网络通信错误ORA-12158: TNS: 无法初始化参数子系统ORA-12159: TNS: 跟踪文件不可写ORA-12160: TNS: 内部错误: 错误号不正确ORA-12161: TNS: 内部错误: 收到部分数据ORA-12162: TNS: 指定的 Net 服务名不正确ORA-12163: TNS: 连接描述符太长ORA-12164: TNS: Sqlnet.fdf 文件不存在ORA-12165: TNS: 试图将跟踪文件写入交换空间。
目录第1章 Oracle数据库常见问题诊断方法 (1)1.1 常见错误篇 (1)1.1.1 ORA-12571、ORA-03113、ORA-03114、ORA-01041 (1)1.1.2 ORA-01000 (1)1.1.3 ORA-01545 (2)1.1.4 ORA-0165x (2)1.1.5 ORA-01555 (3)1.1.6 ORA-04031 (3)1.1.7 ORA-04091 (3)1.1.8 ORA-01242、ORA-01113 (4)1.2 内部错误篇 (4)1.2.1 ORA-00600【12330】错误 (4)1.2.2 ORA-00604【xxx】错误 (5)1.2.3 ORA-00600【3339】错误 (5)1.2.4 ORA-00600【13004】错误 (5)1.3 分布式事务篇 (6)1.3.1 诊断分布式事务 (6)1.3.2 检查其它节点的事务(DBA_2PC_NEIGHBORS) (6)1.3.3 通过DBA_2PC_PENDING字典表检查事务的状态 (6)1.3.4 检查处理结果 (7)1.3.5 COMMIT FORCE或ROLLBACK FORCE命令 (7)1.4 OPS或RAC篇 (8)1.4.1 准备工作 (8)1.4.2 紧急情况下的状态备份 (8)1.4.3 OPS设计、配置准则 (9)1.4.4 OPS常见问题 (9)1.4.5 诊断分析步骤 (9)1.5 非OPS篇 (18)1.5.1 ORACLE数据库系统常见问题:空间方面问题 (18)1.5.2 ORACLE数据库系统常见问题:性能方面问题 (18)1.5.3 ORACLE数据库系统常见问题:锁争用方面问题 (19)1.5.4 ORACLE数据库系统常见问题:内存方面问题 (20)1.5.5 ORACLE问题分析脚本 (20)1.5.6 SQL*NET篇 (24)1.5.7 TNS-12154 Error 或ORA-12154 (24)1.5.8 NL-00462 Error 或ORA-00462 (25)1.5.9 NL-00405 Error 或ORA-00405 (26)1.5.10 TNS-01155 Error 或ORA-01155 (26)1.5.11 TNS-12537 、TNS-12560、TNS-00507 Error (26)1.5.12 TNS-12203 Error (27)1.5.13 TNS-12533 Error (27)1.6 备份与恢复篇 (27)1.6.1 EXP-00942 或ORA-00942、ORA-00904错误 (28)1.6.2 EXP-00037 或 ORA-00037 (28)1.6.3 IMP-00009 或ORA-00009 (28)1.6.4 EXP-00041或ORA-00041 (29)1.6.5 IMP-00016 、IMP-00036 、IMP-00037 、IMP-00038 (29)第1章 Oracle数据库常见问题诊断方法1.1 常见错误篇ORACLE的这类错误在ORALCE的文档中有详细说明,但原因及措施说明不详细,本文当着重说明如何解决这类错误。
XX1012Oracle数据库诊断事件详解什么是Oracle数据库的诊断事件呢?简而言之的来说Oracle的诊断事件就是Oracle数据库中用于实现一些特殊功用的类别,通常要紧用于实现下列几个方面的功用:➢ 改变Oracle数据库的行为➢ 启用收集Oracle数据库的跟踪或者者调试信息➢ 启用对Oracle数据库的额外的错误检测一、 Oracle数据库诊断事件简介什么是Oracle数据库的诊断事件呢?简而言之的来说Oracle的诊断事件就是Oracle数据库中用于实现一些特殊功用的类别,通常要紧用于实现下列几个方面的功用:Ø 改变Oracle数据库的行为Ø 启用收集Oracle数据库的跟踪或者者调试信息Ø 启用对Oracle数据库的额外的错误检测如何去设置Oracle数据库的各类诊断事件呢?我们首先来给设置诊断事件下一个简单的定义,就是让Oracle数据库产生跟踪信息日志文件。
设置诊断事件有如下的四种方法:Ø 在INIT或者者SPFILE初始化文件中设置这种设置的诊断事件都是针关于整个实例的:event='event trace name context forever, level level';假如需要设置多个诊断事件,能够通过下列两种方法:方法一:使用冒号分隔开两个诊断事件event = "10248 trace name context forever, level 10:10249 trace name context forever, level 10"方法二:使用连续的行设置诊断事件event = "10248 trace name context forever, level 10"event = "10249 trace name context forever, level 10"Ø 在当前SQL会话中设置针对整个实例的诊断事件的设置:ALTER SYSTEM SET EVENTS 'event trace name context forever, level level';禁用设置的诊断事件:ALTER SYSTEM SET EVENTS 'event trace name context off';针对当前会话的诊断事件的设置:ALTER SESSION SET EVENTS 'event trace name context forever, level level';禁用设置的诊断事件:ALTER SESSION SET EVENTS 'event trace name context off';Ø 在另外一个SQL会话中使用DBMS_SYSTEM.SETEV存储过程设置EXECUTE sys.dbms_system.set_ev(sid, serial#, , , '')其中的SID,SERIAL#都是从视图V$SESSION中获得的。
Oracle 性能调整案例Oracle诊断案例-I/O子系统 (1)系统软硬件现状 (1)Vmstat数据 (2)Statpack数据 (2)业务分析 (3)数据库性能分析 (3)修改建议 (4)调整后性能的改善 (5)Oracle诊断案例-Spfile案例 (5)Oracle诊断案例-SGA与Swap (17)SGA与Swap之二 (32)Oracle诊断案例-Sql_trace之一 (38)Oracle诊断案例-I/O子系统系统软硬件现状Oracle数据库运行环境Unix主机: 2 * IBM M85CPU :4个系统内存:6GB磁盘阵列子系统:IBM SSA RAID-5Oracle版本:8.1.7.1.0 32-bitOS 版本: AIX 4.3.3-10业务系统:×××××业务管理系统Vmstat数据kthr memory page faults cpu----- ----------- ------------------------ ------------ -----------r b avm fre re pi po fr sr cy in sy cs us sy id wa2 4 897649 6717 0 7 23 437 957 0 1011 1184 164 13 7 60 1912 9 893274 9676 0 30 0 0 0 0 1787 70898 20625 41 23 2 346 15 881613 18578 0 147 0 0 0 0 2035 62910 14427 37 31 1 311 10 880631 17850 0 13 0 0 0 0 1940 38678 10031 27 17 4 5116 10 886848 9508 0 36 0 0 0 0 2226 48349 7778 26 16 4 542 14 892766 541 0 20 0 0 0 0 2331 88696 14576 43 18 1 3815 19 895124 34 0 15 382 2007 4143 0 1878 59445 10411 26 16 2 561 12 883561 12427 0 28 270 1288 2735 0 1910 45451 6520 20 14 1 6522 11 882698 11794 0 29 0 0 0 0 1856 51539 5399 21 25 4 509 19 879662 12982 0 17 0 0 0 0 1914 39960 7045 20 16 3 611 12 878367 12601 0 33 0 0 0 0 2016 30913 5410 18 104 682 14 881742 7084 0 51 0 0 0 0 2256 35721 7131 22 7 5 652 11 888809 0 0 25 149 975 1981 0 1893 46405 6496 22 14 6 581 11 877357 9894 0 27 212 631 1314 0 1636 28126 4256 16 26 2 553 9 880033 5315 0 25 0 0 0 0 1714 44692 5093 20 24 3 537 11 879638 3862 0 48 0 0 0 0 2044 62118 8235 27 28 3 421 9 871947 9857 0 28 0 0 0 0 1954 49887 11556 30 22 5 448 12 872208 7408 0 40 0 0 0 0 2132 38014 6991 22 14 4 591 10 879075 3815 0 14 396 2269 4650 0 1775 38587 5830 16 14 6 633 14 884434 4 0 24 235 1632 3575 0 1963 51640 7198 22 15 4 60 。
Statpack数据Top 5 Wait Events~~~~~~~~~~~~~~~~~ Wait % Total Event Waits Time (cs) Wt Time -------------------------------------------- ------------ ------------ ------- log file sync 95,588 1,675,398 58.21 db file sequential read 402,294 917,696 31.88 db file parallel write 7,780 114,321 3.97db file scattered read 8,560 70,945 2.46buffer busy waits 12,303 40,058 1.39-------------------------------------------------------------(详细信息参见《2.16 如何理解STATPACK的报告》.doc)业务分析1. 主要业务发生在每天8点到22点之间2. 每天的事务量是60G左右,要求较高的数据的完整性3. 每天有较多的DML(主要是INSERT 和UPDATE操作,几乎没有DELETE操作)和大量的查询操作。
DML操作主要是用来更新在B/S结构和C/S结构中的业务信息,select操作主要是提供大量的检索功能,业务的操作模式是每个DML之后就会commit;4. 目前的备份方式是冷备,目前的归档方式是归档到一个本地磁盘和RAID上各一份5. 目前的Web 服务,数据库服务,C/S结构的服务器都跑在RAID5上数据库性能分析问题1:由于系统存在大量的transaction, 造成了redo log对磁盘的巨大io压力,造成了系统大量的IO 等待。
所以,当前数据库的主要性能瓶颈是磁盘子系统的性能问题,系统的IOWait 严重偏高,尤其是log file sync事件,20分钟内发生95,588次,平均每秒发生80个左右,占系统所有等待时间的将近60%。
由于log file sync的产生是由于应用程序过度的Commit造成的,所以最好的方法是修改应用程序,采用Batch Commit技术,来提高系统的性能。
如果由于第三方软件的原因,导致应用程序无法进行修改,我们也可以提出一个变通的方案,即优化用户磁盘子系统,提高用户磁盘的性能,以达到减少系统的IO资源等待,提高系统性能的目标。
问题2:还有一个系统的主要问题所在是Oracle的配置问题。
当前系统有6GB的物理内存,但是Oracle SGA只是开了600M。
这是对资源的巨大浪费。
如果这个服务器只是运行Oracle Database,那么Oracle SGA可以调节到3.5-4GB。
(当前系统使用的是32Bit Oracle,建议升级到64Bit Oracle)。
问题3:1)另外的几个小问题是系统地rollback segment 数目偏少。
2)系统地log_buffer偏大。
3)系统把redo log file作了两个member, 是高可用性的一个比较好的策略,不过当前的配置是在同一个磁盘上面,似乎意义不大。
Log file switch 过于频繁, logfile 大小偏小。
修改建议1)如果系统没有配置hacmp作为HA 可用性解决方案,建议把redolog 从hdisk2,hdisk3所在的磁盘移动到hdisk0,hdisk1上面(采用raw device)。
这样,可以大大降低系统地IO 压力,同时保证redo log的安全性。
2)当前磁盘子系统,主要IO 集中在hdisk2, hdisk3这两个逻辑磁盘上面。
为了降低系统地IO 压力,建议把一部分datafile 移到hdisk4磁盘上。
3)如果有可能调节引用程序,建议使用batch commit技术,把下面的语句修改一下:同时注意,Buffer Gets Executions Gets per Exec % Total Hash Value--------------- ------------ -------------- ------- ------------2,440,675 1,218,841 2.0 18.1 1115576732update nlc50.z07 set z07_rec_key = :r1:i1,z07_sequence = :r2:i2,z07_level = :r3:i3,z07_source = :r4:i4,z07_history = :r5:i5 where z07_rec_key = :v1同时注意:Executions Rows Processed Rows per Exec Hash Value------------ ---------------- ---------------- ------------1,218,841 355 0.0 1115576732update nlc50.z07 set z07_rec_key = :r1:i1,z07_sequence = :r2:i2,z07_level = :r3:i3,z07_source = :r4:i4,z07_history = :r5:i5 where z07_rec_key = :v1程序的写法有问题。
执行那么多次,实际上被处理的行的数据很少,就是实际上很多都是无用功。
却找成了系统的那么多的commit,从而赵成了IO 子系统的很大的压力。
4)调节下面的SQL的索引策略:Physical Reads Executions Reads per Exec % Total Hash Value--------------- ------------ -------------- ------- ------------83,852 5 16,770.4 19.9 3357555463select max(z30_rec_key_2) from nlc50.z30 where z30_rec_key_2 like :v1SQL ordered by Executions for DB: ALEPH0 Instance: aleph0 Snaps: 1 -2-> End Executions Threshold: 100497,348 17,371 0.0 695152841select z98_rec_key,z98_type,z98_direction,z98_compress_type,z98_total_map_length,z98_map_length,z98_data from nlc09.z98 where z98_rec_key >= :v1340,815 93,393 0.3 3969206952select z98_rec_key,z98_type,z98_direction,z98_compress_type,z98_total_map_length,z98_map_length,z98_data from nlc01.z98 where z98_rec_key >= :v1141,423 137,021 1.0 3698977705select * from nlc01.z101 where z101_rec_key >= :v1调整后性能的改善系统IO Wait%降低到10%左右,系统CPU空闲可以从现在的小于8%增加到30%以上。