日期:2014-05-16  浏览次数:20413 次

Oracle 10g 常见问题处理

1.Oracle常见错误代码的分析与解决
2.ORACLE 监听错误(ora-12514)的解决
3.oracle监听器无法启动,提示“错误1067:进程意外终止”
4.Oracle not available Shared memory realm does not exist的解决办法
5.在oracle数据库中,如何增加表空间的大小,有两种方法增加表空间的大小
6.查询表空间大小和表空间使用情况
7.Oracle 如何解决ORA-04031错误
8.ORA-01034 错误的解决办法
9.库高速缓冲命中率
10.测试oracle数据库是否安装成功
******************************************************************************************
--------------*************---------------
1.Oracle常见错误代码的分析与解决 ***********

在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,
而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分:

ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME

产生原因:上述ORACLE错误为回滚段表空间不足引起的,这也是ORACLE数据管理员最常见的ORACLE错误信息。
当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,
无法再进行分配,就会出现上述的错误。

解决方式:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,
根据具体的情况可以增加一个或多个表空间。当然这与还与你主机上的裸盘设备有关,
如果你主机的裸盘设备已经没有多余的使用空间,建议你不要轻意的增加回滚段表空间的大小,
可使用下列的语句先查询一下剩余的tablespace空间有多少:

Select user_name,sql_text from V$open_cursor where user_name=’’;

如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。
你也可以用以下语句来检测一下rollback segment的竞争状况:

Select class,count from V$waitstat where calss in(‘system undo header’,’system undo block’,’undo header’,’undo block’);和

Select sum(value) from V$sysstat where name in (‘db_block_gets’,’consistents gets’);

如果任何一个class in count/sum(value)大于1%,就应该考虑增加rollback segment。

相应的英文如下:

Cause:Failed to allocate extent from the rollback segment in tablespace

Action:Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace.

ORA-01652:unable to extend temp segment by num in tablespace name

产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。

解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,
表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。
先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:

SQL>Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name=’’;

返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

SQL>SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME=name;

通过下面的SQL命令修改临时段表空间的缺省存储值:

SQL>ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);

--------------------******************-----------------------
2.ORACLE 监听错误(ora-12514)的解决
C:\Documents and Settings\Administrator>sqlplus sys/system@dbs as sysdba


SQL> shutdown immediate;

数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

ERROR:

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
解决ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
错误原因分析:
————————
??? 检查监听,发现未设置对服务名的监听(Oracle10g默认安装后不自动设置监听)。

??? 当你的tnsnames.ora 文件中的SERVICE_NAME没有向你想要连接的数据库服务器中的监听器注册的时候,就会出现这个错误信息。如果你的客户端配置没有发生变化,那么数据库服务器配置就必须进行改变,否则你用来进行连接的SERVICE_NAME就永远不会注册到监听器。

??? 注册到监听器的SERVICE_NAME 是由数据库实例的service_names 参数来决定的。查看参考指南中的服务器文档来找到有关当这个参数没有设置的时候,它的默认值是如何设置的详细信息。你可以通过明确地对其进行设置,来避免它被另一个参数的变化所影响。

?? 你还有可能是遇到了定时的问题。如果监听器被重新启动,那么数据库实例就必须向它重新注册。通常情况下,每60秒就会出现这样的问题。如果你迫不及待,那么就以数据库管理员的身份登录到数据库服务器,并且运行“更改系统注册器”,这样就可以强制它立即注册到监听器中。
—————————————————————————————————————————
解决办法:
——————
1. 打开文件"<OracleHome>/network/admin/listener.ora" ,你将看到如下的内容:
??? SID_LIST_LISTENER =
??? (SID_LIST =
????? (SID_DESC =
??????? (SID_NAME = PLSExtProc)
??????? (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
??????? (PROGRAM = extproc)
????? )
??? )
?? 2. 将下面的语句添加到上面的语句中去。
??????? (SID_DESC =
??????? (GLOBAL_DBNAME = ORACLE)
??????? (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)??
??????? (SID_NAME = ORACLE)
?????? )
?? 3. 文件的内容则变成了如下所示:
???? SID_LIST_LISTENER =
??? (SID_LIST =
????? (SID_DESC =
??????? (SID_NAME = P