Oracle 10g 常见问题处理
??? 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
?