0
点赞
收藏
分享

微信扫一扫

Oracle 常见错误及解决办法

1.IMP-00058: 遇到 ORACLE 错误 1017 ORA-01017: 用户名/口令无效; 登录被拒绝

imp sys/oracle@wuzi file=e:\wzgl2014-12-23.dmp fromuser=wzgl touser=zht123 之后输入用户名:sys as sysdba --------------搞定

2.Oracle InActive会话达到一定连接时间自动断开方法

-----############oracle会话和进程################--------------
--查询会话总数
select count(*) from v$session;
--查询进程总数
select count(*) from v$process;
--查询哪些应用的连接数此时是多少
select b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b
where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE ,
b.PROGRAM order by count(*) desc;
--查询是否有死锁 如果查询结果为no rows selected,说明数据库中没有死锁。否则说明数据库中存在死锁。
select * from v$locked_object;

2.1.接下来说明一下会话的状态: 

1.active 处于此状态的会话,表示正在执行,处于活动状态。 

2.killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。

还有一点就是,killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,

是不管用的,要用命令:alter system kill session 'sid,serial#' ; 

3.inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。

我一开始以为,只要是inactive状态的会话,就是该杀,为什么不释放呢。

其实,inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在oracle中直接设置超时时间。

2.2.Oracle会话达到一定连接时间自动断开方法

2.2.1.Oracle数据库中都有至少一个Proflie文件,它是口令限制,资源限制

的命名集合。

建立oracle数据库时,oracle会自动建立名为DEFAULT的PROFILE,初始化的DEFAULT没有进行任何口令和资源限制,用户yherp使用的就是DEFAULT的PROFILE。可以执行语句查看:

select PROFILE,RESOURCE_NAME,LIMIT from dba_profiles where PROFILE='DEFAULT';

Oracle 常见错误及解决办法_数据库

查看这个PROFILE的内容:

select * from dba_profiles where profile='DEFAULT';

Oracle 常见错误及解决办法_oracle_02

红色标记的“IDLE_TIME”意为空闲时间,默认值为“UNLIMITED”,后面会进行设置。

2.2.2.Oracle的系统参数RESOURCE_LIMIT是一个用于控制用户对于数据库资源使用的参数,当值为true的时候即为启用,否则禁用(默认是禁用的)。

该参数结合profile来可以控制多种资源的使用,如CPU_PER_SESSION, CONNECT_TIME,LOGICAL_READS_PER_SESSION,PRIVATE_SGA等等,从而达到到节省资源来实现高效性能。通过以下语句查看其状态:

SELECT name, value FROM gv$parameter WHERE name = 'resource_limit';

Oracle 常见错误及解决办法_oracle_03

2.2.3.首先:开启这个参数:

ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
查看开启结果:SELECT name, value FROM gv$parameter WHERE name = 'resource_limit';


Oracle 常见错误及解决办法_oracle_04

其次:修改已存在的Profile中的IDLE_TIME:(单位为分钟,设置为一天24小时)

ALTER PROFILE DEFAULT LIMIT IDLE_TIME 1440; 根据情况自行设置

说明:a.参数RESOURCE_LIMIT = TRUE用于启用数据库资源配置限制;

b.profile用于实现资源配置,创建profile或修改已存在的profile

来调整各个具体资源配置;

c.一旦被限制的用户超出所设定的阀值将收到资源配置相关的错误提

示;

d.被限制资源的session状态变成sniped;

e.被限制资源的session对应的server process并没有被释放,需要结合sqlnet.expire_time来进行释放。

通过idle_time限制session idle 时间。session idle超过设置时间,状态为sniped (v$session).,然而OS下的process并不会释放,当session(user process) 再次与server process 通讯,将关闭相应的server process.

2.2.4.使用SQLNET.EXPIRE_TIME清除僵死连接:

数据库连接的客户端异常断开后,其占有的资源并没有被释放,从v$session 视图中依旧可以看到对应的session处于inactive状态,且对应的服务器进程也没有释放,导致资源长时间地被占用。SQLNET.EXPIRE_TIME专门用于清理那些异常断开的情形:通过设定参数为非零值(单位为分钟)来发送探测包以检查客户端的异常断开。一旦探测包找到了异常的连接将返回错误,清除对应的server process。

配置SQLNET.EXPIRE_TIME:
对于SQLNET.EXPIRE_TIME的配置,需要修改sqlnet.ora,其路径为$ORACLE_HOME/network/admin下。然后添加SQLNET.EXPIRE_TIME项
在末尾添加SQLNET.EXPIRE_TIME = 1470
之后重启监听。

2.2.5.总结:

A:INACTIVE session是用户建立连接之后,尚未执行任何操作或操作已经

完成但没有断开,等同于与处于idle状态,在v$session视图呈现的是

INACTIVE状态;

B:对于使用resource_limit及profile配置后用户session超出

idle_time的情形,在v$session视图呈现sniped状态;

C:当在sqlnet.ora配置文件中设置了SQLNET.EXPIRE_TIME参数为非零值

时,僵死连接在EXPIRE_TIME指定的时间后被清除(设定24小时后将

INACTIVE状态的SESSION置为SNIPED状态,之后再半小时后清除僵死连

接,理论上是行得通的);

D:设定SQLNET.EXPIRE_TIME为非零值之后,系统需要产生额外的开销以及

带来网络性能的下降;

F:对于需要及时释放OS及DB资源的情形,Oracle建议使用resource_limit

及 profile 限制用户连接的同时并设定SQLNET.EXPIRE_TIME为非零值。

3. 简介

本文主要记录 Oracle 常见错误及解决办法,包括以下内容:

1. ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

错误原因:

由于其他 Session 已经对目标表做了操作,并且已经有排他锁在表上了,所以新的 Session 无法再对表进行DDL操作。

4. ORA-01034: ORACLE not available

1) 检查当前数据库实例是否启动

5. ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated(启动数据库报错)

错误描述:

SQL> startup 
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory

解决办法(没有效果):

不知道是什么原因,导致 $ORACLE_BASE/fast_recovery_area 少了这个目录,而导致了这个错误。

# 查看 Oracle 初始化文件
vi /opt/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/init.ora
里面有这样一句:db_recovery_file_dest='<ORACLE_BASE>/fast_recovery_area'
# 如果没有 fast_recovery_area 目录创建即可
$ mkdir $ORACLE_BASE/fast_recovery_area


举报

相关推荐

0 条评论