【ORA】一些oracle-ora等错误记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/debimeng/article/details/55504013
1、ORA-12560: TNS: 协议适配器错误
场景:在cmd窗口输入:sqlplus "/as sysdba"想打开数据库时报的错;
原因:没有启动Oracle服务器
解决:WIN+R,跳出运行窗口,输入"services.msc",打开服务窗口;找到OracleServiceORACLE服务,查看是否为启动,右键启动即可。
原因有三个
1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,
启动oraclehome92TNSlistener服务;

 2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务
面板,启动oracleserviceXXXX,XXXX就是你的database SID;

 3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SI
D设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建
,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下
输set oracle_sid=XXXX,XXXX就是你的database SID。

2、ORA-12541:TNS:no listener
场景:用pl/sql developer客户端连接数据库;
原因: 监听器没有启动
解决:打开服务,启动 OracleOraDB12Home1TNSListener

3、ORA-28547:connection to server failed,probable Oracle Net admin error
场景:将监听器配置文件: listener.ora中的 SID_NAME  更改后导致的;
原因:多数是因为navicat本地的OCI版本与Oracle服务器器不符造成的;
解决:将SID_NAME修改为原来的名称。

4、ORA-01438
因为插入的数值大于所在的列的最大允许精度。

5、ORA-12899
字符值大于此列指定的允许精度

6、ORA-00942:表或视图不存在
表或试图不存在

7、ORA-01400: 无法将 NULL 插入 ("SCOTT"."ITEMS"."ITEMNAME")
因向表中插入数据时,主键/约束的列为空。

8、ORA-00001: 违反唯一约束条件 (SCOTT.PK_ITEMS)
因想表中插入数据时,某列设置了唯一约束,插入的值,表中已经存在了。

9、ORA-01017: 用户名/口令无效; 登录被拒绝
有可能用户名或者密码错误

10、ORA-01507
有可能是关系数据库后,启动的时候没有加载数据库,如:startup nomount就是启动实例不加载数据库的

11、ORA-01034: ORACLE not available
数据库处于关闭状态。

12、ORA-01045: user MENG lacks CREATE SESSION privilege; logon denied
该用户没有连接到数据库的权限,解决:grant connect, resource to 用户名;

13、ORA-28000: the account is locked
账户被锁定;
使用命令解锁用户。命令为:alter user username account unlock;
重置用户密码。命令为:alter user username identified by password;其中username为用户名,password为新密码。

14、ORA-00904: "EMP": 标识符无效
答: ①数据库中引用到的列和自己SQL中书写的列名是否一致;
       ②对于某些工具生成的SQL,可能导致列名和期望不符的情况,比如cmd使用双引号会报错,使用单引号'';

15、ORA-00936: 缺失表达式
答:一般是关键字的问题。
如:select id,name , from test_index;        问题是多了一个逗号导致的。

16、ORA-01109 数据库未打开(先试一下红色字体的命令)
答:造成上述问题的原因是误把'F:\ORADB.DEF'这个数据文件删掉了,这种删法是不正常的,如果删掉了用户及表空间,然后再把数据文件删除应该是没问题的,但这次只是把数据文件删掉了,用户及表空间还在。
解决方法:
1) MOUNT数据库:
STARTUP MOUNT ;
2) OFFLINE DROP数据文件:
ALTER DATABASE DATAFILE '<full_path_file_name>' OFFLINE DROP;
3) 打开数据库:
ALTER DATABASE OPEN;
ps:这时候再open数据库就ok了
4) 删除表空间:
DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS;
ps:如果是误删的,只需重建表空间即可。

具体操作:
SQL> startup mount
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             167775108 bytes
Database Buffers          436207616 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL> alter database datafile 'F:\ORADB.DEF'offline drop
  2  ;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> drop tablespace oradb including contents;
表空间已删除。

17、ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER
(1)情况一:使用sqlplus登录
口令+as sysdba
(2)情况二:使用PL/SQL登录
登录界面的时候,将“连接为”选项框的Normal改为SYSDBA或SYSOPER

18、ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initsales.ora'
答:将$ORACLE_BASE/admin/orcl/pfile目录下的init.ora.0212012125517形式的文件copy到$ORACLE_HOME/dbs目录下initoracl.ora,然后把文件名改为initsales.ora;最后更改文件的权限。
例如命令如下
cp  /u01/app/oracle/admin/orcl/pfile/ init.ora*  /u01/app/oracle/product/11.2.0/db_1/dbs
mv init.ora.* initsales.ora
chmod -R oracle:oinstall initsales.ora

19、ORA-12170:TNS:连接超时
客户端连接Linux数据库报错,一般情况是端口问题。
修改iptables,开放1521端口,允许1521端口被连接,
vi /etc/sysconfig/iptables
#允许21端口通过防火墙
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT 

20、ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
原因:监听配置文件listener.ora中可以不必指定监听的服务名(安装Oracle10g后也是没有指定的)。正常情况下一般只要数据库启动,客户端连接数据库也没有什么问题,但是有时重复启动关闭也会出现ORA-12514错误。
解决:
(1)通过重启服务的方式启动数据库,再次连接尝试。
(2)
正确添加listener.ora;
重新启动了oracle服务器,并检查oracle所有服务是否启动;
oracle客户端Net Cofiguration Assistant正确添加或重新配置实例名,
如:(红色粗体部分是添加进去的,注意:一定要放进蓝色括号内不然会导致启动不了监听器)
# listener.ora Network Configuration File: D:\Database\Oracle\product\instantclient_11_2\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Database\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Database\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = D:\Database\oracle\product\11.2.0\dbhome_1)
    (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = D:\Database\oracle

21、ORA-00937: 不是单组分组函数
select 列表项中除了包含聚合函数外,还包含了表的某些列,那么你将必须使用group by语句,否则语法通不过。
例如:
SELECT deptno,COUNT(empno)
FROM emp;
会报错,添加group by后就不会报错
SELECT deptno,COUNT(empno)
FROM emp
GROUP BY deptno;

22、ORA-00845: MEMORY_TARGET not supported on this system
简单来说就是 MEMORY_MAX_TARGET 的设置不能超过 /dev/shm 的大小
调整/dev/shm的大小  
1)查看大小
df -h /dev/shm
2)修改大小 (如未发现有/dev/shm的内容,直接把红色字体的内容粘贴进去)
vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
3)重新挂载
umount /dev/shm
mount /dev/shm
4)查看修改后的大小
df -h /dev/shm

23、ORA-08189: cannot flashback the table because row movement is not enabled.(ORA-08189: 因为未启用行移动功能, 不能闪回表。)
答: alter table table_name enable row movement;

24、ORA-01795: maximum number of expressions in a list is 1000
Oracle的In-list有1000个元素的限制。若把条件分成多个少于1000的IN:SELECT * FROM DUAL T WHERE T.DUMMY IN ('1', '2', '3',...,'1000') OR IN ('1001', '1002', ..., '2000') OR ... 即可解决这个异常:

解决的方法和简单,就是把一个in拆分成多个in,如果超过了1000就拆分成2个in,如果超过了4000,就拆分成5个in
改成sql如下:select xxx from xxx where xxx in (xx,xxx...) or xxx in (xx,xx,...) or xxx in (xx,xx,...);

25、SQL> startup;
  ORA-00119: invalid specification for system parameter LOCAL_LISTENER
  ORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’
如果之前启动正常的话,
(1)有可能是:配置文件,中文符号。
(2)其他问题。。。

26、 oracle-1067监听错误
因修改了计算机的名字
解决:修改oracle安装目录D:/DataBase/oracle/product/10.1.0/Db_1/NETWORK/ADMIN/下的
listener.ora和tnsnames.ora里的HOST值为localhost或者计算机名即可。

27、ORACLE数据库导入的时候出现IMP-00038: 无法转换为环境字符集句柄 错误
数据泵不一致导致的,比如说你用expbd导出来的 用imp导入的时候就会出现这个错误
exp导出来的用imp导入
expbd导出来的用impbd导入

28、ORA-00439 未启用的功能:DEFERRED_SEGMENT_CREATION
场景:因从11G企业版数据库使用expdp导出来的数据库,然后导入11G标准版的时候导致的;
解决:如果想导入标准版的,需要在导出来的时候带上参数 version=10.2.0,导入的时候也导入。
如:
expdp gx/gx@orcl directory=data_pump_dir dumpfile=gx.DMP version=10.2.0
impdp gx/gx@orcl directory=data_pump_dir dumpfile=gx.DMP version=10.2.0

29、ora-12520
由于参数process值不够引起的,即是同时访问数据的用户超过了最大连接数
当前的连接数
select count(*) from v$process;
设置的最大连接数(默认值为150)
select value from v$parameter where name = 'processes';
修改最大连接数
alter system set processes = 300 scope = spfile; 

30、ORA-01033: ORACLE initialization or shutdown in progress
原因:在oracle数据文件目录(例如:D:\oracle\product\10.2.0\db_1\database)误删了一个数据文件。
查询所有的数据文件:
select name from v$datafile;

找出你误删的数据文件目录,然后使用 alter database datafile 'd:\oracle\product\10.2.0\db_1\database\数据文件名称' offline drop;如果省略drop则可能会出现ora-01145:除非启用了介质恢复,否则不允许立即脱机错误。

执行成功后,最后使用alter database open;打开数据库即可。

31、ora-04043 : 对象XXX不存在
原因:用sys登录,使用desc查看表;
解决:
(1)在表名加双引号试试,即:desc "表名";
(2)在表名前加上schema(用户名或表空间),即:desc 表空间(用户名).表名;

32、exp-00028 failed to open d:\0backd for write
因系统没有这个路径。

3 3、 EXP-00008 : 遇到 ORACLE 错误 904
ORA-00904: "MAXSIZE": 标识符无效
EXP-00000: 导出终止失败
原因: 11GR2客户端导出10GR2版本的数据库时;
然后分别查看本地和远程服务器的数据库的系统视图:desc exu9tbs, 发现10g没有这个字段,11g有
解决:解决方法还是用相同版本的客户端导出或者在服务端导出。

34、在集群环境下登录了grid创建用户报:ORA-01031: insufficient privileges
因grid用户并不在oracle用户组里;
解决:切换到oracle用户既可以解决。

35、ORA- 01261
迁移到另一台机器,因缺少rman文件,scp -r flash_recovery_area 192.168.70.23:/u01/app/oracle/

36、 ORA- 09925
迁移到另一台机器,因缺少实例的文件,尝试把实例的全部文件cp过去,
scp -r admin 192.168.70.23:/u01/app/oracle/

37、ORA- 00093 ,ORA-00821
ORA-00093: _shared_pool_reserved_min_alloc must be between 4000 and 0
ORA-00821: Specified value of sga_target 4M is too small, needs to be at least 28M
场景:修改SGA相关参数,修改的时候忘记写单位导致。
解决:
SQL> create pfile = '/oracle/tmp_init.ora' from spfile;
SQL> !echo '*.sga_target=200m' >> '/oracle/tmp_init.ora';
SQL> create spfile from pfile = '/oracle/tmp_init.ora';

38、ORA- 01589
must use RESETLOGS or NORESETLOGS option for database open
场景:异常关机导致;
解决:
SQL> startup mount;
SQL> alter database open resetlogs;

39、 ORA-00020 : maximum number of processes () exceeded
解决:
alter system set processes = 1000 scope=spfile

40、 ORA01378 : The logical block size (4096) of file +DATA is not compatible with the disk sector size (media sector size is 512 and host sector size is 512)
解决:

41、ORA-01506: missing or illegal database name

42、TNS- 12545 : Connect failed because target host or object does not exist
场景:修改了Linux的主机名,重启机器后,启动监听;
解决:
因只修改了机器的主机名,但host和listener.ora文件并没有修改,
vi /etc/hosts下面的IP 主机名,把其中的主机名改为已修改的;
vi /u01/app/oracle/product/12.1/db1/network/admin/listener.ora这个文件里HOST改为已修改的主机名;
重启机器在启动监听即可。
如果机器里有tnsnames.ora这个文件也需要修改,但是这个文件建议使用IP地址。

43、ORA- 27101 : shared memory realm does not exist
场景:使用oracle用户登录plsql,执行sqlplus / as sysdba报错
解决:
查看共享内存
# free
但发现内存是够用的,然后查看是不是空间不足了
# df -h
果然是,根目录下的内存使用100%,清空一下内存,重新登录即可。


猜你喜欢

转载自blog.csdn.net/debimeng/article/details/55504013
今日推荐