您的位置:首页 > 数据库 > Oracle

Oracle 10g 常见问题处理

2011-12-23 22:06 513 查看
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 = PLSExtProc)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = ORACLE)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

(SID_NAME = ORACLE)

)

)

4. 保存文件,然后重新启动监听服务TNSListener就可以了 !

问题解决

----------------------

主动跟被动的关系

1.是让listener主动加载服务

原因是 添加

(SID_DESC =

(SID_NAME = orcl)

(ORACLE_HOME = /data/cache1/oracleDB/oracle/product/10.2.0/db_2)

)

后,在使用lsnrctl start监听程序时会将listener的服务注册到进程监视器(pmon)中

2.listener被动加载服务

如果没有该内容,那么由实例的pmon进程在listener中注册服务,对listener来讲,就是被动了。

这也就是为什么先启动监听后启动数据库能够正常连接的,反之不行的原因了。

好了下步就是要重新装入下监听器

C:\Documents and Settings\Administrator>lsnrctl reload

命令执行成功

我们再来显示下监听的状态:

C:\Documents and Settings\Administrator>lsnrctl status

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

C:\Documents and Settings\Administrator>sqlplussys/sys@colinas sysdba

-------------*****************-----------------------

3.oracle监听器无法启动,提示“错误1067:进程意外终止”

今天遇到一个问题:oracle中的OracleOraHome90TNSListener服务现在启动不了了,

之前都可以正常启动,现在启动后是一个错误:在本地计算机无法启动OracleOraHome90TNSListener服务.

提示信息是“错误1067:进程意外终止.”

查找了一下是ip地址或机器名变动过的原因,解决方法如下:

修改一下listener.ora这个文件中关于IP地址的信息

或使用Net Manager->本地->监听程序,将监听位置修改成正确的IP地址保存后就行了

----------------************------------------------

4.Oracle not available Shared memory realm does not exist的解决办法

ORA-01034: ORACLE not available,ORA-27101: shared memory realm does not exist-Oracle安装问题

Oracle 安装完成后,重新启动服务就报下面的错:ERROR:

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

------解决方法--------------------------------------------------------

当遇到Oracle出现下面提示时:

ora-01034:oracle not available

ora-27101:shared mermory realm does not exist

方法1:

1.输入:connect/as sysdba;

2.重起计算机就OK了;

方法2:

在命令行中输入

C:\>svrmgrl

Oracle Server Manager Release 3.1.7.0.0 - Production

Copyright (c) 2000, Oracle Corporation. All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production

With the Partitioning option

JServer Release 8.1.7.0.0 - Production

SVRMGR> connect internal/oracle

连接成功。

SVRMGR> startup

startup后再连接数据库应该没有问题了。

你那个PGA直接设置为256是行不通的吧?

再说你没理解pga是什么意思吧 他不可以直接设置的吧????

pga=java_pool_size+large_pool_size+shared_pool_size+db_cache_size

----------------******************-------------------------

5.在oracle数据库中,如何增加表空间的大小,有两种方法增加表空间的大小:

  1.增加额外的数据文件到表空间中

  例如:alter tablespace users add datafile '/u01/oradata/orcl/users02.dbf' size 25m;

  2.修改表空间当前的数据文件

  例如:alter database datafile '/u01/oradata/orcl/users01.dbf' resize 50m;

-----------------*****************----------------------------

6.查询表空间大小和表空间使用情况

----------------------------------------------------------------------------

****************************************************************************

Microsoft Windows [版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus
yanfa/yanfa@dbs

SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 12月 9 22:12:05 2009

Copyright (c) 1982, 2004, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;

表空间 剩余空间M

------------------------------ ----------

DBS 5.111808

SYSAUX 7.733248

SYSTEM 6.88128

UNDOTBS1 101.056512

--

101.449728

SQL> select a.a1 表空间名称, c.c2 类型, c.c3 区管理, b.b2/1024/1024 表空间大小M,

(b.b2-a.a2)/1024/1024 已使用M, substr((b.b2-a.a2)/b.b2*100,1,5) 利用率 from (sel

ect tablespace_name a1, sum(nvl(bytes,0)) a2 from dba_free_space group by tables

pace_name) a, (select tablespace_name b1, sum(bytes) b2 from dba_data_files grou

p by tablespace_name) b, (select tablespace_name c1,contents c2,extent_managemen

t c3 from dba_tablespaces) c where a.a1=b.b1 and c.c1=b.b1;

表空间名称 类型 区管理 表空间大小M 已使用M

------------------------------ --------- ---------- ----------- ----------

利用率

----------

DBS PERMANENT LOCAL 296.25 293.375

99.02

SYSAUX PERMANENT LOCAL 240 238.0625

99.19

SYSTEM PERMANENT LOCAL 440 433.75

98.57

表空间名称 类型 区管理 表空间大小M 已使用M

------------------------------ --------- ---------- ----------- ----------

利用率

----------

UNDOTBS1 UNDO LOCAL 115 18.25

15.86

SQL> alter tablespace dbs add datafile 'D:\oracle\product\10.1.0\oradata\DBS\use

rs02.dbf' size 2G;

表空间已更改。

SQL>SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB "表空间大小(M)",

D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,

2),

'990.99') "使用比",

F.TOTAL_BYTES "空闲空间(M)",

F.MAX_BYTES "最大块(M)"

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT DD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 4 DESC

SQL>

------------------****************-------------------

7.Oracle 如何解决ORA-04031错误

对于大多数应用来说,共享池的大小对于Oracle 性能来说都是很重要的。共享池中保存数据字典高速缓冲

和完全解析或编译的的PL/SQL 块和SQL 语句。

当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先刷新池中当前没使用的所有对象,使空

闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031 错误。

1.共享池相关的实例参数

在继续之前,理解下面的实例参数是很重要的:

SHARED_POOL_SIZE – 这个参数指定了共享池的大小,单位是字节。可以接受数字值或者数

字后面跟上后缀"K" 或 "M" 。"K"代表千字节, "M"代表兆字节。

SHARED_POOL_RESERVED_SIZE – 指定了为共享池内存保留的用于大的连续请求的共享池

空间。当共享池碎片强制使Oracle 查找并释放大块未使用的池来满足当前的请求的时候,这个参

数和SHARED_POOL_RESERVED_MIN_ALLOC 参数一起可以用来避免性能下降。

这个参数理想的值应该大到足以满足任何对保留列表中内存的请求扫描而无需从共享池中刷新对

象。既然操作系统内存可以限制共享池的大小,一般来说,你应该设定这个参数为

SHARED_POOL_SIZE 参数的 10% 大小。

SHARED_POOL_RESERVED_MIN_ALLOC –这个参数的值控制保留内存的分配。如果一个足

够尺寸的大块内存在共享池空闲列表中没能找到,内存就从保留列表中分配一块比这个值大的空

间。默认的值对于大多数系统来说都足够了。如果你加大这个值,那么Oracle 服务器将允许从这

个保留列表中更少的分配并且将从共享池列表中请求更多的内存。这个参数在Oracle 8i 是隐藏

的。

2.诊断ORA-04031 错误

ORA-04031 错误通常是因为库高速缓冲中或共享池保留空间中的碎片。 在加大共享池大小的时 候考虑调整应用

使用共享的SQL 并且调整如下的参数:

SHARED_POOL_SIZE,

SHARED_POOL_RESERVED_SIZE,

SHARED_POOL_RESERVED_MIN_ALLOC.

首先判定是否ORA-04031 错误是由共享池保留空间中的库高速缓冲的碎片产生的。提交下的查 询:

SELECT free_space, avg_free_size, used_space, avg_used_size,

request_failures, last_failure_size

FROM v$shared_pool_reserved;

如果:

REQUEST_FAILURES > 0 并且

LAST_FAILURE_SIZE > SHARED_POOL_RESERVED_MIN_ALLOC

那么ORA-04031 错误就是因为共享池保留空间缺少连续空间所致。

要解决这个问题,可以考虑加大SHARED_POOL_RESERVED_MIN_ALLOC 来降低缓冲进共 享池保留空间的对

象数目,并增大 SHARED_POOL_RESERVED_SIZE 和SHARED_POOL_SIZE 来加大共享池保留空间的可用

内存。

如果:

REQUEST_FAILURES > 0 并且

LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC

或者

REQUEST_FAILURES 等于0 并且

LAST_FAILURE_SIZE < SHARED_POOL_RESERVED_MIN_ALLOC

那么是因为在库高速缓冲缺少连续空间导致ORA-04031 错误。

第一步应该考虑降低SHARED_POOL_RESERVED_MIN_ALLOC 以放入更多的对象到共享池

保留空间中并且加大SHARED_POOL_SIZE。

(1).解决方法: 修改参数文件 InitIDS.ora

将以下的参数修改为:

sga_max_size=500M

shared_pool_size=300M

SHARED_POOL_RESERVED_SIZE =30M

(2).解决方法常用:

Microsoft Windows [版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.

C:\Documents and Settings\Administrator>sqlplus sys/system as sysdba

SQL*Plus: Release 10.1.0.2.0 - Production on 星期五 12月 11 17:49:17 2009

Copyright (c) 1982, 2004, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> show parameter sga;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 1G

sga_target big integer 0

SQL>alert system set sga_max_size= 1024M scope = spfile;

SQL> show parameter sharea;

SQL>

SQL>

SQL>

SQL> show parameter shared;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

hi_shared_memory_address integer 0

max_shared_servers integer

shared_memory_address integer 0

shared_pool_reserved_size big integer 100M

shared_pool_size big integer 300M

shared_server_sessions integer

shared_servers integer 1

SQL>

SQL>alert system set shared_pool_size=300M scope = spfile;

SQL>

SQL>alert system set shared_pool_reserved_size=100M scope = spfile;

SQL>

SQL>shutdown immediate;

如果报错,则

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL>connect / as sysdba;

SQL>shutdown immediate;

SQL>startup ;

即可搞定。

-------------------**********************-----------------------

8.ORA-01034 错误的解决办法

问题描述

=======

在试图启动数据库的时候 ,Oracle报告下列错误:

ERROR:

ORA-27101 Shared memory realm does not exist

ORA-01034 ORACLE not available

基本解释

=======

Error: ORA-27101

Text: shared memory realm does not exist

-------------------------------------------

Cause: Unable to locate shared memory realm

Action: Verify that the realm is accessible

如何解决

=======

这个问题其实用一句话就可以说清楚:

ORACLE_HOME或者ORACLE_SID设置不正确。

在以前的版本中,如果 ORACLE_SID不正确,一般都只提示ORA-01034。Oracle 8.1.7 给出一个额外的信息:ORA-27101。

->如果是Unix,在Shell里把ORACLE_SID设置正确即可(注意大小写敏感的问题)。

  此外,检查ORACLE_HOME环境变量。如何检查参考如下的命令:

% echo $ORACLE_SID

% ps -ef |grep smon

->如果是Windows,一般都是因为系统中有多个实例造成的。

 可以在命令行下  C:\>set ORACLE_SID=DEMO

C:\>show ORACLE_SID

 把这里的 DEMO换为你相应的实例名。

 如果还不行的话,检查注册表中的 ORACLE_HOME。

  此外,在Windows环境下有的时候连接不上远程的数据库,会报告如此的错误。

解决办法是把 sqlnet.ora文件中的

  SQLNET.AUTHENTICATION_SERVICES = (NTS) NTS换为NONE.

--------------------------***************--------------------------

命中率有助于你衡量共享池的使用,有多少语句需要被解析而不是重用。下面的SQL语句有助于你计算库高速缓冲的命中率:

SELECT SUM(PINS) "EXECUTIONS",

SUM(RELOADS) "CACHE MISSES WHILE EXECUTING"

FROM V$LIBRARYCACHE;

----------------------************************-------------------------

10.测试oracle数据库是否安装成功

(1).C:\Documents and Settings\Administrator>lsnrctl

(2).C:\Documents and Settings\Administrator>tnsping table_space_name 如:dbs

C:\Documents and Settings\Administrator>netca dbca
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: