oracle遇到的问题及答案.docx
《oracle遇到的问题及答案.docx》由会员分享,可在线阅读,更多相关《oracle遇到的问题及答案.docx(50页珍藏版)》请在冰点文库上搜索。
![oracle遇到的问题及答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/86e45619-be9b-44cf-a8aa-343980c314e1/86e45619-be9b-44cf-a8aa-343980c314e11.gif)
oracle遇到的问题及答案
问题一:
Oracle11G用EXP时,空表不能导出解决方法
第一查询空表到底有多少张,也就是查询为分配分配segment的表有多少张
SQL>selecttable_namefromuser_tableswhereNUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已选择10行。
第二查询在当前用户下有总的有多少张表
SQL>selectcount(*)FROMUSER_TABLES;
COUNT(*)
----------
32
第三导出当前用户下的数据
C:
\Users\Administrator>explcpt/lcptfile=E:
\0702bj\lcpt.dmpwner=lcptlog=E
702bj\lcpt.log
Export:
Release11.2.0.1.0-Productionon星期一7月210:
42:
072012
Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.
连接到:
OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-Productio
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions
已导出ZHS16GBK字符集和AL16UTF16NCHAR字符集
即将导出指定的用户...
.正在导出pre-schema过程对象和操作
.正在导出用户LCPT的外部函数库名
.导出PUBLIC类型同义词
.正在导出专用类型同义词
.正在导出用户LCPT的对象类型定义
即将导出LCPT的对象...
.正在导出数据库链接
.正在导出序号
.正在导出簇定义
.即将导出LCPT的表通过常规路径...
..正在导出表ACCESSORIES导出了18行
..正在导出表AUTH导出了240行
..正在导出表DATA_TEMP导出了1行
..正在导出表FEEDBACK导出了1行
..正在导出表FUNCTION导出了112行
..正在导出表LIMIT导出了1行
..正在导出表MODULE导出了37行
..正在导出表READ_ACCESSORIES导出了2行
..正在导出表REGIONINFO导出了19行
..正在导出表REPORT_EVENT导出了8行
..正在导出表ROLE导出了5行
..正在导出表ROLEAUTH导出了606行
..正在导出表STAFFLOG导出了512行
..正在导出表STAFFROLE导出了56行
..正在导出表STAFFS导出了7行
..正在导出表TASKINFO导出了51行
..正在导出表TASK_FILIALE导出了2行
..正在导出表TASK_FILIALE_FEEDBACK导出了2行
..正在导出表TASK_SWARAJ_READ导出了49行
..正在导出表TESTDATA导出了407行
..正在导出表THIRDFACTURER导出了3行
..正在导出表USESSION导出了1行
.正在导出同义词
.正在导出视图
.正在导出存储过程
.正在导出运算符
.正在导出引用完整性约束条件
.正在导出触发器
.正在导出索引类型
.正在导出位图,功能性索引和可扩展索引
.正在导出后期表活动
.正在导出实体化视图
.正在导出快照日志
.正在导出作业队列
.正在导出刷新组和子组
.正在导出维
.正在导出post-schema过程对象和操作
.正在导出统计信息
成功终止导出,没有出现警告。
结论:
发现只导出了22张表,说明还有10张表没有导出出来。
第四再次查询没有导出的空表
SQL>selecttable_namefromuser_tableswhereNUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已选择10行。
第五查询并构建对空表分配空间segment的SQL命令
SQL>select'altertable'||table_name||'allocateextent;'fromuser_tableswh
erenum_rows=0;
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
altertableDATA_BACKUPallocateextent;
altertableEQUIPMENTallocateextent;
altertableFEEDBACK_ACCESSORIESallocateextent;
altertableSPECIALPICallocateextent;
altertableTASK_THIRDallocateextent;
altertableTASK_THIRDBATCHallocateextent;
altertableTASK_THIRD_DATAallocateextent;
altertableTASK_THIRD_FEEDBACKallocateextent;
altertableTESTDATA_THIRDallocateextent;
altertableTHIRD_ACCESSORIESallocateextent;
已选择10行。
SQL>
第六执行构建好的SQL语句(保存成脚本执行)
setheadingoff;
setechooff;
setfeedbackoff;
settermouton;
spoolE:
\0702bj\allocate.sql;
Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0;
spooloff;
SQL>altertableWGSM_SCallocateextent;
altertableWGSM_SCallocateextent
*
第1行出现错误:
ORA-14254:
不能为(组合)范围分区表或列表分区表指定ALLOCATE
SQL>altertableWGSM_SCmodifypartitionT1allocateextent;
第七再次执行导出操作,就可以把所有的表导出来了
第八设置deferred_segment_creation参数为FALSE后,无论是空表还是非空表,都分配segment。
第九在sqlplus中,执行如下命令:
SQL>altersystemsetdeferred_segment_creation=false;
该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
如需导出上面的空表,只能用上面的方法。
第十11G中有个新特性,当表无数据时,不分配segment,以节省空间
问题二:
ORA-01157,ORA-01110
ORA-01157:
cannotidentify/lockdatafile5-seeDBWRtracefile
ORA-01110:
datafile5:
'/oracle/app/oradata/orcl/hblg_db.dbf'
问题描述:
startup启动数据库提示
ORA-01157:
无法标识/锁定数据文件-请参阅DBWR跟踪文件
ORA-01110:
数据文件:
'D:
\ORACLEDATA\TEST.ORA'
解决方案:
1、shutdownimmediate
ora-01109:
数据库未打开
已经卸载数据库
ORACLE例程已关闭
2、startupmount;
ORACLE例程已经启动
3、alterdatabasedatafile'D:
\ORACLEDATA\TEST.ORA'offlinedrop;
数据库已更改
4、alterdatabaseopen;
数据库已更改
ORA-01081:
cannotstartalready-runningORACLE-shutitdownfirst
机器启动后就是这个样子了,有时重启机器可以启动DB,有时也不行,需重起多次
MicrosoftWindowsXP[版本5.1.2600]
(C)版权所有1985-2001MicrosoftCorp.
C:
\DocumentsandSettings\Administrator>sqlplus/nolog
SQL*Plus:
Release10.1.0.2.0-Productionon星期一10月2512:
47:
432010
Copyright(c)1982,2004,Oracle.Allrightsreserved.
SQL>connect/assysdba
已连接到空闲例程。
SQL>startup
ORA-01081:
cannotstartalready-runningORACLE-shutitdownfirst
SQL>shutdownimmediate
ORA-24324:
未初始化服务句柄
ORA-24323:
不允许此值
ORA-00020:
超出最大进程数(%s)
SQL>shutdownabort
ORA-01031:
insufficientprivileges
SQL>shutdownabort
ORA-01031:
insufficientprivileges
SQL>已断开连接
C:
\DocumentsandSettings\Administrator>sqlplus/nolog
SQL*Plus:
Release10.1.0.2.0-Productionon星期一10月2512:
48:
182010
Copyright(c)1982,2004,Oracle.Allrightsreserved.
SQL>connect/assysdba
已连接到空闲例程。
SQL>shutdownabort
ORACLE例程已经关闭。
SQL>startup
ORA-27102:
outofmemory
OSD-00025:
附加错误信息
O/S-Error:
(OS1453)配额不足,无法完成请求的服务。
SQL>
IMP-00058:
ORACLEerror1033encountered
ORA-01033:
ORACLEinitializationorshutdowninprogressUsername:
感谢这篇文章:
初始情况是用dbvis连接数据库时,提示数据库正在初始化或者停止过程中.后面再没去管,几天后再去连接,还是一样的提示信息.这回很明显是数据库出问题了.
用sysdba进入sqlplus,强制启动数据库,结果显示日志无法归档和超出了回复文件数的限制.
SQL>startupforce
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize117443460bytes
DatabaseBuffers486539264bytes
RedoBuffers7135232bytes
数据库装载完毕。
ORA-16038:
日志3序列号1807无法归档
ORA-19809:
超出了恢复文件数的限制
ORA-00312:
联机日志3线程1:
'E:
\ORADATA\MDC\REDO03.LOG'
查看v$log
SQL>selectgroup#,sequence#,archived,statusfromv$log;
GROUP#SEQUENCE#ARCHIVSTATUS
----------------------------------------------------------
11808NOINACTIVE
31807NOINACTIVE
21809NOCURRENT
看到组3是非当前状态,并且没有归档,使用参考文章中的处理非归档文件的方法.
SQL>alterdatabaseclearunarchivedlogfilegroup3;
数据库已更改。
启动数据库,这个启动成功.
SQL>alterdatabaseopen;
数据库已更改。
用dbvis连接数据库,连接成功.
问题三:
oracle11g数据库导出报“EXP-00003
oracle11g数据库导出报“EXP-00003:
未找到段(0,0)的存储定义...[复制链接]
运维网监控oracle11g数据库导出报“EXP-00003:
未找到段(0,0)的存储定义”错误的解决方案
导出oracle11.2.0.2的服务器的数据时,报“EXP-00003:
未找到段(0,0)的存储定义”错误。
初步分析是由于数据表是空表导致该问题。
Oracle11G在用EXPORT导出时,空表不能导出
11GR2中有个新特性,当表无数据时,不分配segment,以节省空间
解决方法:
一、insert一行,再rollback就产生segment了。
该方法是在在空表中插入数据,再删除,则产生segment。
导出时则可导出空表。
二、设置deferred_segment_creation参数
该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
修改SQL语句:
altersystemsetdeferred_segment_creation=falsescope=both;
需注意的是:
该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
如需导出之前的空表,只能用第一种方法。
三、用以下这句查找空表
select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0;
把查询结果导出,执行导出的语句,强行修改segment值,然后再导出即可导出空表
可以通过以下方式生成数据库更新的sql语句:
在pl/sql的命令窗口中执行
setheadingoff;
setechooff;
setfeedbackoff;
settermouton;
spoolC:
\alterTableSql.sql;
Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0;
spooloff;
自动将空表更新sql生成到C盘根目录的alterTableSql.sql文件中。
然后执行该sql文件更新数据库。
Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0;
也可以换成:
Select'altertable'||table_name||'allocateextent;'fromuser_tableswheresegment_created='NO';
问题四:
ORA-00845:
MEMORY_TARGETnotsupportedonthissystem
今天晚上新装一台Oracle11g的数据库,打算将SGA设大一点,知道11g中有一个新特新MEMORY_TARGET,于是尝一下鲜,谁知报了个ORA-00845,报错比较容易迷惑人,不借助Google真得想半天:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL>altersystemsetmemory_max_target=3Gscope=spfile;
Systemaltered.
SQL>altersystemsetmemory_target=2Gscope=spfile;
Systemaltered.
SQL>
SQL>shutdownimmediate
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
SQL>startup;
ORA-00845:
MEMORY_TARGETnotsupportedonthissystem
来自Oracle的官方解析是:
StartingwithOracleDatabase11g,theAutomaticMemoryManagementfeaturerequiresmoresharedmemory(/dev/shm)andfiledescriptors.ThesizeofthesharedmemoryshouldbeatleastthegreaterofMEMORY_MAX_TARGETandMEMORY_TARGETforeachOracleinstanceonthecomputer.IfMEMORY_MAX_TARGETorMEMORY_TARGETissettoanonzerovalue,andanincorrectsizeisassignedtothesharedmemory,itwillresultinanORA-00845erroratstartup.
简单来说就是MEMORY_MAX_TARGET的设置不能超过/dev/shm的大小:
1
2
[oracle@FWDBFWDB]$df -h|grep shm
tmpfs 2.0G 0 2.0G 0%/dev/shm
还真是撞到这个枪口上了:
马上把它加大:
1
2
[root@FWDB~]#cat/etc/fstab|greptmpfs
tmpfs /dev/shm tmpfs defaults,size=4G00
现在可以通过重启使这个配置生效,也可以通过重新挂载来修改其大小:
1
2
3
[root@FWDB~]#mount-oremount,size=4G/dev/shm
[root@FWDB~]#df-h|grepshm
tmpfs 4.0G 0 4.0G 0%/dev/shm
再次启动数据库,没有报错了。
问题五:
ORA-27046:
filesizeisnotamultipleoflogicalblocksize
修改了Oracle10g里面的SPFILE***.ORA文件,数据库就起不来了,抱错ORA-27046:
filesizeisnotamultipleoflogicalblocksize。
原因是动态服务器参数文件(SPFILE)是一个二进制文件,是不可以手工修改的,如果手工改了,该文件就成为了无效文件。
此时可以通过以下方法解决:
1。
将SPFILE中的参数拷贝到init***.ora文件中
2。
删除DATABASE目录下的SPFILE***.ORA文件。
3。
启动数据库(现在应该可以成功启动)
4。
SQL>createspfilefrompfile 生成SPFIEL
使用startup命令启动数据库,,Oralce将会按照以下顺序在缺省目录中(9i,10i在oracle_home/database目录下)搜索参数文件:
(1)spfile***.ora文件(2)如果没有spfile***.ora文件就用spfile.ora文件(3)如果没有spfile.ora文件就用init***.ora(4)如果没有init***.ora文件就用pfile.ora
所以上面我们采取的解决方法是将破坏的SPFILE中的参数复制到init***.ora中,然后删除SPFILE文件,这样启动时就会用init***.ora文件启动,然后用createspfilefrompfile 命令生成SPFIEL
以后如果要修改SPFILE中的参数绝对不能在手工修改SPFILE文件了,用下面命令:
altersystemsetparameter=Valuescope=spfile|both|memory 例如:
altersystemsetdb_cache_size=24Mscope=both;来修改
问题六:
初始化参数之memory_target
一、引言:
Oracle9i引入pga_aggregate_target,可以自动对PGA进