记录远程调用Oracle出现的异常:ORA-12514、ORA-01034、ORA-27101

文章讲述了作者在虚拟机上安装Oracle时遇到连接问题,经过排查发现是由于本地监听器设置错误导致。解决方法包括修改listener.ora和tnsnames.ora文件,以及使用sqlplus启动数据库。最终成功解决连接问题并能通过DBEaver登录。

起因是这样的:我是在虚拟机上安装的Oracle,然后每次通过本机的dbeaver去连,刚开始连的时候没问题,过了两天之后,就出现了:

Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

监听器监听不到服务,我以为是监听器的问题,就去看 C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 目录下的 listener.ora 文件

将里面的host配置成虚拟机计算机名,或者IP地址也行

结果还是报ORA-12514这样的错,后来我就在虚拟机上登录登录Oracle,发现居然登不上去,一直让我输入用户名和密码,然后还报这样的错:ORA-01034: ORACLE not available ORA-27101:shared memory realm does not exist

原来问题在这里,而不是ORA-12514

解决办法:

打开 C:\oracle\product\10.2.0\admin\orcl\pfile 目录下的 init.ora.816202319487 文件

ORA - 00922错误表示选项缺失或无效,通常是由SQL语句的语法问题导致的。以下是一些常见的解决办法: #### 检查SQL语句语法 - **关键字拼写错误**:确保SQL语句中的所有关键字拼写正确,例如 `SELECT`、`FROM`、`WHERE` 等。错误的拼写会导致Oracle无法识别这些关键字,从而抛出 ORA - 00922 错误。 ```sql -- 错误示例:SELCT 拼写错误 SELCT column1, column2 FROM table_name; -- 正确示例 SELECT column1, column2 FROM table_name; ``` - **缺失必要子句**:某些SQL语句需要特定的子句才能正常执行。例如,`CREATE TABLE` 语句需要指定表名和列定义。 ```sql -- 错误示例:缺少列定义 CREATE TABLE table_name; -- 正确示例 CREATE TABLE table_name ( column1 INT, column2 VARCHAR2(50) ); ``` - **多余的空格或特殊字符**:检查SQL语句中是否存在多余的空格、制表符或其他特殊字符,这些可能会影响语句的解析。 #### 检查语句中的引号和括号 - **引号匹配**:确保字符串值使用正确的引号括起来,并且引号是成对出现的。 ```sql -- 错误示例:引号不匹配 SELECT * FROM table_name WHERE column1 = 'value; -- 正确示例 SELECT * FROM table_name WHERE column1 = 'value'; ``` - **括号匹配**:确保SQL语句中的括号是成对出现的,特别是在使用子查询、函数调用等需要括号的地方。 ```sql -- 错误示例:括号不匹配 SELECT column1 FROM (SELECT column1, column2 FROM table_name; -- 正确示例 SELECT column1 FROM (SELECT column1, column2 FROM table_name); ``` #### 检查数据库对象名称 - **表名和列名**:确保SQL语句中引用的表名和列名存在,并且大小写匹配(如果数据库区分大小写)。 ```sql -- 错误示例:表名拼写错误 SELECT column1 FROM non_existent_table; -- 正确示例 SELECT column1 FROM existing_table; ``` #### 检查数据库版本兼容性 不同版本的Oracle数据库对SQL语法的支持可能会有所不同。确保使用的SQL语句与当前数据库版本兼容。 #### 查看数据库错误日志 数据库错误日志可以提供更详细的错误信息,帮助定位问题。可以通过以下方法查看Oracle数据库的错误日志: - **Alert日志**:通常位于数据库的 `$ORACLE_BASE/diag/rdbms/<db_unique_name>/<instance_name>/trace` 目录下,文件名为 `alert_<instance_name>.log`。 - **SQL*Plus错误信息**:在SQL*Plus中执行SQL语句时,如果出现错误,会显示详细的错误信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值