1 ORA-00955
建表时出现此错误,名称已由现有对象使用(name is already used by an existing object),我们来分析一下。
第一,你肯定在数据库里建过这张表;
第二,你“drop table 表名”提示没有该表;第三,执行查表语句“select * from user_objects where OBJECT_NAME = ‘你的表名’”,这里有三种情况,一种是你把表名写成了小写查不到结果,当你把表名写成大写时就有结果了,OBJECT_TYPE字段的值显示为table,这里你应该这样使用drop语句,“drop table 表空间.表名”,这里删除的是指定表空间下的表,成功删除后即可建表,二种是查得到结果,OBJECT_TYPE字段的值显示为其他类型而不是table,代表出现同名词,你可以“drop 你的OBJECT_TYPE 你的OBJECT_NAME”,成功删除后即可建表,三种是始终查不到结果,这时你可以查看plsql工具中的Synonyms文件夹下是否有内容,如下图:
查到之后可以执行删除同义词语句“drop public synonym 表名”,当公有对象和私有对象同名时(因为数据不同的用户,所以可以),以私有对象优先(类似于局部变量),所以我们这里是存在了一张公有表,不属于你所用的表空间,删除了公有的表,才能建私有对象(删除私有同义词语句“drop synonym 表空间.表名”)。
2 ORA-12514 ORA-12504
plsql连接数据库报错:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务。
请确认你所使用的tnsnames.ora文件是哪个,并且tnsnames.ora文件中的实例名是否正确。
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA。
这个可能是因为你本地也安装了oracle数据库,你连接的实例名你并没有配进%ORACLE_HOME%/NETWORK/ADMIN/listener.ora中,配置文件修改为如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\devtool\oracle\product\11.2.0\dbhome_1)
)
#添加的实例,这个实例可配置在tnsnames.ora中
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\devtool\oracle\product\11.2.0\dbhome_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\devtool\oracle
3 命令行无法登陆
在没有建任何用户和没有修改任何密码的的情况下可用如下方式登录数据库,再自行创建用户:
sqlplus sys/sys@localhost/orcl as sysdba
4 TNS:address already in use
此问题出现在修改监听文件中的主机名时
解决方法:
将listener.ora和tnsnames.ora中的host均改为你的主机名