搜档网
当前位置:搜档网 › Oracle常见错误

Oracle常见错误

Oracle常见错误
Oracle常见错误

ORA-00911: 无效字符问题和解决

我今天写JDBC插入数据库数据时出现ORA-00911: 无效字符问题,

我把SQL打到控制台上面,然后COPY到SQL PULS中是可以插入数据的,

但是在ECLIPSE中执行就报ORA-00911: 无效字符的错误,

我查了一下,

我的是类似这种的insert into tablea(aaa) values('111');

把最后面的;去掉,修改为

insert into tablea(aaa) values('111')就可以执行了。

原因:没有找到sql语句中要调用的表(可能根本不存在、可能表明不对,也可能没有区分大小写)。

解决方法:1、打断点,转到定义,在整个解决方案中搜索看sql语句的出处,然后排查具体原因。

第一、不存在:用plsql往里面导入表。

第二、表名不对,修改表的名字。

第三、没有区分大小写:

https://www.sodocs.net/doc/af5820005.html,/jtmjx/archive/2012/07/03/2574766.html

采用Oracle数据库,使用Powerdesigner设计,生成Sql文件导入后查询出现

“ORA-00942: 表或视图不存在”,很是郁闷,这个问题以前出现过,当初解决了,但因好久没有使用,这次竟然忘了,害得我浪费了好些时间,为了避免再次忘记,将它记下来,同时和大家一起分享。

1、问题产生的原因

Oracle 是大小写敏感的,我们创自己写Sql脚本创建表的时候Oracle会自动将我们的表名,字段名转成大写,

eg:

createtable T_WindRadar (

wr_id VARCHAR2(64) not null,

wr_reciveTime DATE,

wr_image BLOB,

constraint PK_T_WINDRADAR primarykey (wr_id)

);

但是Oracle 同样支持"" 语法,将表名或字段名加上""后,Oracle不会将其转换成大写eg:

createtable "T_WindRadar" (

"wr_id" VARCHAR2(64) not null,

"wr_reciveTime" DATE,

"wr_image " BLOB,

constraint PK_T_WINDRADAR primarykey (wr_id)

);

如果加上了"",那么我们采用一般的SQL语句查询则会产生“ORA-00942: 表或视图不存在”,因此SQL脚本中需要将表名也加上""。

eg:

select*from "T_WindRadar";

这种情况在我们手写SQL的时候一般不会发生,但是我们使用powerdesigner设计数据库的时候,由于不注意会经常出现此类问题,因为Powerdesigner生成的SQL文件默认是加""的。

2、解决的办法

因为我们使用的是Powerdesigner,所以可以不用手工改写SQL脚本,只要设置Powerdesigner重新生成即可。

在PowerDesiger中,在physical data model 中找到菜单中的Database下的Edit current DBMS中,

选择Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment 为“Determines if the case sensitivity for identifiers is managed using double quotes”,

表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”,点击【应用】按钮。

这样再生成sql语句时,表和字段名上是没有引号了。

ORA-01435: 用户不存在

第一帖:

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集

导入服务器使用AL32UTF8字符集(可能的字符集转换

. 正在将ZHOU的对象导入到DEVE_BRAVER;

IMP-00003: 遇到ORACLE 错误1435

ORA-01435: 用户不存在

成功终止导入,但出现警告。

我的导入脚本为:

imp system/*****@min file=ExamineData.dmp log=ExamineData.log feedback=10000 buffer=1024000 indexes=y grants=y constraints=y commit=y compile=y fromuser=zhou touser=deve_braver;

关于这个问题我郁闷啦一下午,终于找到啦问题的根源:

上面的是一条cmd下的命令,不是oracle的plsql的命令,不需要加最后那个';'

这样那个命令行将'deve_braver;'误认为是一个用户名,所以这个用户肯定不存在啊,画蛇添足啦.

第二贴:

C:/>imp neohkdev1/xml full=y file=c:/neo.20070411.dmp

Import: Release 10.2.0.1.0 - Production on 星期四4月12 10:06:45 2007

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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

经由直接路径由EXPORT:V09.02.00 创建的导出文件

已经完成ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集中的导入

导出客户机使用WE8ISO8859P1 字符集(可能的字符集转换)

. 正在将NEOHKDEV1 的对象导入到NEOHKDEV1

. 正在将U426522 的对象导入到U426522

IMP-00003: 遇到ORACLE 错误1435

ORA-01435: 用户不存在

成功终止导入, 但出现警告。

这样的原因可能是没有创建一个用户!!!dmp文件已经定好是这个用户

neo.20070411.dmp

第一部分:

查看oracle中的imp,exp命令:

imp help=y

exp help=y

1. 导出表数据:

文件名以backup_yyMMddHHmm.dmp 表示

dateString=`date +%y%m%d%H%M`

#echo $dateString

su - oracle -c "exp userid/password tables=table1,table2 file=

path/backup_$dateString.dmp BUFFER=8192 grants=y compress=N"

compress:N表明导出来的文件不需要压缩放在一个数据块中,当数据库中的表数据特别大的时候,若放在不同的数据库,在恢复的时候会有问题。

导出的数据包括表创建语句,序列,触发器等。

2. 导入表数据

表导入的过程:创建表,导入数据,创建序列

echo backup file:$1

fileName=$1

echo $fileName

#if [ "$fileName" = ""]

#then

# echo "请指定备份恢复的文件名,请指定绝对文件路径"

# exit 0;

#fi

#echo fileName=$fileName

su - oracle -c "imp userid/password file=$fileName show=n buffer=2048000 ignore=Y commit=y grants=y full=y"

ignore:Y表明忽略表创建的过程,只是将表中的数据导入表中。

第二部分:

--如何在oracle中导入dmp数据库文件?

2006/2/16 zhanghua first create

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。

执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,

DOS中可以执行时由于在oracle 8i 中安装目录/ora81/BIN被设置为全局路径,

该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。

oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。

SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。

数据导出:

1 将数据库TEST完全导出,用户名system 密码manager 导出到D:/daochu.dmp中

exp system/manager@TEST file=d:/daochu.dmp full=y

2 将数据库中system用户与sys用户的表导出

exp system/manager@TEST file=d:/daochu.dmp owner=(system,sys)

3 将数据库中的表inner_notify、notify_staff_relat导出

exp aichannel/aichannel@TESTDB2 file= d:/data/newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

exp system/manager@TEST file=d:/daochu.dmp tables=(table1) query=/" where filed1 like '00%'/"

上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。

也可以在上面命令后面加上compress=y 来实现。

数据的导入

1 将D:/daochu.dmp 中的数据导入TEST数据库中。

imp system/manager@TEST file=d:/daochu.dmp

imp aichannel/aichannel@HUST full=y file=file= d:/data/newsmgnt.dmp ignore=y

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

在后面加上ignore=y 就可以了。

2 将d:/daochu.dmp中的表table1 导入

imp system/manager@TEST file=d:/daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

注意:

操作者要有足够的权限,权限不够它会提示。

数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

附录一:

给用户增加导入数据权限的操作

第一,启动sql*puls

第二,以system/manager登陆

第三,create user 用户名IDENTIFIED BY 密码(如果已经创建过用户,这步可以省略)第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW , DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字

第五, 运行-cmd-进入dmp文件所在的目录,

imp userid=system/manager full=y file=*.dmp

或者imp userid=system/manager full=y file=filename.dmp

执行示例:

F:/Work/Oracle_Data/backup>imp userid=test/test full=y file=inner_notify.dmp 屏幕显示

Import: Release 8.1.7.0.0 - Production on 星期四2月16 16:50:05 2006

(c) Copyright 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

经由常规路径导出由EXPORT:V08.01.07创建的文件

已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入

导出服务器使用UTF8 NCHAR 字符集(可能的ncharset转换)

. 正在将AICHANNEL的对象导入到AICHANNEL

. . 正在导入表"INNER_NOTIFY" 4行被导入

准备启用约束条件...

成功终止导入,但出现警告。

附录二:

Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.

先建立import9.par,

然后,使用时命令如下:imp parfile=/filepath/import9.par

例import9.par 内容如下:

FROMUSER=TGPMS

TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER 和TOUSER的用户可以不同)

ROWS=Y

INDEXES=Y

GRANTS=Y

CONSTRAINTS=Y

BUFFER=409600

file==/backup/ctgpc_20030623.dmp

log==/backup/import_20030623.log

https://www.sodocs.net/doc/af5820005.html,/lqh4188/article/details/16839945

PLSQL Developer导入导出数据库

导出步骤:

1 tools ->export user object 选择选项,导出.sql文件

2 tools ->export tables-> Oracle Export 选择选项导出.dmp文件

导入步骤:

1 tools->import tables->SQL Inserts 导入.sql文件

2 tools->import talbes->Oracle Import然后再导入dmp文件

数据库的导入导出成功

Tools->Export User Objects导出的是建表语句(包括存储结构)

Tools->Export Tables里面包含三种导出方式:

三种方式都能导出表结构以及数据,网上说三种方法有区别,如下:

总结:就用第一种方式oracle导入导出的方式,可以跨平台,还可以避免乱码。

操作选项

一般一些选项选择看字面意思就可以了,重要的上面已经写了(主要include privilege只是包含一些建表信息,并不包括存储过程信息,话说我被这个选项骗了……还是忽略它吧……)

选择drop tables信息中会包含删表语句(注意:选了drop tables就已经默认选了create tables 和truncate tables),create tables是建表信息,truncate tables和delete

tables都是在插入数据前先删除原有的信息,这两个是二选一,但是truncate tables效率高很多。

where clause可以输入很多命令,比如rownum < 10000只导出每个表的前10000行,等等信息,具体在查信息。

导出数据到excel文件:

选中数据表--query data--选中要导出的数据--右键copy to excel

excel数据导入到数据库:

1.在Excel中准备好要导入的数据。具体操作:在Excel中,把第一列设置为空列,第二列以后的列应与要导入的数据表的字段相对应。

2.登录PLSQL Developer,找到需要导入数据的数据库表后,点击右键--edit data,进入了编辑此表的数据对话框,并点击最左侧选中一空行。

3.copy Excel表中的数据记录,将数据粘贴到上步中PLSQL Developer显示的表列中。

4.点击PLSQL Developer中的对号按钮进行Post。

ORA-12514 TNS:监听程序当前无法识别连接描述符中请求服务

1、通过重启服务的方式启动数据库,再次连接尝试。

2、如果第一种方法不可行,我们采用第二种方法

?正确添加listener.ora;

?重新启动了oracle服务器,并检查oracle所有服务是否启动;

?oracle客户端Net Cofiguration Assistant正确添加或重新配置实例名

最有可能是连接字符串错误。

原因如下:

你oracle安装成功后,一直未停止数据库(即数据库是启动的),客户端配置成功后,应该一直不会有什么问题。

而一旦你和我同事一样,有时把Oracle安装在虚拟机中,而且Oracle安装完毕后,没在进行任何监听的配置,则虚拟机再启动,则就会出现ORA-12514的问题。

如下是解决思路:

根据出错信息判断出客户端未监听到实例服务名

1、通过重启服务的方式启动数据库,再次连接仍无法连接服务器。

2、既然第一种方法不能解决问题,那就第二种方法。考虑监听listener.ora

监听配置文件listener.ora中可以不必指定监听的服务名(安装Oracle10g后也是没有指定的)。正常情况下一般只要数据库启动,客户端连接数据库也没有什么问题,但是有时重复启动关闭也会出现ORA-12514错误。

既然listener.ora中没有指定监听,我们可以在listener.ora文件中指定监听的实例名,这样该问题应该可以连接。

步骤如下:

?在oracle服务器Oracle安装目录(我的在E:\Oracle10g下,每个人的不一样,根据自己的情况查找)Network/admin目录下找到listener.ora 我的如下图所示

# listener.ora Network Configuration File: E:\Oracle10g\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = E:\Oracle10g)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = ORCL)

(ORACLE_HOME = E:\Oracle10g)

(SID_NAME = ORCL)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

(ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))

)

)

标红的为我添加的部分,ORCL为监听的实例名。

?然后在Oracle服务器的服务中重新启动监听服务,然后在

oracle客户端通过再次配置对Orcl实例的监听,如下图所示

?结果出现如下图的提示。

?这时我们不要着急,只需要oracle服务器重新启动一下,再次连接即成功。这也是我们配置完listener.ora 监听后,经常忘记的。再次尝试,可以看到客户端可以连接上oracle 服务器了,而且PL/SQL再次连接也没有问题了。

如下是解决思路:

根据出错信息判断出客户端未监听到实例服务名

1、通过重启服务的方式启动数据库,再次连接仍无法连接服务器。

2、既然第一种方法不能解决问题,那就第二种方法。考虑监听listener.ora

监听配置文件listener.ora中可以不必指定监听的服务名(安装Oracle10g后也是没有指定的)。正常情况下一般只要数据库启动,客户端连接数据库也没有什么问题,但是有时重复启动关闭也会出现ORA-12514错误。

既然listener.ora中没有指定监听,我们可以在listener.ora文件中指定监听的实例名,这样该问题应该可以连接。

步骤如下:

?在oracle服务器Oracle安装目录(我的在E:\Oracle10g下,每个人的不一样,根据自己的情况查找)Network/admin目录下找到listener.ora 我的如下图所示

# listener.ora Network Configuration File: E:\Oracle10g\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = E:\Oracle10g)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = ORCL)

(ORACLE_HOME = E:\Oracle10g)

(SID_NAME = ORCL)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

(ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))

)

)

标红的为我添加的部分,ORCL为监听的实例名。

然后在Oracle服务器的服务中重新启动监听服务,然后在oracle客户端通过再次配置对Orcl实例的监听,如下图所示

?结果出现如下图的提示。

?这时我们不要着急,只需要oracle服务器重新启动一下,再次连接即成功。这也是我们配置完listener.ora 监听后,经常忘记的。再次尝试,可以看到客户端可以连接上oracle 服务器了,而且PL/SQL再次连接也没有问题了。

ORA-12560: TNS: 协议适配器错误

一般情况下,造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:

1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打

开服务面板,启动oraclehome92TNSlistener服务。

2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---

服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.比如我的SID就是ORCL。

3.右键我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值

=XXXX,XXXX就是你的database SID

造成上述的主要原因是,我新安装的数据库实例oratest将我原有的ORCL的sid给覆盖了,这里通过设置环境变量的方法来进行控制sid。

PS:

连接数据库也可以通过如下命令来指定需要访问的sid,这样就不用设定环境变量了。

conn scott/tiger@orcl as sysdba

PS2:2012-6-20

但是如果数据库只安装了一个实例,那么使用如下@orcl来连接会报错。conn scott/tiger@orcl as sysdba

Oracle权限不足问题集锦

Oracle Oracle权限不足问题集锦 跟Oracle数据库打交道的DBA都会遇到过 “Insufficient privileges”这样的错误, 出现权限不足问题的情况各有不同在本次的 Oracle系列电子书中,我们就总结了网友在 使用Oracle数据时遇到的Insufficient privileges错误。 ORA-01031:Insufficient privileges错误解决方法 以sysdba登录时的Insufficient privileges错误 Windows集群下的ORA-12638和ORA-01031错误 在不同的模式下执行SQL语句 TechTarget 中国《Oracle电子书》 1

TechTarget 中国《Oracle 电子书》 2

TechTarget 中国《Oracle 电子书》 3 解决创建存储过程时的 Insufficient privileges 错误 问:我需要使用Toad 在我的schema 中创建一个存储过程。 但是出现了“Insufficient privileges.”的错误。当我以 System 连接并将schema 的名称添加到表的前缀中 (schema.tablename),系统提示表不存在。请问问题出在哪里?我该如何解决? 答:为了在你的schema 中创建一个存储过程,你需要 有CREATE PROCEDURE 系统权限。你可以通过查询用户的DBA_SYS_PRIVS 来进行查看。此外,如果存储过程要参考对象,该用户还需要拥有相应的对象权限。举例来说,如果存储过程插入一行数据到SCOTT .EMP 表中,针对该表,用户必须被授予INSERT 权限。授权不能通过角色,你必须直接将对象权限授予用户。 (作者:Brian Peasland 译者:孙瑞 来源:TT 中国)

Oracle错误代码案例总结及解决方案

常见错误: ORA-00001:违反唯一约束条件(主键错误) ORA-00028:无法连接数据库进程 ORA-00900:无效sql语句 ORA-00904:字段名写错或是建表时最后一个字段有逗号 ORA-00907:缺少右括号 ORA-00911:无效字符 ORA-00917:缺少逗号 ORA-00918:未明确定义列 ORA-00922:丢失或无效的选项(表名等可能有空格) ORA-00923:未找到FROM关键字 ORA-00926:缺少value ORA-00933: SQL命令未正确结束 ORA-00936:缺少表达式 ORA-00937:不是单组分组函数 ORA-00942:表或视图不存在 ORA-00947:没有足够的值(一般是插入语句出现的错,插入值的数量与字段不符) ORA-00979:不是group by的表达式 ORA-01009:缺少法定参数(eg:sql做参数时,且sql语句为空时,报错) ORA-01098:数据库无法关闭及启动 ORA-01400:无法将null值插入 ORA-01401:插入的值对于列过大 ORA-01476:sql中存在除数为零 ORA-01579: 恢复过程中出现写错误 ORA-01580: 创建控制备份文件时出错 ORA-01581: 尝试使用已分配的回退段() 新区()

ORA-01582: 无法打开要备份的控制文件 ORA-01583: 无法获得要备份的控制文件的块大小 ORA-01584: 无法获得要备份的控制文件的文件大小 ORA-01585: 标识备份文件时出错 ORA-01586: 无法打开要备份的目标文件 ORA-01587: 复制控制文件的备份文件时出错 ORA-01588: 要打开数据库则必须使用RESETLOGS 选项 ORA-01589: 要打开数据库则必须使用RESETLOGS 或NORESETLOGS 选项ORA-01590: 段可用列表数() 超出最大数 ORA-01591: 锁定已被有问题的分配事务处理挂起 ORA-01592: 将第7 版回退段() 转换为Oracle 8 版格式时出错 ORA-01593: 回退段最佳大小( blks) 小于计算的初始大小( blks) ORA-01594: 尝试放回已释放的回退段() 区() ORA-01595: 释放区() 回退段() 时出错 ORA-01596: 无法在参数中指定系统 ORA-01597: 无法改变联机或脱机系统回退段 ORA-01598: 回退段''未联机 ORA-01599: 无法获得回退段(), 高速缓存空间已满 ORA-01600: 至多只有一个""在子句""()中 ORA-01601: 子句""()中的存储桶大小非法 ORA-01603: 子句""()中的分组大小非法 ORA-01604: 子句""()中的编号范围非法 ORA-01605: 子句""()中缺少编号 ORA-01606: gc_files_to_locks 不同于另一已安装例程的参数 ORA-01608: 无法将回退段''联机,其状态为() ORA-01609: 日志是线程的当前日志- 无法删除成员 ORA-01610: 使用BACKUP CONTROLFILE 选项的恢复必须已完成 ORA-01611: 线程编号无效- 必须介于1 和之间 ORA-01612: 线程已经启用 ORA-01613: 线程只有日志- 要求至少启用2 个日志 ORA-01614: 线程正忙- 无法启用 ORA-01615: 线程已安装- 无法禁用 ORA-01616: 线程已打开- 无法禁用 ORA-01617: 无法安装: 不是有效的线程编号 ORA-01618: 线程未启用- 无法安装

Oracle常见错误汇总

1.Oracle ORA-01555快照过旧的错误 首先了解Oracle在什么情况下会产生ORA-01555错误: 假设有一张6000万行数据的testdb表,预计testdb全表扫描1次需要2个小时,参考过程如下: 1、在1点钟,用户A发出了select * from testdb;此时不管将来testdb怎么变化,正确的 结果应该是用户A会看到在1点钟这个时刻的内容。 2、在1点30分,用户B执行了update命令,更新了testdb表中的第4100万行的这条记录, 这时,用户A的全表扫描还没有到达第4100万条。毫无疑问,这个时候,第4100万行的这条记录是被写入了回滚段,假设是回滚段UNDOTS1,如果用户A的全表扫描到达了第4100万行,是应该会正确的从回滚段UNDOTS1中读取出1点钟时刻的内容的。 3、这时,用户B将他刚才做的操作提交了,但是这时,系统仍然可以给用户A提供正确的数据, 因为那第4100万行记录的内容仍然还在回滚段UNDOTS1里,系统可以根据SCN到回滚段里找到正确的数据,但要注意到,这时记录在UNDOTS1里的第4100万行记录已经发生了重大的改变:就是第4100万行在回滚段UNDOTS1里的数据有可能随时被覆盖掉,因为这条记录已经被提交了! 4、由于用户A的查询时间漫长,而业务在一直不断的进行,UNDOTS1回滚段在被多个不同的 transaction使用着,这个回滚段里的extent循环到了第4100万行数据所在的extent,由于这条记录已经被标记提交了,所以这个extent是可以被其他transaction覆盖掉的!5、到了1点45分,用户A的查询终于到了第4100万行,而这时已经出现了第4条说的情况, 需要到回滚段UNDOTS1去找数据,但是已经被覆盖掉了,这时就出现了ORA-01555错误。

Oracle连接错误故障排除讲解

Oracle 连接错误故障排除 产品:Tableau Desktop, Tableau Server 版本:All 上次修改日期:24 Aug 2015 Oracle 驱动程序需要具有唯一格式的特定连接语句。然而,可能并不总是需要TNSNames.ora 文件。例如,如果仅安装了 Tableau 提供的 Oracle 文件,且不具有独立的 Oracle 客户端。Oracle 错误消息涉及 TNSNames.ora 文件。 通常,纠正“高级 Oracle 连接”对话框中的路由或命名语法,或者使 用 .WORLD 数据库全名,即可解决大部分 Oracle 连接问题。如果连接错误需要进一步进行故障排除,请参阅下面列出的 4 种常见连接错误。 ?ORA-03113:通信信道上的文件结尾 ?ORA-12154:TNS:无法解决指定的连接标识符 HOST 值不正确或者全局名称不正确或未知的问题 ?ORA-12514:TNS 侦听器当前无法识别连接描述符中请求的服务SERVICE 值不正确 ?ORA-12541:TNS:无侦听器 PORT 值不正确 ?ORA-00932:数据类型不一致 ORA-03113:通信信道上的文件结尾 ORA-03113 是任何干扰 Oracle 会话的问题的全捕获类型错误。造成该错误的原因可能有很多。请参阅下表,了解故障排除指南。 ?请参阅特定于此错误的 Oracle 文档:我的 Oracle 支持。 o请参阅 Oracle 的 B 常见错误故障排除页面。 ?Oracle 建议您检查网络问题并审查 SQL*Net 设置。 ?如果连接到 Oracle 9.2.0.5,则在很多情况下,造成此错误的主要原因是 Oracle 错误 3010227。请要求 Oracle 数据库管理员应用 Oracle 修补程序 9.2.0.6 或适合您服务器的另一个修补程序。 ?将 Oracle 初始化参数“STAR_TRANSFORMATION_ENABLED”设置为FALSE。 ?或者,如果您想进一步测试此问题,请遵循下面列出的可选过程。 Step 1 从 Tableau Desktop 开始页面,选择“连接到数据”。

oracle操作常见错误

1.[Err] ORA-02438: Column check constraint cannot reference other columns ORA-02438: 列检查约束条件无法引用其它列 --通常可能是constraint 拼写错误 2. [Err] ORA-02250: missing or invalid constraint name 约束条件名缺失或者无效。 比如: alter table tbl_school add s_level number(7) constraint unique; //错误的 ====add s_level number(7) unique; 正确的 4. [Err] ORA-01861: literal does not match format string ORA-01861: 文字与格式字符串不匹配 比如: insert into tbl_school(id,s_name,address,establish_time,style) values(1,'清华','北京','1976-05-05','理'); 日期的输入,要有固定的格式 =====values(1,'清华','北京',to_date('1976-05-01','rrrr-mm-dd'),'理'); 5:select index_name,table_name from user_indexes Where table_name=’s_emp’; 提示错误:为选定行。 ‘’里面的就变成了字符串,是区分大小写的, select index_name,table_name from user_indexes Where table_name=’S_EMP’; 6:Ora-02290【】违反检查约束条件 可能原因:check里面出错,在传值的时候,出现乱码了,只能重建表

Oracle常见问题及其解决方法(doc 10页)

Oracle常见问题及其解决方法(doc 10页)

iSQL*Plus URL:http://10.10.43.137:5560/isqlplus Enteprise Manager 10g Database Control URL: http://information:5500/em OracleDBConsoleorcl不能启动,报错误码2解决策略 解决策略一: 修改你的主机参数文件 修改一下: C:\WINDOWS\system32\drivers\etc下的host文件. 如果没有的话就自己加一个IP和你的计算机名对应,如果已有了就把你的IP地址和你的计算机名对应起来. 如: # copyright (c) 1993-1999 microsoft corp. # # this is a sample hosts file used by microsoft tcp/ip for windows. # # this file contains the mappings of ip addresses to host names. each # entry should be kept on an individual line. the ip address should # be placed in the first column followed by the corresponding host name. # the ip address and the host name should be separated by at least one # space. # # additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # for example: # # 102.54.94.97 https://www.sodocs.net/doc/af5820005.html, # source server # 38.25.63.10 https://www.sodocs.net/doc/af5820005.html, # x client host 127.0.0.1 localhost 10.10.43.137 information 解决策略二: 启动电脑,到登陆界面,电脑报有个服务启动失败,电脑没有新装软件,周六还没有问题,怎么突然报这个错误?于是到事件查看器中看看什么问题,显示是OracleDBConsoleorcl启动失败,到服务里一看,确实没有启动。手动启动一下,报错误码2 我装的是10g,于是到ORACLEproduct10.2.0db_1test_orclsysmanlog目录看一下log里写了什么,打开OracleDBConsoleorclsrvc.log. log最后记录的是: 日志让看emdbconsole.nohup文件,目录里没有这个文件呀。 手动执行一下emctl.bat,于是启动控制台,执行emctl.bat istart dbconsole,报错,ORACLE_SID 没有定义,打开emctl.bat看看,这里是定义环境变量的地方,其中已经设置了这些:if not defined REMOTE_EMDROOT (set ORACLE_HOME=Ec:oracleproduct10.2.0db_1)

安装oracle数据库常见的错误

安装oracle数据库容易出现的几个错误及解决办法 这几天因为学习的关系,需要安装oracle数据库。以前在机子上装过,但是卸载了,在再次安装的过程,碰到一些问题,查了一些网上的资料,现在整理起来,相信蛮有用的! 一、第一次安装容易出现的错误。 第一次安装出现“加载数据库错误areasQueries”的错误,一般是因为Oracle安装目录带有中文字符的目录 二、再次安装容易出现的错误 第一次安装失败或者卸载后再次安装oracle数据库,需要在注册表里删除相关注册信息才行。 1、删除ORACLE注册表,位置如下: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE ORACLE8i 与ORACLE9i的注册表与ORACLE8 ,ORACLE7有所不同,oracle9i注册表的主要内容在HOME0中,再安装其他产品则会出现HOME1,HOME2等。所以如果机子上没有别的产品的话同,把ORACLE 及以下键值全部删除。 2、删除oracle服务,位置如下: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\oracle 含oracle 在内全部删除掉,当然,服务可以用关工具进行删除,同等效果的。 注意,如果已经安装了ArcSDE For Oracle,在删除Oracle键值的时候,不能删除带有ArcSDE 关键字的键值,否则容易造成ArcSDE无法运行。 3.删除事件日志,置如下: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Eventlog\Application

Oracle_ORA一些错误整理

1、ORA-12560: TNS: 协议适配器错误 场景:在cmd窗口输入:sqlplus "/as sysdba"想打开数据库时报的错; 原因:没有启动Oracle服务器; 解决:WIN+R,跳出运行窗口,输入"services.msc",打开服务窗口;找到OracleServiceORACLE服务,查看是否为启动,右键启动即可。 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: 用户名/口令无效; 登录被拒绝 有可能用户名或者密码错误

oracle常见等待事件及处理方法

我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息 看书笔记db file scattered read DB ,db file sequential read DB,free buffer waits,log buffer space,log file switch,log file sync 我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象。v$session_wait的p1、p2、p3告诉我们等待事件的具体含义,根据事件不同其内容也不相同,下面就一些常见的等待事件如何处理以及如何定位热点对象和阻塞会话作一些介绍。 <1> db file scattered read DB 文件分散读取(太多索引读,全表扫描-----调整代码,将小表放入内存) 这种情况通常显示与全表扫描相关的等待。当全表扫描被限制在内存时,它们很少会进入连续的缓冲区内,而是分散于整个缓冲存储器中。如果这个数目很大,就表明该表找不到索引,或者只能找到有限的索引。尽管在特定条件下执行全表扫描可能比索引扫描更有效,但如果出现这种等待时,最好检查一下这些全表扫描是否必要。因为全表扫描被置于LRU(Least Recently Used,最近最少适用)列表的冷端(cold end),所以应尽量存储较小的表,以避免一次又一次地重复读取它们。 ================================================== 该类事件的p1text=file#,p1是file_id,p2是block_id,通过dba_extents即可确定出热点对象(表或索引) select owner,segment_name,segment_type from dba_extents

Oracle常见错误及解决方案

O r a c l e常见错误及解决方案 问题1:Oracle服务器进入PL/SQL Developer时报ora-01033:oracle initialization or shutdown in progress 错误提示,应用系统无法连接Oracle服务。 解决方法如下: ⑴进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID; ⑵运行sqlplus "/as sysdba" SQL>shutdown immediate 停止服务 SQL>startup 启动服务,观察启动时有无数据文件加载报错,并记住出错数据文件标号 SQL>shutdown immediate 再次停止服务 SQL>startup mount SQL> recover datafile 2 恢复出错的数据文件 SQL>shutdown immediate 再次停止服务 SQL>startup 启动服务,此次正常。 ⑶进入PL/SQL Developer检查,没有再提示错误。 问题2:Oracle密码忘记了怎么办? 解决方法有很多种,这里讲述以下三种: ⑴打开cmd,输入sqlplus /nolog,回车; 输入“conn / as sysdba”; 输入“alter user sys identified by 新密码”。 注意:新密码最好以字母开头,否则可能出现错误Ora-00988。有了这个方法后,只要自己对oracle 服务器有管理员权限,Oracle密码忘记了也不用着急,可以随意修改密码。 ⑵在命令行执行如下命令: sqlplus "/@服务名as sysdba" 然后在sqlplus中运行以上命令即可修改密码: alter user sys identified by 新密码; alter user system identified by 新密码; ⑶运行到C盘根目录 输入:SET ORACLE_SID = 你的SID名称 输入:sqlplus/nolog 输入:connect/as sysdba 输入:alert user sys identified by sys 输入:alert user system identified by system 完成以上5步,则密码更改完成,密码是Oracle数据库的初始密码。 问题3:表空间不足而引发错误怎么办? 解决方法如下: oracle表空间不足,一般有两个原因:

ORACLE数据库常见问题诊断方法(内部错误篇)-20021224-A2

ORACLE数据库常见问题诊断方法 (内部错误篇) ORACLE的错误各种各样,包括应用错误、一般错误、内部错误等,前面两类错误在ORALCE的文档中有说明,但内部错误没有相应的文档说明,只是请求报告ORACLE技术支持,本文档主要讨论ORACLE的内部错误,且这些内部错误在ICD中经常出现,仅供参考。 内部错误一般为格式为ORA-00600或ORA-006XX,其中前者最普遍,后者较少见,ORA-600中的第一个变量用于标记代码中错误的位置,第二个到第五个变量显示附加信息,例如文件号、函数号等具体信息。 1ORA-00600【12330】错误 特征:数据库告警日志中经常有这个错误及相应的trace文件 原因:用户异常中断操作或客户端字符集与SERVER端字符集不一致 措施:如果偶尔出现,则为用户异常中止,例如代理或应用服务器的断连,有时会产生这个错误;如果经常出现,则为客户端与服务端字符集不一致。 客户端的字符集在注册表里定义: HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG 2ORA-00604【xxx】错误 特征:在分析SQL语句时,查询数据字典表发生错误 原因:这类错误一般与内存管理有关,有可能是由于内存泄漏导致该错误 措施:如果偶尔出现,适当加大SHARE_POOL_SIZE;如果经常出现,则需要打相应的补丁。 3ORA-00600【3339】错误 特征:数据冲突,包括:块格式冲突、非法索引入口 原因:oracle系统本身bug;操作系统或介质故障 措施:ORACLE升级或打补丁;检查硬件故障 4ORA-00600【13004】错误 特征:逻辑冲突,例如查询返回错误的数据等 原因:oracle系统本身bug; 措施:ORACLE升级或打补丁;

Oracle数据库全部错误一览表

Oracle数据库全部错误一览表 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话 ID;访问被拒绝 ORA-00023: 会话引用进程私用内存;无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配 ORA-00026: 丢失或无效的会话 ID ORA-00027: 无法删去当前会话 ORA-00028: 您的会话己被删去 ORA-00029: 会话不是用户会话 ORA-00030: 用户会话 ID 不存在。 ORA-00031: 标记要删去的会话 ORA-00032: 无效的会话移植口令

ORA-00033: 当前的会话具有空的移植口令 ORA-00034: 无法在当前 PL/SQL 会话中 ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数 ORA-00036: 超过递归 SQL () 级的最大值 ORA-00037: 无法转换到属于不同服务器组的会话 ORA-00038: 无法创建会话: 服务器组属于其它用户 ORA-00050: 获取入队时操作系统出错 ORA-00051: 等待资源超时 ORA-00052: 超出最大入队资源数 () ORA-00053: 超出最大入队数 ORA-00054: 资源正忙,要求指定 NOWAIT ORA-00055: 超出 DML 锁的最大数 ORA-00056: 对象 '.' 上的 DDL 锁以不兼容模式挂起 ORA-00057: 超出临时表锁的最大数 ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库 (非 ) ORA-00059: 超出 DB_FILES 的最大值 ORA-00060: 等待资源时检测到死锁 ORA-00061: 另一个例程设置了不同的 DML_LOCKS ORA-00062: 无法获得 DML 全表锁定;DML_LOCKS 为 0

oracle常见问题分析

第一楼目录 故障分类一数据库挂起故障 1 由于ARCHIVE挂起导致数据库挂死 2 NIT文件中SGA区设置太大,导致内存不够用,数据库和系统都挂死 3 由于临时表空间无法扩展导致数据库被挂起 4由于未打补丁导致RMAN备份时将数据库挂起 故障分类二数据库功能/性能异常 5由于BLOB类型的表记录数太多操作又太频繁导致数据库效率急差 6由于未对特大表(达到或超过100万条记录)定期做表分析导致数据库操作特别慢 7由于空间不够导致插入数据时扩展索引失败 8由于REDOLOG破坏导致数据库异常 9由于控制文件被破坏导致数据库无法正常启动 10由于数据文件丢失或破坏导致数据库无法正常启动 11由于空间参数设置不合理导致扩展表空间、索引等失败 12由于时间格式的环境变量设置问题导致话单无法入库 13由于大事务未使用大回滚段导致事务挂起 14由于数据库连接数太多导致服务器进程数多或内存耗尽 15由于使用了MTS方式,导致数据库操作特别慢(包括备份) 16由于存在一个大事务操作,导致数据库性能特别差或产生频繁日志切换 17由于没有COMMIT,导致数据库表被锁住 18索引创建不合理,导致数据库查询特别慢 19 由于BUFFER参数设置不合理导致EXP失败 20由于EXP不向上兼容,语言不兼容,导致不同版本、不同字符集的数据库无法导入 21 由于创建表空间时误将其创建在以‘本地管理’,导致在表空间上的所有对象无法修改其存储参数 22 错误地在系统表空间上建无关的数据文件 23 ORACLE客户端在P4上安装不成功 24由于LISTENER.ORA或TNSNAMES.ORA配置问题导致网络问题 25由于环境变量设置问题导致VERSOIN版本启动问题 26用户数据、表破坏下的数据恢复 27 由于OS层问题导致数据库ORA-600错误 故障分类三将导致数据库安装失败或打补丁失败的情况 28 由于环境变量或没有安装MAKE文件导致数据库安装失败 29 由于/TMP等文件系统设置太小导致数据库无法正常安装 30 HPUX上由于核心参数设置不对导致数据库无法正常启动 31 在64位的ORACLE817上打32的补丁失败 32由于安装备机数据库时是使用的拷贝方式,所以导致在备机上安装补丁失败 33由于安装ORACLE时错误地在$ORACLE_HOME目录下创建LINK,导致将打过补丁后的版本拷贝到备机失败

Oracle常见错误代码的分析与解决

Oracle常见错误代码的分析与解决 作者:chensheng 发文时间:2005.06.15 在使用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的竞争状况: 和

ORACLE SPATIAL常见使用错误解决办法

ORACLE SPATIAL常见错误解决办法1、ORA-13226: 没有空间索引接口将不被支持 当使用一个空间操作符时,如果没有使用空间索引导致该操作符不能被完成将会返回该错误。这可能会发生在当你使用的列上没有空间索引、或者优化器没有选择以所用为基础进行计算时。 解决办法:如果在空间操作符的列上没有索引,就创建一个索引。如果优化器没有选择空间索引,那么久显式地指定index或ordered以确保空间索引被使用。 例如: select b.gwm_fid, b.gwm_fno, b.gwm_vno, a.gwm_tileid, b.districtid from gs_tile_p2 a, VP_street_area b where b.gwm_vno = 13001 and b.deletetag = 0 and b.gwm_status = 0 and sdo_relate(a.gwm_geometry, b.gwm_geometry, '' MASK = ANYINTERACT '') = '' TRUE ''; 查询提示该错误,原因gs_tile_p2该表没有创建控件索引。 2、ORA-13203: 读取USER_SDO_GEOM_METADA TA视图失败 如果在USER_SDO_GEOM_METADATA视图中对没有任何元数据的表进行索引,就会返回该错误。 解决办法:在该视图中插入一条与空间层相关的记录。

比如: CREATE INDEX INDEX_GS_TILE_P2 ON GS_TILE_P2(GWM_GEOMETRY)INDEXTYPE IS MDSYS.SPATIAL_INDEX; 提示ORA-13203错误,经查询发现没有在元数据中插入记录。 INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) V ALUES ('GS_TILE_P2', 'GWM_GEOMETRY', MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT('X', -5000000, -5000000, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', -5000000, -5000000, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Z', 0,0, 0.000000050) ), NULL); 3、ORA-13365:层的SRID与几何体的SRID 不符 该错误暗示着在一个表的几何体中的SRID与USER_SDO_GEOM_METADA TA视图中相应的SRID值不符。 解决办法:将两者的SRID设为一致。 4、ORA-13223: SDO_GEOM_METADA TA中的重复项

Oracle数据库服务中常见的6个错误

Oracle数据库服务中常见的6个错误 没有人会否认Oracle是全球最有影响的数据库产品之一;不过好的东西似乎总不是那么好用(初看起来如此),甚至有些无情--总会给layman们一个个无情的错误号。下面是我个人的总结,条条有用,希望能给初学者一点启示。 关于“好的东西似乎总不是那么好用(初看起来如此)”的一个笑话:在参加 IBM DB2 512、513培训前,在校园网上下载到了安装程序,不过任凭我们几个同学研究个半天,也不知哪个文件是安装文件,竟没有安装成功。最后,一致认为:看来这个培训真是太有必要了!事后,才知道--我们下载的是4linux的! 1、ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏。若是前者,使用命令net start OracleOraHome81TNSListener(名字可能有出入)即可;如果是后者,则使用“Net8 Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路OK。在添加之前可能需要把所有的监听器先删!) 2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误 原因:Oracle的数据库服务没有启动。使用命令net start OracleSERVICEORADB(ORADB为数据库名字)即可。如果仍没有解决,请继续向下看。 3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步: 1)ORADIM -DELETE -SID oradb 删除数据库服务项 2)ORADIM -NEW -SID oradb 新增数据库服务项 注:这个过程中如果出错,就重启计算机! 4、ORA-12154:TNS:能解析服务名 原因:Oracle的网络服务名没有正确配置。请使用“Net8 Configuration Assistant”工具向导之“本地网络服务名配置”配置TNS即可。如果仍没有解决,请继续向下看。 5、ORA-1034 :TNS:Oracle不可用 原因:Oracle的数据库服务正确启动,但是数据库没有打开! 使用命令: 1)svrmgrl 启动服务管理器 2)connect internal 以internal身份登陆 3)startup 打开数据库 6、ORA-12560:TNS:协议适配器错误(顽固性的) 原因:未知。

编写SQL语句时常见的10种错误-推荐下载

Java开发者编写SQL语句时常见的10种错误 Java开发者对于面向对象编程思维与命令行编程思维的协调程度, 取决于他们如下几种能力的水平: 1.技巧(任何人都可以编写命令行形式的代码) 2.教条(有的人使用“模式 - 模式”的方式,即模式无处不在, 并以名字作为标识) 3.情绪状况(在初期,真正面向对象形式的代码比起命令式代码 会更加难懂。) 但是,当Java开发人员编写SQL语句时,一切都变得不同了。SQL 是一种说明式语言,与面向对象思想和命令式思想无关。在SQL语 言中,查询非常容易表达。但它也不是那么容易以最佳或最正确地

方式编写出来。开发人员不仅需要重新思考自己的编程模式,还需要从集合论的角度进行深入思考。 以下是Java开发人员使JDBC或jOOQ编写SQL语句时,几种常见的错误(排名不分先后) 1.忘记了NULL 误解NULL的含义可能是Java开发人员编写SQL最常犯的错误。这有可能是因为NULL也被称为UNKNOWN,但也有其他的原因。当然如果它只被叫做UNKNOWN,会更容易理解一些。另一个原因是,JDBC 在获取数据,或绑定变量时,SQL中的NULL被映射到Java中的null。这可能会导致人们认为类似Java中null==null的情况,SQL 中也存在NULL= NULL。 一个更离奇的误解NULL的例子是,当NULL谓词用于行值表达式时。另一个微妙的问题产生与对NOTIn 反连接中NULL含义的误解。 解决办法 不断的训练自己。要时刻明确NULL的含义,每次你写SQL时,都要考虑: 对于NULL来说谓词是否正确?

NULL是否影响该函数的结果? 2.在Java内存中处理数据 一些Java开发者十分了解SQL特性。偶尔JOIN,零散的UNION,没什么问题。但如果遇到视窗功能,结果集分组等情况又怎么样呢?很多Java开发人员会把SQL数据加载到内存,把数据转换成一些适合的集合类型,以十分冗长的循环结构在集合上执行恼人数学运算(至少在Java 8改进容器之前是这样的)。 但一些SQL数据库除了支持SQL标准外,还支持先进的OLAP特性,执行效率更好,且更容易编写。一个非标准的例子就是甲骨文的MODEL子句。只是让数据库进行数据处理过程,将最终获取的结果加载到Java内存中。因为一些非常聪明的人已经优化了这些昂贵的产品。所以,事实上,通过向OLAP数据库上进行迁移,您将得到两个好处: 1.简洁。它可能使得在SQL中编写正确代码会比在Java中相对 容易 2.性能。该数据库将可能比你的算法要快。更重要的是,你不必 再通过网络传输数百万条记录。 解决办法

Oracle错误代码大全

Oracle错误代码大全 ORA-01579: 恢复过程中出现写错误 ORA-01580: 创建控制备份文件时出错 ORA-01581: 尝试使用已分配的回退段 () 新区 () ORA-01582: 无法打开要备份的控制文件 ORA-01583: 无法获得要备份的控制文件的块大小 ORA-01584: 无法获得要备份的控制文件的文件大小 ORA-01585: 标识备份文件时出错 ORA-01586: 无法打开要备份的目标文件 ORA-01587: 复制控制文件的备份文件时出错 ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项 ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 ORA-01590: 段可用列表数 () 超出最大数 ORA-01591: 锁定已被有问题的分配事务处理挂起 ORA-01592: 将第 7 版回退段 () 转换为 Oracle 8 版格式时出错 ORA-01593: 回退段最佳大小 ( blks) 小于计算的初始大小 ( blks) ORA-01594: 尝试放回已释放的回退段 () 区 () ORA-01595: 释放区 () 回退段 () 时出错 ORA-01596: 无法在参数中指定系统 ORA-01597: 无法改变联机或脱机系统回退段 ORA-01598: 回退段''未联机 ORA-01599: 无法获得回退段 (), 高速缓存空间已满 ORA-01600: 至多只有一个""在子句""()中 ORA-01601: 子句""()中的存储桶大小非法 ORA-01603: 子句""()中的分组大小非法 ORA-01604: 子句""()中的编号范围非法 ORA-01605: 子句""()中缺少编号 ORA-01606: gc_files_to_locks 不同于另一已安装例程的参数 ORA-01608: 无法将回退段''联机,其状态为 () ORA-01609: 日志是线程的当前日志 - 无法删除成员 ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成 ORA-01611: 线程编号无效 - 必须介于 1 和之间 ORA-01612: 线程已经启用 ORA-01613: 线程只有日志 - 要求至少启用 2 个日志 ORA-01614: 线程正忙 - 无法启用 ORA-01615: 线程已安装 - 无法禁用 ORA-01616: 线程已打开 - 无法禁用 ORA-01617: 无法安装: 不是有效的线程编号 ORA-01618: 线程未启用 - 无法安装 ORA-01619: 线程已由另一例程安装 ORA-01620: 没有可用于安装的公用线程 ORA-01621: 数据库打开时无法重命名当前日志的成员

代码常见的错误

PHP的错误和异常处理 任何程序员在开发时都可能遇到过一些失误,或其他原因造成错误的发生。当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生。PHP程序的错误发生一般归属于下列三个领域。 ?语法错误 语法错误最常见,并且最容易修复。例如,遗漏了一个分号,就会显示错误信息。这类错误会阻止脚本执行。通常发生在程序开发时,可以通过错误报告进行修复,再重新运行。 ?运行时错误 这种错误一般不会阻止PHP脚本的运行,但是会阻止脚本做希望它所做的任何事情。例如,在调用header()函数前如果有字符输出,PHP 通常会显示一条错误消息,虽然PHP脚本继续运行,但header()函数并没有执行成功。 ?逻辑错误 这种错误实际上是最麻烦的,不但不会阻止PHP脚本的执行,也不会显示出错误消息。例如,在if语句中判断两个变量的值是否相等,如果错把比较运行符号“==”写成赋值运行符号“=”就是一种逻辑错误,很难会被发现。 一个异常则是在一个程序执行过程中出现的一个例外,或是一个事件,它中断了正常指令的运行,跳转到其他程序模块继续执行。所以异常处

理经常被当做程序的控制流程使用。无论是错误还是异常,应用程序都必须能够以妥善的方式处理,并做出相应的反应,希望不要丢失数据或者导致程序崩溃。

E_COMPILE_WARNING致命的编译时警告 E_USER_ERROR用户导致的错误消息 E_USER_WARNING用户导致的警告 E_USER_NOTICE用户导致的注意消息 E_ALL所有的错误、警告和注意 E_STRICT关于PHP版本移植的兼容性和互操作性建议

如果用户希望在PHP脚本中,遇到上表中的某个级别的错误时,将错误消息报告给用户。则必须在配置文件php.ini中,将display_errors 指令的值设置为On,开启PHP输出错误报告的功能。也可以在PHP 脚本中调用ini_set()函数,动态设置配置文件php.ini中的某个指令。如果display_errors被启用,就会显示满足已设置的错误级别的所有错误。当用户在访问时,看到显示的这些消息不仅会感到迷惑,而且还可能会过多地泄露有关服务器的信息,使服务器变得很不安全。所以在项目开发或测试期间启用此指令,可以根据不同的错误报告更好的调试程序。出于安全性和美感的目的,让公众用户查看PHP的详细出错消息一般是不明智的,所以在网站投入使用时要将其禁用。 当你正在开发站点时,你将希望PHP报告特定类型的错误,可以通过调整错误报告的级别实现,可以通过以下两种方法设置错误报告级别。?可以通过在配置文件php.ini中,修改配置指令error_reporting 的值,修改成功后重新启动Web服务器,则每个PHP脚本都可以按调

相关主题