ORACLE常见错误操作及解决方案

137 views
Skip to first unread message

zhangfan xu

unread,
Apr 16, 2008, 7:43:57 AM4/16/08
to Technology_DB
1.安装Oracle后,更改Windows计算机名,导致部分Oracle第三方工具,如:PLSQL Developer无法登陆,并提示
ORA-12541:TNS:no listener或ORA-12547:TNS:丢失联系等错误信息的解决方法。
答:从Oracle的错误提示来看,是说TNS:no listener ,估计是某种服务没有启动,打开windows管理工具->服务,一看,有一
个OracleOraHome90TNSListener这样的服务,和错误信息题是一致,基本就可以肯定是这个服务所引发的问题。再一看,该服务没有
启动,遂手工启动,刷新后一看,该服务居然马上就自动关闭了。重试N次,结果一样。到Google搜索看看,没想到这还是一个普遍的问题,有一个人提
出,把安装目录下的listener.ora打开察看。如:d:\oracle\ora90\network\admin
\listener.ora。
打开该配置文件后发现如下一段配置信息:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = local)(PORT = 1521))
)
)
)

当看到这一行HOST=local 的时候,问题解决了。原来是由于几天装好Oracle后,又改了Windows的计算机名,而这个配置文件中记录的
监听主机名还是原来的名称,这也就怪不得,OracleOraHome90TNSListener服务无法启动了,马上修改为现在的计算机名,再次启动
OracleOraHome90TNSListener服务成功,PL/SQL Developer连接Oracle数据库成功,不能登陆故障排除。
2、症状:原来是能启动的,但是在改了域名和机器名之后就不能启动:
解决:
1.删除%oracle_home%\network\agent\*.Q
2.重新启动服务即可
c:\agentctl start

解释:
OracleOraHome90Agent服务如果不能启动,则OIA也就不能运行,OIA不能运行则无法实现在OMS登陆后的
Intelligent Agent节点搜索功能,如果不是Intelligent Agent自动搜索的节点,而是手动搜索配置的节点,则登陆OMS
后无法使用诸多OMS提供的GUI功能,例如数据备份和数据导入/导出等。
而由于OracleOraHome90Agent服务的启动和Oracle安装时的机器名域名等密切相关,造成后来改动机器名
后,OracleOraHome90Agent总是无法启动,疑惑了很久,查了很多资料,都没能解决这个问题,于是抱着试试看的心情,在Google上
以“OracleOraHome92Agent”为关键字搜索,结果就出现了最上面所提供的解决方案,真是踏破铁鞋无觅处,得来全不费功夫阿!看了那些
*.Q的二进制文件,估计是Agent在安装时的配置信息,在机器名发生变动后,启动OracleOraHome90Agent服务
时,OracleOraHome90Agent要读取这些二进制文件中的配置信息,配置文件中的机器名与现在的机器名不符合,造成了
OracleOraHome90Agent不能启动,将这些配置文件全部删除,然后用命令行agentctl start从新启动
OracleOraHome90Agent,则会从新将现有的最新机器名写入到配置信息,并从新创建这些配置文件,因而问题得到解决。
总结:
Oracle对服务器机器名,域名等信息高度依赖,所以如无特殊要求,在Oracle数据库安装后,不要轻易修改机器名和域名等相关信息,不然可能会造
成很多不必要的麻烦。
上一页 [1] [2]
【责编:Peng】

3、安装OracleClient时,Developer无法登陆,并提示ORA-12541:TNS:no listener或
ORA-12547:TNS:丢失联系等错误信息的解决方法。
原OracleDataBase下d:\oracle\db_1\network\admin\listener.ora,没有任何改。只是安装
Client Sql/Devloper就无法登陆。从而可知原因是由安装Clinet引起,找到Client安装路径下的\network
\admin\listener.ora并更改listener.ora正常登陆。

4、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=’<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。

5、 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=’<users>’;
返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

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);
适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题: SQL>ALTER USER
username TEMPORARY TABLESPACE new_tablespace_name;
使用ALTER TABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,
就不能再删除它,若要删除,就要删除表空间。


6、ORA-1652:unable to extend temp segment by 207381 in tablespace
TEMPSPACE
ORA-01628:max # of extents num reached for rollback segment num
· 产生原因:这种错误通常为一个回滚段和一个表空间已经达到MAXEXTENTS参数设置的极限。要注意的是这个
MAXEXTENTS不是该回滚段或表空间的硬件极限,硬件极限取决于数据库创建时在init.ora文件中指定的DB_BLOCK_SIZE参数的
值。
解决方法:使用SQL命令ALTER TABLESPACE…STORAGE(MAXEXTENTS XXXX)来增加 MAXEXTENTS,其
中“XXXX”值必须大于错误信息中所指的数值,但不能大于LARGEST MAXEXTENT的值,如果已经达到了LARGEST
MAXEXTENT VALUE,解决的办法就是重新创建较大的范围尺寸,使用带有选项COMPRESS=Y的Export工具导出表,如果表空间有可
用空间,先给表做一个备份,用alter tablespace tablespace_name更改其名字,然后再装载表回数据库。
查看其错误出现的地方,如果出现在回滚段或索引上,那么必须将其删除并重建,如果出现在临时表空间,修改临时表空间的存储字段,便可解决这个问题。
7、ORA-1628:max # extents 50 reached for rollback segment RBS_1
ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?]
产生原因:这种错误通常为ORACLE的内部错误,只对OSS和ORACLE开发有用。ORA-600的错误经常伴随跟踪文件的状态转储(系统状态和进
程状态),系统状态存储将包括ORACLE RDBMS持有的当前对象的信息,进程状态转储则将显示特殊进程持有的对象,当进程符合了某错误条件时,经
常是由于一些信息取自它持有的一个块,如果我们知道这些错误进程持有的块,就容易跟踪问题的来源。
解决方法:一般来说出现这个错误我们本身是无法解决的,只有从提高系统本身各方面来解决这个内部问题,如增加硬件设备,调整系统性能,使用OPS(当然
OPS从某种意义上说并不是一种好的解决方式)等。ORA-600错误的第一个变量用于标记代码中错误的位置(代码中的每个部分的第一变量都不一样),
从第二个到第五个变量显示附加信息,告诉OSS代码在哪里出现了错误。
8、 ORA-00600: internal error code, arguments: [1237], [], [], [], [],
[], [], []

ORA-03113:end-of-file on communication channel
产生原因:通讯不正常结束,从而导致通讯通道终止
解决方法:
1>.检查是否有服进程不正常死机,可从alert.log得知
2>.检查sql*Net Driver是否连接到ORACLE可执行程序
3>.检查服务器网络是否正常,如网络不通或不稳定等
4>.检查同一个网上是否有两个同样名字的节点
5>.检查同一个网上是否有重复的IP地址
9、ORA-00942:table or view does not exist
产生原因:这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运行,则可
能是版本错误。
解决方法:因为Import和Export共享的一些视图是通过运行CATEXP.SQL来装载的(它们具有相同的视图),并不生成单独的
CATEXP.SQL,因而造成视图与Export代码不同步,较难保持彼此之间的兼容,用户就必须建立自己的Export应用,从而避免
ORA-00942的错误。
上述错误均为我们在使用回滚段时比较常见的问题,ORA-01598指明当前使用的回滚段的状态为“not online”,不能使用,将它改
为“online”状态即可使用;ORA-01636指明当前回滚段已经为“online”状态,可以直接使用,不用再集合它。
10、ORA-1636 signalled during: alter rollback segment rb00 online
我们在做统计时还可能遇到下述问题:一个rollback segment的状态为”Needs Recovery”的现象,这是由于ORACLE回退
一个事物表中的没有提交的事物时失败所造成的。通常原因为一个datafile或者tablespace是在offline的状态或者一个undo的目
标被破坏或者rollback segment被破坏。解决的办法是将所有的tablespace和datafile都置为online状态,如果不能
解决则做下面的工作:
1>.在initsid.ora中加入event=”10015 trace name context forever lever 10”;
2>.shutdown数据库然后重启;
3>.在$ORACLE_HOME/rdbms/log下,找到startup时生成的trace file;
4>.在trace文件中,找到下列信息“error recovery tx(#,#) object #”;
5>.根据object#(与sys.dba_objects表中的object_id相同)在sys.dba_objects表中查出该object
的名字;
6>.将该object drop掉;
7>.在init.ora文件中将该rollback segment放回rollback_segments参数中,删除event;
8>.shutdown数据库然后重启。此时”Needs Recovery”的问题应该是完全解决了,否则就是rollback segment被破
坏了。
11、ORA-01688:unable to extend table name.name partition NAME by NUM in
tablespace NAME
产生原因:指定的tablespace空间已经被占用满,无法扩展。
解决方法:使用“ALTER TABLESPACE ADD DATAFILE”命令增加文件系统文件和原始分区,或者增加INITIAL的大小(如:
alter tablespace CDRS101 default storage(next 500M pctincrease 1))应该能够解
决,否则就是有人使用你的表空间上创建了一个比较大的数据文件导致你的表空间不够用。


12.错误提示:ORA-27486: insufficient privileges
刚配置好oracle数据库,用普通用在PLSQL Developer登陆正常,然后在命令符以SYS登陆,提示ORA-27486:
insufficient privileges,然后查D:\oracle\product\10.2.0\client_1\NETWORK
\ADMINsqlnet.ora发现
SQLNET.AUTHENTICATION_SERVICES= (NTS),啊服务器认证NTS是正常的啊,为什么提示不够权限
(insufficient privileges ),后杰想想是不是服务端D:\oracle\product
\10.2.0\db_1\NETWORK\ADMIN的sqlnet.orac也要
SQLNET.AUTHENTICATION_SERVICES= (NTS),一查db_1里的
SQLNET.AUTHENTICATION_SERVICES= (null),将null改为NTS即可.


13.第一次使用ORACLE的OEM,以SYS登陆数据库提示
ora-28547:连接服务器失败,可能是oracle net管理错误
啊为什么如此,我在PLSQL Developer可以用sys登陆
后来查找服务里的OracleOraDb10g_home1TNSListener监听是正常(PLSQL DEVELOPER都正常登陆),
是不是lsnrctl监听没有起来;好在命令符输入lsnrctl后输入status,命令执行成功,再次以OEM登陆,OK


OEM,有时候会无法打开页面
,利用emctl start dbconsole命令,如果服务启动着,系统会问你是否要停止服务,你选择停止,然后再利用这条命令,
让它启动,问题即可解决。还有就是权限的关系,如果你不用SYS或者SYSTEM帐户登陆,
请给你所需要登陆的帐户加上“SELECT_CATALOG_ROLE"角色。否则,无法登陆。

虽然上面OEM可登陆,但问题又出现如下
sys登陆ORACLE执行SELECT * FROM DUAL;提示
ora-28547:连接服务器失败,可能是Oracle Net管理错误
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES)时,sys和普通用户都能登陆PL/SQL DEVELOPER,但不
执行任何SQL语句,如果执行SQL语句就提示不能登录为sys
ora-28547:连接服务器失败,可能是Oracle Net 管理错误
修改为:
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES),只有普通用户能登陆,且能执行SQL,如果以sys登陆
就提示ora-0107:invalid username/password:logon denied

lsnrctl status

tnsping demo

set oracle_sid=demo
sqlplus /nolog
connect / as sysdba
最后查看Oracle环境,也感觉自己环境很乱,所以将ORACLE一些少用的客户端组件删除,最后测试PLSQL Developer的SYS和
scott都可登陆且可操作
,还有OEM也正常使用...
总结:客户端和服务端同时安装在一台机时,一般不要安装大多客户端组件,越少越好,如果要一般只安装OEM即可
Reply all
Reply to author
Forward
0 new messages