Oracle常见错误.doc_第1页
Oracle常见错误.doc_第2页
Oracle常见错误.doc_第3页
Oracle常见错误.doc_第4页
Oracle常见错误.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ORA-00911: 无效字符 问题和解决我今天写JDBC插入数据库数据时出现ORA-00911: 无效字符问题,我把SQL打到控制台上面,然后COPY到SQL PULS中是可以插入数据的,但是在ECLIPSE中执行就报ORA-00911: 无效字符的错误,我查了一下,我的是类似这种的insert intotablea(aaa) values(111);把最后面的;去掉,修改为insert intotablea(aaa) values(111)就可以执行了。ORA-00942: 表或视图不存在 原因:没有找到sql语句中要调用的表(可能根本不存在、可能表明不对,也可能没有区分大小写)。解决方法:1、打断点,转到定义,在整个解决方案中搜索看sql语句的出处,然后排查具体原因。第一、 不存在:用plsql往里面导入表。第二、 表名不对,修改表的名字。第三、 没有区分大小写:/jtmjx/archive/2012/07/03/2574766.html采用Oracle数据库,使用Powerdesigner设计,生成Sql文件导入后查询出现“ORA-00942: 表或视图不存在 ”,很是郁闷,这个问题以前出现过,当初解决了,但因好久没有使用,这次竟然忘了,害得我浪费了好些时间,为了避免再次忘记,将它记下来,同时和大家一起分享。1、问题产生的原因Oracle 是大小写敏感的,我们创自己写Sql脚本创建表的时候Oracle会自动将我们的表名,字段名转成大写,eg:create table T_WindRadar ( wr_id VARCHAR2(64) not null, wr_reciveTime DATE, wr_image BLOB, constraint PK_T_WINDRADAR primary key (wr_id);但是 Oracle 同样支持 语法,将表名或字段名加上后,Oracle不会将其转换成大写eg:create table T_WindRadar ( wr_id VARCHAR2(64) not null, wr_reciveTime DATE, wr_image BLOB, constraint PK_T_WINDRADAR primary key (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: 用户不存在第一帖:/blog/938496已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集导入服务器使用AL32UTF8字符集 (可能的字符集转换. 正在将ZHOU的对象导入到 DEVE_BRAVER;IMP-00003: 遇到 ORACLE 错误 1435ORA-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.dmpImport: Release .0 - Production on 星期四 4月 12 10:06:45 2007Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到: Oracle Database 10g Enterprise Edition Release .0 - ProductionWith the Partitioning, OLAP and Data Mining options经由直接路径由 EXPORT:V09.02.00 创建的导出文件已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入导出客户机使用 WE8ISO8859P1 字符集 (可能的字符集转换). 正在将 NEOHKDEV1 的对象导入到 NEOHKDEV1. 正在将 U426522 的对象导入到 U426522IMP-00003: 遇到 ORACLE 错误 1435ORA-01435: 用户不存在成功终止导入, 但出现警告。这样的原因可能是没有创建一个用户!dmp文件已经定好是这个用户neo.20070411.dmp第一部分:查看oracle中的imp,exp命令:imp help=yexp help=y1.导出表数据:文件名以backup_yyMMddHHmm.dmp 表示dateString=date +%y%m%d%H%M#echo $dateStringsu - 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:$1fileName=$1echo $fileName#if $fileName = #then# echo 请指定备份恢复的文件名,请指定绝对文件路径# exit 0;#fi#echo fileName=$fileNamesu - 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中 expsystem/managerTESTfile=d:/daochu.dmp full=y2 将数据库中system用户与sys用户的表导出 expsystem/managerTESTfile=d:/daochu.dmp owner=(system,sys)3 将数据库中的表inner_notify、notify_staff_relat导出 expaichannel/aichannelTESTDB2file= d:/data/newsmgnt.dmp tables=(inner_notify,notify_staff_relat)4 将数据库中的表table1中的字段filed1以00打头的数据导出 expsystem/managerTESTfile=d:/daochu.dmp tables=(table1) query=/ where filed1 like 00%/ 上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。 也可以在上面命令后面 加上 compress=y 来实现。数据的导入1 将D:/daochu.dmp 中的数据导入 TEST数据库中。 impsystem/managerTEST file=d:/daochu.dmp impaichannel/aichannelHUSTfull=y file=file= d:/data/newsmgnt.dmp ignore=y 上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。 在后面加上 ignore=y 就可以了。2 将d:/daochu.dmp中的表table1 导入impsystem/managerTEST 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/backupimp userid=test/test full=y file=inner_notify.dmp屏幕显示Import: Release .0 - Production on 星期四 2月 16 16:50:05 2006(c) Copyright 2000 Oracle Corporation. All rights reserved.连接到: Oracle8i Enterprise Edition Release .0 - ProductionWith the Partitioning optionJServer Release .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.logPLSQL Developer导入导出数据库/lqh4188/article/details/16839945PLSQL 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 ExportSql Insertpl/sql developer比较:第一种是导出为.dmp的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最广第二种是导出为.sql文件的,可用文本编辑器查看,通用性比较好,但效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段(blob,clob,long),如果有,会提示不能导出(提示如下:table contains one or more LONG columns cannot export in sql format,user Pl/sql developer format instead),可以用第一种和第三种方式导出。第三种是导出为.pde格式的,.pde为Pl/sql developer自有的文件格式,只能用Pl/sql developer自己导入导出;不能用编辑器查看。总结:就用第一种方式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 excelexcel数据导入到数据库:1.在Excel中准备好要导入的数据。具体操作:在Excel中,把第一列设置为空列,第二列以后的列应与要导入的数据表的字段相对应。2.登录PLSQL Developer,找到需要导入数据的数据库表后,点击右键-edit data,进入了编辑此表的数据对话框,并点击最左侧选中一空行。3.copy Excel表中的数据记录,将数据粘贴到上步中PLSQL Developer显示的表列中。4.点击PLSQL Developer中的对号按钮进行Post。ORA-12514TNS:监听程序当前无法识别连接描述符中请求服务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:Oracle10gnetworkadminlistener.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:Oracle10gnetworkadminlistener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论