用友股份-LE服务支持部技术方案--《NC技术问题解决之数据库问题》建立日期:2013-01-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-JS-2013-00032/18文档控制创建记录审阅人姓名所属部门职位审阅签字发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-01-01V1.03目录1.startup启动时提示ORA-03113................................................................................42.SYS用户登陆的时候报错ORA-28056......................................................................43.数据库无响应...........................................................................................................44.数据库运行不稳定...................................................................................................65.如何收缩表空间.......................................................................................................76._b_tree_bitmap_plans参数导致的效率问题.........................................................87.ORACLE11g空表无法导出解决方法........................................................................88.数据文件迁移问题解决案例..................................................................................1141.startup启动时提示ORA-03113系统环境:oracle11g问题描述:sqlplus应用startup启动时提示ORA-03113:end-of-fileoncommunicationchannel检查分析:远程发现归档日志没空间了解决方法:删除些日志,重启(若无专人管理,最好设置成非归档模式)2.SYS用户登陆的时候报错ORA-28056系统环境:oracle11g问题描述:Sys用户登陆的时候报错:ORA-28056:WritingauditrecordstoWindowsEventLogfailedOSD-2094672:Message2094672notfound;product=RDBMS;facility=SOSDO/S-Error:(OS1502)??????????????????检查分析:网上查了下该问题是oracle11g存在的一个问题,当windows事件查看器日志满的时候,就会报错解决方法:清空或者调大日志查看器即可3.数据库无响应系统环境:oracle10.2.0.1问题描述:在数据库日志中多次出现如下图所示的报错信息(在此信息后均为数据库重启的相关信息)。5检查分析:该问题可能由于Oracle数据库的BUG“Bug4401119AIX:CrashpossibleonAIX(ORA-206)”导致,该bug的描述如下图目前用户的操作系统为AIX5300-05-00,数据库版本为10.2.0.1操作系统对应参数中当前设置值如下6可见符合oracle对应的BUG描述。解决方法:针对该问题,目前已经按照oracle的改善建议将AIX对应的参数minservers调整至64,maxservers调整至256,maxreqs调整至8192,参数调整会在数据库服务器下次重启后生效。但是,如果调整后还无法有效遏制该现象发生,建议用户将操作系统升级至5300_06sp4或以上版本,并且数据库升级到10.2.0.4或以上版本。4.数据库运行不稳定系统环境:oracle10.2.0.1问题描述:该服务器采用windows2003server操作系统,本地登录后操作非常缓慢(打开资源管理器等操作有明显延迟),显示不正常,部分桌面在显示区域外,显示适配器为默认的“VGA标准适配”,另一台X3650会显示硬件型号为G200。检查分析:数据库日志中有多次的故障信息,以2月26日日志中记录的故障信息为例,服务器磁盘或者盘阵出现短时I/O故障(oracleora27070osd04016os1450)ORA-27070:异步读取/写入失败OSD-04016:异步I/O请求排队时出错。O/S-Error:(OS1450)由于I/O设备错误,无法运行此项请求。并导致此时数据库控制文件及重做日志文件无法读写。7而该故障发生前,操作系统出现了大量的编号为333(来源:ApplicationPopup)的和编号为2019(来源:Srv)的错误:事件ID:2019来源:Srv类型:错误描述:服务器无法通过系统非页面共享区来进行分配,因为共享区当前是空的。事件ID:333描述:由注册表引起的I/O操作发生了不可恢复的错误。注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。经查证微软支持网站,333问题可能由于防病毒软件诺顿或者是C盘损坏导致(该用户是卡巴斯基)2019问题可能来自于“如果计算机上安装的某个非Microsoft应用程序使用了旧版的内核模式筛选器驱动程序,就会出现此问题”。该问题详见《在处理文件服务器上的文件时文件服务器性能下降并出现延迟》,详见引文http://support.microsoft.com/?scid=kb;zh-cn;822219&spid=1131&sid=784解决方法:首先对该服务器的磁盘及盘阵进行硬件检查,其次对该操作系统的驱动程序进行更新,并密切关注事件查看器中是否还会出现该问题;另外由于该用户配置不太合理,数据库服务器使用32位windows操作系统,建议用户使用64位linux操作系统。5.如何收缩表空间问题描述:用户在做拉横操作后导致NNC_INDEX01表空间数据剧烈增多,由于数据文件可自动增长,数据文件尺寸也大幅增加。问题解决:后发现实际数据没有那么多,故需要收缩表空间并缩减数据文件尺寸。查询数据文件实际的使用状况,收缩表空间。8收缩表空间处理方法:见附件二。6._b_tree_bitmap_plans参数导致的效率问题问题描述:某项目库存管理-查询统计-出库汇总表,查询的时候加上“部门”后查询很慢,一个查询要14分钟,不加部门查询时正常。公司编码:08仓库编码:0806部门:“成品生产一线”问题解决:按照NC对Oracle数据库的要求设置隐含参数:altersystemset"_b_tree_bitmap_plans"=false;设置完成后正常。7.ORACLE11g空表无法导出解决方法系统环境:Oracle11g问题描述11G中有个新特性,当表无数据时,不分配segment,以节省空间解决方法:该问题有三种解决方法:方法一:insert一行,再rollback就产生segment了。该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。弊端:该方式如果空表很多,工作量很大。方法二:设置deferred_segment_creation参数9showparameterdeferred_segment_creationNAMETYPEVALUE-----------------------------------------------deferred_segment_creationbooleanTRUESQL>altersystemsetdeferred_segment_creation=false;系统已更改。SQL>showparameterdeferred_segment_creationNAMETYPEVALUE-----------------------------------------------deferred_segment_creationbooleanFALSE该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。方法三:先查询一下当前用户下的所有空表selecttable_namefromuser_tableswhereNUM_ROWS=0;若不为空则用如下语句查找空表select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0把查询结果导出,执行导出的语句'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'-----------------------------------------------------------altertableAQ$_AQ$_MEM_MC_Hallocateextent;altertableAQ$_AQ$_MEM_MC_Gallocateextent;altertableAQ$_AQ$_MEM_MC_Iallocateextent;altertableAQ$_AQ_PROP_TABLE_Tallocateextent;altertableAQ$_AQ_PROP_TABLE_Hallocateextent;altertableAQ$_AQ_PROP_TABLE_Gallocateextent;altertableAQ$_AQ_PROP_TABLE_Iallocateextent;altertableAQ$_KUPC$DATAPUMP_QUETAB_Tallocateextent;10altertableAQ$_KUPC$DATAPUMP_QUETAB_Hallocateextent;altertableAQ$_KUPC$DATAPUMP_QUETAB_Gallocateextent;altertableAQ$_KUPC$DATAPUMP_QUETAB_Iallocateextent;altertableAQ$_SYS$SERVICE_METRICS_TAB_Tallocateextent;altertableAQ$_SYS$SERVICE_METRICS_TAB_Hallocateextent;altertableAQ$_SYS$SERVICE_METRICS_TAB_Gallocateextent;altertableAQ$_SYS$SERVICE_METRICS_TAB_Iallocateextent;然后再执行exp用户名/密码@数据库名file=/home/oracle/exp.dmplog=/home/oracle/exp_smsrun.log成功!方法四:使用数据泵一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。createdirectorydpdata1as'd:\test\dump';二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)select*fromdba_directories;三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。grantread,writeondirectorydpdata1toscott;四、导出数据1)按用户导expdpscott/tiger@orclschemas=scottdumpfile=expdp.dmpDIRECTORY=dpdata1;2)并行进程parallelexpdpscott/tiger@orcldirectory=dpdata1dumpfile=scott3.dmpparallel=40job_name=scott33)按表名导expdpscott/tiger@orclTABLES=emp,deptdumpfile=expdp.dmpDIRECTORY=dpdata1;4)按查询条件导11expdpscott/tiger@orcldirectory=dpdata1dumpfile=expdp.dmpTables=empquery='WHEREdeptno=20';5)按表空间导expdpsystem/managerDIRECTORY=dpdata1DUMPFILE=tablespace.dmpTABLESPACES=temp,example;6)导整个数据库expdpsystem/managerDIRECTORY=dpdata1DUMPFILE=full.dmpFULL=y;推荐方法:推荐使用数据泵,若客户或者顾问不愿使用数据泵,可使用方法三其他:随着Oracle11g使用客户的增多,该问题也已经多次遇见,建议在实施期间就设置deferred_segment_creation为false8.数据文件迁移问题解决案例系统环境:NC版本NC56数据库服务器型号配置1台DL580G7:4个CPU,32G内存12数据库服务器操作系统WindowsServer2008数据库类型及版本Oracle10.2.0.4目前数据量大小2.9G问题描述:客户买了磁盘阵列,但是实施人员把oracle数据文件放在本地磁盘,没有使用磁盘阵列,客户要求迁移到磁盘阵列上检查分析:其数据迁移需要迁移控制文件、数据文件、日志文件和临时文件,迁移前关闭数据库服务器,物理备份数据相关文件,然后分别对各个文件进行迁移。解决方法:一、迁移控制文件$sqlplus'/assysdba'#是用的spfile启动的,spfile文件不能修改,所以要做这一步。SQL>createpfilefromspfile#关闭数据库。SQL>shutdownimmediate#cp控制文件到目标位置。copyD:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\control*F:\ORADATA\NCSCNDB13#修改$ORACLE_HOME/dbs/init$ORACLE_SID.ora文件中的控制文件的位置。#启动数据库指定参数文件。SQL>startuppfile='D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\init$ORACLE_SID.ora'#下次启动数据库是直接就可以用startup启动了。SQL>createspfilefrompfile;二、迁移日志文件$sqlplus'/assysdba'#关闭数据库。SQL>shutdownimmediate#cp日志文件到目标位置。copyD:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\redo*F:\ORADATA\NCSCNDB\#让数据库以mount模式启动。SQL>startupmount;#修改数据库中日志文件的位置。SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\redo01.log'to'F:\ORADATA\NCSCNDB\redo01.log'SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\redo02.log'to'F:\ORADATA\NCSCNDB\redo02.log'14SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\redo03.log'to'F:\ORADATA\NCSCNDB\redo03.log'#修改数据库的状态。SQL>alterdatabaseopen;#查看修改结果。SQL>select*fromv$logfile;三、迁移数据文件$sqlplus'/assysdba'SQL>colfile_nameformata60SQL>coltablespace_nameformata20SQL>selectfile_name,tablespace_namefromdba_data_files;FILE_NAMETABLESPACE_NAME--------------------------------------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA01.DBFNNC_DATA01D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA02.DBFNNC_DATA02D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA03.DBFNNC_DATA03D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX01.DBFNNC_INDEX01D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX02.DBFNNC_INDEX0215D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX03.DBFNNC_INDEX03D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\USERS01.DBFUSERSD:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\SYSAUX01.DBFSYSAUXD:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\UNDOTBS01.DBFUNDOTBS1D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\SYSTEM01.DBFSYSTEM10rowsselected.SQL>shutdownimmediate;#启动数据库到mount状态SQL>startupmount;#修改数据文件的位置。SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\USERS01.DBF'to'F:\ORADATA\NCSCNDB\USERS01.DBF';SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\SYSAUX01.DBF'to'F:\ORADATA\NCSCNDB\SYSAUX01.DBF';SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\UNDOTBS01.DBF'to'F:\ORADATA\NCSCNDB\UNDOTBS01.DBF';SQL>alterdatabaserenamefile'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NCSCNDB\SYSTEM01.DBF'to'F:\ORADATA\NCSCNDB\SYSTEM01.DBF';16SQL>ALTERTABLESPACEnnc_data01RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA01.DBF'TO'F:\ORADATA\NNC_DATA01.DBF';SQL>ALTERTABLESPACEnnc_data02RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA02.DBF'TO'F:\ORADATA\NNC_DATA02.DBF';SQL>ALTERTABLESPACEnnc_data03RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_DATA03.DBF'TO'F:\ORADATA\NNC_DATA03.DBF';SQL>ALTERTABLESPACEnnc_index01RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX01.DBF'TO'F:\ORADATA\NNC_INDEX01.DBF';SQL>ALTERTABLESPACEnnc_index02RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX02.DBF'TO'F:\ORADATA\NNC_INDEX02.DBF';SQL>ALTERTABLESPACEnnc_index03RENAMEDATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\NNC_INDEX03.DBF'TO'F:\ORADATA\NNC_INDEX03.DBF';#启动数据库到open状态SQL>alterdatabaseopen;#查看修改结果。SQL>selectfile_name,tablespace_namefromdba_data_files;FILE_NAMETABLESPACE_NAME17--------------------------------------------------------------------------------F:\ORADATA\NNC_INDEX03.DBFNNC_INDEX03F:\ORADATA\NNC_INDEX02.DBFNNC_INDEX02F:\ORADATA\NNC_INDEX01.DBFNNC_INDEX01F:\ORADATA\NNC_DATA03.DBFNNC_DATA03F:\ORADATA\NNC_DATA02.DBFNNC_DATA02F:\ORADATA\NNC_DATA01.DBFNNC_DATA01F:\ORADATA\NCSCNDB\USERS01.DBFUSERSF:\ORADATA\NCSCNDB\SYSAUX01.DBFSYSAUXF:\ORADATA\NCSCNDB\UNDOTBS01.DBFUNDOTBS1F:\ORADATA\NCSCNDB\SYSTEM01.DBFSYSTEM四、重建临时文件$sqlplus'/assysdba'--启动数据库SQL>startup--创建中转临时表空间SQL>createtemporarytablespaceTEMP2TEMPFILE'F:\ORADATA\NCSCNDB\temp02.dbf'SIZE512MREUSEAUTOEXTENDONNEXT640KMAXSIZEUNLIMITED;--改变缺省临时表空间为刚刚创建的新临时表空间temp2SQL>alterdatabasedefaulttemporarytablespacetemp2;--删除原来临时表空间18SQL>droptablespacetempincludingcontentsanddatafiles;--重新创建临时表空间SQL>createtemporarytablespaceTEMPTEMPFILE'F:\ORADATA\NCSCNDB\temp01.dbf'SIZE10240MREUSEAUTOEXTENDONNEXT100MMAXSIZEUNLIMITED;--重置缺省临时表空间为新建的temp表空间SQL>alterdatabasedefaulttemporarytablespacetemp;--删除中转用临时表空间SQL>droptablespacetemp2includingcontentsanddatafiles;其他:最好是在mount状态下使用rename操作,如果在open状态下采用tablespaceoffline,然后altertablespacerenamedatafile‘’to‘’,然后tablespaceonline的时候容易报如下错误:SQL>ALTERTABLESPACENNC_DATA01ONLINE;ERRORatline1:ORA-01113:file5needsmediarecoveryORA-01110:datafile5:'F:\ORADATA\NNC_DATA01.DBF'解决方案如下:SQL>recoverdatafile'F:\ORADATA\NNC_DATA01.dbf';Mediarecoverycomplete.SQL>ALTERTABLESPACENNC_DATA01ONLINE;Tablespacealtered.